define(["exports"], function (t) { "use strict" try { self["workbox:core:6.4.1"] && _() } catch (t) {} const e = (t, ...e) => { let s = t return e.length > 0 && (s += ` :: ${JSON.stringify(e)}`), s } class s extends Error { constructor(t, s) { super(e(t, s)), (this.name = t), (this.details = s) } } try { self["workbox:routing:6.4.1"] && _() } catch (t) {} const n = (t) => (t && "object" == typeof t ? t : { handle: t }) class r { constructor(t, e, s = "GET") { ;(this.handler = n(e)), (this.match = t), (this.method = s) } setCatchHandler(t) { this.catchHandler = n(t) } } class i extends r { constructor(t, e, s) { super( ({ url: e }) => { const s = t.exec(e.href) if (s && (e.origin === location.origin || 0 === s.index)) return s.slice(1) }, e, s ) } } class a { constructor() { ;(this.t = new Map()), (this.i = new Map()) } get routes() { return this.t } addFetchListener() { self.addEventListener("fetch", (t) => { const { request: e } = t, s = this.handleRequest({ request: e, event: t }) s && t.respondWith(s) }) } addCacheListener() { self.addEventListener("message", (t) => { if (t.data && "CACHE_URLS" === t.data.type) { const { payload: e } = t.data, s = Promise.all( e.urlsToCache.map((e) => { "string" == typeof e && (e = [e]) const s = new Request(...e) return this.handleRequest({ request: s, event: t }) }) ) t.waitUntil(s), t.ports && t.ports[0] && s.then(() => t.ports[0].postMessage(!0)) } }) } handleRequest({ request: t, event: e }) { const s = new URL(t.url, location.href) if (!s.protocol.startsWith("http")) return const n = s.origin === location.origin, { params: r, route: i } = this.findMatchingRoute({ event: e, request: t, sameOrigin: n, url: s }) let a = i && i.handler const o = t.method if ((!a && this.i.has(o) && (a = this.i.get(o)), !a)) return let c try { c = a.handle({ url: s, request: t, event: e, params: r }) } catch (t) { c = Promise.reject(t) } const h = i && i.catchHandler return ( c instanceof Promise && (this.o || h) && (c = c.catch(async (n) => { if (h) try { return await h.handle({ url: s, request: t, event: e, params: r }) } catch (t) { t instanceof Error && (n = t) } if (this.o) return this.o.handle({ url: s, request: t, event: e }) throw n })), c ) } findMatchingRoute({ url: t, sameOrigin: e, request: s, event: n }) { const r = this.t.get(s.method) || [] for (const i of r) { let r const a = i.match({ url: t, sameOrigin: e, request: s, event: n }) if (a) return ( (r = a), ((Array.isArray(r) && 0 === r.length) || (a.constructor === Object && 0 === Object.keys(a).length) || "boolean" == typeof a) && (r = void 0), { route: i, params: r } ) } return {} } setDefaultHandler(t, e = "GET") { this.i.set(e, n(t)) } setCatchHandler(t) { this.o = n(t) } registerRoute(t) { this.t.has(t.method) || this.t.set(t.method, []), this.t.get(t.method).push(t) } unregisterRoute(t) { if (!this.t.has(t.method)) throw new s("unregister-route-but-not-found-with-method", { method: t.method }) const e = this.t.get(t.method).indexOf(t) if (!(e > -1)) throw new s("unregister-route-route-not-registered") this.t.get(t.method).splice(e, 1) } } let o const c = () => (o || ((o = new a()), o.addFetchListener(), o.addCacheListener()), o) function h(t, e, n) { let a if ("string" == typeof t) { const s = new URL(t, location.href) a = new r(({ url: t }) => t.href === s.href, e, n) } else if (t instanceof RegExp) a = new i(t, e, n) else if ("function" == typeof t) a = new r(t, e, n) else { if (!(t instanceof r)) throw new s("unsupported-route-type", { moduleName: "workbox-routing", funcName: "registerRoute", paramName: "capture", }) a = t } return c().registerRoute(a), a } try { self["workbox:strategies:6.4.1"] && _() } catch (t) {} const u = { cacheWillUpdate: async ({ response: t }) => (200 === t.status || 0 === t.status ? t : null) }, l = { googleAnalytics: "googleAnalytics", precache: "precache-v2", prefix: "workbox", runtime: "runtime", suffix: "undefined" != typeof registration ? registration.scope : "", }, f = (t) => [l.prefix, t, l.suffix].filter((t) => t && t.length > 0).join("-"), w = (t) => t || f(l.precache), d = (t) => t || f(l.runtime) function p(t, e) { const s = new URL(t) for (const t of e) s.searchParams.delete(t) return s.href } class y { constructor() { this.promise = new Promise((t, e) => { ;(this.resolve = t), (this.reject = e) }) } } const g = new Set() function m(t) { return "string" == typeof t ? new Request(t) : t } class R { constructor(t, e) { ;(this.h = {}), Object.assign(this, e), (this.event = e.event), (this.u = t), (this.l = new y()), (this.p = []), (this.g = [...t.plugins]), (this.m = new Map()) for (const t of this.g) this.m.set(t, {}) this.event.waitUntil(this.l.promise) } async fetch(t) { const { event: e } = this let n = m(t) if ("navigate" === n.mode && e instanceof FetchEvent && e.preloadResponse) { const t = await e.preloadResponse if (t) return t } const r = this.hasCallback("fetchDidFail") ? n.clone() : null try { for (const t of this.iterateCallbacks("requestWillFetch")) n = await t({ request: n.clone(), event: e }) } catch (t) { if (t instanceof Error) throw new s("plugin-error-request-will-fetch", { thrownErrorMessage: t.message }) } const i = n.clone() try { let t t = await fetch(n, "navigate" === n.mode ? void 0 : this.u.fetchOptions) for (const s of this.iterateCallbacks("fetchDidSucceed")) t = await s({ event: e, request: i, response: t }) return t } catch (t) { throw ( (r && (await this.runCallbacks("fetchDidFail", { error: t, event: e, originalRequest: r.clone(), request: i.clone(), })), t) ) } } async fetchAndCachePut(t) { const e = await this.fetch(t), s = e.clone() return this.waitUntil(this.cachePut(t, s)), e } async cacheMatch(t) { const e = m(t) let s const { cacheName: n, matchOptions: r } = this.u, i = await this.getCacheKey(e, "read"), a = Object.assign(Object.assign({}, r), { cacheName: n }) s = await caches.match(i, a) for (const t of this.iterateCallbacks("cachedResponseWillBeUsed")) s = (await t({ cacheName: n, matchOptions: r, cachedResponse: s, request: i, event: this.event })) || void 0 return s } async cachePut(t, e) { const n = m(t) var r await ((r = 0), new Promise((t) => setTimeout(t, r))) const i = await this.getCacheKey(n, "write") if (!e) throw new s("cache-put-with-no-response", { url: ((a = i.url), new URL(String(a), location.href).href.replace(new RegExp(`^${location.origin}`), "")), }) var a const o = await this.R(e) if (!o) return !1 const { cacheName: c, matchOptions: h } = this.u, u = await self.caches.open(c), l = this.hasCallback("cacheDidUpdate"), f = l ? await (async function (t, e, s, n) { const r = p(e.url, s) if (e.url === r) return t.match(e, n) const i = Object.assign(Object.assign({}, n), { ignoreSearch: !0 }), a = await t.keys(e, i) for (const e of a) if (r === p(e.url, s)) return t.match(e, n) })(u, i.clone(), ["__WB_REVISION__"], h) : null try { await u.put(i, l ? o.clone() : o) } catch (t) { if (t instanceof Error) throw ( ("QuotaExceededError" === t.name && (await (async function () { for (const t of g) await t() })()), t) ) } for (const t of this.iterateCallbacks("cacheDidUpdate")) await t({ cacheName: c, oldResponse: f, newResponse: o.clone(), request: i, event: this.event }) return !0 } async getCacheKey(t, e) { const s = `${t.url} | ${e}` if (!this.h[s]) { let n = t for (const t of this.iterateCallbacks("cacheKeyWillBeUsed")) n = m(await t({ mode: e, request: n, event: this.event, params: this.params })) this.h[s] = n } return this.h[s] } hasCallback(t) { for (const e of this.u.plugins) if (t in e) return !0 return !1 } async runCallbacks(t, e) { for (const s of this.iterateCallbacks(t)) await s(e) } *iterateCallbacks(t) { for (const e of this.u.plugins) if ("function" == typeof e[t]) { const s = this.m.get(e), n = (n) => { const r = Object.assign(Object.assign({}, n), { state: s }) return e[t](r) } yield n } } waitUntil(t) { return this.p.push(t), t } async doneWaiting() { let t for (; (t = this.p.shift()); ) await t } destroy() { this.l.resolve(null) } async R(t) { let e = t, s = !1 for (const t of this.iterateCallbacks("cacheWillUpdate")) if (((e = (await t({ request: this.request, response: e, event: this.event })) || void 0), (s = !0), !e)) break return s || (e && 200 !== e.status && (e = void 0)), e } } class v { constructor(t = {}) { ;(this.cacheName = d(t.cacheName)), (this.plugins = t.plugins || []), (this.fetchOptions = t.fetchOptions), (this.matchOptions = t.matchOptions) } handle(t) { const [e] = this.handleAll(t) return e } handleAll(t) { t instanceof FetchEvent && (t = { event: t, request: t.request }) const e = t.event, s = "string" == typeof t.request ? new Request(t.request) : t.request, n = "params" in t ? t.params : void 0, r = new R(this, { event: e, request: s, params: n }), i = this.v(r, s, e) return [i, this.q(i, r, s, e)] } async v(t, e, n) { let r await t.runCallbacks("handlerWillStart", { event: n, request: e }) try { if (((r = await this.D(e, t)), !r || "error" === r.type)) throw new s("no-response", { url: e.url }) } catch (s) { if (s instanceof Error) for (const i of t.iterateCallbacks("handlerDidError")) if (((r = await i({ error: s, event: n, request: e })), r)) break if (!r) throw s } for (const s of t.iterateCallbacks("handlerWillRespond")) r = await s({ event: n, request: e, response: r }) return r } async q(t, e, s, n) { let r, i try { r = await t } catch (i) {} try { await e.runCallbacks("handlerDidRespond", { event: n, request: s, response: r }), await e.doneWaiting() } catch (t) { t instanceof Error && (i = t) } if ((await e.runCallbacks("handlerDidComplete", { event: n, request: s, response: r, error: i }), e.destroy(), i)) throw i } } function b(t) { t.then(() => {}) } function q() { return ( (q = Object.assign || function (t) { for (var e = 1; e < arguments.length; e++) { var s = arguments[e] for (var n in s) Object.prototype.hasOwnProperty.call(s, n) && (t[n] = s[n]) } return t }), q.apply(this, arguments) ) } let D, U const x = new WeakMap(), L = new WeakMap(), I = new WeakMap(), C = new WeakMap(), E = new WeakMap() let N = { get(t, e, s) { if (t instanceof IDBTransaction) { if ("done" === e) return L.get(t) if ("objectStoreNames" === e) return t.objectStoreNames || I.get(t) if ("store" === e) return s.objectStoreNames[1] ? void 0 : s.objectStore(s.objectStoreNames[0]) } return k(t[e]) }, set: (t, e, s) => ((t[e] = s), !0), has: (t, e) => (t instanceof IDBTransaction && ("done" === e || "store" === e)) || e in t, } function O(t) { return t !== IDBDatabase.prototype.transaction || "objectStoreNames" in IDBTransaction.prototype ? ( U || (U = [IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey]) ).includes(t) ? function (...e) { return t.apply(B(this), e), k(x.get(this)) } : function (...e) { return k(t.apply(B(this), e)) } : function (e, ...s) { const n = t.call(B(this), e, ...s) return I.set(n, e.sort ? e.sort() : [e]), k(n) } } function T(t) { return "function" == typeof t ? O(t) : (t instanceof IDBTransaction && (function (t) { if (L.has(t)) return const e = new Promise((e, s) => { const n = () => { t.removeEventListener("complete", r), t.removeEventListener("error", i), t.removeEventListener("abort", i) }, r = () => { e(), n() }, i = () => { s(t.error || new DOMException("AbortError", "AbortError")), n() } t.addEventListener("complete", r), t.addEventListener("error", i), t.addEventListener("abort", i) }) L.set(t, e) })(t), (e = t), (D || (D = [IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction])).some((t) => e instanceof t) ? new Proxy(t, N) : t) var e } function k(t) { if (t instanceof IDBRequest) return (function (t) { const e = new Promise((e, s) => { const n = () => { t.removeEventListener("success", r), t.removeEventListener("error", i) }, r = () => { e(k(t.result)), n() }, i = () => { s(t.error), n() } t.addEventListener("success", r), t.addEventListener("error", i) }) return ( e .then((e) => { e instanceof IDBCursor && x.set(e, t) }) .catch(() => {}), E.set(e, t), e ) })(t) if (C.has(t)) return C.get(t) const e = T(t) return e !== t && (C.set(t, e), E.set(e, t)), e } const B = (t) => E.get(t) const P = ["get", "getKey", "getAll", "getAllKeys", "count"], M = ["put", "add", "delete", "clear"], W = new Map() function j(t, e) { if (!(t instanceof IDBDatabase) || e in t || "string" != typeof e) return if (W.get(e)) return W.get(e) const s = e.replace(/FromIndex$/, ""), n = e !== s, r = M.includes(s) if (!(s in (n ? IDBIndex : IDBObjectStore).prototype) || (!r && !P.includes(s))) return const i = async function (t, ...e) { const i = this.transaction(t, r ? "readwrite" : "readonly") let a = i.store return n && (a = a.index(e.shift())), (await Promise.all([a[s](...e), r && i.done]))[0] } return W.set(e, i), i } N = ((t) => q({}, t, { get: (e, s, n) => j(e, s) || t.get(e, s, n), has: (e, s) => !!j(e, s) || t.has(e, s) }))(N) try { self["workbox:expiration:6.4.1"] && _() } catch (t) {} const S = "cache-entries", K = (t) => { const e = new URL(t, location.href) return (e.hash = ""), e.href } class A { constructor(t) { ;(this.U = null), (this._ = t) } L(t) { const e = t.createObjectStore(S, { keyPath: "id" }) e.createIndex("cacheName", "cacheName", { unique: !1 }), e.createIndex("timestamp", "timestamp", { unique: !1 }) } I(t) { this.L(t), this._ && (function (t, { blocked: e } = {}) { const s = indexedDB.deleteDatabase(t) e && s.addEventListener("blocked", () => e()), k(s).then(() => {}) })(this._) } async setTimestamp(t, e) { const s = { url: (t = K(t)), timestamp: e, cacheName: this._, id: this.C(t) }, n = (await this.getDb()).transaction(S, "readwrite", { durability: "relaxed" }) await n.store.put(s), await n.done } async getTimestamp(t) { const e = await this.getDb(), s = await e.get(S, this.C(t)) return null == s ? void 0 : s.timestamp } async expireEntries(t, e) { const s = await this.getDb() let n = await s.transaction(S).store.index("timestamp").openCursor(null, "prev") const r = [] let i = 0 for (; n; ) { const s = n.value s.cacheName === this._ && ((t && s.timestamp < t) || (e && i >= e) ? r.push(n.value) : i++), (n = await n.continue()) } const a = [] for (const t of r) await s.delete(S, t.id), a.push(t.url) return a } C(t) { return this._ + "|" + K(t) } async getDb() { return ( this.U || (this.U = await (function (t, e, { blocked: s, upgrade: n, blocking: r, terminated: i } = {}) { const a = indexedDB.open(t, e), o = k(a) return ( n && a.addEventListener("upgradeneeded", (t) => { n(k(a.result), t.oldVersion, t.newVersion, k(a.transaction)) }), s && a.addEventListener("blocked", () => s()), o .then((t) => { i && t.addEventListener("close", () => i()), r && t.addEventListener("versionchange", () => r()) }) .catch(() => {}), o ) })("workbox-expiration", 1, { upgrade: this.I.bind(this) })), this.U ) } } class F { constructor(t, e = {}) { ;(this.N = !1), (this.O = !1), (this.T = e.maxEntries), (this.k = e.maxAgeSeconds), (this.B = e.matchOptions), (this._ = t), (this.P = new A(t)) } async expireEntries() { if (this.N) return void (this.O = !0) this.N = !0 const t = this.k ? Date.now() - 1e3 * this.k : 0, e = await this.P.expireEntries(t, this.T), s = await self.caches.open(this._) for (const t of e) await s.delete(t, this.B) ;(this.N = !1), this.O && ((this.O = !1), b(this.expireEntries())) } async updateTimestamp(t) { await this.P.setTimestamp(t, Date.now()) } async isURLExpired(t) { if (this.k) { const e = await this.P.getTimestamp(t), s = Date.now() - 1e3 * this.k return void 0 === e || e < s } return !1 } async delete() { ;(this.O = !1), await this.P.expireEntries(1 / 0) } } try { self["workbox:range-requests:6.4.1"] && _() } catch (t) {} async function H(t, e) { try { if (206 === e.status) return e const n = t.headers.get("range") if (!n) throw new s("no-range-header") const r = (function (t) { const e = t.trim().toLowerCase() if (!e.startsWith("bytes=")) throw new s("unit-must-be-bytes", { normalizedRangeHeader: e }) if (e.includes(",")) throw new s("single-range-only", { normalizedRangeHeader: e }) const n = /(\d*)-(\d*)/.exec(e) if (!n || (!n[1] && !n[2])) throw new s("invalid-range-values", { normalizedRangeHeader: e }) return { start: "" === n[1] ? void 0 : Number(n[1]), end: "" === n[2] ? void 0 : Number(n[2]) } })(n), i = await e.blob(), a = (function (t, e, n) { const r = t.size if ((n && n > r) || (e && e < 0)) throw new s("range-not-satisfiable", { size: r, end: n, start: e }) let i, a return ( void 0 !== e && void 0 !== n ? ((i = e), (a = n + 1)) : void 0 !== e && void 0 === n ? ((i = e), (a = r)) : void 0 !== n && void 0 === e && ((i = r - n), (a = r)), { start: i, end: a } ) })(i, r.start, r.end), o = i.slice(a.start, a.end), c = o.size, h = new Response(o, { status: 206, statusText: "Partial Content", headers: e.headers }) return ( h.headers.set("Content-Length", String(c)), h.headers.set("Content-Range", `bytes ${a.start}-${a.end - 1}/${i.size}`), h ) } catch (t) { return new Response("", { status: 416, statusText: "Range Not Satisfiable" }) } } function $(t, e) { const s = e() return t.waitUntil(s), s } try { self["workbox:precaching:6.4.1"] && _() } catch (t) {} function z(t) { if (!t) throw new s("add-to-cache-list-unexpected-type", { entry: t }) if ("string" == typeof t) { const e = new URL(t, location.href) return { cacheKey: e.href, url: e.href } } const { revision: e, url: n } = t if (!n) throw new s("add-to-cache-list-unexpected-type", { entry: t }) if (!e) { const t = new URL(n, location.href) return { cacheKey: t.href, url: t.href } } const r = new URL(n, location.href), i = new URL(n, location.href) return r.searchParams.set("__WB_REVISION__", e), { cacheKey: r.href, url: i.href } } class G { constructor() { ;(this.updatedURLs = []), (this.notUpdatedURLs = []), (this.handlerWillStart = async ({ request: t, state: e }) => { e && (e.originalRequest = t) }), (this.cachedResponseWillBeUsed = async ({ event: t, state: e, cachedResponse: s }) => { if ("install" === t.type && e && e.originalRequest && e.originalRequest instanceof Request) { const t = e.originalRequest.url s ? this.notUpdatedURLs.push(t) : this.updatedURLs.push(t) } return s }) } } class V { constructor({ precacheController: t }) { ;(this.cacheKeyWillBeUsed = async ({ request: t, params: e }) => { const s = (null == e ? void 0 : e.cacheKey) || this.M.getCacheKeyForURL(t.url) return s ? new Request(s, { headers: t.headers }) : t }), (this.M = t) } } let J, Q async function X(t, e) { let n = null if (t.url) { n = new URL(t.url).origin } if (n !== self.location.origin) throw new s("cross-origin-copy-response", { origin: n }) const r = t.clone(), i = { headers: new Headers(r.headers), status: r.status, statusText: r.statusText }, a = e ? e(i) : i, o = (function () { if (void 0 === J) { const t = new Response("") if ("body" in t) try { new Response(t.body), (J = !0) } catch (t) { J = !1 } J = !1 } return J })() ? r.body : await r.blob() return new Response(o, a) } class Y extends v { constructor(t = {}) { ;(t.cacheName = w(t.cacheName)), super(t), (this.W = !1 !== t.fallbackToNetwork), this.plugins.push(Y.copyRedirectedCacheableResponsesPlugin) } async D(t, e) { const s = await e.cacheMatch(t) return s || (e.event && "install" === e.event.type ? await this.j(t, e) : await this.S(t, e)) } async S(t, e) { let n const r = e.params || {} if (!this.W) throw new s("missing-precache-entry", { cacheName: this.cacheName, url: t.url }) { const s = r.integrity, i = t.integrity, a = !i || i === s ;(n = await e.fetch(new Request(t, { integrity: i || s }))), s && a && (this.K(), await e.cachePut(t, n.clone())) } return n } async j(t, e) { this.K() const n = await e.fetch(t) if (!(await e.cachePut(t, n.clone()))) throw new s("bad-precaching-response", { url: t.url, status: n.status }) return n } K() { let t = null, e = 0 for (const [s, n] of this.plugins.entries()) n !== Y.copyRedirectedCacheableResponsesPlugin && (n === Y.defaultPrecacheCacheabilityPlugin && (t = s), n.cacheWillUpdate && e++) 0 === e ? this.plugins.push(Y.defaultPrecacheCacheabilityPlugin) : e > 1 && null !== t && this.plugins.splice(t, 1) } } ;(Y.defaultPrecacheCacheabilityPlugin = { cacheWillUpdate: async ({ response: t }) => (!t || t.status >= 400 ? null : t), }), (Y.copyRedirectedCacheableResponsesPlugin = { cacheWillUpdate: async ({ response: t }) => (t.redirected ? await X(t) : t), }) class Z { constructor({ cacheName: t, plugins: e = [], fallbackToNetwork: s = !0 } = {}) { ;(this.A = new Map()), (this.F = new Map()), (this.H = new Map()), (this.u = new Y({ cacheName: w(t), plugins: [...e, new V({ precacheController: this })], fallbackToNetwork: s, })), (this.install = this.install.bind(this)), (this.activate = this.activate.bind(this)) } get strategy() { return this.u } precache(t) { this.addToCacheList(t), this.$ || (self.addEventListener("install", this.install), self.addEventListener("activate", this.activate), (this.$ = !0)) } addToCacheList(t) { const e = [] for (const n of t) { "string" == typeof n ? e.push(n) : n && void 0 === n.revision && e.push(n.url) const { cacheKey: t, url: r } = z(n), i = "string" != typeof n && n.revision ? "reload" : "default" if (this.A.has(r) && this.A.get(r) !== t) throw new s("add-to-cache-list-conflicting-entries", { firstEntry: this.A.get(r), secondEntry: t }) if ("string" != typeof n && n.integrity) { if (this.H.has(t) && this.H.get(t) !== n.integrity) throw new s("add-to-cache-list-conflicting-integrities", { url: r }) this.H.set(t, n.integrity) } if ((this.A.set(r, t), this.F.set(r, i), e.length > 0)) { const t = `Workbox is precaching URLs without revision info: ${e.join( ", " )}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache` console.warn(t) } } } install(t) { return $(t, async () => { const e = new G() this.strategy.plugins.push(e) for (const [e, s] of this.A) { const n = this.H.get(s), r = this.F.get(e), i = new Request(e, { integrity: n, cache: r, credentials: "same-origin" }) await Promise.all(this.strategy.handleAll({ params: { cacheKey: s }, request: i, event: t })) } const { updatedURLs: s, notUpdatedURLs: n } = e return { updatedURLs: s, notUpdatedURLs: n } }) } activate(t) { return $(t, async () => { const t = await self.caches.open(this.strategy.cacheName), e = await t.keys(), s = new Set(this.A.values()), n = [] for (const r of e) s.has(r.url) || (await t.delete(r), n.push(r.url)) return { deletedURLs: n } }) } getURLsToCacheKeys() { return this.A } getCachedURLs() { return [...this.A.keys()] } getCacheKeyForURL(t) { const e = new URL(t, location.href) return this.A.get(e.href) } getIntegrityForCacheKey(t) { return this.H.get(t) } async matchPrecache(t) { const e = t instanceof Request ? t.url : t, s = this.getCacheKeyForURL(e) if (s) { return (await self.caches.open(this.strategy.cacheName)).match(s) } } createHandlerBoundToURL(t) { const e = this.getCacheKeyForURL(t) if (!e) throw new s("non-precached-url", { url: t }) return (s) => ( (s.request = new Request(t)), (s.params = Object.assign({ cacheKey: e }, s.params)), this.strategy.handle(s) ) } } const tt = () => (Q || (Q = new Z()), Q) class et extends r { constructor(t, e) { super(({ request: s }) => { const n = t.getURLsToCacheKeys() for (const r of (function* ( t, { ignoreURLParametersMatching: e = [/^utm_/, /^fbclid$/], directoryIndex: s = "index.html", cleanURLs: n = !0, urlManipulation: r, } = {} ) { const i = new URL(t, location.href) ;(i.hash = ""), yield i.href const a = (function (t, e = []) { for (const s of [...t.searchParams.keys()]) e.some((t) => t.test(s)) && t.searchParams.delete(s) return t })(i, e) if ((yield a.href, s && a.pathname.endsWith("/"))) { const t = new URL(a.href) ;(t.pathname += s), yield t.href } if (n) { const t = new URL(a.href) ;(t.pathname += ".html"), yield t.href } if (r) { const t = r({ url: i }) for (const e of t) yield e.href } })(s.url, e)) { const e = n.get(r) if (e) { return { cacheKey: e, integrity: t.getIntegrityForCacheKey(e) } } } }, t.strategy) } } ;(t.CacheFirst = class extends v { async D(t, e) { let n, r = await e.cacheMatch(t) if (!r) try { r = await e.fetchAndCachePut(t) } catch (t) { t instanceof Error && (n = t) } if (!r) throw new s("no-response", { url: t.url, error: n }) return r } }), (t.ExpirationPlugin = class { constructor(t = {}) { ;(this.cachedResponseWillBeUsed = async ({ event: t, request: e, cacheName: s, cachedResponse: n }) => { if (!n) return null const r = this.G(n), i = this.V(s) b(i.expireEntries()) const a = i.updateTimestamp(e.url) if (t) try { t.waitUntil(a) } catch (t) {} return r ? n : null }), (this.cacheDidUpdate = async ({ cacheName: t, request: e }) => { const s = this.V(t) await s.updateTimestamp(e.url), await s.expireEntries() }), (this.J = t), (this.k = t.maxAgeSeconds), (this.X = new Map()), t.purgeOnQuotaError && (function (t) { g.add(t) })(() => this.deleteCacheAndMetadata()) } V(t) { if (t === d()) throw new s("expire-custom-caches-only") let e = this.X.get(t) return e || ((e = new F(t, this.J)), this.X.set(t, e)), e } G(t) { if (!this.k) return !0 const e = this.Y(t) if (null === e) return !0 return e >= Date.now() - 1e3 * this.k } Y(t) { if (!t.headers.has("date")) return null const e = t.headers.get("date"), s = new Date(e).getTime() return isNaN(s) ? null : s } async deleteCacheAndMetadata() { for (const [t, e] of this.X) await self.caches.delete(t), await e.delete() this.X = new Map() } }), (t.NetworkFirst = class extends v { constructor(t = {}) { super(t), this.plugins.some((t) => "cacheWillUpdate" in t) || this.plugins.unshift(u), (this.Z = t.networkTimeoutSeconds || 0) } async D(t, e) { const n = [], r = [] let i if (this.Z) { const { id: s, promise: a } = this.tt({ request: t, logs: n, handler: e }) ;(i = s), r.push(a) } const a = this.et({ timeoutId: i, request: t, logs: n, handler: e }) r.push(a) const o = await e.waitUntil((async () => (await e.waitUntil(Promise.race(r))) || (await a))()) if (!o) throw new s("no-response", { url: t.url }) return o } tt({ request: t, logs: e, handler: s }) { let n return { promise: new Promise((e) => { n = setTimeout(async () => { e(await s.cacheMatch(t)) }, 1e3 * this.Z) }), id: n, } } async et({ timeoutId: t, request: e, logs: s, handler: n }) { let r, i try { i = await n.fetchAndCachePut(e) } catch (t) { t instanceof Error && (r = t) } return t && clearTimeout(t), (!r && i) || (i = await n.cacheMatch(e)), i } }), (t.RangeRequestsPlugin = class { constructor() { this.cachedResponseWillBeUsed = async ({ request: t, cachedResponse: e }) => e && t.headers.has("range") ? await H(t, e) : e } }), (t.StaleWhileRevalidate = class extends v { constructor(t = {}) { super(t), this.plugins.some((t) => "cacheWillUpdate" in t) || this.plugins.unshift(u) } async D(t, e) { const n = e.fetchAndCachePut(t).catch(() => {}) let r, i = await e.cacheMatch(t) if (i); else try { i = await n } catch (t) { t instanceof Error && (r = t) } if (!i) throw new s("no-response", { url: t.url, error: r }) return i } }), (t.cleanupOutdatedCaches = function () { self.addEventListener("activate", (t) => { const e = w() t.waitUntil( (async (t, e = "-precache-") => { const s = (await self.caches.keys()).filter( (s) => s.includes(e) && s.includes(self.registration.scope) && s !== t ) return await Promise.all(s.map((t) => self.caches.delete(t))), s })(e).then((t) => {}) ) }) }), (t.clientsClaim = function () { self.addEventListener("activate", () => self.clients.claim()) }), (t.precacheAndRoute = function (t, e) { !(function (t) { tt().precache(t) })(t), (function (t) { const e = tt() h(new et(e, t)) })(e) }), (t.registerRoute = h) })