{"version":3,"file":"shared-lib.Cr-IL1CZ.mjs","names":["n","t","r","o","e","u","i","a","p","s","o","e","t","n","a","s","i","u","p","CurrencySymbols","ShopifyDataType","FrameshipUpgradeBanner"],"sources":["https:/ga.jspm.io/npm:zustand@3.7.1/esm/index.js","https:/ga.jspm.io/npm:zustand@3.7.1/esm/middleware.js","https:/framerusercontent.com/modules/pJIZxaEdKo1uS87sS4xM/4PSl3AVmNoISomoZ0s7m/CurrencySymbols.js","https:/framerusercontent.com/modules/gd3dcT3w5rYoRy7ZcKte/sH6FZizM8jJ11j2dQOhQ/Shared.js","https:/framerusercontent.com/modules/ibjYTPLnMMPhPLNCj4uG/cXa4uUn5VWWAcoaQctVU/Cart.js","https:/framerusercontent.com/modules/b6p2QQlcwhhLAA5Operm/erpgLSZm2BuxCMM1NCPK/LOQtD1uPa.js","https:/framerusercontent.com/modules/1kPVCHEEg0BrtObiM14s/NtVC61Vu6FOKUMmhXWuH/Frameship.js","https:/framerusercontent.com/modules/6RxJuJ7UMWa9BvTcB9oG/KLBfAAvb8WcfIL5gUsi6/siteMetadata.js"],"sourcesContent":["import{useEffect as t,useLayoutEffect as e,useReducer as n,useRef as r,useDebugValue as c}from\"react\";function createStore(t){let e;const n=new Set;const setState=(t,r)=>{const c=\"function\"===typeof t?t(e):t;if(c!==e){const t=e;e=r?c:Object.assign({},e,c);n.forEach((n=>n(e,t)))}};const getState=()=>e;const subscribeWithSelector=(t,r=getState,c=Object.is)=>{console.warn(\"[DEPRECATED] Please use `subscribeWithSelector` middleware\");let o=r(e);function listenerToAdd(){const n=r(e);if(!c(o,n)){const e=o;t(o=n,e)}}n.add(listenerToAdd);return()=>n.delete(listenerToAdd)};const subscribe=(t,e,r)=>{if(e||r)return subscribeWithSelector(t,e,r);n.add(t);return()=>n.delete(t)};const destroy=()=>n.clear();const r={setState:setState,getState:getState,subscribe:subscribe,destroy:destroy};e=t(setState,getState,r);return r}const o=\"undefined\"===typeof window||!window.navigator||/ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);const s=o?t:e;function create(t){const e=\"function\"===typeof t?createStore(t):t;const useStore=(t=e.getState,o=Object.is)=>{const[,u]=n((t=>t+1),0);const i=e.getState();const a=r(i);const d=r(t);const l=r(o);const f=r(false);const S=r();void 0===S.current&&(S.current=t(i));let b;let g=false;if(a.current!==i||d.current!==t||l.current!==o||f.current){b=t(i);g=!o(S.current,b)}s((()=>{g&&(S.current=b);a.current=i;d.current=t;l.current=o;f.current=false}));const w=r(i);s((()=>{const listener=()=>{try{const t=e.getState();const n=d.current(t);if(!l.current(S.current,n)){a.current=t;S.current=n;u()}}catch(t){f.current=true;u()}};const t=e.subscribe(listener);e.getState()!==w.current&&listener();return t}),[]);const p=g?b:S.current;c(p);return p};Object.assign(useStore,e);useStore[Symbol.iterator]=function(){console.warn(\"[useStore, api] = create() is deprecated and will be removed in v4\");const t=[useStore,e];return{next(){const e=t.length<=0;return{value:t.shift(),done:e}}}};return useStore}export{create as default};\n\n//# sourceMappingURL=index.js.map","var e=Object.defineProperty;var t=Object.getOwnPropertySymbols;var o=Object.prototype.hasOwnProperty;var r=Object.prototype.propertyIsEnumerable;var __defNormalProp$1=(t,o,r)=>o in t?e(t,o,{enumerable:true,configurable:true,writable:true,value:r}):t[o]=r;var __spreadValues$1=(e,n)=>{for(var a in n||(n={}))o.call(n,a)&&__defNormalProp$1(e,a,n[a]);if(t)for(var a of t(n))r.call(n,a)&&__defNormalProp$1(e,a,n[a]);return e};const redux=(e,t)=>(o,r,n)=>{n.dispatch=t=>{o((o=>e(o,t)),false,t);return t};n.dispatchFromDevtools=true;return __spreadValues$1({dispatch:(...e)=>n.dispatch(...e)},t)};function devtools(e,t){return(o,r,n)=>{var a;let s=false;if(\"string\"===typeof t&&!s){console.warn(\"[zustand devtools middleware]: passing `name` as directly will be not allowed in next majorpass the `name` in an object `{ name: ... }` instead\");s=true}const i=void 0===t?{name:void 0,anonymousActionType:void 0}:\"string\"===typeof t?{name:t}:t;\"undefined\"!==typeof(null==(a=null==i?void 0:i.serialize)?void 0:a.options)&&console.warn(\"[zustand devtools middleware]: `serialize.options` is deprecated, just use `serialize`\");let l;try{l=window.__REDUX_DEVTOOLS_EXTENSION__||window.top.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!l){\"production\"!==(import.meta.env&&import.meta.env.MODE)&&\"undefined\"!==typeof window&&console.warn(\"[zustand devtools middleware] Please install/enable Redux devtools extension\");return e(o,r,n)}let d=Object.create(l.connect(i));let c=false;Object.defineProperty(n,\"devtools\",{get:()=>{if(!c){console.warn(\"[zustand devtools middleware] `devtools` property on the store is deprecated it will be removed in the next major.\\nYou shouldn't interact with the extension directly. But in case you still want to you can patch `window.__REDUX_DEVTOOLS_EXTENSION__` directly\");c=true}return d},set:e=>{if(!c){console.warn(\"[zustand devtools middleware] `api.devtools` is deprecated, it will be removed in the next major.\\nYou shouldn't interact with the extension directly. But in case you still want to you can patch `window.__REDUX_DEVTOOLS_EXTENSION__` directly\");c=true}d=e}});let u=false;Object.defineProperty(d,\"prefix\",{get:()=>{if(!u){console.warn(\"[zustand devtools middleware] along with `api.devtools`, `api.devtools.prefix` is deprecated.\\nWe no longer prefix the actions/names\"+i.name===void 0?\", pass the `name` option to create a separate instance of devtools for each store.\":\", because the `name` option already creates a separate instance of devtools for each store.\");u=true}return\"\"},set:()=>{if(!u){console.warn(\"[zustand devtools middleware] along with `api.devtools`, `api.devtools.prefix` is deprecated.\\nWe no longer prefix the actions/names\"+i.name===void 0?\", pass the `name` option to create a separate instance of devtools for each store.\":\", because the `name` option already creates a separate instance of devtools for each store.\");u=true}}});let p=true;n.setState=(e,t,n)=>{o(e,t);p&&d.send(void 0===n?{type:i.anonymousActionType||\"anonymous\"}:\"string\"===typeof n?{type:n}:n,r())};const setStateFromDevtools=(...e)=>{const t=p;p=false;o(...e);p=t};const v=e(n.setState,r,n);d.init(v);if(n.dispatchFromDevtools&&\"function\"===typeof n.dispatch){let e=false;const t=n.dispatch;n.dispatch=(...o)=>{if(\"__setState\"===o[0].type&&!e){console.warn('[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.');e=true}t(...o)}}d.subscribe((e=>{var t;switch(e.type){case\"ACTION\":if(\"string\"!==typeof e.payload){console.error(\"[zustand devtools middleware] Unsupported action format\");return}return parseJsonThen(e.payload,(e=>{\"__setState\"!==e.type?n.dispatchFromDevtools&&\"function\"===typeof n.dispatch&&n.dispatch(e):setStateFromDevtools(e.state)}));case\"DISPATCH\":switch(e.payload.type){case\"RESET\":setStateFromDevtools(v);return d.init(n.getState());case\"COMMIT\":return d.init(n.getState());case\"ROLLBACK\":return parseJsonThen(e.state,(e=>{setStateFromDevtools(e);d.init(n.getState())}));case\"JUMP_TO_STATE\":case\"JUMP_TO_ACTION\":return parseJsonThen(e.state,(e=>{setStateFromDevtools(e)}));case\"IMPORT_STATE\":{const{nextLiftedState:o}=e.payload;const r=null==(t=o.computedStates.slice(-1)[0])?void 0:t.state;if(!r)return;setStateFromDevtools(r);d.send(null,o);return}case\"PAUSE_RECORDING\":return p=!p}return}}));return v}}const parseJsonThen=(e,t)=>{let o;try{o=JSON.parse(e)}catch(e){console.error(\"[zustand devtools middleware] Could not parse the received json\",e)}void 0!==o&&t(o)};const subscribeWithSelector=e=>(t,o,r)=>{const n=r.subscribe;r.subscribe=(e,t,o)=>{let a=e;if(t){const n=(null==o?void 0:o.equalityFn)||Object.is;let s=e(r.getState());a=o=>{const r=e(o);if(!n(s,r)){const e=s;t(s=r,e)}};(null==o?void 0:o.fireImmediately)&&t(s,s)}return n(a)};const a=e(t,o,r);return a};const combine=(e,t)=>(o,r,n)=>Object.assign({},e,t(o,r,n));var n=Object.defineProperty;var a=Object.getOwnPropertySymbols;var s=Object.prototype.hasOwnProperty;var i=Object.prototype.propertyIsEnumerable;var __defNormalProp=(e,t,o)=>t in e?n(e,t,{enumerable:true,configurable:true,writable:true,value:o}):e[t]=o;var __spreadValues=(e,t)=>{for(var o in t||(t={}))s.call(t,o)&&__defNormalProp(e,o,t[o]);if(a)for(var o of a(t))i.call(t,o)&&__defNormalProp(e,o,t[o]);return e};const toThenable=e=>t=>{try{const o=e(t);return o instanceof Promise?o:{then(e){return toThenable(e)(o)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return toThenable(t)(e)}}}};const persist=(e,t)=>(o,r,n)=>{let a=__spreadValues({getStorage:()=>localStorage,serialize:JSON.stringify,deserialize:JSON.parse,partialize:e=>e,version:0,merge:(e,t)=>__spreadValues(__spreadValues({},t),e)},t);(a.blacklist||a.whitelist)&&console.warn(`The ${a.blacklist?\"blacklist\":\"whitelist\"} option is deprecated and will be removed in the next version. Please use the 'partialize' option instead.`);let s=false;const i=new Set;const l=new Set;let d;try{d=a.getStorage()}catch(e){}if(!d)return e(((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${a.name}', the given storage is currently unavailable.`);o(...e)}),r,n);d.removeItem||console.warn(`[zustand persist middleware] The given storage for item '${a.name}' does not contain a 'removeItem' method, which will be required in v4.`);const c=toThenable(a.serialize);const setItem=()=>{const e=a.partialize(__spreadValues({},r()));a.whitelist&&Object.keys(e).forEach((t=>{var o;!(null==(o=a.whitelist)?void 0:o.includes(t))&&delete e[t]}));a.blacklist&&a.blacklist.forEach((t=>delete e[t]));let t;const o=c({state:e,version:a.version}).then((e=>d.setItem(a.name,e))).catch((e=>{t=e}));if(t)throw t;return o};const u=n.setState;n.setState=(e,t)=>{u(e,t);void setItem()};const p=e(((...e)=>{o(...e);void setItem()}),r,n);let v;const hydrate=()=>{var e;if(!d)return;s=false;i.forEach((e=>e(r())));const t=(null==(e=a.onRehydrateStorage)?void 0:e.call(a,r()))||void 0;return toThenable(d.getItem.bind(d))(a.name).then((e=>{if(e)return a.deserialize(e)})).then((e=>{if(e){if(\"number\"!==typeof e.version||e.version===a.version)return e.state;if(a.migrate)return a.migrate(e.state,e.version);console.error(\"State loaded from storage couldn't be migrated since no migrate function was provided\")}})).then((e=>{v=a.merge(e,p);o(v,true);return setItem()})).then((()=>{null==t?void 0:t(v,void 0);s=true;l.forEach((e=>e(v)))})).catch((e=>{null==t?void 0:t(void 0,e)}))};n.persist={setOptions:e=>{a=__spreadValues(__spreadValues({},a),e);e.getStorage&&(d=e.getStorage())},clearStorage:()=>{var e;null==(e=null==d?void 0:d.removeItem)?void 0:e.call(d,a.name)},rehydrate:()=>hydrate(),hasHydrated:()=>s,onHydrate:e=>{i.add(e);return()=>{i.delete(e)}},onFinishHydration:e=>{l.add(e);return()=>{l.delete(e)}}};hydrate();return v||p};export{combine,devtools,persist,redux,subscribeWithSelector};\n\n//# sourceMappingURL=middleware.js.map","export default{AED:\"د.إ\",AFN:\"؋\",ALL:\"L\",AMD:\"֏\",ANG:\"ƒ\",AOA:\"Kz\",ARS:\"$\",AUD:\"$\",AWG:\"ƒ\",AZN:\"₼\",BAM:\"KM\",BBD:\"$\",BDT:\"৳\",BGN:\"лв\",BHD:\".د.ب\",BIF:\"FBu\",BMD:\"$\",BND:\"$\",BOB:\"$b\",BOV:\"BOV\",BRL:\"R$\",BSD:\"$\",BTC:\"₿\",BTN:\"Nu.\",BWP:\"P\",BYN:\"Br\",BYR:\"Br\",BZD:\"BZ$\",CAD:\"$\",CDF:\"FC\",CHE:\"CHE\",CHF:\"CHF\",CHW:\"CHW\",CLF:\"CLF\",CLP:\"$\",CNH:\"\\xa5\",CNY:\"\\xa5\",COP:\"$\",COU:\"COU\",CRC:\"₡\",CUC:\"$\",CUP:\"₱\",CVE:\"$\",CZK:\"Kč\",DJF:\"Fdj\",DKK:\"kr\",DOP:\"RD$\",DZD:\"دج\",EEK:\"kr\",EGP:\"\\xa3\",ERN:\"Nfk\",ETB:\"Br\",ETH:\"Ξ\",EUR:\"€\",FJD:\"$\",FKP:\"\\xa3\",GBP:\"\\xa3\",GEL:\"₾\",GGP:\"\\xa3\",GHC:\"₵\",GHS:\"GH₵\",GIP:\"\\xa3\",GMD:\"D\",GNF:\"FG\",GTQ:\"Q\",GYD:\"$\",HKD:\"$\",HNL:\"L\",HRK:\"kn\",HTG:\"G\",HUF:\"Ft\",IDR:\"Rp\",ILS:\"₪\",IMP:\"\\xa3\",INR:\"₹\",IQD:\"ع.د\",IRR:\"﷼\",ISK:\"kr\",JEP:\"\\xa3\",JMD:\"J$\",JOD:\"JD\",JPY:\"\\xa5\",KES:\"KSh\",KGS:\"лв\",KHR:\"៛\",KMF:\"CF\",KPW:\"₩\",KRW:\"₩\",KWD:\"KD\",KYD:\"$\",KZT:\"₸\",LAK:\"₭\",LBP:\"\\xa3\",LKR:\"₨\",LRD:\"$\",LSL:\"M\",LTC:\"Ł\",LTL:\"Lt\",LVL:\"Ls\",LYD:\"LD\",MAD:\"MAD\",MDL:\"lei\",MGA:\"Ar\",MKD:\"ден\",MMK:\"K\",MNT:\"₮\",MOP:\"MOP$\",MRO:\"UM\",MRU:\"UM\",MUR:\"₨\",MVR:\"Rf\",MWK:\"MK\",MXN:\"$\",MXV:\"MXV\",MYR:\"RM\",MZN:\"MT\",NAD:\"$\",NGN:\"₦\",NIO:\"C$\",NOK:\"kr\",NPR:\"₨\",NZD:\"$\",OMR:\"﷼\",PAB:\"B/.\",PEN:\"S/.\",PGK:\"K\",PHP:\"₱\",PKR:\"₨\",PLN:\"zł\",PYG:\"Gs\",QAR:\"﷼\",RMB:\"￥\",RON:\"lei\",RSD:\"Дин.\",RUB:\"₽\",RWF:\"R₣\",SAR:\"﷼\",SBD:\"$\",SCR:\"₨\",SDG:\"ج.س.\",SEK:\"kr\",SGD:\"S$\",SHP:\"\\xa3\",SLL:\"Le\",SOS:\"S\",SRD:\"$\",SSP:\"\\xa3\",STD:\"Db\",STN:\"Db\",SVC:\"$\",SYP:\"\\xa3\",SZL:\"E\",THB:\"฿\",TJS:\"SM\",TMT:\"T\",TND:\"د.ت\",TOP:\"T$\",TRL:\"₤\",TRY:\"₺\",TTD:\"TT$\",TVD:\"$\",TWD:\"NT$\",TZS:\"TSh\",UAH:\"₴\",UGX:\"USh\",USD:\"$\",UYI:\"UYI\",UYU:\"$U\",UYW:\"UYW\",UZS:\"лв\",VEF:\"Bs\",VES:\"Bs.S\",VND:\"₫\",VUV:\"VT\",WST:\"WS$\",XAF:\"FCFA\",XBT:\"Ƀ\",XCD:\"$\",XOF:\"CFA\",XPF:\"₣\",XSU:\"Sucre\",XUA:\"XUA\",YER:\"﷼\",ZAR:\"R\",ZMW:\"ZK\",ZWD:\"Z$\",ZWL:\"$\"};\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CurrencySymbols.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{cloneElement,useMemo,useId}from\"react\";import CurrencySymbols from\"https://framerusercontent.com/modules/pJIZxaEdKo1uS87sS4xM/4PSl3AVmNoISomoZ0s7m/CurrencySymbols.js\";const VERSION=1;export const UPGRADE_LINK=\"https://buy.stripe.com/cN29CT5gi1spb5e9AN\";export var ShopifyDataType;(function(ShopifyDataType){ShopifyDataType[\"Product\"]=\"gid://shopify/Product/\";ShopifyDataType[\"ProductVariant\"]=\"gid://shopify/ProductVariant/\";ShopifyDataType[\"ProductOption\"]=\"gid://shopify/ProductOption/\";})(ShopifyDataType||(ShopifyDataType={}));export const SHOPIFY_ID_ATTRIBUTE=\"frameship-shopify-id\";export const OPEN_CART_EVENT=\"frameship-open-cart\";export const DEFAULT_TRANSITION={type:\"spring\",duration:.2,bounce:0};const CHARACTERS=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";const EMPTY_SHOPIFY_DATA={shopifyId:\"\",tracksInventory:false,variants:[]};const shopifyDataCache={};export function parseShopifyId(id,type){if(typeof id!==\"string\"){return\"\";}if(id.startsWith(type)){return id;}return`${type}${id}`;}export function parseShopifyData(shopifyData){if(!shopifyData){return EMPTY_SHOPIFY_DATA;}const cachedData=shopifyDataCache[shopifyData];if(cachedData){return cachedData;}try{const data=JSON.parse(shopifyData);const parsedData={shopifyId:parseShopifyId(data.id,\"gid://shopify/Product/\"),tracksInventory:data.tracksInventory?true:false,variants:Array.isArray(data.variants)?data.variants.map(variant=>({...variant,id:parseShopifyId(variant.id,\"gid://shopify/ProductVariant/\")})):[]};shopifyDataCache[shopifyData]=parsedData;return parsedData;}catch(error){console.error(\"Error parsing Shopify data:\",error);return EMPTY_SHOPIFY_DATA;}}export const generateInstanceId=()=>{const id=useMemo(()=>{let result=\"\";for(let i=0;i<13;i++){result+=CHARACTERS.charAt(Math.floor(Math.random()*CHARACTERS.length));}return result;},[]);return id;};export const useInstanceId=()=>{const id=useId();const cleanId=id.replace(/:/g,\"\");const instanceId=`superfields-${cleanId}`;return instanceId;};export function styleLayer(layer,style){layer=Array.isArray(layer)?layer[0]:layer;let newLayer=layer;const width=style?.width;const height=style?.height;if(layer&&layer.props&&style&&(width||height)){if(typeof layer.type===\"function\"&&typeof layer.props.children===\"object\"){newLayer=/*#__PURE__*/cloneElement(layer,{children:{...layer.props.children,props:{...layer.props.children.props,style:{...layer.props.children.props.style,...width&&{width},...height&&{height}}}}});}else{newLayer=/*#__PURE__*/cloneElement(layer,{style:{...layer.props.style,...width&&{width},...height&&{height}}});}}return newLayer;}export function Message({title,subtitle}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",width:\"100%\",height:\"100%\",placeContent:\"center\",placeItems:\"center\",flexDirection:\"column\",gap:16,backgroundColor:\"rgba(136, 85, 255, 0.1)\",borderRadius:6,border:\"1px dashed rgb(136, 85, 255)\",color:\"rgb(136, 85, 255)\",fontSize:16,padding:20,minHeight:200,textWrap:\"balance\"},children:[/*#__PURE__*/_jsx(\"p\",{style:{margin:0,fontWeight:600,textAlign:\"center\"},children:title}),/*#__PURE__*/_jsx(\"p\",{style:{margin:0,opacity:.7,lineHeight:1.5,textAlign:\"center\"},children:subtitle})]});}Message.displayName=\"Frameship/Message\";export function currencyFormatProp({title=\"Format\",startProps={},hidden=null}={}){return{type:ControlType.Object,title,hidden,controls:{...startProps,style:{type:ControlType.Enum,defaultValue:\"symbol\",options:[\"symbol\",\"code\"],optionTitles:[\"Symbol ($)\",\"Code (USD)\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},location:{type:ControlType.Enum,defaultValue:\"after\",options:[\"before\",\"after\"],optionTitles:[\"Before\",\"After\"],displaySegmentedControl:true,hidden:props=>props.style!==\"code\"},decimals:{type:ControlType.Enum,defaultValue:\"auto\",options:[\"auto\",\"always\",\"never\"],optionTitles:[\"Auto\",\"Show (10.00)\",\"Hide (10)\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},formatted:{type:ControlType.Boolean,defaultValue:true},locale:{type:ControlType.String,defaultValue:\"\",placeholder:`Auto (${typeof navigator!==\"undefined\"?navigator.language:\"\"})`,description:\"Formatting examples:\\n*1,000* | *1.000* | *1 000*\",hidden:props=>!props.formatted}}};}export function formatCurrency(amount,currencyCode,options){amount=amount||0;const showDecimals=options.decimals==\"auto\"?amount%1!==0:options.decimals==\"always\";const decimals=showDecimals?2:0;let formattedAmount=\"\";if(options.formatted&&typeof Intl!==\"undefined\"){const locale=options.locale||(typeof navigator!==\"undefined\"?navigator.language:\"en-us\");const formatter=new Intl.NumberFormat(locale,{minimumFractionDigits:decimals,maximumFractionDigits:decimals});formattedAmount=formatter.format(amount);}else{formattedAmount=amount.toFixed(decimals);}if(!currencyCode||currencyCode===\"XXX\"){return formattedAmount;}const symbol=CurrencySymbols[currencyCode];if(options.style===\"code\"){return options.location===\"before\"?`${currencyCode} ${formattedAmount}`:`${formattedAmount} ${currencyCode}`;}else{return`${symbol}${formattedAmount}`;}}export function generateVariantTitle(variant,labelOptions){if(!variant||!Array.isArray(variant.selectedOptions)||!variant.selectedOptions.length||variant.title===\"Default Title\"){return\"\";}if(!labelOptions){return variant.title;}switch(labelOptions.style){case\"default\":return variant.selectedOptions.map(option=>option.value).join(labelOptions.separator);case\"multiline\":return variant.selectedOptions.map(option=>option.name+labelOptions.multilineSeparator+option.value).join(\"\\n\");}return variant.title||\"\";}export function addPropertyControlsFrameship(component,propertyControls,options=null){const shopifyData=options?.shopifyData;addPropertyControls(component,{...shopifyData?{shopifyData:{type:ControlType.String,defaultValue:\"\",placeholder:\"Shopify Data\",preventLocalization:true}}:{},...propertyControls,[`_frameship_version_${VERSION}`]:{type:ControlType.String,title:\" \",defaultValue:\"\",preventLocalization:true,hidden:props=>true}});}\nexport const __FramerMetadata__ = {\"exports\":{\"parseShopifyData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useInstanceId\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseShopifyId\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatCurrency\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ShopifyDataType\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_TRANSITION\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"UPGRADE_LINK\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"generateInstanceId\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SHOPIFY_ID_ATTRIBUTE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"addPropertyControlsFrameship\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"generateVariantTitle\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OPEN_CART_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Message\":{\"type\":\"reactComponent\",\"name\":\"Message\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"currencyFormatProp\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"styleLayer\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Shared.map","import create from\"zustand\";import{persist}from\"zustand/middleware\";import{useState,useEffect}from\"react\";import{parseShopifyData}from\"https://framerusercontent.com/modules/gd3dcT3w5rYoRy7ZcKte/sH6FZizM8jJ11j2dQOhQ/Shared.js\";const CART_ID_STORAGE_ID=\"frameship-shopify-cart-id\";const frameshipDataCache={};async function fetchShopifyData(query,variables={}){const{shopUrl,accessToken}=getFrameshipInfo();if(!shopUrl||!accessToken){console.warn(\"Missing shop URL or access token\");return null;}try{const response=await fetch(`https://${shopUrl}/api/2024-10/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":accessToken},body:JSON.stringify({query,variables})});const value=await response.json();return value?value.data:null;}catch(error){console.error(error);return null;}}// Add this shared fragment for cart fields\nconst CART_FRAGMENT=`\n  fragment CartFields on Cart {\n    id\n    checkoutUrl\n    cost {\n      subtotalAmount {\n        amount\n        currencyCode\n      }\n    }\n    lines(first: 10) {\n      edges {\n        node {\n          id\n          quantity\n          cost {\n            subtotalAmount {\n              amount\n              currencyCode\n            }\n            compareAtAmountPerQuantity {\n              amount\n              currencyCode\n            }\n          }\n          merchandise {\n            ... on ProductVariant {\n              id\n              title\n              price {\n                amount\n                currencyCode\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;export const useCartStore=create(persist((set,get)=>({cartId:null,items:[],loading:false,error:null,checkoutUrl:null,subtotal:null,initializeCart:async(createNewCart=false)=>{if(get().items.length>0){return;}set({loading:true});try{const cartId=get().cartId;if(cartId){const cart=await fetchCart(cartId);set({items:cart.lines.edges.map(edge=>edge.node),checkoutUrl:generateCheckoutUrl(cart.checkoutUrl),subtotal:cart.cost.subtotalAmount,loading:false});}else if(createNewCart){const newCart=await createCart();set({cartId:newCart.id,items:[],checkoutUrl:generateCheckoutUrl(newCart.checkoutUrl),subtotal:newCart.cost.subtotalAmount,loading:false});}}catch(error){set({error:error.message,loading:false});}},addToCart:async(variantId,quantity)=>{set({loading:true});try{// Initialize cart if needed\n    if(!get().cartId){await get().initializeCart(true);}const cartId=get().cartId;const updatedCart=await addToCart(cartId,variantId,quantity);set({items:updatedCart.lines.edges.map(edge=>edge.node),subtotal:updatedCart.cost.subtotalAmount,loading:false});}catch(error){set({error:error.message,loading:false});}},removeFromCart:async lineId=>{set({loading:true});try{const cartId=get().cartId;const updatedCart=await removeFromCart(cartId,lineId);set({items:updatedCart.lines.edges.map(edge=>edge.node),subtotal:updatedCart.cost.subtotalAmount,loading:false});}catch(error){set({error:error.message,loading:false});}},setCartItemQuantity:async(lineId,quantity)=>{set({loading:true});try{const cartId=get().cartId;const updatedCart=await updateCartLineQuantity(cartId,lineId,quantity);set({items:updatedCart.lines.edges.map(edge=>edge.node),subtotal:updatedCart.cost.subtotalAmount,loading:false});}catch(error){set({error:error.message,loading:false});}},getCheckoutUrl:()=>{return get().checkoutUrl||\"\";},clearError:()=>set({error:null})}),{name:CART_ID_STORAGE_ID,partialize:state=>({cartId:state.cartId})}));async function createCart(){const mutation=`\n    ${CART_FRAGMENT}\n    mutation {\n      cartCreate {\n        cart {\n          ...CartFields\n        }\n      }\n    }\n  `;const data=await fetchShopifyData(mutation);return data?data.cartCreate.cart:null;}async function fetchCart(cartId){const query=`\n    ${CART_FRAGMENT}\n    query($cartId: ID!) {\n      cart(id: $cartId) {\n        ...CartFields\n      }\n    }\n  `;const variables={cartId};const data=await fetchShopifyData(query,variables);return data?data.cart:null;}async function addToCart(cartId,variantId,quantity){const mutation=`\n    ${CART_FRAGMENT}\n    mutation($cartId: ID!, $lines: [CartLineInput!]!) {\n      cartLinesAdd(cartId: $cartId, lines: $lines) {\n        cart {\n          ...CartFields\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }\n  `;const variables={cartId,lines:[{quantity:quantity,merchandiseId:variantId}]};try{const data=await fetchShopifyData(mutation,variables);if(data&&data.cartLinesAdd.userErrors.length>0){const cartNotFoundError=data.cartLinesAdd.userErrors.find(e=>e.message===\"The specified cart does not exist.\");if(cartNotFoundError){// Create new cart and retry adding the item\nconst newCart=await createCart();const retryVariables={cartId:newCart.id,lines:[{quantity:quantity,merchandiseId:variantId}]};const retryData=await fetchShopifyData(mutation,retryVariables);if(retryData&&retryData.cartLinesAdd.userErrors.length>0){throw new Error(retryData.cartLinesAdd.userErrors.map(e=>e.message).join(\", \"));}return retryData.cartLinesAdd.cart;}throw new Error(data.cartLinesAdd.userErrors.map(e=>e.message).join(\", \"));}return data?data.cartLinesAdd.cart:null;}catch(error){throw error;}}async function removeFromCart(cartId,lineId){const mutation=`\n    ${CART_FRAGMENT}\n    mutation($cartId: ID!, $lineIds: [ID!]!) {\n      cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {\n        cart {\n          ...CartFields\n        }\n      }\n    }\n  `;const variables={cartId,lineIds:[lineId]};const data=await fetchShopifyData(mutation,variables);return data?data.cartLinesRemove.cart:null;}export async function getAmountInStock(productId){const query=`\n\t\tquery getInventory($id: ID!) {\n\t\t\tproduct(id: $id) {\n\t\t\t\tvariants(first: 100) {\n\t\t\t\t\tedges {\n\t\t\t\t\t\tnode {\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t\tquantityAvailable\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`;const variables={id:productId};try{const data=await fetchShopifyData(query,variables);const inventoryByVariant={};if(data){for(const edge of data.product.variants.edges){inventoryByVariant[edge.node.id]=edge.node.quantityAvailable;}}return inventoryByVariant;}catch(error){console.error(\"Error fetching inventory:\",error);throw error;}}export function useAmountInStock(shopifyData){const{shopifyId}=parseShopifyData(shopifyData);const[inventory,setInventory]=useState({});const[isLoading,setIsLoading]=useState(true);useEffect(()=>{setIsLoading(true);getAmountInStock(shopifyId).then(value=>{setInventory(value);setIsLoading(false);});},[shopifyId]);return[inventory,isLoading];}async function updateCartLineQuantity(cartId,lineId,quantity){const mutation=`\n    ${CART_FRAGMENT}\n    mutation($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n      cartLinesUpdate(cartId: $cartId, lines: $lines) {\n        cart {\n          ...CartFields\n        }\n        userErrors {\n          field\n          message\n        }\n      }\n    }\n  `;const variables={cartId,lines:[{id:lineId,quantity:quantity}]};const data=await fetchShopifyData(mutation,variables);if(data&&data.cartLinesUpdate.userErrors.length>0){throw new Error(data.cartLinesUpdate.userErrors.map(e=>e.message).join(\", \"));}return data?data.cartLinesUpdate.cart:null;}export async function generateBuyNowCheckoutUrl(variantId,quantity=1){const mutation=`\n\t\tmutation($input: CartInput!) {\n\t\t\tcartCreate(input: $input) {\n\t\t\t\tcart {\n\t\t\t\t\tcheckoutUrl\n\t\t\t\t}\n\t\t\t\tuserErrors {\n\t\t\t\t\tfield\n\t\t\t\t\tmessage\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`;const variables={input:{lines:[{quantity:quantity,merchandiseId:variantId}]}};try{const data=await fetchShopifyData(mutation,variables);if(data&&data.cartCreate.userErrors.length>0){throw new Error(data.cartCreate.userErrors.map(e=>e.message).join(\", \"));}return data?generateCheckoutUrl(data.cartCreate.cart.checkoutUrl):null;}catch(error){console.error(\"Error creating buy now cart:\",error);throw error;}}export function getFrameshipInfo(){let shopUrl=\"\";let accessToken=\"\";let stagingDomain=\"\";let productionDomain=\"\";let isCreatorLicense=false;let hasAccess=false;if(typeof document!==\"undefined\"&&typeof window!==\"undefined\"){const hostname=window.location.hostname;const isPreview=hostname.endsWith(\".framercanvas.com\");if(isPreview){hasAccess=true;}// First check for meta tag\nconst frameshipMetaTag=document.querySelector('meta[name=\"frameship-id\"]');if(frameshipMetaTag){const frameshipId=frameshipMetaTag.getAttribute(\"content\")||\"\";const frameshipData=parseFrameshipData(frameshipId);const newHasAccess=hasFrameshipAccess(frameshipData.stagingDomain,frameshipData.productionDomain);hasAccess=newHasAccess;if(hasAccess){shopUrl=frameshipData.shopUrl||\"\";accessToken=frameshipData.shopifyAccessToken||\"\";stagingDomain=frameshipData.stagingDomain||\"\";productionDomain=frameshipData.productionDomain||\"\";isCreatorLicense=frameshipData.isCreatorLicense??false;}}else{// Fall back to div element approach\nconst frameshipIdComponent=document.querySelector(\"div[data-frameship-id]\");if(frameshipIdComponent){const frameshipId=frameshipIdComponent.getAttribute(\"data-frameship-id\")||\"\";const frameshipData=parseFrameshipData(frameshipId);const newHasAccess=hasFrameshipAccess(frameshipData.stagingDomain,frameshipData.productionDomain);hasAccess=newHasAccess;if(hasAccess){shopUrl=frameshipData.shopUrl||\"\";accessToken=frameshipData.shopifyAccessToken||\"\";stagingDomain=frameshipData.stagingDomain||\"\";productionDomain=frameshipData.productionDomain||\"\";isCreatorLicense=frameshipData.isCreatorLicense??false;}}else{const frameshipComponent=document.querySelector(\"div[data-frameship-component]\");if(frameshipComponent){const newStagingDomain=frameshipComponent.getAttribute(\"data-staging-domain\")||\"\";const newProductionDomain=frameshipComponent.getAttribute(\"data-production-domain\")||\"\";const newHasAccess=hasFrameshipAccess(newStagingDomain,newProductionDomain);hasAccess=newHasAccess;if(hasAccess){shopUrl=frameshipComponent.getAttribute(\"data-shop-url\")||\"\";accessToken=frameshipComponent.getAttribute(\"data-shopify-access-token\")||\"\";stagingDomain=newStagingDomain;productionDomain=newProductionDomain;}}}}}else{hasAccess=true// Show as having access in optimized version of site\n;}return{shopUrl,accessToken,stagingDomain,productionDomain,hasAccess,isCreatorLicense};}export function hasFrameshipAccess(stagingDomain,productionDomain){if(typeof document===\"undefined\"||typeof window===\"undefined\"){return true;}const hostname=window.location.hostname;const isPreview=hostname.endsWith(\".framercanvas.com\");const stagingDomainValue=(stagingDomain||\"\").replace(\"https://\",\"\");const productionDomainValue=(productionDomain||\"\").replace(\"https://\",\"\");if(isPreview||hostname===stagingDomainValue||hostname===productionDomainValue){return true;}else{return false;}}export function parseFrameshipData(frameshipData){if(!frameshipData||typeof frameshipData!==\"string\"){return{};}if(frameshipDataCache.hasOwnProperty(frameshipData)){return frameshipDataCache[frameshipData];}try{const decoded=decodeFromBase64WithoutPadding(rot13(reverseString(frameshipData)));const data=JSON.parse(decoded);// Validate required properties exist\nif(!data||typeof data!==\"object\"){return{};}const value={shopUrl:typeof data.a===\"string\"?data.a:\"\",shopifyAccessToken:typeof data.b===\"string\"?data.b:\"\",productionDomain:typeof data.c===\"string\"?data.c:\"\",stagingDomain:typeof data.d===\"string\"?data.d:\"\",isCreatorLicense:typeof data.e===\"boolean\"?data.e:false};frameshipDataCache[frameshipData]=value;return value;}catch(error){return{};}}function decodeFromBase64WithoutPadding(base64WithoutPadding){try{// Calculate and add back the required padding\nconst padding=base64WithoutPadding.length%4;const paddedBase64=padding?base64WithoutPadding+\"=\".repeat(4-padding):base64WithoutPadding;// Decode the base64 string back to the original string\nreturn atob(paddedBase64);}catch(error){console.error(\"Error decoding base64:\",error);return\"\";}}function rot13(str){return str.replace(/[A-Za-z]/g,function(char){const charCode=char.charCodeAt(0);const baseCharCode=char.toUpperCase()===char?65:97;return String.fromCharCode((charCode-baseCharCode+13)%26+baseCharCode);});}function reverseString(str){return str.split(\"\").reverse().join(\"\");}function generateCheckoutUrl(checkoutUrl){const{isCreatorLicense}=getFrameshipInfo();return isCreatorLicense?\"https://frameship.io/\":checkoutUrl;}\nexport const __FramerMetadata__ = {\"exports\":{\"hasFrameshipAccess\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCartStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseFrameshipData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getAmountInStock\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAmountInStock\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"generateBuyNowCheckoutUrl\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getFrameshipInfo\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (f712822)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,Link,RichText,SVG,useComponentViewport,useLocaleInfo,useVariantState,withCSS,withFX,withOptimizedAppearEffect}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";const MotionDivWithFXWithOptimizedAppearEffect=withOptimizedAppearEffect(withFX(motion.div));const serializationHash=\"framer-Rn0up\";const variantClassNames={iwCoq9e2J:\"framer-v-okagad\"};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 transition2={bounce:0,delay:.5,duration:.8,type:\"spring\"};const animation={opacity:1,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition2,x:0,y:0};const animation1={opacity:.001,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,x:0,y:25};const transition3={bounce:.25,delay:0,duration:.45,type:\"spring\"};const animation2={opacity:.92,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition3};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 Variants=motion.create(React.Fragment);const getProps=({height,id,link,width,...props})=>{return{...props,drrB1JJ6M:link??props.drrB1JJ6M};};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,drrB1JJ6M,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"iwCoq9e2J\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[];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__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-okagad\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"iwCoq9e2J\",ref:refBinding,style:{...style},children:/*#__PURE__*/_jsxs(MotionDivWithFXWithOptimizedAppearEffect,{__perspectiveFX:false,__smartComponentFX:true,__targetOpacity:1,animate:animation,className:\"framer-nm3c8g\",\"data-border\":true,\"data-framer-appear-id\":\"nm3c8g\",initial:animation1,layoutDependency:layoutDependency,layoutId:\"BqB1SwKYY\",optimized:true,style:{\"--border-bottom-width\":\"1px\",\"--border-color\":\"rgba(0, 0, 0, 0.07)\",\"--border-left-width\":\"1px\",\"--border-right-width\":\"1px\",\"--border-style\":\"solid\",\"--border-top-width\":\"1px\",backdropFilter:\"blur(8px)\",backgroundColor:\"rgb(255, 255, 255)\",borderBottomLeftRadius:15,borderBottomRightRadius:15,borderTopLeftRadius:15,borderTopRightRadius:15,boxShadow:\"0px 5px 20px 0px rgba(0, 0, 0, 0.08)\",WebkitBackdropFilter:\"blur(8px)\"},children:[/*#__PURE__*/_jsx(Link,{href:\"frameship.io\",motionChild:true,nodeId:\"bjYgIQ5ZX\",openInNewTab:true,scopeId:\"LOQtD1uPa\",children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-185g4gf framer-12itpre\",layoutDependency:layoutDependency,layoutId:\"bjYgIQ5ZX\",children:/*#__PURE__*/_jsx(SVG,{className:\"framer-3oxhc7\",\"data-framer-name\":\"Logo\",layout:\"position\",layoutDependency:layoutDependency,layoutId:\"EOoJvDlBE\",opacity:1,svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 126 20\"><path d=\"M 119.052 18.261 L 115.496 18.261 L 115.496 5 L 120.468 5 C 121.454 5 122.314 5.201 123.048 5.603 C 123.781 5.998 124.351 6.541 124.755 7.23 C 125.16 7.919 125.363 8.699 125.363 9.567 C 125.363 10.437 125.16 11.228 124.755 11.941 C 124.346 12.653 123.756 13.24 123.048 13.64 C 122.314 14.059 121.454 14.27 120.468 14.27 L 119.052 14.27 Z M 119.052 13.217 L 117.449 11.581 L 120.108 11.581 C 120.395 11.583 120.677 11.509 120.927 11.365 C 121.185 11.216 121.393 10.992 121.551 10.692 C 121.71 10.392 121.789 10.018 121.789 9.567 C 121.789 9.118 121.71 8.756 121.551 8.48 C 121.41 8.22 121.191 8.012 120.927 7.886 C 120.672 7.76 120.392 7.695 120.108 7.698 L 117.449 7.698 L 119.052 6.061 Z M 110.457 18.261 L 110.457 5 L 113.961 5 L 113.961 18.261 Z M 108.922 5 L 108.922 18.261 L 105.365 18.261 L 105.365 12.13 L 106.968 13.02 L 99.794 13.02 L 101.396 12.184 L 101.396 18.261 L 97.84 18.261 L 97.84 5 L 101.396 5 L 101.396 11.168 L 99.794 10.314 L 106.968 10.314 L 105.365 11.158 L 105.365 5 Z M 91.486 18.495 C 90.524 18.495 89.661 18.338 88.899 18.027 C 88.136 17.71 87.531 17.239 87.085 16.616 C 86.645 15.992 86.425 15.219 86.425 14.297 L 86.425 13.829 L 89.972 13.829 L 89.972 14.225 C 89.972 14.645 90.098 14.995 90.35 15.277 C 90.609 15.558 90.999 15.699 91.521 15.699 C 92.026 15.699 92.422 15.625 92.709 15.474 C 93.003 15.318 93.149 15.066 93.149 14.719 C 93.149 14.461 93.011 14.222 92.736 14 C 92.466 13.778 92.099 13.568 91.636 13.371 C 91.134 13.157 90.623 12.968 90.104 12.805 C 89.495 12.607 88.91 12.339 88.361 12.005 C 87.825 11.678 87.368 11.232 87.023 10.7 C 86.678 10.161 86.504 9.492 86.504 8.696 C 86.504 7.875 86.727 7.174 87.173 6.592 C 87.619 6.005 88.217 5.555 88.968 5.244 C 89.725 4.932 90.565 4.776 91.486 4.776 C 92.443 4.776 93.296 4.929 94.048 5.234 C 94.804 5.54 95.403 5.99 95.843 6.583 C 96.283 7.177 96.503 7.911 96.503 8.785 L 96.503 9.235 L 92.956 9.235 L 92.956 8.957 C 92.956 8.567 92.847 8.237 92.63 7.967 C 92.419 7.697 92.052 7.563 91.53 7.563 C 91.013 7.563 90.615 7.658 90.333 7.85 C 90.057 8.042 89.919 8.321 89.919 8.687 C 89.919 8.944 90.037 9.172 90.271 9.37 C 90.506 9.561 90.829 9.742 91.24 9.909 C 91.656 10.077 92.125 10.257 92.648 10.448 C 93.434 10.73 94.123 11.042 94.716 11.383 C 95.309 11.719 95.77 12.142 96.099 12.651 C 96.432 13.161 96.6 13.814 96.6 14.611 C 96.6 15.444 96.38 16.151 95.939 16.733 C 95.5 17.308 94.892 17.745 94.118 18.046 C 93.349 18.345 92.472 18.495 91.486 18.495 Z M 78.734 7.698 L 80.337 6.061 L 80.337 11.231 L 79.545 10.26 L 84.209 10.26 L 84.209 12.957 L 79.544 12.957 L 80.336 11.995 L 80.336 17.2 L 78.735 15.563 L 85.186 15.563 L 85.186 18.261 L 76.763 18.261 L 76.763 5 L 85.186 5 L 85.186 7.697 L 78.734 7.697 Z M 69.108 5 L 75.085 5 L 75.085 18.261 L 71.713 18.261 L 71.713 6.933 L 71.775 6.97 L 69.759 18.261 L 65.235 18.261 L 63.158 6.943 L 63.22 6.906 L 63.22 18.261 L 59.84 18.261 L 59.84 5 L 65.817 5 L 67.63 16.877 L 67.268 16.877 Z M 47.127 18.261 L 50.147 5 L 55.789 5 L 58.79 18.261 L 55.155 18.261 L 52.963 7.167 L 52.98 7.167 L 50.763 18.261 Z M 49.768 15.474 L 49.768 12.75 L 56.176 12.75 L 56.176 15.474 Z M 36.388 18.261 L 36.388 5 L 42.145 5 C 43.624 5 44.715 5.336 45.419 6.007 C 46.129 6.672 46.484 7.602 46.484 8.794 C 46.484 9.465 46.358 10.037 46.106 10.511 C 45.854 10.985 45.539 11.35 45.164 11.608 C 44.788 11.866 44.416 12.01 44.046 12.04 C 44.416 12.061 44.777 12.155 45.111 12.318 C 45.44 12.48 45.704 12.741 45.903 13.101 C 46.109 13.454 46.211 13.934 46.211 14.539 L 46.211 16.732 C 46.211 17.05 46.235 17.353 46.282 17.641 C 46.335 17.923 46.414 18.129 46.52 18.261 L 42.963 18.261 C 42.869 18.111 42.796 17.898 42.743 17.623 C 42.695 17.329 42.671 17.031 42.673 16.733 L 42.673 14.952 C 42.673 14.473 42.573 14.096 42.374 13.82 C 42.174 13.538 41.813 13.397 41.291 13.397 L 38.933 13.397 L 39.857 12.291 L 39.857 18.261 Z M 39.857 11.968 L 38.932 10.7 L 41.326 10.7 C 41.626 10.7 41.887 10.637 42.109 10.511 C 42.334 10.39 42.518 10.202 42.637 9.972 C 42.771 9.715 42.838 9.427 42.831 9.136 C 42.831 8.746 42.693 8.408 42.417 8.12 C 42.148 7.833 41.779 7.689 41.309 7.689 L 38.844 7.689 L 39.857 6.61 Z M 28.328 7.697 L 29.93 6.061 L 29.93 11.33 L 28.848 10.476 L 34.198 10.476 L 34.198 13.182 L 28.848 13.182 L 29.93 12.256 L 29.93 18.261 L 26.392 18.261 L 26.392 5 L 34.982 5 L 34.982 7.697 L 28.328 7.697 Z\" fill=\"rgb(64, 212, 26)\"></path><path d=\"M 0.005 5.77 C 0.005 5.569 0.083 5.376 0.223 5.234 C 0.362 5.091 0.551 5.011 0.748 5.011 L 4.761 5.011 L 9.667 0 L 14.573 5.012 L 18.589 5.012 C 18.687 5.012 18.784 5.032 18.874 5.07 C 19.152 5.188 19.333 5.464 19.333 5.771 L 19.333 15.184 C 19.334 16.392 18.864 17.551 18.027 18.406 C 17.19 19.261 16.056 19.741 14.872 19.741 L 4.465 19.741 C 3.282 19.74 2.148 19.26 1.312 18.406 C 0.475 17.551 0.005 16.393 0.005 15.185 L 0.005 9.877 C 2.567 12.493 6.044 13.963 9.669 13.963 C 13.295 13.962 16.771 12.491 19.333 9.875 L 19.333 9.873 L 14.574 5.012 L 4.761 5.011 L 0.005 9.868 Z M 0 9.873 L 0.005 9.87 L 0.005 9.877 Z\" fill=\"rgb(64, 212, 26)\"></path></svg>',svgContentId:11104939045,withExternalLayout:true})})}),/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1dxyonn\",layoutDependency:layoutDependency,layoutId:\"Y9pi3xZ1f\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItRXh0cmFCb2xk\",\"--framer-font-family\":'\"Inter\", \"Inter Placeholder\", sans-serif',\"--framer-font-weight\":\"800\",\"--framer-line-height\":\"1.1em\",\"--framer-text-alignment\":\"left\",\"--framer-text-transform\":\"uppercase\"},children:\"UPGRADE TO Unlock ECOMMERCE\"})}),className:\"framer-4zgcw4\",fonts:[\"Inter-ExtraBold\"],layoutDependency:layoutDependency,layoutId:\"KlPjgIRAY\",style:{\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItTWVkaXVt\",\"--framer-font-family\":'\"Inter\", \"Inter Placeholder\", sans-serif',\"--framer-font-size\":\"12px\",\"--framer-font-weight\":\"500\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgba(0, 0, 0, 0.7))\"},children:\"Use Shopify on your website with Frameship.\"})}),className:\"framer-1yqk9il\",fonts:[\"Inter-Medium\"],layoutDependency:layoutDependency,layoutId:\"RNWsHiU5i\",style:{\"--extracted-r6o4lv\":\"rgba(0, 0, 0, 0.7)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true})]}),/*#__PURE__*/_jsx(Link,{href:drrB1JJ6M,motionChild:true,nodeId:\"LJcdgqplR\",openInNewTab:true,scopeId:\"LOQtD1uPa\",children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-1rb48ds framer-12itpre\",layoutDependency:layoutDependency,layoutId:\"LJcdgqplR\",style:{backgroundColor:\"rgb(64, 212, 27)\",borderBottomLeftRadius:8,borderBottomRightRadius:8,borderTopLeftRadius:8,borderTopRightRadius:8},whileHover:animation2,children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"SW50ZXItRXh0cmFCb2xk\",\"--framer-font-family\":'\"Inter\", \"Inter Placeholder\", sans-serif',\"--framer-font-size\":\"15px\",\"--framer-font-weight\":\"800\",\"--framer-line-height\":\"1em\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(255, 255, 255))\",\"--framer-text-transform\":\"uppercase\"},children:\"UPGRADE\"})}),className:\"framer-1ucnk5h\",fonts:[\"Inter-ExtraBold\"],layoutDependency:layoutDependency,layoutId:\"VLUiYG2YP\",style:{\"--extracted-r6o4lv\":\"rgb(255, 255, 255)\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true})})})]})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-Rn0up.framer-12itpre, .framer-Rn0up .framer-12itpre { display: block; }\",\".framer-Rn0up.framer-okagad { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: 60px; justify-content: flex-start; overflow: visible; padding: 0px; position: relative; width: 620px; }\",\".framer-Rn0up .framer-nm3c8g { align-content: center; align-items: center; display: flex; flex: 1 0 0px; flex-direction: row; flex-wrap: nowrap; gap: 15px; height: 1px; justify-content: center; overflow: hidden; padding: 0px 10px 0px 0px; position: relative; width: 100%; will-change: var(--framer-will-change-override, transform); }\",\".framer-Rn0up .framer-185g4gf { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: 100%; justify-content: center; overflow: visible; padding: 0px 0px 3px 20px; position: relative; text-decoration: none; width: min-content; }\",\".framer-Rn0up .framer-3oxhc7 { flex: none; height: 20px; position: relative; width: 126px; }\",\".framer-Rn0up .framer-1dxyonn { align-content: flex-start; align-items: flex-start; display: flex; flex: 1 0 0px; flex-direction: column; flex-wrap: nowrap; gap: 5px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: 1px; }\",\".framer-Rn0up .framer-4zgcw4, .framer-Rn0up .framer-1yqk9il { --framer-text-wrap: balance; flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",\".framer-Rn0up .framer-1rb48ds { align-content: center; align-items: center; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: 40px; justify-content: center; overflow: visible; padding: 0px 20px 0px 20px; position: relative; text-decoration: none; width: min-content; will-change: var(--framer-will-change-effect-override, transform); }\",\".framer-Rn0up .framer-1ucnk5h { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-Rn0up.framer-okagad, .framer-Rn0up .framer-nm3c8g, .framer-Rn0up .framer-185g4gf, .framer-Rn0up .framer-1dxyonn, .framer-Rn0up .framer-1rb48ds { gap: 0px; } .framer-Rn0up.framer-okagad > * { margin: 0px; margin-bottom: calc(0px / 2); margin-top: calc(0px / 2); } .framer-Rn0up.framer-okagad > :first-child, .framer-Rn0up .framer-1dxyonn > :first-child { margin-top: 0px; } .framer-Rn0up.framer-okagad > :last-child, .framer-Rn0up .framer-1dxyonn > :last-child { margin-bottom: 0px; } .framer-Rn0up .framer-nm3c8g > * { margin: 0px; margin-left: calc(15px / 2); margin-right: calc(15px / 2); } .framer-Rn0up .framer-nm3c8g > :first-child, .framer-Rn0up .framer-185g4gf > :first-child, .framer-Rn0up .framer-1rb48ds > :first-child { margin-left: 0px; } .framer-Rn0up .framer-nm3c8g > :last-child, .framer-Rn0up .framer-185g4gf > :last-child, .framer-Rn0up .framer-1rb48ds > :last-child { margin-right: 0px; } .framer-Rn0up .framer-185g4gf > *, .framer-Rn0up .framer-1rb48ds > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-Rn0up .framer-1dxyonn > * { margin: 0px; margin-bottom: calc(5px / 2); margin-top: calc(5px / 2); } }\",'.framer-Rn0up[data-border=\"true\"]::after, .framer-Rn0up [data-border=\"true\"]::after { content: \"\"; border-width: var(--border-top-width, 0) var(--border-right-width, 0) var(--border-bottom-width, 0) var(--border-left-width, 0); border-color: var(--border-color, none); border-style: var(--border-style, none); width: 100%; height: 100%; position: absolute; box-sizing: border-box; left: 0; top: 0; border-radius: inherit; pointer-events: none; }'];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 60\n * @framerIntrinsicWidth 620\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"fixed\"]}}}\n * @framerVariables {\"drrB1JJ6M\":\"link\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerLOQtD1uPa=withCSS(Component,css,\"framer-Rn0up\");export default FramerLOQtD1uPa;FramerLOQtD1uPa.displayName=\"Frameship Upgrade Banner\";FramerLOQtD1uPa.defaultProps={height:60,width:620};addPropertyControls(FramerLOQtD1uPa,{drrB1JJ6M:{title:\"Link\",type:ControlType.Link}});addFonts(FramerLOQtD1uPa,[{explicitInter:true,fonts:[{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/PONfPc6h4EPYwJliXQBmjVx7QxI.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/zsnJN7Z1wdzUvepJniD3rbvJIyU.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/UrzZBOy7RyJEWAZGduzOeHiHuY.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/996sR9SfSDuYELz8oHhDOcErkY.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",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/ftN1HpyPVJEoEb4q36SOrNdLXU.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/jN39PDxZWEwjG7Csryx3JN2r2Y.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",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/JAur4lGGSGRGyrFi59JSIKqVgU.woff2\",weight:\"800\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5A3Ce6C9YYmCjpQx9M4inSaKU.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/Qx95Xyt0Ka3SGhinnbXIGpEIyP4.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/6mJuEAguuIuMog10gGvH5d3cl8.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/xYYWaj7wCU5zSQH0eXvSaS19wo.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",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/otTaNuNpVK4RbdlT7zDDdKvQBA.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/d3tHnaQIAeqiE5hGcRw4mmgWYU.woff2\",weight:\"500\"},{family:\"Inter\",source:\"framer\",style:\"normal\",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/DolVirEGb34pEXEp8t8FQBSK4.woff2\",weight:\"500\"}]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerLOQtD1uPa\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerDisplayContentsDiv\":\"false\",\"framerComponentViewportWidth\":\"true\",\"framerImmutableVariables\":\"true\",\"framerColorSyntax\":\"true\",\"framerIntrinsicHeight\":\"60\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"fixed\\\"]}}}\",\"framerIntrinsicWidth\":\"620\",\"framerVariables\":\"{\\\"drrB1JJ6M\\\":\\\"link\\\"}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./LOQtD1uPa.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{createPortal}from\"react-dom\";import{useEffect,useState}from\"react\";import{hasFrameshipAccess,parseFrameshipData,useCartStore}from\"https://framerusercontent.com/modules/ibjYTPLnMMPhPLNCj4uG/cXa4uUn5VWWAcoaQctVU/Cart.js\";import{UPGRADE_LINK}from\"https://framerusercontent.com/modules/gd3dcT3w5rYoRy7ZcKte/sH6FZizM8jJ11j2dQOhQ/Shared.js\";import FrameshipUpgradeBanner from\"https://framerusercontent.com/modules/b6p2QQlcwhhLAA5Operm/erpgLSZm2BuxCMM1NCPK/LOQtD1uPa.js\";/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n * @framerDisableUnlink\n */export default function Frameship(props){const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[portalContainer,setPortalContainer]=useState(null);const initializeCart=useCartStore(state=>state.initializeCart);useEffect(()=>{initializeCart?.();},[]);const attributes={};let stagingDomain=\"\";let productionDomain=\"\";if(props.frameshipData){attributes[\"data-frameship-id\"]=props.frameshipData;const frameshipData=parseFrameshipData(props.frameshipData);stagingDomain=frameshipData.stagingDomain;productionDomain=frameshipData.productionDomain;}else{attributes[\"data-frameship-component\"]=true;if(props.shopUrl){attributes[\"data-shop-url\"]=props.shopUrl;}if(props.shopifyAccessToken){attributes[\"data-shopify-access-token\"]=props.shopifyAccessToken;}if(props.productionDomain){attributes[\"data-production-domain\"]=props.productionDomain;}if(props.stagingDomain){attributes[\"data-staging-domain\"]=props.stagingDomain;}stagingDomain=props.stagingDomain;productionDomain=props.productionDomain;}const hasAccess=hasFrameshipAccess(stagingDomain,productionDomain);useEffect(()=>{if(!isCanvas){const container=document.createElement(\"div\");document.body.appendChild(container);setPortalContainer(container);return()=>{document.body.removeChild(container);};}},[]);return /*#__PURE__*/_jsx(\"div\",{...attributes,children:!isCanvas&&portalContainer&&!hasAccess&&/*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{style:{position:\"fixed\",left:20,bottom:20},children:/*#__PURE__*/_jsx(FrameshipUpgradeBanner,{link:UPGRADE_LINK})}),portalContainer)});}Frameship.displayName=\"Frameship (Shopify)\";addPropertyControls(Frameship,{frameshipData:{type:ControlType.String,defaultValue:\"\",preventLocalization:true,hidden:()=>true},shopUrl:{type:ControlType.String,defaultValue:\"\",title:\"Shop URL\",preventLocalization:true,hidden:()=>true},shopifyAccessToken:{type:ControlType.String,defaultValue:\"\",preventLocalization:true,hidden:()=>true},productionDomain:{type:ControlType.String,defaultValue:\"\",preventLocalization:true,hidden:()=>true},stagingDomain:{type:ControlType.String,defaultValue:\"\",preventLocalization:true,hidden:()=>true},note:{type:ControlType.Enum,options:[\"IMPORTANT\"],displaySegmentedControl:true,description:\"*Do not delete this component.*\\n\\nThis component is managed by the [Frameship plugin](https://framer.link/L3dGFQc)\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"Frameship\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (f8e3bf6)\nexport default function metadata(params,activeLocale){return{customHTMLHeadEnd:'<!-- Plugin: ced618 --> <script>\\n    (function() {\\n      // Initialize shopXtools with version first\\n      window.shopXtools = window.shopXtools || {};\\n      \\n      window.shopXtools.version = \"2.0\";\\n      \\n      const fcConfigs = {\\n        storefrontDomain: \"r2c922-tk.myshopify.com\",\\n        storefrontAccessToken: \"afebbed2557f6bda96d8046a567d4548\",\\n      };\\n    \\n      const CURRENCIES = {\"AED\":\"د.إ\",\"AFN\":\"Af\",\"ALL\":\"L\",\"AMD\":\"֏\",\"ANG\":\"ƒ\",\"AOA\":\"Kz\",\"ARS\":\"$\",\"AUD\":\"$\",\"AWG\":\"ƒ\",\"AZN\":\"₼\",\"BAM\":\"KM\",\"BBD\":\"$\",\"BDT\":\"৳\",\"BGN\":\"лв\",\"BHD\":\"د.ب\",\"BIF\":\"FBu\",\"BMD\":\"$\",\"BND\":\"$\",\"BOB\":\"Bs.\",\"BRL\":\"R$\",\"BSD\":\"$\",\"BTN\":\"Nu.\",\"BWP\":\"P\",\"BYN\":\"Br\",\"BZD\":\"BZ$\",\"CAD\":\"$\",\"CDF\":\"FC\",\"CHF\":\"Fr\",\"CLP\":\"$\",\"CNY\":\"\\xa5\",\"COP\":\"$\",\"CRC\":\"₡\",\"CVE\":\"$\",\"CZK\":\"Kč\",\"DJF\":\"Fdj\",\"DKK\":\"kr\",\"DOP\":\"RD$\",\"DZD\":\"د.ج\",\"EGP\":\"\\xa3\",\"ERN\":\"Nfk\",\"ETB\":\"Br\",\"EUR\":\"€\",\"FJD\":\"$\",\"FKP\":\"\\xa3\",\"GBP\":\"\\xa3\",\"GEL\":\"₾\",\"GHS\":\"₵\",\"GIP\":\"\\xa3\",\"GMD\":\"D\",\"GNF\":\"FG\",\"GTQ\":\"Q\",\"GYD\":\"$\",\"HKD\":\"$\",\"HNL\":\"L\",\"HRK\":\"kn\",\"HTG\":\"G\",\"HUF\":\"Ft\",\"IDR\":\"Rp\",\"ILS\":\"₪\",\"INR\":\"₹\",\"IQD\":\"ع.د\",\"IRR\":\"﷼\",\"ISK\":\"kr\",\"JEP\":\"\\xa3\",\"JMD\":\"J$\",\"JOD\":\"د.ا\",\"JPY\":\"\\xa5\",\"KES\":\"KSh\",\"KGS\":\"сом\",\"KHR\":\"៛\",\"KID\":\"$\",\"KMF\":\"CF\",\"KRW\":\"₩\",\"KWD\":\"د.ك\",\"KYD\":\"$\",\"KZT\":\"₸\",\"LAK\":\"₭\",\"LBP\":\"\\xa3\",\"LKR\":\"රු\",\"LRD\":\"$\",\"LSL\":\"L\",\"LTL\":\"Lt\",\"LVL\":\"Ls\",\"LYD\":\"ل.د\",\"MAD\":\"د.م.\",\"MDL\":\"MDL\",\"MGA\":\"Ar\",\"MKD\":\"ден\",\"MMK\":\"Ks\",\"MNT\":\"₮\",\"MOP\":\"MOP$\",\"MRU\":\"UM\",\"MUR\":\"₨\",\"MVR\":\"ރ\",\"MWK\":\"MK\",\"MXN\":\"$\",\"MYR\":\"RM\",\"MZN\":\"MT\",\"NAD\":\"$\",\"NGN\":\"₦\",\"NIO\":\"C$\",\"NOK\":\"kr\",\"NPR\":\"रू\",\"NZD\":\"$\",\"OMR\":\"ر.ع.\",\"PAB\":\"B/.\",\"PEN\":\"S/.\",\"PGK\":\"K\",\"PHP\":\"₱\",\"PKR\":\"₨\",\"PLN\":\"zł\",\"PYG\":\"₲\",\"QAR\":\"ر.ق\",\"RON\":\"lei\",\"RSD\":\"Дин.\",\"RUB\":\"₽\",\"RWF\":\"FRw\",\"SAR\":\"ر.س\",\"SBD\":\"$\",\"SCR\":\"₨\",\"SDG\":\"ج.س.\",\"SEK\":\"kr\",\"SGD\":\"$\",\"SHP\":\"\\xa3\",\"SLL\":\"Le\",\"SOS\":\"Sh\",\"SRD\":\"$\",\"SSP\":\"\\xa3\",\"STN\":\"Db\",\"SYP\":\"\\xa3\",\"SZL\":\"E\",\"THB\":\"฿\",\"TJS\":\"ЅМ\",\"TMT\":\"T\",\"TND\":\"د.ت\",\"TOP\":\"T$\",\"TRY\":\"₺\",\"TTD\":\"TT$\",\"TWD\":\"NT$\",\"TZS\":\"TSh\",\"UAH\":\"₴\",\"UGX\":\"USh\",\"USD\":\"$\",\"UYU\":\"$\",\"UZS\":\"so\\'m\",\"VED\":\"Bs.S.\",\"VES\":\"Bs.\",\"VND\":\"₫\",\"VUV\":\"VT\",\"WST\":\"T\",\"XAF\":\"FCFA\",\"XCD\":\"$\",\"XOF\":\"CFA\",\"XPF\":\"₣\",\"XXX\":\"\",\"YER\":\"﷼\",\"ZAR\":\"R\",\"ZMW\":\"ZK\",\"BYR\":\"Br\",\"STD\":\"Db\",\"VEF\":\"Bs.\"}; \\n      const knownCurrenciesWithCodeAsSymbol = [\"CHF\",\"PLN\",\"SEK\",\"NOK\",\"DKK\",\"CZK\",\"HUF\",\"RON\",\"HRK\",\"BGN\",\"ISK\",\"MDL\",\"BYN\",\"KZT\",\"AMD\",\"UZS\",\"TJS\",\"KGS\",\"MNT\",\"GEL\",\"AFN\",\"MRU\",\"RWF\",\"XAF\",\"XOF\",\"XPF\"]; \\n      // Initialize default currency variables\\n      let defaultCountry = \\'\\';\\n      let defaultCountryCode = \\'\\';\\n      let defaultCurrency = \\'\\';\\n      let defaultCurrencySymbol = \\'\\';\\n\\n      document.addEventListener(\\'checkout__settings-updated\\', (event) => {\\n        const { current } = event.detail;\\n        if (current) {\\n          // Update the global default variables\\n          defaultCountry = current.defaultCountry || \\'\\';\\n          defaultCountryCode = current.defaultCountryCode || \\'\\';\\n          defaultCurrency = current.defaultCurrency || \\'\\';\\n          defaultCurrencySymbol = current.defaultCurrencySymbol || \\'\\';\\n\\n          // Set session storage only if it\\'s empty\\n          if (!localStorage.getItem(\\'selectedCountry\\')) {\\n            localStorage.setItem(\\'selectedCountry\\', defaultCountry);\\n          }\\n          if (!localStorage.getItem(\\'selectedCountryCode\\')) {\\n            localStorage.setItem(\\'selectedCountryCode\\', defaultCountryCode);\\n          }\\n          if (!localStorage.getItem(\\'selectedCurrency\\')) {\\n            localStorage.setItem(\\'selectedCurrency\\', defaultCurrency);\\n          }\\n          if (!localStorage.getItem(\\'selectedCurrencySymbol\\')) {\\n            localStorage.setItem(\\'selectedCurrencySymbol\\', defaultCurrencySymbol);\\n          }\\n\\n          // Clear product cache and refetch products with new currency\\n          localStorage.removeItem(\\'fc_products\\');\\n          localStorage.removeItem(\\'fc_products_timestamp\\');\\n          \\n          // Refetch products with the current country code\\n          const currentCountryCode = localStorage.getItem(\\'selectedCountryCode\\');\\n          if (currentCountryCode) {\\n            fetchProductsByCountry(currentCountryCode).catch(error => {\\n              console.error(\\'Error refetching products after currency change:\\', error);\\n              window.shopXtools.status = \"ready\";\\n            });\\n          }\\n\\n          // console.log(\\'Session storage is set:\\', {\\n          //   defaultCountry,\\n          //   defaultCountryCode,\\n          //   defaultCurrency,\\n          //   defaultCurrencySymbol\\n          // });\\n        }\\n      });\\n      \\n      let domain;\\n      let products = [];\\n    \\n      // ALL QUERIES\\n      const getProductsQuery = `\\n        query GetProducts($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                createdAt\\n                bestSellingRank\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                sellingPlanGroups(first: 1) {\\n                  edges {\\n                    node {\\n                      name\\n                      options {\\n                        name\\n                        values\\n                      }\\n                      sellingPlans(first: 10) {\\n                        edges {\\n                          node {\\n                            id\\n                            name\\n                            description\\n                            recurringDeliveries\\n                            priceAdjustments {\\n                              orderCount\\n                              adjustmentValue {\\n                                __typename\\n                                ... on SellingPlanPercentagePriceAdjustment {\\n                                  adjustmentPercentage\\n                                }\\n                                ... on SellingPlanFixedAmountPriceAdjustment {\\n                                  adjustmentAmount {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                                ... on SellingPlanFixedPriceAdjustment {\\n                                  price {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getProductsQueryBackup = `\\n        query GetProductsBackup($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      availableForSale\\n                      quantityAvailable\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n      \\n      const getCartQuery = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            buyerIdentity {\\n              countryCode\\n            }\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  sellingPlanAllocation { \\n                    checkoutChargeAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    sellingPlan {\\n                      id\\n                      name\\n                      description\\n                    }\\n                  }\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  cost {\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            cost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getCartQueryNoPlans = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            buyerIdentity {\\n              countryCode\\n            }\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  cost {\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            cost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n\\n      // Get available currencies from the store\\n      const getAvailableCurrencies = `\\n        query GetAvailableCurrencies {\\n          localization {\\n            availableCountries {\\n              currency {\\n                isoCode\\n                name\\n                symbol\\n              }\\n              isoCode\\n              name\\n            }\\n          }\\n        }\\n      `;\\n\\n      // Collection-specific queries\\n      const getProductsQueryByCollection = `\\n        query GetProductsByCollection($cursor: String, $countryCode: CountryCode, $collectionHandle: String!) @inContext(country: $countryCode) {\\n          collection(handle: $collectionHandle) {\\n            products(first: 250, after: $cursor) {\\n              edges {\\n                node {\\n                  id\\n                  title\\n                  vendor\\n                  handle\\n                  productType\\n                  tags\\n                  collections(first: 250) {\\n                    edges {\\n                      node {\\n                        id\\n                        title\\n                        handle\\n                      }\\n                    }\\n                  }\\n                  images(first: 20) {\\n                    edges {\\n                      node {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                    }\\n                  }\\n                  metafields(identifiers: [\\n                    { namespace: \"custom\", key: \"fc_color\" },\\n                    { namespace: \"custom\", key: \"fc_size\" }\\n                  ]) {\\n                    key\\n                    namespace\\n                    value\\n                  }\\n                  sellingPlanGroups(first: 1) {\\n                    edges {\\n                      node {\\n                        name\\n                        options {\\n                          name\\n                          values\\n                        }\\n                        sellingPlans(first: 10) {\\n                          edges {\\n                            node {\\n                              id\\n                              name\\n                              description\\n                              recurringDeliveries\\n                              priceAdjustments {\\n                                orderCount\\n                                adjustmentValue {\\n                                  __typename\\n                                  ... on SellingPlanPercentagePriceAdjustment {\\n                                    adjustmentPercentage\\n                                  }\\n                                  ... on SellingPlanFixedAmountPriceAdjustment {\\n                                    adjustmentAmount {\\n                                      amount\\n                                      currencyCode\\n                                    }\\n                                  }\\n                                  ... on SellingPlanFixedPriceAdjustment {\\n                                    price {\\n                                      amount\\n                                      currencyCode\\n                                    }\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                  options {\\n                    id\\n                    name\\n                    values\\n                  }\\n                  compareAtPriceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  priceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  variants(first: 250) {\\n                    pageInfo {\\n                      hasNextPage\\n                      hasPreviousPage\\n                      endCursor\\n                    }\\n                    edges {\\n                      node {\\n                        id\\n                        image {\\n                          url\\n                          altText\\n                          width\\n                          height\\n                        }\\n                        title\\n                        sku\\n                        quantityAvailable\\n                        availableForSale\\n                        requiresShipping\\n                        selectedOptions {\\n                          name\\n                          value\\n                        }\\n                        price {\\n                          amount\\n                          currencyCode\\n                        }\\n                        compareAtPrice {\\n                          amount\\n                          currencyCode\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              pageInfo {\\n                hasNextPage\\n                endCursor\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n      const getProductsQueryByCollectionBackup = `\\n        query GetProductsByCollectionBackup($cursor: String, $countryCode: CountryCode, $collectionHandle: String!) @inContext(country: $countryCode) {\\n          collection(handle: $collectionHandle) {\\n            products(first: 250, after: $cursor) {\\n              edges {\\n                node {\\n                  id\\n                  title\\n                  vendor\\n                  handle\\n                  productType\\n                  tags\\n                  collections(first: 250) {\\n                    edges {\\n                      node {\\n                        id\\n                        title\\n                        handle\\n                      }\\n                    }\\n                  }\\n                  images(first: 20) {\\n                    edges {\\n                      node {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                    }\\n                  }\\n                  metafields(identifiers: [\\n                    { namespace: \"custom\", key: \"fc_color\" },\\n                    { namespace: \"custom\", key: \"fc_size\" }\\n                  ]) {\\n                    key\\n                    namespace\\n                    value\\n                  }\\n                  options {\\n                    id\\n                    name\\n                    values\\n                  }\\n                  compareAtPriceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  priceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  variants(first: 250) {\\n                    pageInfo {\\n                      hasNextPage\\n                      hasPreviousPage\\n                      endCursor\\n                    }\\n                    edges {\\n                      node {\\n                        id\\n                        image {\\n                          url\\n                          altText\\n                          width\\n                          height\\n                        }\\n                        title\\n                        sku\\n                        quantityAvailable\\n                        availableForSale\\n                        requiresShipping\\n                        selectedOptions {\\n                          name\\n                          value\\n                        }\\n                        price {\\n                          amount\\n                          currencyCode\\n                        }\\n                        compareAtPrice {\\n                          amount\\n                          currencyCode\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              pageInfo {\\n                hasNextPage\\n                endCursor\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n      // Get products by country\\n      const getProductsQueryByCountry = `\\n        query GetProductsByCountry ($cursor: String, $countryCode: CountryCode, $query: String) @inContext(country: $countryCode) {\\n          products(\\n            first: 250, \\n            after: $cursor, \\n            query: $query\\n          ) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                    }\\n                  }\\n                }\\n                metafields(identifiers: [\\n                  { namespace: \"custom\", key: \"fc_color\" },\\n                  { namespace: \"custom\", key: \"fc_size\" }\\n                ]) {\\n                  key\\n                  namespace\\n                  value\\n                }\\n                sellingPlanGroups(first: 1) {\\n                  edges {\\n                    node {\\n                      name\\n                      options {\\n                        name\\n                        values\\n                      }\\n                      sellingPlans(first: 10) {\\n                        edges {\\n                          node {\\n                            id\\n                            name\\n                            description\\n                            recurringDeliveries\\n                            priceAdjustments {\\n                              orderCount\\n                              adjustmentValue {\\n                                __typename\\n                                ... on SellingPlanPercentagePriceAdjustment {\\n                                  adjustmentPercentage\\n                                }\\n                                ... on SellingPlanFixedAmountPriceAdjustment {\\n                                  adjustmentAmount {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                                ... on SellingPlanFixedPriceAdjustment {\\n                                  price {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n\\n      const getProductsQueryByCountryBackup = `\\n        query GetProductsByCountryBackup($cursor: String, $countryCode: CountryCode, $query: String) @inContext(country: $countryCode) {\\n          products(\\n            first: 250, \\n            after: $cursor, \\n            query: $query\\n          ) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                    }\\n                  }\\n                }\\n                metafields(identifiers: [\\n                  { namespace: \"custom\", key: \"fc_color\" },\\n                  { namespace: \"custom\", key: \"fc_size\" }\\n                ]) {\\n                  key\\n                  namespace\\n                  value\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n\\n\\n\\n\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.products = {};\\n      window.shopXtools.fetchCart = null;\\n      window.shopXtools.dispatchEvent = (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          };\\n    \\n      window.shopXtools.handleCartMutation = async (mutation, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const token = fcConfigs.storefrontAccessToken;\\n    \\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": token,\\n            },\\n            body: JSON.stringify({\\n              query: mutation,\\n              variables,\\n            }),\\n          });\\n          const result = await response.json();\\n          if (response.ok && !result.errors) {\\n            // If this is a cart mutation and we have cart data, save it to localStorage\\n            if (result.data && (result.data.cartCreate || result.data.cartLinesAdd || \\n                result.data.cartLinesRemove || result.data.cartLinesUpdate || \\n                result.data.cartBuyerIdentityUpdate)) {\\n              \\n              // Find the cart object in the response\\n              const cartData = result.data.cartCreate?.cart || \\n                              result.data.cartLinesAdd?.cart || \\n                              result.data.cartLinesRemove?.cart || \\n                              result.data.cartLinesUpdate?.cart ||\\n                              result.data.cartBuyerIdentityUpdate?.cart;\\n              \\n              if (cartData) {\\n                //console.log(\"Saving cart data to localStorage:\", cartData);\\n                // Update the global cart object\\n                window.shopXtools.cart = cartData;\\n                // Save to localStorage\\n                localStorage.setItem(\"shopXtools.cart\", JSON.stringify(cartData));\\n                \\n                // If this is a buyerIdentity update with a country code, update currency settings\\n                if (result.data.cartBuyerIdentityUpdate && cartData.buyerIdentity && cartData.buyerIdentity.countryCode) {\\n                  //console.log(\"Country code updated in cart:\", cartData.buyerIdentity.countryCode);\\n                  // Trigger currency settings update\\n                  initializeCurrencySettings();\\n                }\\n              }\\n            }\\n            return result.data;\\n          } else {\\n            console.error(\"GraphQL errors:\", result.errors);\\n            return null;\\n          }\\n        } catch (error) {\\n          console.error(\"Network error:\", error);\\n          return null;\\n        }\\n      };\\n\\n\\n        window.shopXtools.handleTemporaryCartMutation = async (mutation, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const token = fcConfigs.storefrontAccessToken;\\n\\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": token,\\n            },\\n            body: JSON.stringify({\\n              query: mutation,\\n              variables,\\n            }),\\n          });\\n          const result = await response.json();\\n          if (response.ok && !result.errors) {\\n            // If this is a cart mutation and we have cart data, save it to temporaryCart\\n            if (result.data && (result.data.cartCreate || result.data.cartLinesAdd || \\n                result.data.cartLinesRemove || result.data.cartLinesUpdate || \\n                result.data.cartBuyerIdentityUpdate)) {\\n              \\n              // Find the cart object in the response\\n              const cartData = result.data.cartCreate?.cart || \\n                              result.data.cartLinesAdd?.cart || \\n                              result.data.cartLinesRemove?.cart || \\n                              result.data.cartLinesUpdate?.cart ||\\n                              result.data.cartBuyerIdentityUpdate?.cart;\\n              \\n              if (cartData) {\\n                // If this is a buyerIdentity update with a country code, update currency settings\\n                if (result.data.cartBuyerIdentityUpdate && cartData.buyerIdentity && cartData.buyerIdentity.countryCode) {\\n                  // Trigger currency settings update\\n                  initializeCurrencySettings();\\n                }\\n              }\\n            }\\n            return result.data; // Return the temporary cart data\\n          } else {\\n            console.error(\"GraphQL errors:\", result.errors);\\n            return null;\\n          }\\n        } catch (error) {\\n          console.error(\"Network error:\", error);\\n          return null;\\n        }\\n      };\\n    \\n      window.shopXtools.fetchCart = async function(cartId) {\\n        const variables = { cartId: cartId };\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n    \\n        const tryFetchCart = async (query, queryName) => {\\n          try {\\n            const response = await fetch(endpoint, {\\n              method: \"POST\",\\n              headers: {\\n                \"Content-Type\": \"application/json\",\\n                \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n              },\\n              body: JSON.stringify({ query: query, variables }),\\n            });\\n    \\n            const result = await response.json();\\n            if (result.errors) {\\n              console.error(`${queryName} failed with errors:`, result.errors);\\n              return null;\\n            }\\n    \\n            if (result.data && result.data.cart) {\\n              // Save cart data to localStorage\\n              //console.log(\"Saving fetched cart data to localStorage:\", result.data.cart);\\n              window.shopXtools.cart = result.data.cart;\\n              localStorage.setItem(\"shopXtools.cart\", JSON.stringify(result.data.cart));\\n              \\n              // If cart has buyerIdentity with countryCode, update currency settings\\n              if (result.data.cart.buyerIdentity && result.data.cart.buyerIdentity.countryCode) {\\n                //console.log(\"Country code found in fetched cart:\", result.data.cart.buyerIdentity.countryCode);\\n                // Trigger currency settings update\\n                initializeCurrencySettings();\\n              }\\n              \\n              return result.data.cart;\\n            } else {\\n              console.error(`Cart data not found in response from ${queryName}:`, result);\\n              return null;\\n            }\\n          } catch (error) {\\n            console.error(`Network error during ${queryName}:`, error);\\n            return null;\\n          }\\n        };\\n    \\n        let cartData = await tryFetchCart(getCartQuery, \"Primary cart query\");\\n        //console.log(cartData);\\n        if (!cartData) {\\n          //console.log(\"Primary cart query failed, attempting backup cart query...\");\\n          cartData = await tryFetchCart(getCartQueryNoPlans, \"Backup cart query\");\\n        }\\n    \\n        return cartData;\\n      };\\n    \\n      const configValidation = () => {\\n        if (!fcConfigs.storefrontDomain) {\\n          throw Error(\"Storefront domain not found\");\\n        }\\n        if (!fcConfigs.storefrontAccessToken) {\\n          throw Error(\"Storefront access token not found\");\\n        }\\n      };\\n    \\n      const setDomainUrl = () => {\\n        let storeDomain = \"https://test.shopify.com\";\\n        if (fcConfigs.storefrontDomain) {\\n          storeDomain = fcConfigs.storefrontDomain.startsWith(\"http\")\\n            ? fcConfigs.storefrontDomain\\n            : `https://${fcConfigs.storefrontDomain}`;\\n        }\\n        domain = new URL(storeDomain);\\n      };\\n    \\n      const shopify = async (type, query, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const response = await fetch(endpoint, {\\n          method: \"POST\",\\n          body: JSON.stringify({ [type]: query, variables }),\\n          headers: {\\n            \"Content-Type\": \"application/json\",\\n            \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n          },\\n        });\\n        const json = await response.json();\\n        return json.data;\\n      };\\n    \\n      const setupInitialToolsObject = () => {\\n        if (window.shopXtools) {\\n          return;\\n        }\\n    \\n        window.shopXtools = {\\n          __eventsIdentifier: \"shopX__events__fragment\",\\n          dispatchEvent: (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          },\\n          status: \"loading\",\\n          cart: {},\\n          products: [],\\n          getProducts: (_id) => {\\n            if (window.shopXtools.status !== \"ready\") {\\n              console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n              return null;\\n            }\\n            const fullId = _id.startsWith(\\'gid://\\') ? _id : `gid://shopify/Product/${_id}`;\\n            return window.shopXtools.products.find(({ node: product }) => product.id === fullId);\\n          },\\n          getProductsForCountry: (countryCode) => {\\n            if (window.shopXtools.status !== \"ready\") {\\n              console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n              return [];\\n            }\\n            return window.shopXtools.productsWithPrices?.[countryCode] || [];\\n          }\\n        };\\n      };\\n\\n\\n      // Function to fetch available currencies\\n      const fetchAvailableCurrencies = async () => {\\n        // console.log(\"Domain object in fetchAvailableCurrencies:\", domain);\\n        // console.log(\"Domain host:\", domain?.host);\\n\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        \\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n            },\\n            body: JSON.stringify({ query: getAvailableCurrencies }),\\n          });\\n\\n          const result = await response.json();\\n          //console.log(\"[CURRENCIES] Result:\", result);\\n          if (result.errors) {\\n            console.error(\"Error fetching currencies:\", result.errors);\\n            return null;\\n          }\\n          const availableCurrenciesAndCountries = result?.data?.localization?.availableCountries;\\n          \\n          //console.log(\"[CURRENCIES] Available Currencies:\", availableCurrenciesAndCountries);\\n          sessionStorage.setItem(\"availableCurrenciesAndCountries\", JSON.stringify(availableCurrenciesAndCountries));\\n          //console.log(sessionStorage.getItem(\"availableCurrenciesAndCountries\")\\n          \\n          return { availableCurrenciesAndCountries };\\n          \\n        } catch (error) {\\n          console.error(\"Error fetching currencies:\", error);\\n          return null;\\n        }\\n      };\\n\\n      // Initialize shopXtools and attach fetchAvailableCurrencies to it\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.fetchAvailableCurrencies = fetchAvailableCurrencies;\\n      \\n      \\n\\n      // Function to initialize currency settings\\n      const initializeCurrencySettings = async () => {\\n        // Ensure domain is initialized before proceeding\\n        if (!domain) {\\n            await setDomainUrl();\\n        }\\n        if (!domain || !domain.host) {\\n            console.error(\"Domain is still undefined after initialization. Cannot fetch currencies.\");\\n            return;\\n        }\\n\\n        // Retrieve available currencies from sessionStorage or fetch if not available\\n        let availableCurrenciesAndCountries = JSON.parse(sessionStorage.getItem(\"availableCurrenciesAndCountries\"));\\n        if (!availableCurrenciesAndCountries) {\\n            const currencies = await fetchAvailableCurrencies();\\n            if (!currencies) {\\n                console.error(\"Failed to fetch available currencies\");\\n                return;\\n            }\\n            availableCurrenciesAndCountries = currencies.availableCurrenciesAndCountries;\\n            sessionStorage.setItem(\"availableCurrenciesAndCountries\", JSON.stringify(availableCurrenciesAndCountries));\\n        }\\n\\n        // Get values from window.__FcCheckoutConfigs\\n        const fcCheckoutConfigs = window.__FcCheckoutConfigs || {};\\n        const configCountry = fcCheckoutConfigs.defaultCountry;\\n        const configCountryCode = fcCheckoutConfigs.defaultCountryCode;\\n        const configCurrency = fcCheckoutConfigs.defaultCurrency;\\n        const configCurrencySymbol = fcCheckoutConfigs.defaultCurrencySymbol;\\n        //console.log(\"configCurrencySymbol\", configCurrencySymbol)\\n        \\n        // Get values from localStorage\\n        let storedCurrency = localStorage.getItem(\"selectedCurrency\");\\n        let storedCountry = localStorage.getItem(\"selectedCountry\");\\n        let storedCountryCode = localStorage.getItem(\"selectedCountryCode\");\\n        let storedCurrencySymbol = localStorage.getItem(\"selectedCurrencySymbol\");\\n\\n        // Get cart data from localStorage\\n        let cart;\\n        try {\\n          const cartData = localStorage.getItem(\"shopXtools.cart\");\\n          if (cartData) {\\n            cart = JSON.parse(cartData);\\n          } else {\\n            cart = {};\\n          }\\n        } catch (error) {\\n          console.error(\"Error parsing cart data:\", error);\\n          cart = {};\\n        }\\n        \\n        const buyerIdentity = cart.buyerIdentity || {};\\n        const countryCodeFromCart = buyerIdentity.countryCode;\\n        window.shopXtools.cart = cart;\\n\\n        // Determine the country code using the priority sequence\\n        let finalCountryCode;\\n        let finalCurrency = null;\\n        let finalCountry = null;\\n        let finalCurrencySymbol = null;\\n        \\n        if (countryCodeFromCart) {\\n          // Priority 1: Use country code from cart\\n          finalCountryCode = countryCodeFromCart;\\n        } else if (storedCountryCode && storedCurrency && storedCountry && storedCurrencySymbol) {\\n          // Priority 2: Use values from localStorage if all are present\\n          finalCountryCode = storedCountryCode;\\n          finalCurrency = storedCurrency;\\n          finalCountry = storedCountry;\\n          finalCurrencySymbol = storedCurrencySymbol;\\n        } else if (configCountryCode && configCurrency && configCountry) {\\n          // Priority 3: Use values from window.__FcCheckoutConfigs if all are present\\n          finalCountryCode = configCountryCode;\\n          finalCurrency = configCurrency;\\n          finalCountry = configCountry;\\n          finalCurrencySymbol = configCurrencySymbol;\\n        } else {\\n          // Priority 4: Use first available country if nothing else is available\\n          if (availableCurrenciesAndCountries && availableCurrenciesAndCountries.length > 0) {\\n            finalCountryCode = availableCurrenciesAndCountries[0].isoCode;\\n          } else {\\n            console.error(\"No country data available\");\\n            return;\\n          }\\n        }\\n        \\n        // If we only have the country code (from cart or when other values are missing),\\n        // find the matching country data to get the currency and country name\\n        if (!finalCurrency || !finalCountry) {\\n          const matchedCountry = availableCurrenciesAndCountries.find(c => c.isoCode === finalCountryCode);\\n          if (matchedCountry) {\\n            finalCurrency = matchedCountry.currency.isoCode;\\n            finalCountry = matchedCountry.name;\\n            //finalCurrencySymbol = CURRENCIES[finalCurrency];\\n            if (knownCurrenciesWithCodeAsSymbol[finalCurrency]){\\n              finalCurrencySymbol = finalCurrency\\n            } else {\\n              finalCurrencySymbol = CURRENCIES[finalCurrency];\\n            }\\n          } else {\\n            // If no match found, use first available country as fallback\\n            if (availableCurrenciesAndCountries && availableCurrenciesAndCountries.length > 0) {\\n              const firstCountry = availableCurrenciesAndCountries[0];\\n              finalCountryCode = firstCountry.isoCode;\\n              finalCurrency = firstCountry.currency.isoCode;\\n              finalCountry = firstCountry.name;\\n              //finalCurrencySymbol = CURRENCIES[finalCurrency];\\n              if (knownCurrenciesWithCodeAsSymbol[finalCurrency]){\\n                finalCurrencySymbol = finalCurrency\\n              } else {\\n                finalCurrencySymbol = CURRENCIES[finalCurrency];\\n              }\\n            } else {\\n              console.error(\"Cannot determine country settings\");\\n              return;\\n            }\\n          }\\n        }\\n\\n        // Update localStorage with the final values\\n        localStorage.setItem(\"selectedCountry\", finalCountry);\\n        localStorage.setItem(\"selectedCurrency\", finalCurrency);\\n        localStorage.setItem(\"selectedCountryCode\", finalCountryCode);\\n        localStorage.setItem(\"selectedCurrencySymbol\", finalCurrencySymbol);\\n\\n        // Also update window.shopXtools for global consistency\\n        window.shopXtools.defaultCurrency = finalCurrency;\\n        window.shopXtools.defaultCountry = finalCountry;\\n        window.shopXtools.defaultCountryCode = finalCountryCode;\\n        window.shopXtools.defaultCurrencySymbol = finalCurrencySymbol;\\n\\n        // Dispatch an event to notify the application of currency settings changes\\n        const currencyEvent = new CustomEvent(\\'currency__settings-updated\\', {\\n          detail: {\\n            previous: {\\n              defaultCountry: storedCountry,\\n              defaultCountryCode: storedCountryCode,\\n              defaultCurrency: storedCurrency,\\n              defaultCurrencySymbol: storedCurrencySymbol\\n            },\\n            current: {\\n              defaultCountry: finalCountry,\\n              defaultCountryCode: finalCountryCode,\\n              defaultCurrency: finalCurrency,\\n              defaultCurrencySymbol: finalCurrencySymbol\\n            }\\n          }\\n        });\\n        document.dispatchEvent(currencyEvent);\\n      };\\n\\n\\n      const handleProductData = (newProducts, countryCode, isInitialLoad = false, cursor = null) => {\\n        try {\\n          // Transform products into minimal format with only essential data\\n          const transformedProducts = newProducts.map(({ node }) => {\\n            // For initial load, include minimal but sufficient variant data\\n            if (isInitialLoad) {\\n              return {\\n                node: {\\n                  id: node.id,\\n                  handle: node.handle,\\n                  title: node.title,\\n                  priceRange: node.priceRange,\\n                  metafields: node.metafields,\\n                  variants: { \\n                    edges: node.variants?.edges?.map(({ node: variant }) => ({\\n                      node: {\\n                        id: variant.id,\\n                        title: variant.title,\\n                        price: variant.price,\\n                        availableForSale: variant.availableForSale,\\n                        selectedOptions: variant.selectedOptions || [],\\n                        quantityAvailable: variant.quantityAvailable || 0,\\n                        compareAtPrice: variant.compareAtPrice\\n                      }\\n                    })) || []\\n                  },\\n                  options: node.options || []\\n                }\\n              };\\n            }\\n\\n            // For complete data load, include all necessary fields\\n            return {\\n              node: {\\n                id: node.id,\\n                handle: node.handle,\\n                title: node.title,\\n                vendor: node.vendor,\\n                productType: node.productType,\\n                tags: node.tags,\\n                metafields: node.metafields,\\n                collections: Array.isArray(node.collections)\\n                  ? node.collections // already transformed\\n                  : (node.collections?.edges || []).map(edge => ({\\n                    node: {\\n                      id: edge.node.id,\\n                      handle: edge.node.handle,\\n                      title: edge.node.title\\n                    }\\n                })),\\n                variants: { \\n                  edges: (node.variants?.edges || []).map(({ node: variant }) => ({\\n                    node: {\\n                      id: variant.id,\\n                      title: variant.title,\\n                      price: variant.price,\\n                      availableForSale: variant.availableForSale,\\n                      selectedOptions: variant.selectedOptions || [],\\n                      quantityAvailable: variant.quantityAvailable || 0,\\n                      compareAtPrice: variant.compareAtPrice,\\n                      requiresShipping: variant.requiresShipping\\n                    }\\n                  }))\\n                },\\n                options: node.options || [],\\n                priceRange: node.priceRange,\\n                compareAtPriceRange: node.compareAtPriceRange,\\n                sellingPlanGroups: node.sellingPlanGroups ? {\\n                  edges: (node.sellingPlanGroups.edges || []).map(({ node: sellingPlanGroup }) => ({\\n                    node: {\\n                      name: sellingPlanGroup.name,\\n                      options: sellingPlanGroup.options,\\n                      sellingPlans: {\\n                        edges: (sellingPlanGroup.sellingPlans.edges || []).map(({ node: sellingPlan }) => ({\\n                          node: {\\n                            id: sellingPlan.id,\\n                            name: sellingPlan.name,\\n                            description: sellingPlan.description,\\n                            recurringDeliveries: sellingPlan.recurringDeliveries,\\n                            priceAdjustments: sellingPlan.priceAdjustments\\n                          }\\n                        }))\\n                      }\\n                    }\\n                  }))\\n                } : null\\n              }\\n            };\\n          });\\n\\n          // Always accumulate products, whether initial load or not\\n          if (!cursor) {\\n            // If this is the first page, start fresh\\n            products = transformedProducts;\\n          } else {\\n            // For subsequent pages, append to existing products\\n            products = [...products, ...transformedProducts];\\n          }\\n\\n          // Store products in smaller chunks to avoid quota issues\\n          const CHUNK_SIZE = 50;\\n          const chunks = [];\\n          for (let i = 0; i < products.length; i += CHUNK_SIZE) {\\n            chunks.push(products.slice(i, i + CHUNK_SIZE));\\n          }\\n\\n          let storageQuotaExceeded = false;\\n\\n          // Update storage with all chunks\\n          try {\\n            // Only attempt to clear old chunks if we haven\\'t hit quota yet\\n            if (!storageQuotaExceeded) {\\n              try {\\n                const oldMetadata = JSON.parse(sessionStorage.getItem(\\'fc_products_\\' + countryCode + \\'_metadata\\') || \\'{}\\');\\n                if (oldMetadata.totalChunks) {\\n                  for (let i = 0; i < oldMetadata.totalChunks; i++) {\\n                    sessionStorage.removeItem(\\'fc_products_\\' + countryCode + \\'_chunk_\\' + i);\\n                  }\\n                }\\n              } catch (error) {\\n                console.warn(\\'Storage quota exceeded during cleanup, switching to in-memory only\\');\\n                storageQuotaExceeded = true;\\n              }\\n            }\\n\\n            // Only attempt to store new chunks if we haven\\'t hit quota yet\\n            if (!storageQuotaExceeded) {\\n              for (let i = 0; i < chunks.length; i++) {\\n                const chunkKey = \\'fc_products_\\' + countryCode + \\'_chunk_\\' + i;\\n                try {\\n                  sessionStorage.setItem(chunkKey, JSON.stringify(chunks[i]));\\n                } catch (storageError) {\\n                  console.warn(\\'Storage quota exceeded at chunk\\', i, \\', switching to in-memory only\\');\\n                  storageQuotaExceeded = true;\\n                  break;\\n                }\\n              }\\n\\n              // Only attempt to update metadata if we haven\\'t hit quota\\n              if (!storageQuotaExceeded) {\\n                const metadata = {\\n                  totalChunks: chunks.length,\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: !cursor\\n                };\\n                try {\\n                  sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n                } catch (error) {\\n                  console.warn(\\'Storage quota exceeded during metadata update\\');\\n                  storageQuotaExceeded = true;\\n                }\\n              }\\n            }\\n          } catch (error) {\\n            console.warn(\\'Storage operations failed, proceeding with in-memory only\\');\\n            storageQuotaExceeded = true;\\n          }\\n\\n          // Update global references with complete product list (always do this regardless of storage status)\\n          window.shopXtools.productsWithPrices = { [countryCode]: products };\\n          window.shopXtools.products = products;\\n\\n          // Set status and dispatch events\\n          window.shopXtools.status = \"ready\";\\n          window.shopXtools.dispatchEvent(\\'data__products-ready\\', { \\n            products: window.shopXtools.products,\\n            isInitialLoad\\n          });\\n\\n          // Start fetching complete data immediately after displaying prices\\n          if (isInitialLoad && !cursor) {\\n            const { vendor, collection, productType, tag } = window.shopXtools.lastAppliedFilters || {};\\n            setTimeout(() => {\\n              fetchCompleteProductData(countryCode, vendor, collection, productType, tag);\\n            }, 0);\\n          }\\n\\n          //console.log(\\'[Products] Total products loaded:\\', products.length);\\n        } catch (error) {\\n          console.error(\\'Error in handleProductData:\\', error);\\n          window.shopXtools.status = \"error\";\\n        }\\n      };\\n\\n      // Client-side filtering function to ensure filters are applied correctly\\n      const filterProductsClientSide = (products, filters) => {\\n        const { vendor, collection, productType, tag } = filters;\\n        \\n        return products.filter(({ node }) => {\\n          // Filter by vendor if specified\\n          if (vendor && node.vendor !== vendor) {\\n            return false;\\n          }\\n          \\n          // Filter by collection if specified\\n          if (collection) {\\n            // Check if the product belongs to the specified collection\\n            const collections = node.collections || [];\\n            const matchingCollection = collections.find(col => \\n              col.handle === collection.toLowerCase() || \\n              col.title === collection\\n            );\\n            if (!matchingCollection) {\\n              return false;\\n            }\\n          }\\n          \\n          // Filter by product type if specified\\n          if (productType && node.productType !== productType) {\\n            return false;\\n          }\\n          \\n          // Filter by tag if specified\\n          if (tag) {\\n            const tags = node.tags || [];\\n            if (!tags.includes(tag)) {\\n              return false;\\n            }\\n          }\\n          \\n          return true;\\n        });\\n      };\\n\\n      const fetchProductsByCountry = async (countryCode, cursor = null, vendor = null, collection = null, productType = null, tag = null) => {\\n        // Store filter information if this is a first page request\\n        if (!cursor) {\\n          const newFilters = { vendor, collection, productType, tag };\\n          window.shopXtools.lastAppliedFilters = newFilters;\\n          \\n          // Store filters in sessionStorage\\n          try {\\n            const storedFilters = JSON.parse(sessionStorage.getItem(\\'fc_filters\\') || \\'{}\\');\\n            const filtersChanged = JSON.stringify(storedFilters) !== JSON.stringify(newFilters);\\n            \\n            if (filtersChanged) {\\n              sessionStorage.setItem(\\'fc_filters\\', JSON.stringify(newFilters));\\n              // Force refresh from Shopify if filters changed\\n              products = [];\\n              return fetchProductsByCountry(countryCode, null, vendor, collection, productType, tag);\\n            }\\n          } catch (error) {\\n            console.error(\\'Error handling filter storage:\\', error);\\n          }\\n          \\n          products = [];\\n          \\n          // Try to load and display cached data immediately\\n          try {\\n            const metadata = JSON.parse(sessionStorage.getItem(\\'fc_products_\\' + countryCode + \\'_metadata\\') || \\'{}\\');\\n            if (metadata.totalChunks > 0) {\\n              let cachedProducts = [];\\n              for (let i = 0; i < metadata.totalChunks; i++) {\\n                const chunkKey = \\'fc_products_\\' + countryCode + \\'_chunk_\\' + i;\\n                const chunk = JSON.parse(sessionStorage.getItem(chunkKey) || \\'[]\\');\\n                cachedProducts = cachedProducts.concat(chunk);\\n              }\\n              \\n              if (cachedProducts.length > 0) {\\n                //console.log(\\'[Cache] Displaying\\', cachedProducts.length, \\'cached products\\');\\n                handleProductData(cachedProducts, countryCode, false, cursor);\\n                \\n                // If cache is older than 1 minute or incomplete, refresh in background\\n                if (Date.now() - metadata.lastUpdated > 60000 || !metadata.isComplete) {\\n                  //console.log(\\'[Cache] Starting background refresh\\');\\n                } else {\\n                  //console.log(\\'[Cache] Cache is fresh and complete, skipping refresh\\');\\n                  return;\\n                }\\n              }\\n            }\\n          } catch (error) {\\n            console.error(\\'Error loading from cache:\\', error);\\n          }\\n        }\\n\\n        try {\\n          let response;\\n          let variables;\\n          let query;\\n\\n          // Use collection-specific query structure if a collection filter is provided\\n          if (collection) {\\n            query = getProductsQueryByCollection;\\n            variables = {\\n              countryCode,\\n              collectionHandle: collection.toLowerCase(),\\n              ...(cursor && { cursor })\\n            };\\n            \\n            //console.log(\"[FILTER] Using collection-specific query for:\", collection);\\n          } else {\\n            query = getProductsQueryByCountry;\\n            \\n            // Build query string for non-collection filters\\n            const queryParts = [];\\n            if (vendor) queryParts.push(`vendor:${vendor}`);\\n            if (productType) queryParts.push(`product_type:${productType}`);\\n            if (tag) queryParts.push(`tag:${tag}`);\\n            const queryString = queryParts.length > 0 ? queryParts.join(\" AND \") : null;\\n\\n            variables = {\\n              countryCode,\\n              ...(cursor && { cursor }),\\n              ...(queryString && { query: queryString })\\n            };\\n          }\\n\\n          response = await fetch(`https://${domain.host}/api/2024-07/graphql.json`, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n            },\\n            body: JSON.stringify({ query, variables }),\\n          });\\n\\n          const result = await response.json();\\n          \\n          if (collection) {\\n            // Handle collection-specific response structure\\n            if (!result.errors && result.data?.collection?.products) {\\n              const newProducts = result.data.collection.products.edges || [];\\n              handleProductData(newProducts, countryCode, true, cursor);\\n\\n              // Continue pagination if there are more products\\n              const pageInfo = result.data.collection.products.pageInfo;\\n              if (pageInfo.hasNextPage && pageInfo.endCursor) {\\n                await fetchProductsByCountry(countryCode, pageInfo.endCursor, vendor, collection, productType, tag);\\n              } else {\\n                // All products have been fetched, update the metadata\\n                const metadata = {\\n                  totalChunks: Math.ceil(products.length / 50),\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: true\\n                };\\n                sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n              }\\n            } else if (result.errors) {\\n              console.error(\\'Error fetching collection products:\\', result.errors);\\n              window.shopXtools.status = \"error\";\\n            } else if (!result.data?.collection) {\\n              console.error(\\'Collection not found:\\', collection);\\n              window.shopXtools.status = \"ready\";\\n              window.shopXtools.products = [];\\n              window.shopXtools.dispatchEvent(\\'data__products-ready\\', { \\n                products: [],\\n                isInitialLoad: false\\n              });\\n            }\\n          } else {\\n            // Handle regular product query response\\n            if (!result.errors && result.data?.products) {\\n              const newProducts = result.data.products.edges || [];\\n              handleProductData(newProducts, countryCode, true, cursor);\\n\\n              // Continue pagination if there are more products\\n              const pageInfo = result.data.products.pageInfo;\\n              if (pageInfo.hasNextPage && pageInfo.endCursor) {\\n                await fetchProductsByCountry(countryCode, pageInfo.endCursor, vendor, collection, productType, tag);\\n              } else {\\n                // All products have been fetched, update the metadata\\n                const metadata = {\\n                  totalChunks: Math.ceil(products.length / 50),\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: true\\n                };\\n                sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n              }\\n            }\\n          }\\n        } catch (error) {\\n          console.error(\\'Error fetching products:\\', error);\\n          window.shopXtools.status = \"error\";\\n        }\\n      };\\n\\n      // Function to fetch complete product data in the background\\n      const fetchCompleteProductData = async (countryCode, vendor, collection, productType, tag) => {\\n        let cursor = null;\\n        let allProducts = [];\\n\\n        try {\\n            while (true) {\\n                let response;\\n                let variables;\\n                let query;\\n\\n                // Use collection-specific query for collections, matching the main fetch function\\n                if (collection) {\\n                    query = getProductsQueryByCollection;\\n                    variables = {\\n                        countryCode,\\n                        collectionHandle: collection.toLowerCase(),\\n                        ...(cursor && { cursor })\\n                    };\\n                } else {\\n                    // For non-collection filters, use regular query\\n                    query = getProductsQueryByCountry;\\n                    \\n                    // Build query parts\\n                    const queryParts = [];\\n                    if (vendor) queryParts.push(`vendor:${vendor}`);\\n                    if (productType) queryParts.push(`product_type:${productType}`);\\n                    if (tag) queryParts.push(`tag:${tag}`);\\n                    const queryString = queryParts.length > 0 ? queryParts.join(\" AND \") : null;\\n                    \\n                    variables = {\\n                        countryCode,\\n                        cursor,\\n                        ...(queryString && { query: queryString })\\n                    };\\n                }\\n\\n                response = await fetch(`https://${domain.host}/api/2024-07/graphql.json`, {\\n                    method: \"POST\",\\n                    headers: {\\n                        \"Content-Type\": \"application/json\",\\n                        \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n                    },\\n                    body: JSON.stringify({ query, variables }),\\n                });\\n\\n                const result = await response.json();\\n                \\n                if (collection) {\\n                    // Handle collection response structure\\n                    if (!result.errors && result.data?.collection?.products) {\\n                        const newProducts = result.data.collection.products.edges || [];\\n                        allProducts = [...allProducts, ...newProducts];\\n\\n                        // Update data every 500 products or when complete\\n                        if (allProducts.length >= 500 || !result.data.collection.products.pageInfo.hasNextPage) {\\n                            handleProductData(allProducts, countryCode, false, cursor);\\n                            allProducts = [];\\n                        }\\n\\n                        if (!result.data.collection.products.pageInfo.hasNextPage) {\\n                            break;\\n                        }\\n                        cursor = result.data.collection.products.pageInfo.endCursor;\\n                    } else {\\n                        console.error(\\'Error fetching complete collection data:\\', result.errors);\\n                        break;\\n                    }\\n                } else {\\n                    // Handle regular product response\\n                    if (!result.errors && result.data?.products) {\\n                        const newProducts = result.data.products.edges || [];\\n                        allProducts = [...allProducts, ...newProducts];\\n\\n                        // Update data every 500 products or when complete\\n                        if (allProducts.length >= 500 || !result.data.products.pageInfo.hasNextPage) {\\n                            handleProductData(allProducts, countryCode, false, cursor);\\n                            allProducts = [];\\n                        }\\n\\n                        if (!result.data.products.pageInfo.hasNextPage) {\\n                            break;\\n                        }\\n                        cursor = result.data.products.pageInfo.endCursor;\\n                    } else {\\n                        console.error(\\'Error fetching complete product data:\\', result.errors);\\n                        break;\\n                    }\\n                }\\n            }\\n        } catch (error) {\\n            console.error(\\'Error in background data fetch:\\', error);\\n        }\\n      };\\n\\n      // Initialize shopXtools and attach fetchProductsByCountry to it\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.fetchProductsByCountry = fetchProductsByCountry;\\n\\n      setupInitialToolsObject();\\n      configValidation();\\n      setDomainUrl();\\n      \\n  const validateDomainForFreePlan = () => {\\n    if (\"basic\" === \"free\") {\\n      const isFramerSubdomain = domain.host.includes(\\'framer.app\\');\\n      if (isFramerSubdomain) {\\n        console.error(\\'Free plan users can only use a Framer subdomain\\');\\n        return false;\\n      }\\n    }\\n    return true;\\n  };\\n\\n  if (!validateDomainForFreePlan()) {\\n    //console.log(\\'Domain validation failed, products will not be fetched\\');\\n    return;\\n  }\\n\\n      \\n  if (\"basic\" === \"free\") {\\n    // Wait for DOM to be ready\\n    const insertWidget = () => {\\n      const widget = document.createElement(\\'div\\');\\n      widget.innerHTML = `\\n        <div \\n          style=\"\\n            position: fixed;\\n            bottom: 60px;\\n            right: 20px;\\n            border-radius: 10px;\\n            overflow: hidden;\\n            z-index: 999999;\\n            transition: opacity 0.3s ease;\\n            box-shadow:\\n              rgba(0, 0, 0, 0.26) 0px 0.636953px 1.14652px -1.125px, \\n              rgba(0, 0, 0, 0.24) 0px 1.9316px 3.47689px -2.25px, \\n              rgba(0, 0, 0, 0.192) 0px 5.10612px 9.19102px -3.375px, \\n              rgba(0, 0, 0, 0.03) 0px 16px 28.8px -4.5px;\\n            width: 142px;\\n            background: white;\\n          \"\\n          onmouseover=\"this.style.opacity = \\'1\\'\"\\n          onmouseout=\"this.style.opacity = \\'1\\'\"\\n        >\\n          <a \\n            href=\"https://framercommerce.com/?utm_source=framer&utm_medium=badge&utm_campaign=free_tier\" \\n            target=\"_blank\" \\n            style=\"\\n              display: block;\\n              line-height: 0;\\n            \"\\n          >\\n            <img \\n              src=\"https://www.dropbox.com/scl/fi/liuwd84g4nioi6fmu93e1/fc-free-badge.png?rlkey=yearpo3rkxqalq4mtmabujdk4&raw=1\" \\n              alt=\"Framer Commerce\"\\n              width=\"142\"\\n              height=\"36\"\\n              style=\"display: block; width: 100%; height: auto;\"\\n            />\\n          </a>\\n        </div>\\n      `;\\n\\n      // Check if widget already exists\\n      const existingWidget = document.querySelector(\\'[data-framercommerce-widget]\\');\\n      if (!existingWidget) {\\n        widget.setAttribute(\\'data-framercommerce-widget\\', \\'true\\');\\n        document.body.appendChild(widget);\\n      }\\n    };\\n\\n    // If DOM is already loaded\\n    if (document.readyState === \\'complete\\' || document.readyState === \\'interactive\\') {\\n      setTimeout(insertWidget, 1);\\n    } else {\\n      // Wait for DOM to be ready\\n      document.addEventListener(\\'DOMContentLoaded\\', insertWidget);\\n    }\\n\\n    // Backup in case DOMContentLoaded doesn\\'t fire\\n    window.addEventListener(\\'load\\', insertWidget);\\n  }\\n\\n\\n      // Initialize cart from localStorage\\n      const initializeCartFromLocalStorage = () => {\\n        try {\\n          const cartData = localStorage.getItem(\"shopXtools.cart\");\\n          if (cartData) {\\n            const cart = JSON.parse(cartData);\\n            window.shopXtools.cart = cart;\\n            \\n            // If cart has buyerIdentity with countryCode, we\\'ll use it during currency initialization\\n            if (cart.buyerIdentity && cart.buyerIdentity.countryCode) {\\n              // Found country code in stored cart\\n            }\\n          } else {\\n            window.shopXtools.cart = {};\\n          }\\n        } catch (error) {\\n          console.error(\"Error initializing cart from localStorage:\", error);\\n          window.shopXtools.cart = {};\\n        }\\n      };\\n\\n      // Initialize cart before proceeding with other initializations\\n      initializeCartFromLocalStorage();\\n\\n      // Check domain before proceeding with product fetch\\n      if (!validateDomainForFreePlan()) {\\n        window.shopXtools.products = [];\\n        window.shopXtools.status = \"ready\";\\n        window.shopXtools.getProducts = () => null;\\n        return;\\n      }\\n\\n      if (!window.shopXtools || !Array.isArray(window.shopXtools.products)) {\\n        // Initialize currency settings first\\n        initializeCurrencySettings().then(() => {\\n            // Get the stored country code\\n            const storedCountryCode = localStorage.getItem(\"selectedCountryCode\");\\n            if (storedCountryCode) {\\n              // Check for stored filters from other tabs/sessions\\n              let storedFilters;\\n              try {\\n                storedFilters = JSON.parse(sessionStorage.getItem(\\'fc_filters\\') || \\'{}\\');\\n              } catch (error) {\\n                console.error(\\'Error reading stored filters:\\', error);\\n                storedFilters = {};\\n              }\\n              \\n              // Initialize filtering capabilities with stored filters if they exist\\n              window.shopXtools.lastAppliedFilters = {\\n                vendor: storedFilters.vendor || null,\\n                collection: storedFilters.collection || null,\\n                productType: storedFilters.productType || null,\\n                tag: storedFilters.tag || null\\n              };\\n              \\n              // Initialize filtering capabilities\\n              window.shopXtools.getFilteredProducts = (filters = null) => {\\n                if (window.shopXtools.status !== \"ready\") {\\n                  console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n                  return [];\\n                }\\n                \\n                // If filters provided, fetch fresh filtered products\\n                if (filters) {\\n                  const countryCode = localStorage.getItem(\"selectedCountryCode\");\\n                  if (!countryCode) {\\n                    console.error(\"No country code available for product fetch\");\\n                    return [];\\n                  }\\n                  \\n                  // Store filters for future reference\\n                  window.shopXtools.lastAppliedFilters = { \\n                    ...window.shopXtools.lastAppliedFilters,\\n                    ...filters\\n                  };\\n                  \\n                  // Fetch filtered products\\n                  window.shopXtools.fetchProductsByCountry(\\n                    countryCode,\\n                    null,\\n                    filters.vendor || null,\\n                    filters.collection || null,\\n                    filters.productType || null,\\n                    filters.tag || null\\n                  );\\n                  \\n                  // Return null to indicate async operation in progress\\n                  return null;\\n                }\\n                \\n                // If no new filters, but we have existing filters, apply client-side filtering\\n                const existingFilters = window.shopXtools.lastAppliedFilters;\\n                if (existingFilters.vendor || existingFilters.collection || existingFilters.productType || existingFilters.tag) {\\n                  // Get all products\\n                  const allProducts = window.shopXtools.productsWithPrices?.[localStorage.getItem(\"selectedCountryCode\")] || [];\\n                  \\n                  // Apply client-side filtering\\n                  return filterProductsClientSide(allProducts, existingFilters);\\n                }\\n                \\n                // Otherwise return currently loaded products\\n                return window.shopXtools.products;\\n              };\\n              \\n              window.shopXtools.areProductsFiltered = () => {\\n                const filters = window.shopXtools.lastAppliedFilters || {};\\n                return !!(filters.vendor || filters.collection || filters.productType || filters.tag);\\n              };\\n              \\n              window.shopXtools.getFilterInfo = () => {\\n                const filters = window.shopXtools.lastAppliedFilters || {};\\n                const activeFilters = {};\\n                \\n                if (filters.vendor) activeFilters.vendor = filters.vendor;\\n                if (filters.collection) activeFilters.collection = filters.collection;\\n                if (filters.productType) activeFilters.productType = filters.productType;\\n                if (filters.tag) activeFilters.tag = filters.tag;\\n                \\n                const allProductsCount = window.shopXtools.productsWithPrices?.[localStorage.getItem(\"selectedCountryCode\")]?.length || 0;\\n                const filteredProductsCount = window.shopXtools.products?.length || 0;\\n                \\n                return {\\n                  isFiltered: window.shopXtools.areProductsFiltered(),\\n                  activeFilters,\\n                  allProductsCount,\\n                  filteredProductsCount,\\n                  filterRate: allProductsCount ? Math.round((filteredProductsCount / allProductsCount) * 100) : 100\\n                };\\n              };\\n              \\n              window.shopXtools.clearFilters = () => {\\n                window.shopXtools.lastAppliedFilters = {\\n                  vendor: null,\\n                  collection: null,\\n                  productType: null,\\n                  tag: null\\n                };\\n                \\n                const countryCode = localStorage.getItem(\"selectedCountryCode\");\\n                if (!countryCode) {\\n                  console.error(\"No country code available for product fetch\");\\n                  return;\\n                }\\n                \\n                return window.shopXtools.fetchProductsByCountry(countryCode);\\n              };\\n              \\n              // Get filter settings from window.__FcCheckoutConfigs\\n              const fcConfig = window.__FcCheckoutConfigs || {};\\n              let vendor = null;\\n              let collection = null;\\n              let productType = null;\\n              let tag = null;\\n              \\n              // Check if filter settings exist in the config\\n              if (fcConfig.filterByVendor) {\\n                vendor = fcConfig.filterByVendor;\\n              }\\n              \\n              if (fcConfig.filterByCollection) {\\n                collection = fcConfig.filterByCollection;\\n              }\\n              \\n              if (fcConfig.filterByProductType) {\\n                productType = fcConfig.filterByProductType;\\n              }\\n              \\n              if (fcConfig.filterByTags) {\\n                tag = fcConfig.filterByTags;\\n              }\\n              \\n              // Update lastAppliedFilters with any settings we found\\n              window.shopXtools.lastAppliedFilters = {\\n                vendor: vendor,\\n                collection: collection,\\n                productType: productType,\\n                tag: tag\\n              };\\n              \\n              // Then fetch products with the correct country code and filters\\n              fetchProductsByCountry(\\n                storedCountryCode, \\n                null, \\n                vendor, \\n                collection, \\n                productType, \\n                tag\\n              ).catch(error => {\\n                console.error(\\'Error fetching products by country:\\', error);\\n                window.shopXtools.status = \"ready\";\\n              });\\n              \\n            } else {\\n                console.error(\\'No country code available for product fetch\\');\\n            }\\n        }).catch(error => {\\n            console.error(\\'Error during initialization:\\', error);\\n        });\\n      }\\n    \\n      window.__currencyMap = CURRENCIES;\\n      \\n\\n    })();\\n  </script>',customHTMLHeadStart:\"<!-- Plugin: ced618 --> <script>\\n        (function() {\\n          window.__FcCheckoutConfigs = window.__FcCheckoutConfigs || {};\\n          window.__FcCheckoutConfigs = {\\n            ...window.__FcCheckoutConfigs,\\n            checkoutLocale: \\\"en\\\",\\n            defaultCountry: \\\"United States\\\",\\n            defaultCountryCode: \\\"US\\\",\\n            defaultCurrency: \\\"USD\\\",\\n            defaultCurrencySymbol: \\\"$\\\",\\n            metaPixelId: \\\"\\\",\\n            googleAnalyticsId: \\\"\\\"\\n          };\\n\\n          // Store settings in localStorage for persistence!!\\n          const existingLocale = localStorage.getItem('checkoutLocale');\\n          if (existingLocale === null) {\\n            localStorage.setItem('checkoutLocale', 'en');\\n          }\\n          const existingCountry = localStorage.getItem('selectedCountry');\\n          if (existingCountry === null) { \\n            localStorage.setItem('selectedCountry', 'United States');\\n          }\\n          const existingCountryCode = localStorage.getItem('selectedCountryCode');\\n          if (existingCountryCode === null) {\\n            localStorage.setItem('selectedCountryCode', 'US');\\n          }\\n          const existingCurrency = localStorage.getItem('selectedCurrency');\\n          if (existingCurrency === null) {\\n            localStorage.setItem('selectedCurrency', 'USD');\\n          }\\n          const existingCurrencySymbol = localStorage.getItem('selectedCurrencySymbol');\\n          if (existingCurrencySymbol === null) {\\n            localStorage.setItem('selectedCurrencySymbol', '$');\\n          }\\n\\n          // Dispatch checkout settings update event\\n          const checkoutEvent = new CustomEvent('checkout__settings-updated', {\\n            detail: {\\n              previous: { ...window.__FcCheckoutConfigs },\\n              current: window.__FcCheckoutConfigs\\n            }\\n          });\\n          document.dispatchEvent(checkoutEvent);\\n\\n          \\n          \\n        })();</script>\",description:\"Where legacies are built. All things Studio 22 Productions, RANA, and music/events curated by Devante Robinson.\",favicon:\"https://framerusercontent.com/assets/yLGqCOwG1nqp8tkXXPfdtGjdx9k.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/ghmLFmeYypToVCM9YgZDbz0O3us.png\",title:\"HOME | DEVANTE Official Website - Music, Events, and Merchandise\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"kwBAAsG,SAAS,GAAY,EAAE,CAAC,IAAI,EAAQa,EAAE,IAAI,IAAU,EAAS,CAACD,EAAEV,IAAI,CAAC,IAAM,SAAsBU,GAApB,WAAsB,EAAE,EAAE,CAACA,EAAE,GAAG,IAAI,EAAE,CAAC,IAAMA,EAAE,EAA8B,AAA5B,EAAEV,EAAE,EAAE,OAAO,OAAO,CAAE,EAAC,EAAE,EAAE,CAAC,EAAE,QAAS,GAAG,EAAE,EAAEU,EAAE,CAAE,AAAC,CAAC,EAAO,EAAS,IAAI,EAAQ,EAAsB,CAACA,EAAEV,EAAE,EAAS,EAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,6DAA6D,CAAC,IAAIQ,EAAE,EAAE,EAAE,CAAC,SAAS,GAAe,CAAC,IAAMG,EAAE,EAAE,EAAE,CAAC,IAAI,EAAEH,EAAEG,EAAE,CAAC,CAAC,IAAMF,EAAED,EAAE,EAAEA,EAAEG,EAAEF,EAAE,AAAC,CAAC,CAAqB,SAAnB,IAAI,EAAc,CAAO,IAAI,EAAE,OAAO,EAAc,AAAC,EAAO,EAAU,CAACC,EAAED,EAAET,IAAQS,GAAGT,EAAS,EAAsBU,EAAED,EAAET,EAAE,EAAC,EAAE,IAAIU,EAAE,CAAO,IAAI,EAAE,OAAOA,EAAE,EAAQ,EAAQ,IAAI,EAAE,OAAO,CAAO,EAAE,CAAU,WAAkB,WAAmB,YAAkB,SAAQ,EAA0B,OAAzB,EAAE,EAAE,EAAS,EAAS,EAAE,CAAQ,CAAE,CAAqI,SAAS,GAAO,EAAE,CAAC,IAAM,SAAsB,GAApB,WAAsB,GAAY,EAAE,CAAC,EAAQ,EAAS,CAACA,EAAE,EAAE,SAASF,EAAE,OAAO,KAAK,CAAC,GAAK,EAAEO,EAAE,CAAC,EAAG,GAAGL,EAAE,EAAG,EAAE,CAAOI,EAAE,EAAE,UAAU,CAAOF,EAAE,EAAEE,EAAE,CAAO,EAAE,EAAEJ,EAAE,CAAO,EAAE,EAAEF,EAAE,CAAO,EAAE,GAAE,EAAM,CAAO,EAAE,GAAG,CAAC,AAAS,EAAE,cAAN,KAAgB,EAAE,QAAQ,EAAEM,EAAE,EAAE,IAAI,EAAM,GAAE,GAASF,EAAE,UAAUE,GAAG,EAAE,UAAUJ,GAAG,EAAE,UAAUF,GAAG,EAAE,WAAS,EAAE,EAAEM,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAsD,AAArD,IAAI,EAAE,QAAQ,GAAG,EAAE,QAAQA,EAAE,EAAE,QAAQJ,EAAE,EAAE,QAAQF,EAAE,EAAE,SAAQ,CAAM,EAAE,CAAC,IAAM,EAAE,EAAEM,EAAE,CAAC,EAAG,IAAI,CAAC,IAAM,EAAS,IAAI,CAAC,GAAG,CAAC,IAAMJ,EAAE,EAAE,UAAU,CAAOC,EAAE,EAAE,QAAQD,EAAE,CAAC,AAAI,EAAE,QAAQ,EAAE,QAAQC,EAAE,GAAE,EAAE,QAAQD,EAAE,EAAE,QAAQC,EAAE,GAAG,CAAE,MAAQ,CAAgB,AAAf,EAAE,SAAQ,EAAK,GAAG,AAAC,CAAC,EAAOD,EAAE,EAAE,UAAU,EAAS,CAAsC,MAArC,GAAE,UAAU,GAAG,EAAE,SAAS,GAAU,CAAQA,CAAE,EAAE,CAAE,EAAC,CAAC,IAAMM,EAAE,EAAE,EAAE,EAAE,QAAa,MAAL,GAAEA,EAAE,CAAQA,CAAE,EAA4O,MAA3O,QAAO,OAAO,EAAS,EAAE,CAAC,EAAS,OAAO,UAAU,UAAU,CAAC,QAAQ,KAAK,qEAAqE,CAAC,IAAMN,EAAE,CAAC,EAAS,CAAE,EAAC,MAAM,CAAC,MAAM,CAAC,IAAMD,EAAEC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAKD,CAAE,CAAC,CAAC,CAAC,EAAQ,CAAS,oBAAl+BI,IAA96B,GAAsG,CAAitB,GAAuB,aAAS,EAAO,WAAW,8BAA8B,KAAK,EAAO,UAAU,UAAU,CAAOA,EAAE,GAAEH,EAAED,iCCAg6I,IAA1mB,GAAE,OAAO,eAAmB,EAAE,OAAO,sBAA0B,GAAE,OAAO,UAAU,eAAmB,GAAE,OAAO,UAAU,qBAAyB,EAAgB,CAAC,EAAE,EAAED,IAAI,KAAK,EAAE,GAAE,EAAE,EAAE,CAAC,YAAW,EAAK,cAAa,EAAK,UAAS,EAAK,MAAMA,CAAE,EAAC,CAAC,EAAE,GAAGA,EAAM,EAAe,CAAC,EAAE,IAAI,CAAC,IAAI,IAAIA,KAAS,IAAE,CAAE,EAAE,GAAE,KAAK,EAAEA,EAAE,EAAE,EAAgB,EAAEA,EAAE,EAAEA,GAAG,CAAC,GAAG,EAAE,IAAI,IAAIA,IAAK,GAAE,EAAE,CAAC,GAAE,KAAK,EAAEA,EAAE,EAAE,EAAgB,EAAEA,EAAE,EAAEA,GAAG,CAAC,OAAO,CAAE,EAAO,EAAW,GAAG,GAAG,CAAC,GAAG,CAAC,IAAMA,EAAE,EAAE,EAAE,CAAC,OAAOA,aAAa,QAAQA,EAAE,CAAC,KAAKC,EAAE,CAAC,MAAO,GAAWA,EAAE,CAACD,EAAE,AAAC,EAAC,MAAMC,EAAE,CAAC,OAAO,IAAK,CAAC,CAAC,OAAMA,EAAE,CAAC,MAAM,CAAC,KAAKA,EAAE,CAAC,OAAO,IAAK,EAAC,MAAMC,EAAE,CAAC,MAAO,GAAWA,EAAE,CAACD,EAAE,AAAC,CAAC,CAAC,CAAC,EAAO,EAAQ,CAAC,EAAE,IAAI,CAACD,EAAE,EAAEG,IAAI,CAAC,IAAIC,EAAE,EAAe,CAAC,WAAW,IAAI,aAAa,UAAU,KAAK,UAAU,YAAY,KAAK,MAAM,WAAW,GAAGH,EAAE,QAAQ,EAAE,MAAM,CAACA,EAAEC,IAAI,EAAe,EAAe,CAAE,EAACA,EAAE,CAACD,EAAE,AAAC,EAAC,EAAE,CAAC,CAACG,EAAE,WAAWA,EAAE,YAAY,QAAQ,MAAM,MAAMA,EAAE,UAAU,YAAY,YAAY,4GAA4G,CAAC,IAAIC,GAAE,EAAYC,EAAE,IAAI,IAAU,EAAE,IAAI,IAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,YAAY,AAAC,MAAQ,CAAE,KAAI,EAAE,MAAO,GAAG,CAAC,GAAGL,IAAI,CAA6H,AAA5H,QAAQ,MAAM,sDAAsDG,EAAE,KAAK,gDAAgD,CAAC,EAAE,GAAGH,EAAE,AAAC,EAAE,EAAEE,EAAE,CAAC,EAAE,YAAY,QAAQ,MAAM,2DAA2DC,EAAE,KAAK,yEAAyE,CAAC,IAAM,EAAE,EAAWA,EAAE,UAAU,CAAO,EAAQ,IAAI,CAAC,IAAMH,EAAE,EAAE,WAAW,EAAe,CAAE,EAAC,GAAG,CAAC,CAAC,CAA8G,AAA7G,EAAE,WAAW,OAAO,KAAKA,EAAE,CAAC,QAAS,GAAG,CAAC,IAAID,EAAE,CAA+B,CAAtBA,EAAEI,EAAE,YAAoB,SAASF,EAAE,SAAUD,EAAEC,EAAG,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,QAAS,UAAUD,EAAEC,GAAI,CAAC,IAAIA,EAAQF,EAAE,EAAE,CAAC,MAAMC,EAAE,QAAQG,EAAE,OAAQ,EAAC,CAAC,KAAM,GAAG,EAAE,QAAQA,EAAE,KAAKH,EAAE,CAAE,CAAC,MAAO,GAAG,CAAC,EAAEA,CAAE,EAAE,CAAC,GAAGC,EAAE,MAAMA,EAAE,OAAOF,CAAE,EAAOO,EAAEJ,EAAE,SAAS,EAAE,SAAS,CAACF,EAAEC,IAAI,CAAa,AAAZ,EAAED,EAAEC,EAAE,CAAM,GAAS,AAAC,EAAC,IAAMM,EAAE,EAAG,CAAC,GAAGP,IAAI,CAAc,AAAb,EAAE,GAAGA,EAAE,CAAM,GAAS,AAAC,EAAE,EAAEE,EAAE,CAAK,EAAQ,EAAQ,IAAI,CAAC,IAAIF,EAAE,IAAI,EAAE,OAAe,AAAR,GAAE,EAAM,EAAE,QAAS,GAAG,EAAE,GAAG,CAAC,CAAE,CAAC,IAAMC,EAAyC,CAA/BD,EAAEG,EAAE,qBAA6B,KAAKA,EAAE,GAAG,CAAC,MAAQ,GAAE,MAAO,GAAW,EAAE,QAAQ,KAAK,EAAE,CAAC,CAACA,EAAE,KAAK,CAAC,KAAM,GAAG,CAAC,GAAGH,EAAE,MAAO,GAAE,YAAYA,EAAE,AAAC,EAAE,CAAC,KAAM,GAAG,CAAC,GAAGA,EAAE,CAAC,UAAqBA,EAAE,SAApB,UAA6BA,EAAE,UAAUG,EAAE,QAAQ,OAAOH,EAAE,MAAM,GAAGG,EAAE,QAAQ,MAAO,GAAE,QAAQH,EAAE,MAAMA,EAAE,QAAQ,CAAC,QAAQ,MAAM,wFAAwF,AAAC,CAAC,EAAE,CAAC,KAAM,IAAI,EAAE,EAAE,MAAMA,EAAEO,EAAE,CAAC,EAAE,GAAE,EAAK,CAAQ,GAAS,EAAG,CAAC,KAAM,IAAI,CAAmC,AAAnB,AAATN,IAAW,MAAO,GAAE,CAAC,GAAE,EAAK,EAAE,QAAS,GAAG,EAAE,EAAE,CAAE,AAAC,EAAE,CAAC,MAAO,GAAG,CAAC,AAAe,AAATA,QAAgB,GAAED,EAAE,AAAC,EAAE,AAAC,EAA0V,OAAzV,EAAE,QAAQ,CAAC,WAAW,GAAG,CAA0C,AAAzC,EAAE,EAAe,EAAe,CAAE,EAACG,EAAE,CAACH,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,YAAY,CAAE,EAAC,aAAa,IAAI,CAAC,IAAIA,EAAE,CAAOA,EAAQ,GAAW,aAA1B,MAA6C,EAAE,KAAK,EAAEG,EAAE,KAAK,AAAC,EAAC,UAAU,IAAI,GAAS,CAAC,YAAY,IAAIC,EAAE,UAAU,IAAI,EAAE,IAAIJ,EAAE,CAAO,IAAI,CAAC,EAAE,OAAOA,EAAE,AAAC,GAAE,kBAAkB,IAAI,EAAE,IAAIA,EAAE,CAAO,IAAI,CAAC,EAAE,OAAOA,EAAE,AAAC,EAAE,EAAC,GAAS,CAAQ,GAAGO,CAAE,iBCAzjP,CAAC,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAO,IAAI,IAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,IAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,IAAO,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAO,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAO,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAO,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAO,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAO,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAI,ICAxrB,SAAgB,EAAe,EAAG,EAAK,CAAuE,cAA5D,GAAK,SAAuB,EAAG,WAAW,EAAK,CAAS,KAAa,IAAO,IAAvD,EAA6D,UAAgB,GAAiB,EAAY,CAAC,IAAI,EAAa,OAAO,EAAoB,IAAM,EAAW,EAAiB,GAAa,GAAG,EAAY,OAAO,EAAY,GAAG,CAAC,IAAM,EAAK,KAAK,MAAM,EAAY,CAAO,EAAW,CAAC,UAAU,EAAe,EAAK,GAAG,yBAAyB,CAAC,kBAAgB,EAAK,gBAA2B,SAAS,MAAM,QAAQ,EAAK,SAAS,CAAC,EAAK,SAAS,IAAI,IAAU,CAAC,GAAG,EAAQ,GAAG,EAAe,EAAQ,GAAG,gCAAgC,AAAC,GAAE,CAAC,CAAE,CAAC,EAA0C,OAAzC,EAAiB,GAAa,EAAkB,CAAY,OAAM,EAAM,CAAoD,MAAnD,SAAQ,MAAM,8BAA8B,EAAM,CAAQ,CAAoB,CAAC,CAAwV,SAAgB,GAAW,EAAM,EAAM,CAAC,EAAM,MAAM,QAAQ,EAAM,CAAC,EAAM,GAAG,EAAM,IAAI,EAAS,EAAY,EAAM,GAAO,MAAY,EAAO,GAAO,OAA+b,OAArb,GAAO,EAAM,OAAO,IAAQ,GAAO,KAAiS,SAA9Q,EAAM,MAAO,mBAAmB,EAAM,MAAM,UAAW,SAAgC,EAAa,EAAM,CAAC,SAAS,CAAC,GAAG,EAAM,MAAM,SAAS,MAAM,CAAC,GAAG,EAAM,MAAM,SAAS,MAAM,MAAM,CAAC,GAAG,EAAM,MAAM,SAAS,MAAM,MAAM,GAAG,GAAO,CAAC,OAAM,EAAC,GAAG,GAAQ,CAAC,QAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAA6B,EAAa,EAAM,CAAC,MAAM,CAAC,GAAG,EAAM,MAAM,MAAM,GAAG,GAAO,CAAC,OAAM,EAAC,GAAG,GAAQ,CAAC,QAAO,CAAC,CAAC,EAAC,EAAU,CAAU,UAAgB,GAAQ,CAAC,QAAM,WAAS,CAAC,CAAC,MAAoB,GAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,MAAM,OAAO,OAAO,OAAO,aAAa,SAAS,WAAW,SAAS,cAAc,SAAS,IAAI,GAAG,gBAAgB,0BAA0B,aAAa,EAAE,OAAO,+BAA+B,MAAM,oBAAoB,SAAS,GAAG,QAAQ,GAAG,UAAU,IAAI,SAAS,SAAU,EAAC,SAAS,CAAc,EAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,UAAU,QAAS,EAAC,SAAS,CAAM,EAAC,CAAc,EAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,GAAG,WAAW,IAAI,UAAU,QAAS,EAAC,SAAS,CAAS,EAAC,AAAC,CAAC,EAAC,AAAE,CAAwC,SAAgB,GAAmB,CAAC,QAAM,SAAS,aAAW,CAAE,EAAC,SAAO,KAAK,CAAC,CAAE,EAAC,CAAC,MAAM,CAAC,KAAK,EAAY,OAAO,QAAM,SAAO,SAAS,CAAC,GAAG,EAAW,MAAM,CAAC,KAAK,EAAY,KAAK,aAAa,SAAS,QAAQ,CAAC,SAAS,MAAO,EAAC,aAAa,CAAC,aAAa,YAAa,EAAC,yBAAwB,EAAK,0BAA0B,UAAW,EAAC,SAAS,CAAC,KAAK,EAAY,KAAK,aAAa,QAAQ,QAAQ,CAAC,SAAS,OAAQ,EAAC,aAAa,CAAC,SAAS,OAAQ,EAAC,yBAAwB,EAAK,OAAO,GAAO,EAAM,QAAQ,MAAO,EAAC,SAAS,CAAC,KAAK,EAAY,KAAK,aAAa,OAAO,QAAQ,CAAC,OAAO,SAAS,OAAQ,EAAC,aAAa,CAAC,OAAO,eAAe,WAAY,EAAC,yBAAwB,EAAK,0BAA0B,UAAW,EAAC,UAAU,CAAC,KAAK,EAAY,QAAQ,cAAa,CAAK,EAAC,OAAO,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,aAAa,QAAe,WAA2C,GAAnB,EAAU,SAAY,GAAG,YAAY;6BAAoD,OAAO,IAAQ,EAAM,SAAU,CAAC,CAAC,CAAE,UAAgB,GAAe,EAAO,EAAa,EAAQ,CAAC,IAAe,EAAE,IAAM,EAAa,EAAQ,UAAU,OAAO,EAAO,GAAI,EAAE,EAAQ,UAAU,SAAe,EAAS,EAAa,EAAE,EAAM,EAAgB,GAAG,GAAG,EAAQ,kBAAkB,KAAO,IAAY,CAAC,IAAM,EAAO,EAAQ,SAAgB,WAA2C,QAAnB,EAAU,UAAwB,EAAU,IAAI,KAAK,aAAa,EAAO,CAAC,sBAAsB,EAAS,sBAAsB,CAAS,GAAE,EAAgB,EAAU,OAAO,EAAO,AAAE,MAAK,EAAgB,EAAO,QAAQ,EAAS,CAAE,IAAI,GAAc,IAAe,MAAO,OAAO,EAAiB,IAAM,EAAOC,EAAgB,GAA4J,OAA3I,EAAQ,QAAQ,OAAe,EAAQ,WAAW,YAAY,EAAa,GAAG,OAAqB,EAAgB,GAAG,OAA8B,IAAS,GAAoB,UAAgB,GAAqB,EAAQ,EAAa,CAAC,IAAI,IAAU,MAAM,QAAQ,EAAQ,gBAAgB,GAAG,EAAQ,gBAAgB,QAAQ,EAAQ,QAAQ,gBAAiB,MAAM,GAAI,IAAI,EAAc,OAAO,EAAQ,MAAO,OAAO,EAAa,MAApB,CAA2B,IAAI,UAAU,MAAO,GAAQ,gBAAgB,IAAI,GAAQ,EAAO,MAAM,CAAC,KAAK,EAAa,UAAU,CAAC,IAAI,YAAY,MAAO,GAAQ,gBAAgB,IAAI,GAAQ,EAAO,KAAK,EAAa,mBAAmB,EAAO,MAAM,CAAC,KAAK;EAAK,AAAE,QAAO,EAAQ,OAAO,EAAI,UAAgB,GAA6B,EAAU,EAAiB,EAAQ,KAAK,CAAC,IAAM,EAAY,GAAS,YAAY,EAAoB,EAAU,CAAC,GAAG,EAAY,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,YAAY,eAAe,qBAAoB,CAAK,CAAC,EAAC,CAAE,EAAC,GAAG,IAAmB,qBAAqB,MAAW,CAAC,KAAK,EAAY,OAAO,MAAM,IAAI,aAAa,GAAG,qBAAoB,EAAK,OAAO,IAAO,CAAK,CAAC,EAAC,AAAE,gCAAnwF,IAApuG,GAAyD,IAAoD,IAA8C,IAAgI,CAAM,GAAQ,EAAe,EAAa,4CAAuE,AAAC,SAASC,EAAgB,CAAuH,AAAtH,EAAgB,QAAW,yBAAyB,EAAgB,eAAkB,gCAAgC,EAAgB,cAAiB,8BAAgC,EAAoB,KAAgB,CAAE,EAAE,CAAuE,GAAgB,sBAAmC,GAAmB,CAAC,KAAK,SAAS,SAAS,GAAG,OAAO,CAAE,EAA+E,EAAmB,CAAC,UAAU,GAAG,iBAAgB,EAAM,SAAS,CAAE,CAAC,EAAO,EAAiB,CAAE,EAAiwE,GAAQ,YAAY,sBCAr8F,eAAe,EAAiB,EAAM,EAAU,CAAE,EAAC,CAAC,GAAK,CAAC,UAAQ,cAAY,CAAC,GAAkB,CAAC,IAAI,IAAU,EAA8D,MAAjD,SAAQ,KAAK,mCAAmC,CAAQ,QAAS,CAAC,IAAM,EAAS,KAAM,QAAO,UAAU,EAAQ,2BAA2B,CAAC,OAAO,OAAO,QAAQ,CAAC,eAAe,mBAAmB,oCAAoC,CAAY,EAAC,KAAK,KAAK,UAAU,CAAC,QAAM,WAAU,EAAC,AAAC,EAAC,CAAO,EAAM,KAAM,GAAS,MAAM,CAAC,OAAO,EAAM,EAAM,KAAK,IAAM,OAAM,EAAM,CAAsB,MAArB,SAAQ,MAAM,EAAM,CAAQ,IAAM,CAAC,CAyCyR,eAAe,IAAY,CAAC,IAAM,GAAU;MAC9nC,EAAc;;;;;;;;IAQV,EAAK,KAAM,GAAiB,EAAS,CAAC,OAAO,EAAK,EAAK,WAAW,KAAK,IAAM,gBAAe,GAAU,EAAO,CAAC,IAAM,GAAO;MAC/H,EAAc;;;;;;IAMV,EAAU,CAAC,QAAO,EAAO,EAAK,KAAM,GAAiB,EAAM,EAAU,CAAC,OAAO,EAAK,EAAK,KAAK,IAAM,gBAAe,GAAU,EAAO,EAAU,EAAS,CAAC,IAAM,GAAU;MAC1K,EAAc;;;;;;;;;;;;IAYV,EAAU,CAAC,SAAO,MAAM,CAAC,CAAU,WAAS,cAAc,CAAW,CAAA,CAAC,EAAC,GAAG,CAAC,IAAM,EAAK,KAAM,GAAiB,EAAS,EAAU,CAAC,GAAG,GAAM,EAAK,aAAa,WAAW,OAAO,EAAE,CAAC,IAAM,EAAkB,EAAK,aAAa,WAAW,KAAK,GAAG,EAAE,UAAU,qCAAqC,CAAC,GAAG,EAAkB,CAC/T,IAAM,EAAQ,KAAM,KAAY,CAAO,EAAe,CAAC,OAAO,EAAQ,GAAG,MAAM,CAAC,CAAU,WAAS,cAAc,CAAW,CAAA,CAAC,EAAO,EAAU,KAAM,GAAiB,EAAS,EAAe,CAAC,GAAG,GAAW,EAAU,aAAa,WAAW,OAAO,EAAG,KAAM,CAAI,MAAM,EAAU,aAAa,WAAW,IAAI,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAA,CAAG,OAAO,EAAU,aAAa,IAAM,MAAM,CAAI,MAAM,EAAK,aAAa,WAAW,IAAI,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAA,AAAG,QAAO,EAAK,EAAK,aAAa,KAAK,IAAM,OAAM,EAAM,CAAC,MAAM,CAAO,CAAC,gBAAe,GAAe,EAAO,EAAO,CAAC,IAAM,GAAU;MACpjB,EAAc;;;;;;;;IAQV,EAAU,CAAC,SAAO,QAAQ,CAAC,CAAO,CAAC,EAAO,EAAK,KAAM,GAAiB,EAAS,EAAU,CAAC,OAAO,EAAK,EAAK,gBAAgB,KAAK,IAAM,gBAAsB,GAAiB,EAAU,CAAC,IAAM,EAAA;;;;;;;;;;;;;GAa/L,EAAU,CAAC,GAAG,CAAU,EAAC,GAAG,CAAC,IAAM,EAAK,KAAM,GAAiB,EAAM,EAAU,CAAO,EAAmB,CAAE,EAAC,GAAG,EAAM,IAAI,IAAM,KAAQ,EAAK,QAAQ,SAAS,MAAO,EAAmB,EAAK,KAAK,IAAI,EAAK,KAAK,kBAAoB,OAAO,CAAoB,OAAM,EAAM,CAAkD,KAAjD,SAAQ,MAAM,4BAA4B,EAAM,CAAO,CAAO,CAAC,UAAgB,GAAiB,EAAY,CAAC,GAAK,CAAC,YAAU,CAAC,GAAiB,EAAY,CAAM,CAAC,EAAU,EAAa,CAAC,EAAS,CAAE,EAAC,CAAM,CAAC,EAAU,EAAa,CAAC,GAAS,EAAK,CAAsI,MAArI,GAAU,IAAI,CAAoB,AAAnB,GAAa,EAAK,CAAC,GAAiB,EAAU,CAAC,KAAK,GAAO,CAAqB,AAApB,EAAa,EAAM,CAAC,GAAa,EAAM,AAAE,EAAC,AAAE,EAAC,CAAC,CAAU,EAAC,CAAO,CAAC,EAAU,CAAU,CAAE,gBAAe,GAAuB,EAAO,EAAO,EAAS,CAAC,IAAM,GAAU;MAClvB,EAAc;;;;;;;;;;;;IAYV,EAAU,CAAC,SAAO,MAAM,CAAC,CAAC,GAAG,EAAgB,UAAU,CAAA,CAAC,EAAO,EAAK,KAAM,GAAiB,EAAS,EAAU,CAAC,GAAG,GAAM,EAAK,gBAAgB,WAAW,OAAO,EAAG,KAAM,CAAI,MAAM,EAAK,gBAAgB,WAAW,IAAI,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAA,CAAG,OAAO,EAAK,EAAK,gBAAgB,KAAK,IAAM,gBAAsB,GAA0B,EAAU,EAAS,EAAE,CAAC,IAAM,EAAA;;;;;;;;;;;;GAY1W,EAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAU,WAAS,cAAc,CAAW,CAAA,CAAC,CAAC,EAAC,GAAG,CAAC,IAAM,EAAK,KAAM,GAAiB,EAAS,EAAU,CAAC,GAAG,GAAM,EAAK,WAAW,WAAW,OAAO,EAAG,KAAM,CAAI,MAAM,EAAK,WAAW,WAAW,IAAI,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAA,CAAG,OAAO,EAAK,EAAoB,EAAK,WAAW,KAAK,YAAY,CAAC,IAAM,OAAM,EAAM,CAAqD,KAApD,SAAQ,MAAM,+BAA+B,EAAM,CAAO,CAAO,CAAC,UAAgB,GAAkB,CAAC,IAAI,EAAQ,GAAO,EAAY,GAAO,EAAc,GAAO,EAAiB,GAAO,GAAiB,EAAU,GAAU,EAAM,UAAU,SAAW,KAAoB,WAAqB,CAAC,IAAM,EAAS,EAAO,SAAS,SAAe,EAAU,EAAS,SAAS,oBAAoB,CAAC,AAAG,IAAW,GAAU,GACjvB,IAAM,EAAiB,SAAS,cAAc,4BAA4B,CAAC,GAAG,EAAiB,CAAC,IAAM,EAAY,EAAiB,aAAa,UAAU,EAAE,GAAS,EAAc,EAAmB,EAAY,CAAO,EAAa,EAAmB,EAAc,cAAc,EAAc,iBAAiB,CAAwB,AAAvB,EAAU,EAAgB,IAAW,EAAQ,EAAc,SAAS,GAAG,EAAY,EAAc,oBAAoB,GAAG,EAAc,EAAc,eAAe,GAAG,EAAiB,EAAc,kBAAkB,GAAG,EAAiB,EAAc,mBAAkB,EAAQ,KAAI,CAC5kB,IAAM,EAAqB,SAAS,cAAc,yBAAyB,CAAC,GAAG,EAAqB,CAAC,IAAM,EAAY,EAAqB,aAAa,oBAAoB,EAAE,GAAS,EAAc,EAAmB,EAAY,CAAO,EAAa,EAAmB,EAAc,cAAc,EAAc,iBAAiB,CAAwB,AAAvB,EAAU,EAAgB,IAAW,EAAQ,EAAc,SAAS,GAAG,EAAY,EAAc,oBAAoB,GAAG,EAAc,EAAc,eAAe,GAAG,EAAiB,EAAc,kBAAkB,GAAG,EAAiB,EAAc,mBAAkB,EAAQ,KAAI,CAAC,IAAM,EAAmB,SAAS,cAAc,gCAAgC,CAAC,GAAG,EAAmB,CAAC,IAAM,EAAiB,EAAmB,aAAa,sBAAsB,EAAE,GAAS,EAAoB,EAAmB,aAAa,yBAAyB,EAAE,GAAS,EAAa,EAAmB,EAAiB,EAAoB,CAAwB,AAAvB,EAAU,EAAgB,IAAW,EAAQ,EAAmB,aAAa,gBAAgB,EAAE,GAAG,EAAY,EAAmB,aAAa,4BAA4B,EAAE,GAAG,EAAc,EAAiB,EAAiB,EAAsB,CAAC,CAAC,CAAC,MAAK,GAAU,EACnsC,MAAM,CAAC,UAAQ,cAAY,gBAAc,mBAAiB,YAAU,kBAAiB,CAAE,UAAgB,EAAmB,EAAc,EAAiB,CAAC,UAAU,SAAW,KAAoB,WAAsB,OAAO,EAAM,IAAM,EAAS,EAAO,SAAS,SAAe,EAAU,EAAS,SAAS,oBAAoB,CAAO,EAAmB,CAAC,GAAe,IAAI,QAAQ,WAAW,GAAG,CAAO,EAAsB,CAAC,GAAkB,IAAI,QAAQ,WAAW,GAAG,CAAkG,SAA9F,GAAW,IAAW,GAAoB,IAAW,EAAwD,UAAgB,EAAmB,EAAc,CAAC,IAAI,UAAsB,GAAgB,SAAU,MAAM,CAAE,EAAE,GAAG,EAAmB,eAAe,EAAc,CAAE,OAAO,EAAmB,GAAgB,GAAG,CAAC,IAAM,EAAQ,GAA+B,GAAM,GAAc,EAAc,CAAC,CAAC,CAAO,EAAK,KAAK,MAAM,EAAQ,CACx4B,IAAI,UAAa,GAAO,SAAU,MAAM,CAAE,EAAE,IAAM,EAAM,CAAC,eAAe,EAAK,GAAI,SAAS,EAAK,EAAE,GAAG,0BAA0B,EAAK,GAAI,SAAS,EAAK,EAAE,GAAG,wBAAwB,EAAK,GAAI,SAAS,EAAK,EAAE,GAAG,qBAAqB,EAAK,GAAI,SAAS,EAAK,EAAE,GAAG,wBAAwB,EAAK,GAAI,UAAU,EAAK,GAAE,CAAM,EAAyC,OAAxC,EAAmB,GAAe,EAAa,CAAO,MAAY,CAAC,MAAM,CAAE,CAAE,CAAC,UAAS,GAA+B,EAAqB,CAAC,GAAG,CACvc,IAAM,EAAQ,EAAqB,OAAO,EAAQ,EAAa,EAAQ,EAAqB,IAAI,OAAO,EAAE,EAAQ,CAAC,EAClH,MAAO,MAAK,EAAa,AAAE,OAAM,EAAM,CAA+C,MAA9C,SAAQ,MAAM,yBAAyB,EAAM,CAAO,EAAI,CAAC,UAAS,GAAM,EAAI,CAAC,MAAO,GAAI,QAAQ,YAAY,SAAS,EAAK,CAAC,IAAM,EAAS,EAAK,WAAW,EAAE,CAAO,EAAa,EAAK,aAAa,GAAG,EAAK,GAAG,GAAG,MAAO,QAAO,cAAc,EAAS,EAAa,IAAI,GAAG,EAAa,AAAE,EAAC,AAAE,UAAS,GAAc,EAAI,CAAC,MAAO,GAAI,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,AAAE,UAAS,EAAoB,EAAY,CAAC,GAAK,CAAC,mBAAiB,CAAC,GAAkB,CAAC,OAAO,EAAiB,wBAAwB,CAAa,wBApF3gB,IAxCf,IAA4B,KAAwC,IAAsC,IAAwH,CAAM,GAAmB,4BAAkC,EAAmB,CAAE,EAC5S,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCS,EAAa,GAAO,EAAQ,CAAC,EAAI,KAAO,CAAC,OAAO,KAAK,MAAM,CAAE,EAAC,SAAQ,EAAM,MAAM,KAAK,YAAY,KAAK,SAAS,KAAK,eAAe,MAAM,GAAc,IAAQ,CAAI,QAAK,CAAC,MAAM,OAAO,GAAW,GAAI,CAAC,SAAQ,CAAK,EAAC,CAAC,GAAG,CAAC,IAAM,EAAO,GAAK,CAAC,OAAO,GAAG,EAAO,CAAC,IAAM,EAAK,KAAM,IAAU,EAAO,CAAC,EAAI,CAAC,MAAM,EAAK,MAAM,MAAM,IAAI,GAAM,EAAK,KAAK,CAAC,YAAY,EAAoB,EAAK,YAAY,CAAC,SAAS,EAAK,KAAK,eAAe,SAAQ,CAAM,EAAC,AAAE,SAAQ,EAAc,CAAC,IAAM,EAAQ,KAAM,KAAY,CAAC,EAAI,CAAC,OAAO,EAAQ,GAAG,MAAM,CAAE,EAAC,YAAY,EAAoB,EAAQ,YAAY,CAAC,SAAS,EAAQ,KAAK,eAAe,SAAQ,CAAM,EAAC,AAAE,CAAC,OAAM,EAAM,CAAC,EAAI,CAAC,MAAM,EAAM,QAAQ,SAAQ,CAAM,EAAC,AAAE,CAA9d,CAA+d,EAAC,UAAU,MAAM,EAAU,IAAW,CAAC,EAAI,CAAC,SAAQ,CAAK,EAAC,CAAC,GAAG,CAC9vB,AAAI,GAAK,CAAC,QAAQ,KAAM,IAAK,CAAC,gBAAe,EAAK,CAAE,IAAM,EAAO,GAAK,CAAC,OAAa,EAAY,KAAM,IAAU,EAAO,EAAU,EAAS,CAAC,EAAI,CAAC,MAAM,EAAY,MAAM,MAAM,IAAI,GAAM,EAAK,KAAK,CAAC,SAAS,EAAY,KAAK,eAAe,SAAQ,CAAM,EAAC,AAAE,OAAM,EAAM,CAAC,EAAI,CAAC,MAAM,EAAM,QAAQ,SAAQ,CAAM,EAAC,AAAE,CAAC,EAAC,eAAe,MAAM,GAAQ,CAAC,EAAI,CAAC,SAAQ,CAAK,EAAC,CAAC,GAAG,CAAC,IAAM,EAAO,GAAK,CAAC,OAAa,EAAY,KAAM,IAAe,EAAO,EAAO,CAAC,EAAI,CAAC,MAAM,EAAY,MAAM,MAAM,IAAI,GAAM,EAAK,KAAK,CAAC,SAAS,EAAY,KAAK,eAAe,SAAQ,CAAM,EAAC,AAAE,OAAM,EAAM,CAAC,EAAI,CAAC,MAAM,EAAM,QAAQ,SAAQ,CAAM,EAAC,AAAE,CAAC,EAAC,oBAAoB,MAAM,EAAO,IAAW,CAAC,EAAI,CAAC,SAAQ,CAAK,EAAC,CAAC,GAAG,CAAC,IAAM,EAAO,GAAK,CAAC,OAAa,EAAY,KAAM,IAAuB,EAAO,EAAO,EAAS,CAAC,EAAI,CAAC,MAAM,EAAY,MAAM,MAAM,IAAI,GAAM,EAAK,KAAK,CAAC,SAAS,EAAY,KAAK,eAAe,SAAQ,CAAM,EAAC,AAAE,OAAM,EAAM,CAAC,EAAI,CAAC,MAAM,EAAM,QAAQ,SAAQ,CAAM,EAAC,AAAE,CAAC,EAAC,eAAe,IAAY,GAAK,CAAC,aAAa,GAAK,WAAW,IAAI,EAAI,CAAC,MAAM,IAAK,EAAC,AAAC,GAAE,CAAC,KAAK,GAAmB,WAAW,IAAQ,CAAC,OAAO,EAAM,MAAO,EAAE,EAAC,CAAC,8DC9BzzB,AAV9R,GAAyD,IAA8K,KAAkE,IAA4B,CAAgC,GAAyC,GAA0B,GAAO,EAAO,IAAI,CAAC,CAAO,GAAkB,eAAqB,GAAkB,CAAC,UAAU,iBAAkB,EAA8L,GAAY,CAAC,OAAO,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,QAAS,EAAO,GAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,QAAS,EAAO,GAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAY,EAAE,EAAE,EAAE,CAAE,EAAO,GAAW,CAAC,QAAQ,KAAK,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAG,EAAO,GAAY,CAAC,OAAO,IAAI,MAAM,EAAE,SAAS,IAAI,KAAK,QAAS,EAAO,EAAW,CAAC,QAAQ,IAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAY,EAAO,GAAW,CAAC,CAAC,QAAM,WAAS,GAAG,CAAC,IAAM,EAAO,EAAiB,EAAoB,CAAO,EAAW,GAAO,EAAO,WAAiB,EAAa,EAAc,KAAK,CAAC,GAAG,EAAO,YAAW,GAAE,CAAC,KAAK,UAAU,EAAW,AAAC,EAAC,CAAC,MAAoB,GAAK,EAAoB,SAAS,CAAC,MAAM,EAAsB,UAAS,EAAC,AAAE,EAAO,GAAS,EAAO,OAAA,EAAsB,CAAO,GAAS,CAAC,CAAC,SAAO,KAAG,OAAK,QAAM,GAAG,EAAM,IAAU,CAAC,GAAG,EAAM,UAAU,GAAM,EAAM,SAAU,GAAS,GAAuB,CAAC,EAAM,IAAe,EAAM,iBAAwB,EAAS,KAAK,IAAI,CAAC,EAAM,iBAAwB,EAAS,KAAK,IAAI,CAAS,GAAuB,EAAiB,SAAS,EAAM,EAAI,CAAC,IAAM,EAAY,EAAO,KAAK,CAAO,EAAW,GAAK,EAAkB,EAAgB,GAAa,CAAM,CAAC,eAAa,YAAU,CAAC,IAAe,CAAO,EAAkB,IAAsB,CAAM,CAAC,QAAM,YAAU,WAAS,UAAQ,YAAU,GAAG,EAAU,CAAC,GAAS,EAAM,CAAM,CAAC,cAAY,aAAW,sBAAoB,kBAAgB,kBAAe,YAAU,mBAAgB,cAAW,WAAS,CAAC,GAAgB,CAAC,eAAe,YAAY,IAAI,EAAW,UAAQ,oBAAkB,EAAC,CAAO,EAAiB,GAAuB,EAAM,EAAS,CAAO,GAAsB,CAAE,EAAO,GAAkB,EAAG,GAAkB,GAAG,GAAsB,CAAC,MAAoB,GAAK,GAAY,CAAC,GAAG,GAAU,EAAgB,SAAsB,EAAK,GAAS,CAAC,QAAQ,EAAS,SAAQ,EAAM,SAAsB,EAAK,GAAW,CAAC,MAAM,GAAY,SAAsB,EAAK,EAAO,IAAI,CAAC,GAAG,EAAU,GAAG,EAAgB,UAAU,EAAG,GAAkB,gBAAgB,EAAU,EAAW,CAAC,mBAAmB,YAA6B,mBAAiB,SAAS,YAAY,IAAI,EAAW,MAAM,CAAC,GAAG,CAAM,EAAC,SAAsB,EAAM,GAAyC,CAAC,iBAAgB,EAAM,oBAAmB,EAAK,gBAAgB,EAAE,QAAQ,GAAU,UAAU,gBAAgB,eAAc,EAAK,wBAAwB,SAAS,QAAQ,GAA4B,mBAAiB,SAAS,YAAY,WAAU,EAAK,MAAM,CAAC,wBAAwB,MAAM,iBAAiB,sBAAsB,sBAAsB,MAAM,uBAAuB,MAAM,iBAAiB,QAAQ,qBAAqB,MAAM,eAAe,YAAY,gBAAgB,qBAAqB,uBAAuB,GAAG,wBAAwB,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,UAAU,uCAAuC,qBAAqB,WAAY,EAAC,SAAS,CAAc,EAAK,EAAK,CAAC,KAAK,eAAe,aAAY,EAAK,OAAO,YAAY,cAAa,EAAK,QAAQ,YAAY,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,gCAAiD,mBAAiB,SAAS,YAAY,SAAsB,EAAK,GAAI,CAAC,UAAU,gBAAgB,mBAAmB,OAAO,OAAO,WAA4B,mBAAiB,SAAS,YAAY,QAAQ,EAAE,IAAI,2hKAA2hK,aAAa,YAAY,oBAAmB,CAAK,EAAC,AAAC,EAAC,AAAC,EAAC,CAAc,EAAM,EAAO,IAAI,CAAC,UAAU,iBAAkC,mBAAiB,SAAS,YAAY,SAAS,CAAc,EAAK,EAAS,CAAC,uBAAsB,EAAK,SAAsB,EAAA,EAAoB,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,MAAM,CAAC,kBAAkB,uBAAuB,uBAAuB,2CAA2C,uBAAuB,MAAM,uBAAuB,QAAQ,0BAA0B,OAAO,0BAA0B,WAAY,EAAC,SAAS,6BAA8B,EAAC,AAAC,EAAC,CAAC,UAAU,gBAAgB,MAAM,CAAC,iBAAkB,EAAkB,mBAAiB,SAAS,YAAY,MAAM,CAAC,2BAA2B,mBAAmB,gCAAgC,WAAY,EAAC,kBAAkB,MAAM,oBAAmB,CAAK,EAAC,CAAc,EAAK,EAAS,CAAC,uBAAsB,EAAK,SAAsB,EAAA,EAAoB,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,MAAM,CAAC,kBAAkB,mBAAmB,uBAAuB,2CAA2C,qBAAqB,OAAO,uBAAuB,MAAM,0BAA0B,OAAO,sBAAsB,6CAA8C,EAAC,SAAS,6CAA8C,EAAC,AAAC,EAAC,CAAC,UAAU,iBAAiB,MAAM,CAAC,cAAe,EAAkB,mBAAiB,SAAS,YAAY,MAAM,CAAC,qBAAqB,qBAAqB,2BAA2B,mBAAmB,gCAAgC,WAAY,EAAC,kBAAkB,MAAM,oBAAmB,CAAK,EAAC,AAAC,CAAC,EAAC,CAAc,EAAK,EAAK,CAAC,KAAK,EAAU,aAAY,EAAK,OAAO,YAAY,cAAa,EAAK,QAAQ,YAAY,SAAsB,EAAK,EAAO,EAAE,CAAC,UAAU,gCAAiD,mBAAiB,SAAS,YAAY,MAAM,CAAC,gBAAgB,mBAAmB,uBAAuB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,qBAAqB,CAAE,EAAC,WAAW,EAAW,SAAsB,EAAK,EAAS,CAAC,uBAAsB,EAAK,SAAsB,EAAA,EAAoB,CAAC,SAAsB,EAAK,EAAO,EAAE,CAAC,MAAM,CAAC,kBAAkB,uBAAuB,uBAAuB,2CAA2C,qBAAqB,OAAO,uBAAuB,MAAM,uBAAuB,MAAM,0BAA0B,SAAS,sBAAsB,8CAA8C,0BAA0B,WAAY,EAAC,SAAS,SAAU,EAAC,AAAC,EAAC,CAAC,UAAU,iBAAiB,MAAM,CAAC,iBAAkB,EAAkB,mBAAiB,SAAS,YAAY,MAAM,CAAC,qBAAqB,qBAAqB,2BAA2B,mBAAmB,gCAAgC,WAAY,EAAC,kBAAkB,MAAM,oBAAmB,CAAK,EAAC,AAAC,EAAC,AAAC,EAAC,AAAC,CAAC,EAAC,AAAC,EAAC,AAAC,EAAC,AAAC,EAAC,AAAC,EAAC,AAAE,EAAC,CAAO,GAAI,CAAC,kFAAkF,kFAAkF,wQAAwQ,gVAAgV,kTAAkT,+FAA+F,0RAA0R,gOAAgO,sXAAsX,iHAAiH,muCAAmuC,+bAAgc,EAUprf,EAAgB,GAAQ,GAAU,GAAI,eAAe,IAAgB,EAAgB,EAAgB,YAAY,2BAA2B,EAAgB,aAAa,CAAC,OAAO,GAAG,MAAM,GAAI,EAAC,EAAoB,EAAgB,CAAC,UAAU,CAAC,MAAM,OAAO,KAAK,EAAY,IAAK,CAAC,EAAC,CAAC,GAAS,EAAgB,CAAC,CAAC,eAAc,EAAK,MAAM,CAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,0EAA0E,IAAI,yEAAyE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,wDAAwD,IAAI,yEAAyE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,uGAAuG,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,6JAA6J,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,oGAAoG,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,0EAA0E,IAAI,uEAAuE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,wDAAwD,IAAI,yEAAyE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,cAAc,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,uGAAuG,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,6JAA6J,IAAI,wEAAwE,OAAO,KAAM,EAAC,CAAC,OAAO,QAAQ,OAAO,SAAS,MAAM,SAAS,aAAa,oGAAoG,IAAI,uEAAuE,OAAO,KAAM,CAAC,CAAE,CAAA,EAAC,CAAC,8BAA6B,CAAK,EAAC,GCPx7G,SAAwB,EAAU,EAAM,CAAC,IAAM,EAAS,GAAa,SAAS,GAAG,GAAa,OAAY,CAAC,EAAgB,EAAmB,CAAC,EAAS,KAAK,CAAO,EAAe,EAAa,GAAO,EAAM,eAAe,CAAC,EAAU,IAAI,CAAC,KAAkB,AAAE,EAAC,CAAE,EAAC,CAAC,IAAM,EAAW,CAAE,EAAK,EAAc,GAAO,EAAiB,GAAG,GAAG,EAAM,cAAc,CAAC,EAAW,qBAAqB,EAAM,cAAc,IAAM,EAAc,EAAmB,EAAM,cAAc,CAA2C,AAA1C,EAAc,EAAc,cAAc,EAAiB,EAAc,gBAAkB,MAAsZ,AAAjZ,EAAW,6BAA4B,EAAQ,EAAM,UAAS,EAAW,iBAAiB,EAAM,SAAY,EAAM,qBAAoB,EAAW,6BAA6B,EAAM,oBAAuB,EAAM,mBAAkB,EAAW,0BAA0B,EAAM,kBAAqB,EAAM,gBAAe,EAAW,uBAAuB,EAAM,eAAe,EAAc,EAAM,cAAc,EAAiB,EAAM,qBAAwB,EAAU,EAAmB,EAAc,EAAiB,CAAwM,MAAvM,GAAU,IAAI,CAAC,IAAI,EAAS,CAAC,IAAM,EAAU,SAAS,cAAc,MAAM,CAAoE,MAAnE,UAAS,KAAK,YAAY,EAAU,CAAC,EAAmB,EAAU,CAAO,IAAI,CAAC,SAAS,KAAK,YAAY,EAAU,AAAE,CAAE,CAAC,EAAC,CAAE,EAAC,CAAqB,EAAK,MAAM,CAAC,GAAG,EAAW,UAAU,GAAU,IAAkB,GAAwB,EAA0B,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,QAAQ,KAAK,GAAG,OAAO,EAAG,EAAC,SAAsB,EAAKC,GAAuB,CAAC,KAAK,CAAa,EAAC,AAAC,EAAC,CAAC,EAAgB,AAAC,EAAC,AAAE,eAA4C,AAJ3jD,GAA2C,IAAiE,IAAoC,IAAsC,KAAwJ,IAAoH,KAAiI,CAI48B,EAAU,YAAY,sBAAsB,EAAoB,EAAU,CAAC,cAAc,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,qBAAoB,EAAK,OAAO,KAAI,CAAK,EAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,MAAM,WAAW,qBAAoB,EAAK,OAAO,KAAI,CAAK,EAAC,mBAAmB,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,qBAAoB,EAAK,OAAO,KAAI,CAAK,EAAC,iBAAiB,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,qBAAoB,EAAK,OAAO,KAAI,CAAK,EAAC,cAAc,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,qBAAoB,EAAK,OAAO,KAAI,CAAK,EAAC,KAAK,CAAC,KAAK,EAAY,KAAK,QAAQ,CAAC,WAAY,EAAC,yBAAwB,EAAK,YAAY;;iFAAsH,CAAC,EAAC,GCHryE,SAAwB,GAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAAk4jF,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAAu8D,YAAY,kHAAkH,QAAQ,uEAAuE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,kEAAmE,CAAE"}