{"version":3,"file":"storeLocator-BQlZZPIn.js","sources":["../../../node_modules/@googlemaps/js-api-loader/dist/index.esm.js","../../../app/javascript/api/physicalStoreLocations.js","../../../app/javascript/images/default-map-marker.svg?url","../../../app/javascript/images/selected-map-marker.svg?url","../../../app/javascript/modules/storeLocator.js"],"sourcesContent":["// do not edit .js files directly - edit src/index.jst\n\n\n\nvar fastDeepEqual = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n\n/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at.\n *\n *      Http://www.apache.org/licenses/LICENSE-2.0.\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ID = \"__googleMapsScriptId\";\n/**\n * The status of the [[Loader]].\n */\nvar LoaderStatus;\n(function (LoaderStatus) {\n    LoaderStatus[LoaderStatus[\"INITIALIZED\"] = 0] = \"INITIALIZED\";\n    LoaderStatus[LoaderStatus[\"LOADING\"] = 1] = \"LOADING\";\n    LoaderStatus[LoaderStatus[\"SUCCESS\"] = 2] = \"SUCCESS\";\n    LoaderStatus[LoaderStatus[\"FAILURE\"] = 3] = \"FAILURE\";\n})(LoaderStatus || (LoaderStatus = {}));\n/**\n * [[Loader]] makes it easier to add Google Maps JavaScript API to your application\n * dynamically using\n * [Promises](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n * It works by dynamically creating and appending a script node to the the\n * document head and wrapping the callback function so as to return a promise.\n *\n * ```\n * const loader = new Loader({\n *   apiKey: \"\",\n *   version: \"weekly\",\n *   libraries: [\"places\"]\n * });\n *\n * loader.load().then((google) => {\n *   const map = new google.maps.Map(...)\n * })\n * ```\n */\nclass Loader {\n    /**\n     * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set\n     * using this library, instead the defaults are set by the Google Maps\n     * JavaScript API server.\n     *\n     * ```\n     * const loader = Loader({apiKey, version: 'weekly', libraries: ['places']});\n     * ```\n     */\n    constructor({ apiKey, authReferrerPolicy, channel, client, id = DEFAULT_ID, language, libraries = [], mapIds, nonce, region, retries = 3, url = \"https://maps.googleapis.com/maps/api/js\", version, }) {\n        this.CALLBACK = \"__googleMapsCallback\";\n        this.callbacks = [];\n        this.done = false;\n        this.loading = false;\n        this.errors = [];\n        this.apiKey = apiKey;\n        this.authReferrerPolicy = authReferrerPolicy;\n        this.channel = channel;\n        this.client = client;\n        this.id = id || DEFAULT_ID; // Do not allow empty string\n        this.language = language;\n        this.libraries = libraries;\n        this.mapIds = mapIds;\n        this.nonce = nonce;\n        this.region = region;\n        this.retries = retries;\n        this.url = url;\n        this.version = version;\n        if (Loader.instance) {\n            if (!fastDeepEqual(this.options, Loader.instance.options)) {\n                throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);\n            }\n            return Loader.instance;\n        }\n        Loader.instance = this;\n    }\n    get options() {\n        return {\n            version: this.version,\n            apiKey: this.apiKey,\n            channel: this.channel,\n            client: this.client,\n            id: this.id,\n            libraries: this.libraries,\n            language: this.language,\n            region: this.region,\n            mapIds: this.mapIds,\n            nonce: this.nonce,\n            url: this.url,\n            authReferrerPolicy: this.authReferrerPolicy,\n        };\n    }\n    get status() {\n        if (this.errors.length) {\n            return LoaderStatus.FAILURE;\n        }\n        if (this.done) {\n            return LoaderStatus.SUCCESS;\n        }\n        if (this.loading) {\n            return LoaderStatus.LOADING;\n        }\n        return LoaderStatus.INITIALIZED;\n    }\n    get failed() {\n        return this.done && !this.loading && this.errors.length >= this.retries + 1;\n    }\n    /**\n     * CreateUrl returns the Google Maps JavaScript API script url given the [[LoaderOptions]].\n     *\n     * @ignore\n     */\n    createUrl() {\n        let url = this.url;\n        url += `?callback=${this.CALLBACK}`;\n        if (this.apiKey) {\n            url += `&key=${this.apiKey}`;\n        }\n        if (this.channel) {\n            url += `&channel=${this.channel}`;\n        }\n        if (this.client) {\n            url += `&client=${this.client}`;\n        }\n        if (this.libraries.length > 0) {\n            url += `&libraries=${this.libraries.join(\",\")}`;\n        }\n        if (this.language) {\n            url += `&language=${this.language}`;\n        }\n        if (this.region) {\n            url += `&region=${this.region}`;\n        }\n        if (this.version) {\n            url += `&v=${this.version}`;\n        }\n        if (this.mapIds) {\n            url += `&map_ids=${this.mapIds.join(\",\")}`;\n        }\n        if (this.authReferrerPolicy) {\n            url += `&auth_referrer_policy=${this.authReferrerPolicy}`;\n        }\n        return url;\n    }\n    deleteScript() {\n        const script = document.getElementById(this.id);\n        if (script) {\n            script.remove();\n        }\n    }\n    /**\n     * Load the Google Maps JavaScript API script and return a Promise.\n     */\n    load() {\n        return this.loadPromise();\n    }\n    /**\n     * Load the Google Maps JavaScript API script and return a Promise.\n     *\n     * @ignore\n     */\n    loadPromise() {\n        return new Promise((resolve, reject) => {\n            this.loadCallback((err) => {\n                if (!err) {\n                    resolve(window.google);\n                }\n                else {\n                    reject(err.error);\n                }\n            });\n        });\n    }\n    /**\n     * Load the Google Maps JavaScript API script with a callback.\n     */\n    loadCallback(fn) {\n        this.callbacks.push(fn);\n        this.execute();\n    }\n    /**\n     * Set the script on document.\n     */\n    setScript() {\n        if (document.getElementById(this.id)) {\n            // TODO wrap onerror callback for cases where the script was loaded elsewhere\n            this.callback();\n            return;\n        }\n        const url = this.createUrl();\n        const script = document.createElement(\"script\");\n        script.id = this.id;\n        script.type = \"text/javascript\";\n        script.src = url;\n        script.onerror = this.loadErrorCallback.bind(this);\n        script.defer = true;\n        script.async = true;\n        if (this.nonce) {\n            script.nonce = this.nonce;\n        }\n        document.head.appendChild(script);\n    }\n    /**\n     * Reset the loader state.\n     */\n    reset() {\n        this.deleteScript();\n        this.done = false;\n        this.loading = false;\n        this.errors = [];\n        this.onerrorEvent = null;\n    }\n    resetIfRetryingFailed() {\n        if (this.failed) {\n            this.reset();\n        }\n    }\n    loadErrorCallback(e) {\n        this.errors.push(e);\n        if (this.errors.length <= this.retries) {\n            const delay = this.errors.length * Math.pow(2, this.errors.length);\n            console.log(`Failed to load Google Maps script, retrying in ${delay} ms.`);\n            setTimeout(() => {\n                this.deleteScript();\n                this.setScript();\n            }, delay);\n        }\n        else {\n            this.onerrorEvent = e;\n            this.callback();\n        }\n    }\n    setCallback() {\n        window.__googleMapsCallback = this.callback.bind(this);\n    }\n    callback() {\n        this.done = true;\n        this.loading = false;\n        this.callbacks.forEach((cb) => {\n            cb(this.onerrorEvent);\n        });\n        this.callbacks = [];\n    }\n    execute() {\n        this.resetIfRetryingFailed();\n        if (this.done) {\n            this.callback();\n        }\n        else {\n            // short circuit and warn if google.maps is already loaded\n            if (window.google && window.google.maps && window.google.maps.version) {\n                console.warn(\"Google Maps already loaded outside @googlemaps/js-api-loader.\" +\n                    \"This may result in undesirable behavior as options and script parameters may not match.\");\n                this.callback();\n                return;\n            }\n            if (this.loading) ;\n            else {\n                this.loading = true;\n                this.setCallback();\n                this.setScript();\n            }\n        }\n    }\n}\n\nexport { DEFAULT_ID, Loader, LoaderStatus };\n//# sourceMappingURL=index.esm.js.map\n","import api from \"./index\";\n\nexport default {\n  async index() {\n    return api.get(\"/physical_store_locations.json\");\n  }\n};\n","export default \"data:image/svg+xml,%3csvg%20width='48'%20height='48'%20viewBox='0%200%2048%2048'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='19'%20y='15'%20width='11'%20height='11'%20fill='white'/%3e%3cellipse%20cx='24'%20cy='43'%20rx='15'%20ry='4'%20fill='url(%23paint0_radial_670_70655)'/%3e%3cpath%20d='M24.0044%2022.7693C24.763%2022.7693%2025.4134%2022.4966%2025.9557%2021.9514C26.4981%2021.4061%2026.7693%2020.7542%2026.7693%2019.9956C26.7693%2019.237%2026.4966%2018.5866%2025.9513%2018.0443C25.4061%2017.5019%2024.7542%2017.2308%2023.9956%2017.2308C23.237%2017.2308%2022.5866%2017.5034%2022.0443%2018.0487C21.5019%2018.5939%2021.2307%2019.2459%2021.2307%2020.0045C21.2307%2020.763%2021.5034%2021.4135%2022.0486%2021.9558C22.5939%2022.4981%2023.2458%2022.7693%2024.0044%2022.7693ZM24%2043.2308C18.941%2038.741%2015.1763%2034.5763%2012.7058%2030.7366C10.2353%2026.8968%209%2023.4513%209%2020.4C9%2015.7077%2010.5122%2011.968%2013.5365%209.18075C16.5609%206.39358%2020.0487%205%2024%205C27.9513%205%2031.4391%206.39358%2034.4634%209.18075C37.4878%2011.968%2039%2015.7077%2039%2020.4C39%2023.4513%2037.7648%2026.8968%2035.2943%2030.7366C32.8237%2034.5763%2029.059%2038.741%2024%2043.2308Z'%20fill='%231E2525'/%3e%3cdefs%3e%3cradialGradient%20id='paint0_radial_670_70655'%20cx='0'%20cy='0'%20r='1'%20gradientUnits='userSpaceOnUse'%20gradientTransform='translate(24%2043)%20rotate(90)%20scale(4%2015)'%3e%3cstop%20stop-color='%231E2525'%20stop-opacity='0.6'/%3e%3cstop%20offset='1'%20stop-color='%231E2525'%20stop-opacity='0'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='96'%20height='96'%20viewBox='0%200%2096%2096'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20x='40'%20y='33'%20width='17'%20height='17'%20fill='white'/%3e%3cellipse%20cx='48'%20cy='86'%20rx='30'%20ry='8'%20fill='url(%23paint0_radial_670_70654)'/%3e%3cpath%20d='M48.0089%2045.5385C49.526%2045.5385%2050.8269%2044.9932%2051.9115%2043.9027C52.9962%2042.8122%2053.5385%2041.5083%2053.5385%2039.9911C53.5385%2038.474%2052.9932%2037.1731%2051.9027%2036.0885C50.8122%2035.0038%2049.5083%2034.4615%2047.9911%2034.4615C46.474%2034.4615%2045.1731%2035.0068%2044.0885%2036.0973C43.0038%2037.1878%2042.4615%2038.4917%2042.4615%2040.0089C42.4615%2041.526%2043.0068%2042.8269%2044.0973%2043.9115C45.1878%2044.9962%2046.4917%2045.5385%2048.0089%2045.5385ZM48%2086.4615C37.8821%2077.482%2030.3526%2069.1526%2025.4115%2061.4731C20.4705%2053.7936%2018%2046.9026%2018%2040.8C18%2031.4154%2021.0244%2023.9359%2027.0731%2018.3615C33.1218%2012.7872%2040.0974%2010%2048%2010C55.9026%2010%2062.8782%2012.7872%2068.9269%2018.3615C74.9756%2023.9359%2078%2031.4154%2078%2040.8C78%2046.9026%2075.5295%2053.7936%2070.5885%2061.4731C65.6474%2069.1526%2058.1179%2077.482%2048%2086.4615Z'%20fill='%23FFA359'/%3e%3cdefs%3e%3cradialGradient%20id='paint0_radial_670_70654'%20cx='0'%20cy='0'%20r='1'%20gradientUnits='userSpaceOnUse'%20gradientTransform='translate(48%2086)%20rotate(90)%20scale(8%2030)'%3e%3cstop%20stop-color='%231E2525'%20stop-opacity='0.6'/%3e%3cstop%20offset='1'%20stop-color='%231E2525'%20stop-opacity='0'/%3e%3c/radialGradient%3e%3c/defs%3e%3c/svg%3e\"","import { Loader } from \"@googlemaps/js-api-loader\";\nimport physicalStoreLocations from \"@/app/javascript/api/physicalStoreLocations\";\n// eslint-disable-next-line import/no-unresolved\nimport defaultMapMarker from \"@/app/javascript/images/default-map-marker.svg?url\";\n// eslint-disable-next-line import/no-unresolved\nimport selectedMapMarker from \"@/app/javascript/images/selected-map-marker.svg?url\";\n\nconst loader = new Loader({\n  apiKey: \"AIzaSyD_nKH1eEz2LeuMNUtpicgwezUveBV-5-8\",\n  version: \"weekly\",\n  libraries: [\"places\"]\n});\n\nconst isNorthAmericanStore =\n  window.location.pathname.includes(\"/us\") ||\n  window.location.pathname.includes(\"/ca\");\n\nconst centerCoordinates = isNorthAmericanStore\n  ? {\n      lat: 39.8097343,\n      lng: -98.5556199\n    }\n  : {\n      lat: 54.5180406,\n      lng: -3.9196445\n    };\n\nfunction getMapZoom(isUs, width) {\n  if (isUs) {\n    return width <= 992 ? 3 : 4;\n  }\n  return width <= 992 ? 5 : 6;\n}\n\nconst mapZoom = getMapZoom(isNorthAmericanStore, window.innerWidth);\n\nconst mapOptions = {\n  center: centerCoordinates,\n  zoom: mapZoom,\n  mapId: \"5af85df0fd86f05e\",\n  disableDefaultUI: true,\n  zoomControl: true\n};\n\nfunction calculateHaversineDistance(lat1, lon1, lat2, lon2) {\n  const R = 6371; // Radius of the earth in km\n  const dLat = ((lat2 - lat1) * Math.PI) / 180;\n  const dLon = ((lon2 - lon1) * Math.PI) / 180;\n  const a =\n    Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n    Math.cos((lat1 * Math.PI) / 180) *\n      Math.cos((lat2 * Math.PI) / 180) *\n      Math.sin(dLon / 2) *\n      Math.sin(dLon / 2);\n  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n  const d = R * c; // Distance in km\n  return d;\n}\n\nasync function calculateDistances(data, origin) {\n  const estimatedDistances = [];\n  const stores = [];\n\n  data.forEach(store => {\n    const storeLoc = store.getGeometry().get();\n    const storeNum = store.getId();\n    const estDistance = calculateHaversineDistance(\n      origin.lat(),\n      origin.lng(),\n      storeLoc.lat(),\n      storeLoc.lng()\n    );\n    estimatedDistances.push({\n      storeNum,\n      storeLoc,\n      estDistance\n    });\n    stores.push(storeNum);\n  });\n\n  // Sort based on estimated distances\n  estimatedDistances.sort((a, b) => a.estDistance - b.estDistance);\n\n  // Take only the nearest 25\n  const nearestStores = estimatedDistances.slice(0, 5);\n\n  // Extract nearest destinations and corresponding storeNums\n  const nearestDestinations = nearestStores.map(store => store.storeLoc);\n  const nearestStoreNums = nearestStores.map(store => store.storeNum);\n\n  // Retrieve the distances of each store from the user location\n  // eslint-disable-next-line no-undef\n  const service = new google.maps.DistanceMatrixService();\n  // eslint-disable-next-line no-shadow\n  const getDistanceMatrix = (service, parameters) =>\n    new Promise((resolve, reject) => {\n      service.getDistanceMatrix(parameters, (response, status) => {\n        // eslint-disable-next-line no-undef\n        if (status !== google.maps.DistanceMatrixStatus.OK) {\n          reject(new Error(`Distance Matrix Status not OK, status: ${status}`));\n          reject(response);\n        } else {\n          const distances = [];\n          const results = response.rows[0].elements;\n          for (let j = 0; j < results.length; j += 1) {\n            const element = results[j];\n            const distanceText = element.distance.text;\n            const distanceVal = element.distance.value;\n            const distanceObject = {\n              storeid: nearestStoreNums[j],\n              distanceText,\n              distanceVal\n            };\n            distances.push(distanceObject);\n          }\n\n          resolve(distances);\n        }\n      });\n    });\n\n  const distancesList = await getDistanceMatrix(service, {\n    origins: [origin],\n    destinations: nearestDestinations,\n    travelMode: \"DRIVING\",\n    // eslint-disable-next-line no-undef\n    unitSystem: google.maps.UnitSystem.IMPERIAL\n  });\n\n  distancesList.sort((first, second) => {\n    return first.distanceVal - second.distanceVal;\n  });\n\n  return distancesList;\n}\n\nfunction createStoreCard(\n  storeData,\n  placeToAdd,\n  map,\n  storeForRanking = null,\n  selectedStore = null\n) {\n  const listItem = document.createElement(\"li\");\n  listItem.classList.add(\n    \"bg-paper-1\",\n    \"p-4\",\n    \"flex\",\n    \"justify-between\",\n    \"mb-3\",\n    \"cursor-pointer\"\n  );\n\n  const storeDetailsDiv = document.createElement(\"div\");\n  storeDetailsDiv.classList.add(\"w-2/3\");\n\n  const nameElement = document.createElement(\"p\");\n  nameElement.classList.add(\"typeset-6\", \"mb-3\");\n  nameElement.textContent = storeData.getProperty(\"name\");\n  storeDetailsDiv.appendChild(nameElement);\n\n  const addressElement = document.createElement(\"p\");\n  addressElement.classList.add(\"typeset-7\");\n  addressElement.innerHTML = storeData\n    .getProperty(\"address\")\n    .replace(/,/g, \"<br>\");\n  storeDetailsDiv.appendChild(addressElement);\n\n  listItem.appendChild(storeDetailsDiv);\n\n  const logoDistanceDiv = document.createElement(\"div\");\n  logoDistanceDiv.classList.add(\"typeset-6\", \"flex\", \"flex-col\");\n\n  if (storeData.getProperty(\"logo\") !== \"/logos/original/missing.png\") {\n    const logoImage = document.createElement(\"img\");\n    logoImage.classList.add(\"self-end\", \"mb-3\");\n    logoImage.src = storeData.getProperty(\"logo\");\n    if (window.innerWidth <= 992) {\n      logoImage.width = 48;\n      logoImage.height = 48;\n    } else if (storeForRanking.distanceText) {\n      logoImage.width = 64;\n      logoImage.height = 64;\n    } else {\n      logoImage.width = 98;\n      logoImage.height = 98;\n    }\n    logoDistanceDiv.appendChild(logoImage);\n  }\n\n  if (storeForRanking && storeForRanking.distanceText) {\n    const distanceElement = document.createElement(\"p\");\n    distanceElement.classList.add(\"typeset-4\", \"mt-auto\", \"text-right\");\n    distanceElement.textContent = `${storeForRanking.distanceText}LES`;\n    logoDistanceDiv.appendChild(distanceElement);\n  }\n\n  if (\n    selectedStore &&\n    storeForRanking.storeid === selectedStore.storeid &&\n    window.innerWidth >= 992\n  ) {\n    listItem.classList.add(\"border\", \"border-ink\");\n  }\n\n  listItem.addEventListener(\"click\", () => {\n    analytics.track(\"Store Locator List Item Clicked\");\n    const allListItems = document.querySelectorAll(\"li\");\n    allListItems.forEach(item => {\n      if (item !== listItem) {\n        item.classList.remove(\"border\", \"border-ink\");\n      }\n    });\n    listItem.classList.add(\"border\", \"border-ink\");\n\n    const storeLocation = storeData.getGeometry().get();\n    map.panTo(storeLocation);\n\n    storeData.setProperty(\"isSelected\", true);\n    map.data.forEach(feature => {\n      if (feature !== storeData) {\n        feature.setProperty(\"isSelected\", false);\n      }\n    });\n  });\n\n  listItem.appendChild(logoDistanceDiv);\n\n  placeToAdd.appendChild(listItem);\n}\n\nfunction showStoresList(map, stores, selectedStore) {\n  const { data } = map;\n  const results = document.querySelector(\"#store-results\");\n  results.replaceChildren();\n\n  if (selectedStore) {\n    const selectedIndex = stores.findIndex(\n      store => store.storeid === selectedStore.storeid\n    );\n    if (selectedIndex !== -1) {\n      stores.splice(selectedIndex, 1);\n      stores.unshift(selectedStore);\n    }\n    if (window.innerWidth <= 992) {\n      const selectedStoreDiv = document.querySelector(\"#selected-store\");\n      const selectedStoreFromStores = stores.find(\n        store => store.storeid === selectedStore.storeid\n      );\n      const storeData = data.getFeatureById(selectedStoreFromStores.storeid);\n      selectedStoreDiv.replaceChildren();\n      createStoreCard(storeData, selectedStoreDiv, map);\n    }\n  }\n\n  const containsDistanceVal = stores.some(store => \"distanceVal\" in store);\n  if (containsDistanceVal) {\n    const nearbyStoreElement = document.querySelector(\"#nearby-store-count\");\n    nearbyStoreElement.replaceChildren();\n\n    const nearbyStoreCount = stores.filter(\n      store => store.distanceVal < 1000000\n    ).length;\n\n    const nearbyStores = document.createElement(\"p\");\n    nearbyStores.textContent = `${nearbyStoreCount} stores nearby`;\n    nearbyStores.classList.add(\"typeset-7\", \"text-ink-4\", \"mb-3\");\n    nearbyStoreElement.appendChild(nearbyStores);\n  }\n\n  stores.forEach(storeForRanking => {\n    const storeData = data.getFeatureById(storeForRanking.storeid);\n    createStoreCard(storeData, results, map, storeForRanking, selectedStore);\n  });\n}\n\nlet storeLocations = [];\nasync function fetchStoreLocations() {\n  const response = await physicalStoreLocations.index();\n  storeLocations = response.data.physical_store_locations;\n}\n\n// eslint-disable-next-line import/prefer-default-export\nexport async function initMap() {\n  const mapContainer = document.querySelector(\"#map\");\n  if (!mapContainer) return;\n\n  await fetchStoreLocations();\n\n  loader\n    .load()\n    .then(google => {\n      const map = new google.maps.Map(\n        document.getElementById(\"map\"),\n        mapOptions\n      );\n\n      map.data.addGeoJson(storeLocations);\n\n      // Define the custom marker icons\n      map.data.setStyle(feature => {\n        const isSelected = feature.getProperty(\"isSelected\");\n        const iconUrl = isSelected ? selectedMapMarker : defaultMapMarker;\n        const iconSize = isSelected ? 60 : 48;\n        return {\n          icon: {\n            url: iconUrl,\n            scaledSize: new google.maps.Size(iconSize, iconSize)\n          }\n        };\n      });\n\n      // Set the list of stores before ranking by distance\n      const initialStores = [];\n      map.data.forEach(store => {\n        const storeNum = store.getId();\n        initialStores.push({ storeid: storeNum });\n      });\n\n      showStoresList(map, initialStores, null);\n\n      // Recenter the map to the selected store marker\n      const selectedMarker = null;\n\n      map.data.addListener(\"click\", event => {\n        analytics.track(\"Store Locator Map Marker Clicked\");\n        const selectedFeature = event.feature;\n        selectedFeature.setProperty(\"isSelected\", true);\n\n        map.data.forEach(feature => {\n          if (feature !== selectedFeature) {\n            feature.setProperty(\"isSelected\", false);\n          }\n        });\n\n        const markerLocation = selectedFeature.getGeometry().get();\n\n        if (selectedMarker) {\n          selectedMarker.setMap(null);\n        }\n\n        map.panTo(markerLocation);\n\n        showStoresList(map, initialStores, {\n          storeid: selectedFeature.getId()\n        });\n      });\n\n      // Switches tabs between list and map for mobile\n      const mapElement = document.querySelector(\".map-element\");\n      const listElement = document.querySelector(\".list-element\");\n\n      const handleTabSelection = () => {\n        const tabIndicator = document.querySelector(\".tab-indicator\");\n\n        if (listElement.classList.contains(\"selected\")) {\n          document.querySelector(\"#map\").classList.add(\"hidden\", \"md:block\");\n          document\n            .querySelector(\"#store-results\")\n            .classList.remove(\"hidden\", \"md:block\");\n          tabIndicator.style.transform = \"translateX(0%)\";\n        } else if (mapElement.classList.contains(\"selected\")) {\n          document.querySelector(\"#map\").classList.remove(\"hidden\", \"md:block\");\n          document\n            .querySelector(\"#store-results\")\n            .classList.add(\"hidden\", \"md:block\");\n          tabIndicator.style.transform = \"translateX(100%)\";\n        }\n      };\n\n      handleTabSelection();\n\n      const selectedStoreDiv = document.querySelector(\"#selected-store\");\n\n      mapElement.addEventListener(\"click\", () => {\n        listElement.classList.remove(\"selected\");\n        mapElement.classList.add(\"selected\");\n        selectedStoreDiv.classList.remove(\"hidden\");\n        handleTabSelection();\n      });\n\n      listElement.addEventListener(\"click\", () => {\n        mapElement.classList.remove(\"selected\");\n        listElement.classList.add(\"selected\");\n        selectedStoreDiv.classList.add(\"hidden\");\n        handleTabSelection();\n      });\n\n      const input = document.querySelector(\"#map-searchbar\");\n\n      const options = {\n        types: [\"address\"]\n      };\n      const autocomplete = new google.maps.places.Autocomplete(input, options);\n      autocomplete.setFields([\"address_components\", \"geometry\", \"name\"]);\n\n      let sessionToken;\n\n      input.addEventListener(\"focus\", () => {\n        sessionToken = new google.maps.places.AutocompleteSessionToken();\n        autocomplete.setOptions({ sessionToken });\n      });\n\n      // Set the origin point when the user selects an address\n      const originMarker = new google.maps.Marker({ map: null });\n      let originLocation = map.getCenter();\n\n      autocomplete.addListener(\"place_changed\", async () => {\n        analytics.track(\"Store Locator Place Changed\");\n        originMarker.setVisible(false);\n        originLocation = map.getCenter();\n        const place = autocomplete.getPlace();\n\n        originLocation = place.geometry.location;\n        map.setCenter(originLocation);\n        map.setZoom(14);\n\n        originMarker.setPosition(originLocation);\n        originMarker.setVisible(true);\n\n        let rankedStores = [];\n\n        try {\n          // Use the selected address to calculate distances to stores\n          rankedStores = await calculateDistances(map.data, originLocation);\n        } catch (err) {\n          console.log(err);\n          throw new Error(err);\n        }\n\n        showStoresList(map, rankedStores, null);\n\n        sessionToken = null;\n      });\n    })\n    .catch(e => {\n      console.log(e);\n      throw e;\n    });\n}\n\nconst storeLocator = () => {\n  initMap();\n};\n\nexport default storeLocator;\n"],"names":["fastDeepEqual","equal","a","b","length","i","keys","key","DEFAULT_ID","LoaderStatus","Loader","apiKey","authReferrerPolicy","channel","client","id","language","libraries","mapIds","nonce","region","retries","url","version","script","resolve","reject","err","fn","delay","cb","physicalStoreLocations","api","defaultMapMarker","selectedMapMarker","loader","isNorthAmericanStore","centerCoordinates","getMapZoom","isUs","width","mapZoom","mapOptions","calculateHaversineDistance","lat1","lon1","lat2","lon2","dLat","dLon","calculateDistances","data","origin","estimatedDistances","store","storeLoc","storeNum","estDistance","nearestStores","nearestDestinations","nearestStoreNums","service","distancesList","parameters","response","status","distances","results","j","element","distanceText","distanceVal","distanceObject","first","second","createStoreCard","storeData","placeToAdd","map","storeForRanking","selectedStore","listItem","storeDetailsDiv","nameElement","addressElement","logoDistanceDiv","logoImage","distanceElement","item","storeLocation","feature","showStoresList","stores","selectedIndex","selectedStoreDiv","selectedStoreFromStores","nearbyStoreElement","nearbyStoreCount","nearbyStores","storeLocations","fetchStoreLocations","initMap","google","isSelected","iconUrl","iconSize","initialStores","event","selectedFeature","markerLocation","mapElement","listElement","handleTabSelection","tabIndicator","input","options","autocomplete","sessionToken","originMarker","originLocation","rankedStores","storeLocator"],"mappings":"wCAIA,IAAIA,EAAgB,SAASC,EAAMC,EAAGC,EAAG,CACvC,GAAID,IAAMC,EAAG,MAAO,GAEpB,GAAID,GAAKC,GAAK,OAAOD,GAAK,UAAY,OAAOC,GAAK,SAAU,CAC1D,GAAID,EAAE,cAAgBC,EAAE,YAAa,MAAO,GAE5C,IAAIC,EAAQC,EAAGC,EACf,GAAI,MAAM,QAAQJ,CAAC,EAAG,CAEpB,GADAE,EAASF,EAAE,OACPE,GAAUD,EAAE,OAAQ,MAAO,GAC/B,IAAKE,EAAID,EAAQC,MAAQ,GACvB,GAAI,CAACJ,EAAMC,EAAEG,CAAC,EAAGF,EAAEE,CAAC,CAAC,EAAG,MAAO,GACjC,MAAO,EACb,CAII,GAAIH,EAAE,cAAgB,OAAQ,OAAOA,EAAE,SAAWC,EAAE,QAAUD,EAAE,QAAUC,EAAE,MAC5E,GAAID,EAAE,UAAY,OAAO,UAAU,QAAS,OAAOA,EAAE,QAAO,IAAOC,EAAE,QAAS,EAC9E,GAAID,EAAE,WAAa,OAAO,UAAU,SAAU,OAAOA,EAAE,SAAQ,IAAOC,EAAE,SAAU,EAIlF,GAFAG,EAAO,OAAO,KAAKJ,CAAC,EACpBE,EAASE,EAAK,OACVF,IAAW,OAAO,KAAKD,CAAC,EAAE,OAAQ,MAAO,GAE7C,IAAKE,EAAID,EAAQC,MAAQ,GACvB,GAAI,CAAC,OAAO,UAAU,eAAe,KAAKF,EAAGG,EAAKD,CAAC,CAAC,EAAG,MAAO,GAEhE,IAAKA,EAAID,EAAQC,MAAQ,GAAI,CAC3B,IAAIE,EAAMD,EAAKD,CAAC,EAEhB,GAAI,CAACJ,EAAMC,EAAEK,CAAG,EAAGJ,EAAEI,CAAG,CAAC,EAAG,MAAO,EACzC,CAEI,MAAO,EACX,CAGE,OAAOL,IAAIA,GAAKC,IAAIA,CACtB,EAiBA,MAAMK,EAAa,uBAInB,IAAIC,GACH,SAAUA,EAAc,CACrBA,EAAaA,EAAa,YAAiB,CAAC,EAAI,cAChDA,EAAaA,EAAa,QAAa,CAAC,EAAI,UAC5CA,EAAaA,EAAa,QAAa,CAAC,EAAI,UAC5CA,EAAaA,EAAa,QAAa,CAAC,EAAI,SAChD,GAAGA,IAAiBA,EAAe,CAAA,EAAG,EAoBtC,MAAMC,CAAO,CAUT,YAAY,CAAE,OAAAC,EAAQ,mBAAAC,EAAoB,QAAAC,EAAS,OAAAC,EAAQ,GAAAC,EAAKP,EAAY,SAAAQ,EAAU,UAAAC,EAAY,CAAA,EAAI,OAAAC,EAAQ,MAAAC,EAAO,OAAAC,EAAQ,QAAAC,EAAU,EAAG,IAAAC,EAAM,0CAA2C,QAAAC,GAAY,CAmBnM,GAlBA,KAAK,SAAW,uBAChB,KAAK,UAAY,CAAE,EACnB,KAAK,KAAO,GACZ,KAAK,QAAU,GACf,KAAK,OAAS,CAAE,EAChB,KAAK,OAASZ,EACd,KAAK,mBAAqBC,EAC1B,KAAK,QAAUC,EACf,KAAK,OAASC,EACd,KAAK,GAAKC,GAAMP,EAChB,KAAK,SAAWQ,EAChB,KAAK,UAAYC,EACjB,KAAK,OAASC,EACd,KAAK,MAAQC,EACb,KAAK,OAASC,EACd,KAAK,QAAUC,EACf,KAAK,IAAMC,EACX,KAAK,QAAUC,EACXb,EAAO,SAAU,CACjB,GAAI,CAACV,EAAc,KAAK,QAASU,EAAO,SAAS,OAAO,EACpD,MAAM,IAAI,MAAM,2DAA2D,KAAK,UAAU,KAAK,OAAO,CAAC,QAAQ,KAAK,UAAUA,EAAO,SAAS,OAAO,CAAC,EAAE,EAE5J,OAAOA,EAAO,QAC1B,CACQA,EAAO,SAAW,IAC1B,CACI,IAAI,SAAU,CACV,MAAO,CACH,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,GAAI,KAAK,GACT,UAAW,KAAK,UAChB,SAAU,KAAK,SACf,OAAQ,KAAK,OACb,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,mBAAoB,KAAK,kBAC5B,CACT,CACI,IAAI,QAAS,CACT,OAAI,KAAK,OAAO,OACLD,EAAa,QAEpB,KAAK,KACEA,EAAa,QAEpB,KAAK,QACEA,EAAa,QAEjBA,EAAa,WAC5B,CACI,IAAI,QAAS,CACT,OAAO,KAAK,MAAQ,CAAC,KAAK,SAAW,KAAK,OAAO,QAAU,KAAK,QAAU,CAClF,CAMI,WAAY,CACR,IAAIa,EAAM,KAAK,IACf,OAAAA,GAAO,aAAa,KAAK,QAAQ,GAC7B,KAAK,SACLA,GAAO,QAAQ,KAAK,MAAM,IAE1B,KAAK,UACLA,GAAO,YAAY,KAAK,OAAO,IAE/B,KAAK,SACLA,GAAO,WAAW,KAAK,MAAM,IAE7B,KAAK,UAAU,OAAS,IACxBA,GAAO,cAAc,KAAK,UAAU,KAAK,GAAG,CAAC,IAE7C,KAAK,WACLA,GAAO,aAAa,KAAK,QAAQ,IAEjC,KAAK,SACLA,GAAO,WAAW,KAAK,MAAM,IAE7B,KAAK,UACLA,GAAO,MAAM,KAAK,OAAO,IAEzB,KAAK,SACLA,GAAO,YAAY,KAAK,OAAO,KAAK,GAAG,CAAC,IAExC,KAAK,qBACLA,GAAO,yBAAyB,KAAK,kBAAkB,IAEpDA,CACf,CACI,cAAe,CACX,MAAME,EAAS,SAAS,eAAe,KAAK,EAAE,EAC1CA,GACAA,EAAO,OAAQ,CAE3B,CAII,MAAO,CACH,OAAO,KAAK,YAAa,CACjC,CAMI,aAAc,CACV,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACpC,KAAK,aAAcC,GAAQ,CAClBA,EAIDD,EAAOC,EAAI,KAAK,EAHhBF,EAAQ,OAAO,MAAM,CAKzC,CAAa,CACb,CAAS,CACT,CAII,aAAaG,EAAI,CACb,KAAK,UAAU,KAAKA,CAAE,EACtB,KAAK,QAAS,CACtB,CAII,WAAY,CACR,GAAI,SAAS,eAAe,KAAK,EAAE,EAAG,CAElC,KAAK,SAAU,EACf,MACZ,CACQ,MAAMN,EAAM,KAAK,UAAW,EACtBE,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,GAAK,KAAK,GACjBA,EAAO,KAAO,kBACdA,EAAO,IAAMF,EACbE,EAAO,QAAU,KAAK,kBAAkB,KAAK,IAAI,EACjDA,EAAO,MAAQ,GACfA,EAAO,MAAQ,GACX,KAAK,QACLA,EAAO,MAAQ,KAAK,OAExB,SAAS,KAAK,YAAYA,CAAM,CACxC,CAII,OAAQ,CACJ,KAAK,aAAc,EACnB,KAAK,KAAO,GACZ,KAAK,QAAU,GACf,KAAK,OAAS,CAAE,EAChB,KAAK,aAAe,IAC5B,CACI,uBAAwB,CAChB,KAAK,QACL,KAAK,MAAO,CAExB,CACI,kBAAkB,EAAG,CAEjB,GADA,KAAK,OAAO,KAAK,CAAC,EACd,KAAK,OAAO,QAAU,KAAK,QAAS,CACpC,MAAMK,EAAQ,KAAK,OAAO,OAAS,KAAK,IAAI,EAAG,KAAK,OAAO,MAAM,EACjE,QAAQ,IAAI,kDAAkDA,CAAK,MAAM,EACzE,WAAW,IAAM,CACb,KAAK,aAAc,EACnB,KAAK,UAAW,CACnB,EAAEA,CAAK,CACpB,MAEY,KAAK,aAAe,EACpB,KAAK,SAAU,CAE3B,CACI,aAAc,CACV,OAAO,qBAAuB,KAAK,SAAS,KAAK,IAAI,CAC7D,CACI,UAAW,CACP,KAAK,KAAO,GACZ,KAAK,QAAU,GACf,KAAK,UAAU,QAASC,GAAO,CAC3BA,EAAG,KAAK,YAAY,CAChC,CAAS,EACD,KAAK,UAAY,CAAE,CAC3B,CACI,SAAU,CAEN,GADA,KAAK,sBAAuB,EACxB,KAAK,KACL,KAAK,SAAU,MAEd,CAED,GAAI,OAAO,QAAU,OAAO,OAAO,MAAQ,OAAO,OAAO,KAAK,QAAS,CACnE,QAAQ,KAAK,sJACgF,EAC7F,KAAK,SAAU,EACf,MAChB,CACgB,KAAK,UAEL,KAAK,QAAU,GACf,KAAK,YAAa,EAClB,KAAK,UAAW,EAEhC,CACA,CACA,CCzTA,MAAeC,EAAA,CACb,MAAM,OAAQ,CACZ,OAAOC,EAAI,IAAI,gCAAgC,CACnD,CACA,ECNeC,EAAA,4iDCAAC,EAAA,sjDCOTC,EAAS,IAAIzB,EAAO,CACxB,OAAQ,0CACR,QAAS,SACT,UAAW,CAAC,QAAQ,CACtB,CAAC,EAEK0B,EACJ,OAAO,SAAS,SAAS,SAAS,KAAK,GACvC,OAAO,SAAS,SAAS,SAAS,KAAK,EAEnCC,EAAoBD,EACtB,CACE,IAAK,WACL,IAAK,WACX,EACI,CACE,IAAK,WACL,IAAK,UACN,EAEL,SAASE,EAAWC,EAAMC,EAAO,CAC/B,OAAID,EACKC,GAAS,IAAM,EAAI,EAErBA,GAAS,IAAM,EAAI,CAC5B,CAEA,MAAMC,EAAUH,EAAWF,EAAsB,OAAO,UAAU,EAE5DM,EAAa,CACjB,OAAQL,EACR,KAAMI,EACN,MAAO,mBACP,iBAAkB,GAClB,YAAa,EACf,EAEA,SAASE,EAA2BC,EAAMC,EAAMC,EAAMC,EAAM,CAE1D,MAAMC,GAASF,EAAOF,GAAQ,KAAK,GAAM,IACnCK,GAASF,EAAOF,GAAQ,KAAK,GAAM,IACnC3C,EACJ,KAAK,IAAI8C,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EACtC,KAAK,IAAKJ,EAAO,KAAK,GAAM,GAAG,EAC7B,KAAK,IAAKE,EAAO,KAAK,GAAM,GAAG,EAC/B,KAAK,IAAIG,EAAO,CAAC,EACjB,KAAK,IAAIA,EAAO,CAAC,EAGrB,MADU,OADA,EAAI,KAAK,MAAM,KAAK,KAAK/C,CAAC,EAAG,KAAK,KAAK,EAAIA,CAAC,CAAC,EAGzD,CAEA,eAAegD,EAAmBC,EAAMC,EAAQ,CAC9C,MAAMC,EAAqB,CAAE,EAG7BF,EAAK,QAAQG,GAAS,CACpB,MAAMC,EAAWD,EAAM,YAAW,EAAG,IAAK,EACpCE,EAAWF,EAAM,MAAO,EACxBG,EAAcd,EAClBS,EAAO,IAAK,EACZA,EAAO,IAAK,EACZG,EAAS,IAAK,EACdA,EAAS,IAAG,CACb,EACDF,EAAmB,KAAK,CACtB,SAAAG,EACA,SAAAD,EACA,YAAAE,CACN,CAAK,CAEL,CAAG,EAGDJ,EAAmB,KAAK,CAACnD,EAAGC,IAAMD,EAAE,YAAcC,EAAE,WAAW,EAG/D,MAAMuD,EAAgBL,EAAmB,MAAM,EAAG,CAAC,EAG7CM,EAAsBD,EAAc,IAAIJ,GAASA,EAAM,QAAQ,EAC/DM,EAAmBF,EAAc,IAAIJ,GAASA,EAAM,QAAQ,EAI5DO,EAAU,IAAI,OAAO,KAAK,sBA6B1BC,EAAgB,MA3BI,CAACD,EAASE,IAClC,IAAI,QAAQ,CAACtC,EAASC,IAAW,CAC/BmC,EAAQ,kBAAkBE,EAAY,CAACC,EAAUC,IAAW,CAE1D,GAAIA,IAAW,OAAO,KAAK,qBAAqB,GAC9CvC,EAAO,IAAI,MAAM,0CAA0CuC,CAAM,EAAE,CAAC,EACpEvC,EAAOsC,CAAQ,MACV,CACL,MAAME,EAAY,CAAE,EACdC,EAAUH,EAAS,KAAK,CAAC,EAAE,SACjC,QAASI,EAAI,EAAGA,EAAID,EAAQ,OAAQC,GAAK,EAAG,CAC1C,MAAMC,EAAUF,EAAQC,CAAC,EACnBE,EAAeD,EAAQ,SAAS,KAChCE,EAAcF,EAAQ,SAAS,MAC/BG,EAAiB,CACrB,QAASZ,EAAiBQ,CAAC,EAC3B,aAAAE,EACA,YAAAC,CACD,EACDL,EAAU,KAAKM,CAAc,CACzC,CAEU/C,EAAQyC,CAAS,CAC3B,CACA,CAAO,CACP,CAAK,GAE2CL,EAAS,CACrD,QAAS,CAACT,CAAM,EAChB,aAAcO,EACd,WAAY,UAEZ,WAAY,OAAO,KAAK,WAAW,QACvC,CAAG,EAED,OAAAG,EAAc,KAAK,CAACW,EAAOC,IAClBD,EAAM,YAAcC,EAAO,WACnC,EAEMZ,CACT,CAEA,SAASa,EACPC,EACAC,EACAC,EACAC,EAAkB,KAClBC,EAAgB,KAChB,CACA,MAAMC,EAAW,SAAS,cAAc,IAAI,EAC5CA,EAAS,UAAU,IACjB,aACA,MACA,OACA,kBACA,OACA,gBACD,EAED,MAAMC,EAAkB,SAAS,cAAc,KAAK,EACpDA,EAAgB,UAAU,IAAI,OAAO,EAErC,MAAMC,EAAc,SAAS,cAAc,GAAG,EAC9CA,EAAY,UAAU,IAAI,YAAa,MAAM,EAC7CA,EAAY,YAAcP,EAAU,YAAY,MAAM,EACtDM,EAAgB,YAAYC,CAAW,EAEvC,MAAMC,EAAiB,SAAS,cAAc,GAAG,EACjDA,EAAe,UAAU,IAAI,WAAW,EACxCA,EAAe,UAAYR,EACxB,YAAY,SAAS,EACrB,QAAQ,KAAM,MAAM,EACvBM,EAAgB,YAAYE,CAAc,EAE1CH,EAAS,YAAYC,CAAe,EAEpC,MAAMG,EAAkB,SAAS,cAAc,KAAK,EAGpD,GAFAA,EAAgB,UAAU,IAAI,YAAa,OAAQ,UAAU,EAEzDT,EAAU,YAAY,MAAM,IAAM,8BAA+B,CACnE,MAAMU,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,WAAY,MAAM,EAC1CA,EAAU,IAAMV,EAAU,YAAY,MAAM,EACxC,OAAO,YAAc,KACvBU,EAAU,MAAQ,GAClBA,EAAU,OAAS,IACVP,EAAgB,cACzBO,EAAU,MAAQ,GAClBA,EAAU,OAAS,KAEnBA,EAAU,MAAQ,GAClBA,EAAU,OAAS,IAErBD,EAAgB,YAAYC,CAAS,CACzC,CAEE,GAAIP,GAAmBA,EAAgB,aAAc,CACnD,MAAMQ,EAAkB,SAAS,cAAc,GAAG,EAClDA,EAAgB,UAAU,IAAI,YAAa,UAAW,YAAY,EAClEA,EAAgB,YAAc,GAAGR,EAAgB,YAAY,MAC7DM,EAAgB,YAAYE,CAAe,CAC/C,CAGIP,GACAD,EAAgB,UAAYC,EAAc,SAC1C,OAAO,YAAc,KAErBC,EAAS,UAAU,IAAI,SAAU,YAAY,EAG/CA,EAAS,iBAAiB,QAAS,IAAM,CACvC,UAAU,MAAM,iCAAiC,EAC5B,SAAS,iBAAiB,IAAI,EACtC,QAAQO,GAAQ,CACvBA,IAASP,GACXO,EAAK,UAAU,OAAO,SAAU,YAAY,CAEpD,CAAK,EACDP,EAAS,UAAU,IAAI,SAAU,YAAY,EAE7C,MAAMQ,EAAgBb,EAAU,YAAW,EAAG,IAAK,EACnDE,EAAI,MAAMW,CAAa,EAEvBb,EAAU,YAAY,aAAc,EAAI,EACxCE,EAAI,KAAK,QAAQY,GAAW,CACtBA,IAAYd,GACdc,EAAQ,YAAY,aAAc,EAAK,CAE/C,CAAK,CACL,CAAG,EAEDT,EAAS,YAAYI,CAAe,EAEpCR,EAAW,YAAYI,CAAQ,CACjC,CAEA,SAASU,EAAeb,EAAKc,EAAQZ,EAAe,CAClD,KAAM,CAAE,KAAA7B,CAAI,EAAK2B,EACXX,EAAU,SAAS,cAAc,gBAAgB,EAGvD,GAFAA,EAAQ,gBAAiB,EAErBa,EAAe,CACjB,MAAMa,EAAgBD,EAAO,UAC3BtC,GAASA,EAAM,UAAY0B,EAAc,OAC1C,EAKD,GAJIa,IAAkB,KACpBD,EAAO,OAAOC,EAAe,CAAC,EAC9BD,EAAO,QAAQZ,CAAa,GAE1B,OAAO,YAAc,IAAK,CAC5B,MAAMc,EAAmB,SAAS,cAAc,iBAAiB,EAC3DC,EAA0BH,EAAO,KACrCtC,GAASA,EAAM,UAAY0B,EAAc,OAC1C,EACKJ,EAAYzB,EAAK,eAAe4C,EAAwB,OAAO,EACrED,EAAiB,gBAAiB,EAClCnB,EAAgBC,EAAWkB,EAAkBhB,CAAG,CACtD,CACA,CAGE,GAD4Bc,EAAO,KAAKtC,GAAS,gBAAiBA,CAAK,EAC9C,CACvB,MAAM0C,EAAqB,SAAS,cAAc,qBAAqB,EACvEA,EAAmB,gBAAiB,EAEpC,MAAMC,EAAmBL,EAAO,OAC9BtC,GAASA,EAAM,YAAc,GACnC,EAAM,OAEI4C,EAAe,SAAS,cAAc,GAAG,EAC/CA,EAAa,YAAc,GAAGD,CAAgB,iBAC9CC,EAAa,UAAU,IAAI,YAAa,aAAc,MAAM,EAC5DF,EAAmB,YAAYE,CAAY,CAC/C,CAEEN,EAAO,QAAQb,GAAmB,CAChC,MAAMH,EAAYzB,EAAK,eAAe4B,EAAgB,OAAO,EAC7DJ,EAAgBC,EAAWT,EAASW,EAAKC,EAAiBC,CAAa,CAC3E,CAAG,CACH,CAEA,IAAImB,EAAiB,CAAE,EACvB,eAAeC,GAAsB,CAEnCD,GADiB,MAAMpE,EAAuB,MAAO,GAC3B,KAAK,wBACjC,CAGO,eAAesE,GAAU,CACT,SAAS,cAAc,MAAM,IAGlD,MAAMD,EAAqB,EAE3BjE,EACG,KAAI,EACJ,KAAKmE,GAAU,CACd,MAAMxB,EAAM,IAAIwB,EAAO,KAAK,IAC1B,SAAS,eAAe,KAAK,EAC7B5D,CACD,EAEDoC,EAAI,KAAK,WAAWqB,CAAc,EAGlCrB,EAAI,KAAK,SAASY,GAAW,CAC3B,MAAMa,EAAab,EAAQ,YAAY,YAAY,EAC7Cc,EAAUD,EAAarE,EAAoBD,EAC3CwE,EAAWF,EAAa,GAAK,GACnC,MAAO,CACL,KAAM,CACJ,IAAKC,EACL,WAAY,IAAIF,EAAO,KAAK,KAAKG,EAAUA,CAAQ,CAC/D,CACS,CACT,CAAO,EAGD,MAAMC,EAAgB,CAAE,EACxB5B,EAAI,KAAK,QAAQxB,GAAS,CACxB,MAAME,EAAWF,EAAM,MAAO,EAC9BoD,EAAc,KAAK,CAAE,QAASlD,CAAQ,CAAE,CAChD,CAAO,EAEDmC,EAAeb,EAAK4B,EAAe,IAAI,EAKvC5B,EAAI,KAAK,YAAY,QAAS6B,GAAS,CACrC,UAAU,MAAM,kCAAkC,EAClD,MAAMC,EAAkBD,EAAM,QAC9BC,EAAgB,YAAY,aAAc,EAAI,EAE9C9B,EAAI,KAAK,QAAQY,GAAW,CACtBA,IAAYkB,GACdlB,EAAQ,YAAY,aAAc,EAAK,CAEnD,CAAS,EAED,MAAMmB,EAAiBD,EAAgB,YAAW,EAAG,IAAK,EAM1D9B,EAAI,MAAM+B,CAAc,EAExBlB,EAAeb,EAAK4B,EAAe,CACjC,QAASE,EAAgB,MAAK,CACxC,CAAS,CACT,CAAO,EAGD,MAAME,EAAa,SAAS,cAAc,cAAc,EAClDC,EAAc,SAAS,cAAc,eAAe,EAEpDC,EAAqB,IAAM,CAC/B,MAAMC,EAAe,SAAS,cAAc,gBAAgB,EAExDF,EAAY,UAAU,SAAS,UAAU,GAC3C,SAAS,cAAc,MAAM,EAAE,UAAU,IAAI,SAAU,UAAU,EACjE,SACG,cAAc,gBAAgB,EAC9B,UAAU,OAAO,SAAU,UAAU,EACxCE,EAAa,MAAM,UAAY,kBACtBH,EAAW,UAAU,SAAS,UAAU,IACjD,SAAS,cAAc,MAAM,EAAE,UAAU,OAAO,SAAU,UAAU,EACpE,SACG,cAAc,gBAAgB,EAC9B,UAAU,IAAI,SAAU,UAAU,EACrCG,EAAa,MAAM,UAAY,mBAElC,EAEDD,EAAoB,EAEpB,MAAMlB,EAAmB,SAAS,cAAc,iBAAiB,EAEjEgB,EAAW,iBAAiB,QAAS,IAAM,CACzCC,EAAY,UAAU,OAAO,UAAU,EACvCD,EAAW,UAAU,IAAI,UAAU,EACnChB,EAAiB,UAAU,OAAO,QAAQ,EAC1CkB,EAAoB,CAC5B,CAAO,EAEDD,EAAY,iBAAiB,QAAS,IAAM,CAC1CD,EAAW,UAAU,OAAO,UAAU,EACtCC,EAAY,UAAU,IAAI,UAAU,EACpCjB,EAAiB,UAAU,IAAI,QAAQ,EACvCkB,EAAoB,CAC5B,CAAO,EAED,MAAME,EAAQ,SAAS,cAAc,gBAAgB,EAE/CC,EAAU,CACd,MAAO,CAAC,SAAS,CAClB,EACKC,EAAe,IAAId,EAAO,KAAK,OAAO,aAAaY,EAAOC,CAAO,EACvEC,EAAa,UAAU,CAAC,qBAAsB,WAAY,MAAM,CAAC,EAEjE,IAAIC,EAEJH,EAAM,iBAAiB,QAAS,IAAM,CACpCG,EAAe,IAAIf,EAAO,KAAK,OAAO,yBACtCc,EAAa,WAAW,CAAE,aAAAC,EAAc,CAChD,CAAO,EAGD,MAAMC,EAAe,IAAIhB,EAAO,KAAK,OAAO,CAAE,IAAK,KAAM,EACzD,IAAIiB,EAAiBzC,EAAI,UAAW,EAEpCsC,EAAa,YAAY,gBAAiB,SAAY,CACpD,UAAU,MAAM,6BAA6B,EAC7CE,EAAa,WAAW,EAAK,EAC7BC,EAAiBzC,EAAI,UAAW,EAGhCyC,EAFcH,EAAa,SAAU,EAEd,SAAS,SAChCtC,EAAI,UAAUyC,CAAc,EAC5BzC,EAAI,QAAQ,EAAE,EAEdwC,EAAa,YAAYC,CAAc,EACvCD,EAAa,WAAW,EAAI,EAE5B,IAAIE,EAAe,CAAE,EAErB,GAAI,CAEFA,EAAe,MAAMtE,EAAmB4B,EAAI,KAAMyC,CAAc,CACjE,OAAQ5F,EAAK,CACZ,cAAQ,IAAIA,CAAG,EACT,IAAI,MAAMA,CAAG,CAC7B,CAEQgE,EAAeb,EAAK0C,EAAc,IAAI,EAEtCH,EAAe,IACvB,CAAO,CACF,CAAA,EACA,MAAM,GAAK,CACV,cAAQ,IAAI,CAAC,EACP,CACZ,CAAK,EACL,CAEK,MAACI,EAAe,IAAM,CACzBpB,EAAS,CACX","x_google_ignoreList":[0]}