From 9dec1aadb6b3bce20f4e05354836e74ec44b8cf0 Mon Sep 17 00:00:00 2001 From: arzafran Date: Mon, 27 May 2024 16:18:52 -0300 Subject: [PATCH] smol updates --- PROD-README.md | 21 +- README.md | 21 +- analyze/nodejs.html | 39 - checklist.md | 4 - components/scrollbar/index.js | 3 +- HOW-TO.md => docs/HOW-TO.md | 0 hooks/use-theme.js | 0 package.json | 21 +- pnpm-lock.yaml | 2496 +++++++++++-------------- public/admin/index.html | 32 - public/sw.js | 208 +-- public/swe-worker-ab00d3c7d2d59769.js | 1 + public/swe-worker-development.js | 102 - todo.md | 0 14 files changed, 1162 insertions(+), 1786 deletions(-) delete mode 100644 analyze/nodejs.html delete mode 100644 checklist.md rename HOW-TO.md => docs/HOW-TO.md (100%) delete mode 100644 hooks/use-theme.js delete mode 100644 public/admin/index.html create mode 100644 public/swe-worker-ab00d3c7d2d59769.js delete mode 100644 public/swe-worker-development.js delete mode 100644 todo.md diff --git a/PROD-README.md b/PROD-README.md index 55ffa988..9c28093f 100644 --- a/PROD-README.md +++ b/PROD-README.md @@ -1,6 +1,6 @@ # [PROJECT] -## Setup +## Setup: The usual process for Next.js based apps/websites: @@ -18,7 +18,7 @@ The usual process for Next.js based apps/websites: `$ pnpm dev` -## Stack +## Stack: - [Lenis](https://github.com/darkroomengineering/lenis) - [Tempus](https://github.com/darkroomengineering/tempus) @@ -29,15 +29,13 @@ The usual process for Next.js based apps/websites: - [@react-three/drei](https://github.com/pmndrs/drei) - [@react-three/fiber](https://docs.pmnd.rs/react-three-fiber/getting-started/introduction) - [GSAP](https://greensock.com/gsap/) -- [Embla Carousel](https://github.com/davidcetinkaya/embla-carousel) - Sass (Modules) - [Zustand](https://github.com/pmndrs/zustand) -- [React Hook Form](https://react-hook-form.com/) - GraphQL (CMS API) - [Next-Sitemap](https://github.com/iamvishnusankar/next-sitemap) (postbuild script) - [@svgr/webpack](https://github.com/gregberge/svgr/tree/main) (SVG Imports in `next.config.js`) -## Code Style & Linting +## Code Style & Linting: - Eslint ([Next](https://nextjs.org/docs/basic-features/eslint#eslint-config) and [Prettier](https://github.com/prettier/eslint-config-prettier) plugins) - [Prettier](https://prettier.io/) with the following settings available in `.pretierrc`: @@ -50,21 +48,20 @@ The usual process for Next.js based apps/websites: ``` - [Husky + lint-staged precommit hooks](https://github.com/okonet/lint-staged) -## Third Party +## Third Party (optional tools): +- [Storyblok CMS](https://storyblok.com/) - [Mailchimp CRM](https://mailchimp.com/) - [Hubspot CRM](https://hubspot.com/) - [Vercel (Hosting & Continuous Deployment)](https://vercel.com/home) - [GitHub Versioning](https://github.com/) -## Folder Structure +## Folder Structure: -Alongside the usual Next.js folder structure (`/public`, `/pages`, etc.) We've added a few other folders to keep the code easier to read: +Alongside the usual Next.js App Router folder structure (`/public`, `/app`, etc.) We've added a few other folders to keep the code easier to read: -- **/assets:** General Images/Videos and SVGs - **/components:** Reusable components with their respective Sass file -- **/config:** General settings (mostly Leva for now) +- **/docs:** Readmes on how to use third party tools at darkroom - **/hooks:** Reusable Custom Hooks -- **/layouts:** High level layout component -- **/lib:** Reusable Scripts and State Store +- **/libs:** Reusable Scripts and State Storing, hubspot integration, sass utils, etc. - **/styles:** Global styles and Sass partials diff --git a/README.md b/README.md index 61d0daea..0644b293 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ ## Introduction -Satūs means start, beginning, planting, it's a set of tools we use as a template when starting a new project. +Satūs means start, beginning, planting, to be used as a template when starting a new project.
## Composition -This starter kit is composed of: +This starter kit has an opinionated setting using the following: - [Next.js](https://nextjs.org) App router - [react-three-fiber](https://github.com/pmndrs/react-three-fiber) @@ -26,7 +26,7 @@ This starter kit is composed of: - Easings - Themes - Debug tools: - - Theatre.js Studio + - Theatre.js Studio [@theatre/studio](https://www.npmjs.com/package/@theatre/studio) - FPS Meter - Grid Debugger - Github workflow to display lighthouse report on slack: @@ -34,6 +34,19 @@ This starter kit is composed of:
+## Docs + +There is a `docs` folder with documentation on how to use tools such as GSAP and Storyblok at Darkroom. There is also a HOW-TO.md file serving as a catch-all file for any other tools or processes that are too straigthforward to warrant a full documentation file. + +
+ +## Going Live + +To deploy your project you can use Vercel, Netlify, or any other service that supports Next.js. +there is a PROD-README.md file expanding on the specifics of the deployed project, when going live don't forget to replace this README with the Production one. + +
+ ## Debug To toggle debug modes you need to access the page `/debug/orchestra`. @@ -49,6 +62,8 @@ This set of hooks is curated and maintained by the darkroom.engineering team: - Clément Roche ([@clementroche\_](https://twitter.com/clementroche_)) – [darkroom.engineering](https://darkroom.engineering) - Guido Fier ([@uido15](https://twitter.com/uido15)) – [darkroom.engineering](https://darkroom.engineering) - Leandro Soengas ([@lsoengas](https://twitter.com/lsoengas)) - [darkroom.engineering](https://darkroom.engineering) +- Fermin Fernandez ([@Fermin_FerBridd](https://twitter.com/Fermin_FerBridd)) - [darkroom.engineering](https://darkroom.engineering) +- Felix Mayr ([@feledori](https://twitter.com/feledori)) - [darkroom.engineering](https://darkroom.engineering) - Franco Arza ([@arzafran](https://twitter.com/arzafran)) - [darkroom.engineering](https://darkroom.engineering)
diff --git a/analyze/nodejs.html b/analyze/nodejs.html deleted file mode 100644 index c554b976..00000000 --- a/analyze/nodejs.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - @darkroom.engineering/satus [17 Apr 2024 at 10:43] - - - - - - - - -
- - - \ No newline at end of file diff --git a/checklist.md b/checklist.md deleted file mode 100644 index 8a898f98..00000000 --- a/checklist.md +++ /dev/null @@ -1,4 +0,0 @@ -- [ ] add metadata to pages -- [ ] add `sizes` and `alt` props to `` components -- [ ] throw 404 for not existing pages -- [ ] load non imperatives svg dynamically with `ssr:false` diff --git a/components/scrollbar/index.js b/components/scrollbar/index.js index 7851c8f1..f7fa5134 100644 --- a/components/scrollbar/index.js +++ b/components/scrollbar/index.js @@ -8,6 +8,7 @@ import s from './scrollbar.module.scss' export function Scrollbar() { const thumbRef = useRef() + // eslint-disable-next-line react-hooks/exhaustive-deps const lenis = useLenis() const [innerMeasureRef, { height: innerHeight }] = useRect() const [thumbMeasureRef, { height: thumbHeight }] = useRect() @@ -57,7 +58,7 @@ export function Scrollbar() { window.removeEventListener('pointermove', onPointerMove, false) window.removeEventListener('pointerup', onPointerUp, false) } - }, [lenis, innerHeight]) + }, [lenis, innerHeight, thumbHeight]) return (
diff --git a/HOW-TO.md b/docs/HOW-TO.md similarity index 100% rename from HOW-TO.md rename to docs/HOW-TO.md diff --git a/hooks/use-theme.js b/hooks/use-theme.js deleted file mode 100644 index e69de29b..00000000 diff --git a/package.json b/package.json index 5fd9d82b..b008cd81 100644 --- a/package.json +++ b/package.json @@ -17,18 +17,18 @@ "npmrc": "npx npmrc-replace-env -w" }, "dependencies": { - "@darkroom.engineering/hamo": "0.6.36", + "@darkroom.engineering/hamo": "0.6.42", "@darkroom.engineering/tempus": "0.0.46", "@next/third-parties": "^14.2.3", "@radix-ui/react-select": "^2.0.0", - "@react-three/drei": "^9.105.5", - "@react-three/fiber": "^8.16.3", + "@react-three/drei": "^9.105.6", + "@react-three/fiber": "^8.16.6", "@serwist/next": "9.0.2", "@serwist/precaching": "9.0.2", "@serwist/sw": "9.0.2", "@storyblok/js": "^3.0.8", - "@theatre/core": "^0.7.1", - "@theatre/studio": "^0.7.1", + "@theatre/core": "^0.7.2", + "@theatre/studio": "^0.7.2", "clsx": "^2.1.1", "gsap": "^3.12.5", "lenis": "^1.0.45", @@ -38,7 +38,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-use": "^17.5.0", - "sass": "^1.76.0", + "sass": "^1.77.2", "serwist": "9.0.2", "stats-gl": "^2.2.8", "stats.js": "^0.17.0", @@ -52,25 +52,22 @@ "@builder.io/partytown": "^0.10.2", "@cerner/duplicate-package-checker-webpack-plugin": "^2.6.0", "@next/bundle-analyzer": "^14.2.3", + "@next/eslint-plugin-next": "^14.2.3", "@svgr/webpack": "^8.1.0", "critters": "^0.0.22", "cross-env": "^7.0.3", - "eslint": "8.57.0", "eslint-config-next": "^14.2.3", "eslint-config-prettier": "^9.1.0", "husky": "^9.0.11", "local-ssl-proxy": "^2.0.5", "npm-run-all": "^4.1.5", "npmrc-replace-env": "^1.1.3", - "prettier": "^3.2.5", - "prettier-eslint": "^16.3.0" + "prettier": "^3.2.5" }, "pnpm": { "overrides": { - "eslint": "8.57.0", "scheduler": "0.23.0", - "@darkroom.engineering/tempus": "0.0.46", - "@darkroom.engineering/hamo": "0.6.36" + "@darkroom.engineering/tempus": "0.0.46" } }, "lint-staged": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48fb1fde..59e96241 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,36 +5,34 @@ settings: excludeLinksFromLockfile: false overrides: - eslint: 8.57.0 scheduler: 0.23.0 '@darkroom.engineering/tempus': 0.0.46 - '@darkroom.engineering/hamo': 0.6.36 importers: .: dependencies: '@darkroom.engineering/hamo': - specifier: 0.6.36 - version: 0.6.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 0.6.42 + version: 0.6.42(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@darkroom.engineering/tempus': specifier: 0.0.46 version: 0.0.46 '@next/third-parties': specifier: ^14.2.3 - version: 14.2.3(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0))(react@18.3.1) + version: 14.2.3(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1) '@radix-ui/react-select': specifier: ^2.0.0 - version: 2.0.0(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 2.0.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@react-three/drei': - specifier: ^9.105.5 - version: 9.105.5(@react-three/fiber@8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(@types/react@18.3.1)(@types/three@0.163.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) + specifier: ^9.105.6 + version: 9.105.6(@react-three/fiber@8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(@types/react@18.3.3)(@types/three@0.163.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) '@react-three/fiber': - specifier: ^8.16.3 - version: 8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) + specifier: ^8.16.6 + version: 8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) '@serwist/next': specifier: 9.0.2 - version: 9.0.2(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0))(typescript@5.4.5)(webpack@5.91.0) + version: 9.0.2(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(typescript@5.4.5)(webpack@5.91.0) '@serwist/precaching': specifier: 9.0.2 version: 9.0.2(typescript@5.4.5) @@ -45,11 +43,11 @@ importers: specifier: ^3.0.8 version: 3.0.8 '@theatre/core': - specifier: ^0.7.1 - version: 0.7.1 + specifier: ^0.7.2 + version: 0.7.2 '@theatre/studio': - specifier: ^0.7.1 - version: 0.7.1(@theatre/core@0.7.1) + specifier: ^0.7.2 + version: 0.7.2(@theatre/core@0.7.2) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -61,10 +59,10 @@ importers: version: 1.0.45(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next: specifier: 14.2.3 - version: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0) + version: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) next-sitemap: specifier: ^4.2.3 - version: 4.2.3(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0)) + version: 4.2.3(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)) postprocessing: specifier: ^6.35.4 version: 6.35.4(three@0.164.1) @@ -78,8 +76,8 @@ importers: specifier: ^17.5.0 version: 17.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) sass: - specifier: ^1.76.0 - version: 1.76.0 + specifier: ^1.77.2 + version: 1.77.2 serwist: specifier: 9.0.2 version: 9.0.2(typescript@5.4.5) @@ -100,10 +98,10 @@ importers: version: 0.164.1 tunnel-rat: specifier: ^0.1.2 - version: 0.1.2(@types/react@18.3.1)(react@18.3.1) + version: 0.1.2(@types/react@18.3.3)(react@18.3.1) zustand: specifier: 4.5.2 - version: 4.5.2(@types/react@18.3.1)(react@18.3.1) + version: 4.5.2(@types/react@18.3.3)(react@18.3.1) devDependencies: '@builder.io/partytown': specifier: ^0.10.2 @@ -114,6 +112,9 @@ importers: '@next/bundle-analyzer': specifier: ^14.2.3 version: 14.2.3 + '@next/eslint-plugin-next': + specifier: ^14.2.3 + version: 14.2.3 '@svgr/webpack': specifier: ^8.1.0 version: 8.1.0(typescript@5.4.5) @@ -123,9 +124,6 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 - eslint: - specifier: 8.57.0 - version: 8.57.0 eslint-config-next: specifier: ^14.2.3 version: 14.2.3(eslint@8.57.0)(typescript@5.4.5) @@ -147,9 +145,6 @@ importers: prettier: specifier: ^3.2.5 version: 3.2.5 - prettier-eslint: - specifier: ^16.3.0 - version: 16.3.0 packages: @@ -157,42 +152,42 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + '@babel/code-frame@7.24.6': + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.4': - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + '@babel/compat-data@7.24.6': + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.5': - resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + '@babel/core@7.24.6': + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.5': - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + '@babel/generator@7.24.6': + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/helper-annotate-as-pure@7.24.6': + resolution: {integrity: sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.6': + resolution: {integrity: sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + '@babel/helper-compilation-targets@7.24.6': + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.5': - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + '@babel/helper-create-class-features-plugin@7.24.6': + resolution: {integrity: sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.22.15': - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + '@babel/helper-create-regexp-features-plugin@7.24.6': + resolution: {integrity: sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -202,113 +197,113 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + '@babel/helper-environment-visitor@7.24.6': + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + '@babel/helper-function-name@7.24.6': + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + '@babel/helper-hoist-variables@7.24.6': + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.5': - resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + '@babel/helper-member-expression-to-functions@7.24.6': + resolution: {integrity: sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + '@babel/helper-module-imports@7.24.6': + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.5': - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + '@babel/helper-module-transforms@7.24.6': + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/helper-optimise-call-expression@7.24.6': + resolution: {integrity: sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.5': - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + '@babel/helper-plugin-utils@7.24.6': + resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.22.20': - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + '@babel/helper-remap-async-to-generator@7.24.6': + resolution: {integrity: sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.1': - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + '@babel/helper-replace-supers@7.24.6': + resolution: {integrity: sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.5': - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} + '@babel/helper-simple-access@7.24.6': + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + '@babel/helper-skip-transparent-expression-wrappers@7.24.6': + resolution: {integrity: sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.5': - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + '@babel/helper-split-export-declaration@7.24.6': + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + '@babel/helper-string-parser@7.24.6': + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.5': - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + '@babel/helper-validator-option@7.24.6': + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.24.5': - resolution: {integrity: sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==} + '@babel/helper-wrap-function@7.24.6': + resolution: {integrity: sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.5': - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + '@babel/helpers@7.24.6': + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.5': - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + '@babel/highlight@7.24.6': + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} + '@babel/parser@7.24.6': + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5': - resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.6': + resolution: {integrity: sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1': - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.6': + resolution: {integrity: sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1': - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.6': + resolution: {integrity: sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1': - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.6': + resolution: {integrity: sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -345,14 +340,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.24.1': - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} + '@babel/plugin-syntax-import-assertions@7.24.6': + resolution: {integrity: sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.24.1': - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} + '@babel/plugin-syntax-import-attributes@7.24.6': + resolution: {integrity: sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -367,8 +362,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.1': - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + '@babel/plugin-syntax-jsx@7.24.6': + resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -415,8 +410,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.24.1': - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + '@babel/plugin-syntax-typescript@7.24.6': + resolution: {integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -427,332 +422,332 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.24.1': - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + '@babel/plugin-transform-arrow-functions@7.24.6': + resolution: {integrity: sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.3': - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + '@babel/plugin-transform-async-generator-functions@7.24.6': + resolution: {integrity: sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.1': - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + '@babel/plugin-transform-async-to-generator@7.24.6': + resolution: {integrity: sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.1': - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + '@babel/plugin-transform-block-scoped-functions@7.24.6': + resolution: {integrity: sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.5': - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + '@babel/plugin-transform-block-scoping@7.24.6': + resolution: {integrity: sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.1': - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + '@babel/plugin-transform-class-properties@7.24.6': + resolution: {integrity: sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.4': - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + '@babel/plugin-transform-class-static-block@7.24.6': + resolution: {integrity: sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.5': - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + '@babel/plugin-transform-classes@7.24.6': + resolution: {integrity: sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.1': - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + '@babel/plugin-transform-computed-properties@7.24.6': + resolution: {integrity: sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.5': - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + '@babel/plugin-transform-destructuring@7.24.6': + resolution: {integrity: sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.1': - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + '@babel/plugin-transform-dotall-regex@7.24.6': + resolution: {integrity: sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.1': - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + '@babel/plugin-transform-duplicate-keys@7.24.6': + resolution: {integrity: sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.1': - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + '@babel/plugin-transform-dynamic-import@7.24.6': + resolution: {integrity: sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.1': - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + '@babel/plugin-transform-exponentiation-operator@7.24.6': + resolution: {integrity: sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.1': - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + '@babel/plugin-transform-export-namespace-from@7.24.6': + resolution: {integrity: sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.1': - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + '@babel/plugin-transform-for-of@7.24.6': + resolution: {integrity: sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.1': - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + '@babel/plugin-transform-function-name@7.24.6': + resolution: {integrity: sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.1': - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + '@babel/plugin-transform-json-strings@7.24.6': + resolution: {integrity: sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.1': - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + '@babel/plugin-transform-literals@7.24.6': + resolution: {integrity: sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.1': - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + '@babel/plugin-transform-logical-assignment-operators@7.24.6': + resolution: {integrity: sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.1': - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + '@babel/plugin-transform-member-expression-literals@7.24.6': + resolution: {integrity: sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.1': - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + '@babel/plugin-transform-modules-amd@7.24.6': + resolution: {integrity: sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.1': - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + '@babel/plugin-transform-modules-commonjs@7.24.6': + resolution: {integrity: sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.1': - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + '@babel/plugin-transform-modules-systemjs@7.24.6': + resolution: {integrity: sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.1': - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + '@babel/plugin-transform-modules-umd@7.24.6': + resolution: {integrity: sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + '@babel/plugin-transform-named-capturing-groups-regex@7.24.6': + resolution: {integrity: sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.1': - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + '@babel/plugin-transform-new-target@7.24.6': + resolution: {integrity: sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1': - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.24.6': + resolution: {integrity: sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.1': - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + '@babel/plugin-transform-numeric-separator@7.24.6': + resolution: {integrity: sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.5': - resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} + '@babel/plugin-transform-object-rest-spread@7.24.6': + resolution: {integrity: sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.1': - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + '@babel/plugin-transform-object-super@7.24.6': + resolution: {integrity: sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.1': - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + '@babel/plugin-transform-optional-catch-binding@7.24.6': + resolution: {integrity: sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.5': - resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} + '@babel/plugin-transform-optional-chaining@7.24.6': + resolution: {integrity: sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.5': - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + '@babel/plugin-transform-parameters@7.24.6': + resolution: {integrity: sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.24.1': - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + '@babel/plugin-transform-private-methods@7.24.6': + resolution: {integrity: sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.5': - resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} + '@babel/plugin-transform-private-property-in-object@7.24.6': + resolution: {integrity: sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.1': - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + '@babel/plugin-transform-property-literals@7.24.6': + resolution: {integrity: sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.24.1': - resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} + '@babel/plugin-transform-react-constant-elements@7.24.6': + resolution: {integrity: sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.24.1': - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + '@babel/plugin-transform-react-display-name@7.24.6': + resolution: {integrity: sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.22.5': - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + '@babel/plugin-transform-react-jsx-development@7.24.6': + resolution: {integrity: sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.23.4': - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + '@babel/plugin-transform-react-jsx@7.24.6': + resolution: {integrity: sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.24.1': - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + '@babel/plugin-transform-react-pure-annotations@7.24.6': + resolution: {integrity: sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.1': - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + '@babel/plugin-transform-regenerator@7.24.6': + resolution: {integrity: sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.1': - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + '@babel/plugin-transform-reserved-words@7.24.6': + resolution: {integrity: sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.1': - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + '@babel/plugin-transform-shorthand-properties@7.24.6': + resolution: {integrity: sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.1': - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + '@babel/plugin-transform-spread@7.24.6': + resolution: {integrity: sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.1': - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + '@babel/plugin-transform-sticky-regex@7.24.6': + resolution: {integrity: sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.1': - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + '@babel/plugin-transform-template-literals@7.24.6': + resolution: {integrity: sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.5': - resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} + '@babel/plugin-transform-typeof-symbol@7.24.6': + resolution: {integrity: sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.5': - resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} + '@babel/plugin-transform-typescript@7.24.6': + resolution: {integrity: sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.1': - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + '@babel/plugin-transform-unicode-escapes@7.24.6': + resolution: {integrity: sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.1': - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + '@babel/plugin-transform-unicode-property-regex@7.24.6': + resolution: {integrity: sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.1': - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + '@babel/plugin-transform-unicode-regex@7.24.6': + resolution: {integrity: sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.1': - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + '@babel/plugin-transform-unicode-sets-regex@7.24.6': + resolution: {integrity: sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.5': - resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} + '@babel/preset-env@7.24.6': + resolution: {integrity: sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -762,14 +757,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.24.1': - resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} + '@babel/preset-react@7.24.6': + resolution: {integrity: sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.24.1': - resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + '@babel/preset-typescript@7.24.6': + resolution: {integrity: sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -777,20 +772,20 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.24.5': - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + '@babel/runtime@7.24.6': + resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + '@babel/template@7.24.6': + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.5': - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + '@babel/traverse@7.24.6': + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.5': - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + '@babel/types@7.24.6': + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} engines: {node: '>=6.9.0'} '@builder.io/partytown@0.10.2': @@ -807,8 +802,8 @@ packages: '@corex/deepmerge@4.0.43': resolution: {integrity: sha512-N8uEMrMPL0cu/bdboEWpQYb/0i2K5Qn8eCsxzOmxSggJbbQte7ljMRoXm917AbntqTGOzdTu+vP3KOOzoC70HQ==} - '@darkroom.engineering/hamo@0.6.36': - resolution: {integrity: sha512-3bOiPKYuWCyjKrx5n8GUzXwZx54ZgdCCnVWpng+xkBSir3WaSCmhokPLI9EntKxV7L4AEJgWuto1UOt3Er4uPQ==} + '@darkroom.engineering/hamo@0.6.42': + resolution: {integrity: sha512-0gCcAF/3yUzmxNrafL7Gzho8obXTrYQBnxYMKdoXtM9PfHIPB0QvJQRIss2CG+8zVazT6JHmwPKQviykok+g0g==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' @@ -824,7 +819,7 @@ packages: resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: - eslint: 8.57.0 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 '@eslint-community/regexpp@4.10.0': resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} @@ -838,14 +833,14 @@ packages: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@floating-ui/core@1.6.1': - resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==} + '@floating-ui/core@1.6.2': + resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} - '@floating-ui/dom@1.6.4': - resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==} + '@floating-ui/dom@1.6.5': + resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} - '@floating-ui/react-dom@2.0.9': - resolution: {integrity: sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==} + '@floating-ui/react-dom@2.1.0': + resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' @@ -868,10 +863,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -1263,8 +1254,8 @@ packages: '@react-spring/types@9.6.1': resolution: {integrity: sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==} - '@react-three/drei@9.105.5': - resolution: {integrity: sha512-qo5ys8y1tNJ9cUloBXJHvtMLVY7mrH8XAgLzFxo6Wr6IzJM3lAOcOucbZehpl/6iZFmWaqbhLXg/YTQpHUJpEQ==} + '@react-three/drei@9.105.6': + resolution: {integrity: sha512-JBgYeV36N9N9f1c3o1ZfLYW4rXZA7UQTq32Y8s3DEF6lwj1/y+RP/yq2VG5I8OzUPl7gsmWdy8fpWZgrlAqUpQ==} peerDependencies: '@react-three/fiber': '>=8.0' react: '>=18.0' @@ -1274,8 +1265,8 @@ packages: react-dom: optional: true - '@react-three/fiber@8.16.3': - resolution: {integrity: sha512-jg37AH0xmJEGbCk7qgO3EwB99UTNVekYYU/1+D5xNPFAn+fPqkUUaHalriaY+S3HLtBy33HYVOenbD9ZKLyC/Q==} + '@react-three/fiber@8.16.6': + resolution: {integrity: sha512-sKEqocYKRI3deW7z9CAVjedDID1an2i8FwxQVv2reMJxzIxIlyxCYXMIAqXBCgHTFtVX2hWGTZYhLL5nyne8kA==} peerDependencies: expo: '>=43.0' expo-asset: '>=8.4' @@ -1379,8 +1370,8 @@ packages: cpu: [x64] os: [win32] - '@rushstack/eslint-patch@1.10.2': - resolution: {integrity: sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==} + '@rushstack/eslint-patch@1.10.3': + resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} '@serwist/build@9.0.2': resolution: {integrity: sha512-ONKBAXMLjohjWNjhG+bc+sIiKcqSfZ0ApT2M0s6l9mbCrGE8KR/p4lD32ienYbP4whvHE4ro/RQABXIUoqtZmg==} @@ -1437,9 +1428,6 @@ packages: typescript: optional: true - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@storyblok/js@3.0.8': resolution: {integrity: sha512-JY+abbswBId84Ubr0yRwNpq5Klf9546Ia2Qs1pn6en5Trz8o6EcBJIwxvR6evjJ0Vp2cLKT7MV1yfGLAtnzycA==} @@ -1527,14 +1515,14 @@ packages: '@swc/helpers@0.5.5': resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} - '@theatre/core@0.7.1': - resolution: {integrity: sha512-745IbKZURz5TlG9QQqtq3TClTlH2kfc1ZhIwP6sh4JAJW/XR4r5KEC2mZx0q2izWDLKMAz4ZrIs8URIdM6Km1w==} + '@theatre/core@0.7.2': + resolution: {integrity: sha512-IDQa/6WY7mIJAtsSd4EgNcM0IUZkl+FrqZ8DdYiCVTFap9ARDNmrngJOeFjJOsnnaHlc5GdEB/jj7fsjbIrAzQ==} - '@theatre/dataverse@0.7.1': - resolution: {integrity: sha512-cl/uVuXQTYVfcdbBX/GYrZNNpJsvbXEwRaFHUj5zEnyLBuJMO+xCDl9bfRx6Sysdr6HcGJvFuekP0gdmTWK+bA==} + '@theatre/dataverse@0.7.2': + resolution: {integrity: sha512-YyfoyX7EyhFUY2OM5fsM0LPrs1SdgLwpiTMkkvTIoZLdOwvQhstjYq4Yz/8ZncJlRoTWvakfmgvCaBN+QuBYxg==} - '@theatre/studio@0.7.1': - resolution: {integrity: sha512-e2Of4XRjbq9ytyvYuC3pqn6QYTrOt3dRLTzzUFCMAefIIqbBN/mPUVtZElTDjHbTyNZMTRupRnL9AizAK7Afzw==} + '@theatre/studio@0.7.2': + resolution: {integrity: sha512-p6LTKzJWVlcHkpGzIlNHh9AkGbB3E+0q9Pjxv+OJoTDe1IK+CMKW695Wp+1//lB4vfC9qShe4z/p+Zaj1q8KtA==} peerDependencies: '@theatre/core': '*' @@ -1542,11 +1530,11 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@tweenjs/tween.js@23.1.1': - resolution: {integrity: sha512-ZpboH7pCPPeyBWKf8c7TJswtCEQObFo3bOBYalm99NzZarATALYCo5OhbCa/n4RQyJyHfhkdx+hNrdL5ByFYDw==} + '@tweenjs/tween.js@23.1.2': + resolution: {integrity: sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ==} - '@types/draco3d@1.4.9': - resolution: {integrity: sha512-4MMUjMQb4yA5fJ4osXx+QxGHt0/ZSy4spT6jL1HM7Tn8OJEC35siqdnpOo+HxPhYjqEFumKfGVF9hJfdyKBIBA==} + '@types/draco3d@1.4.10': + resolution: {integrity: sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw==} '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -1566,8 +1554,8 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@20.12.7': - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + '@types/node@20.12.12': + resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} '@types/offscreencanvas@2019.7.3': resolution: {integrity: sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==} @@ -1581,8 +1569,8 @@ packages: '@types/react-reconciler@0.28.8': resolution: {integrity: sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g==} - '@types/react@18.3.1': - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@18.3.3': + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} '@types/stats.js@0.17.3': resolution: {integrity: sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==} @@ -1593,54 +1581,27 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@types/webxr@0.5.15': - resolution: {integrity: sha512-nC9116Gd4N+CqTxqo6gvCfhAMAzgRcfS8ZsciNodHq8uwW4JCVKwhagw8yN0XmC7mHrLnWqniJpoVEiR+72Drw==} - - '@typescript-eslint/parser@6.21.0': - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: 8.57.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@types/webxr@0.5.16': + resolution: {integrity: sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA==} '@typescript-eslint/parser@7.2.0': resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: 8.57.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/scope-manager@7.2.0': resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/types@7.2.0': resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@7.2.0': resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1650,10 +1611,6 @@ packages: typescript: optional: true - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/visitor-keys@7.2.0': resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1754,10 +1711,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1766,10 +1719,6 @@ packages: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1778,10 +1727,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1889,8 +1834,8 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} browserslist@4.23.0: @@ -1925,12 +1870,8 @@ packages: peerDependencies: three: '>=0.126.1' - caniuse-lite@1.0.30001614: - resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} - - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} + caniuse-lite@1.0.30001623: + resolution: {integrity: sha512-X/XhAVKlpIxWPpgRTnlgZssJrF0m6YtRA0QDWgsBNT12uZM6LPRydR7ip405Y3t1LamD8cP2TZFEDZFBf5ApcA==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -2000,8 +1941,8 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - core-js-compat@3.37.0: - resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} + core-js-compat@3.37.1: + resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} @@ -2121,9 +2062,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2165,8 +2103,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.752: - resolution: {integrity: sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==} + electron-to-chromium@1.4.783: + resolution: {integrity: sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2174,8 +2112,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + enhanced-resolve@5.16.1: + resolution: {integrity: sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -2204,8 +2142,8 @@ packages: resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.2: - resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} + es-module-lexer@1.5.3: + resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -2237,7 +2175,7 @@ packages: eslint-config-next@14.2.3: resolution: {integrity: sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==} peerDependencies: - eslint: 8.57.0 + eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' peerDependenciesMeta: typescript: @@ -2247,7 +2185,7 @@ packages: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: - eslint: 8.57.0 + eslint: '>=7.0.0' eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -2256,7 +2194,7 @@ packages: resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: 8.57.0 + eslint: '*' eslint-plugin-import: '*' eslint-module-utils@2.8.1: @@ -2285,7 +2223,7 @@ packages: engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: 8.57.0 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 peerDependenciesMeta: '@typescript-eslint/parser': optional: true @@ -2294,19 +2232,19 @@ packages: resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} engines: {node: '>=4.0'} peerDependencies: - eslint: 8.57.0 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 eslint-plugin-react-hooks@4.6.2: resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: - eslint: 8.57.0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 eslint-plugin-react@7.34.1: resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} engines: {node: '>=4'} peerDependencies: - eslint: 8.57.0 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -2391,8 +2329,8 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} find-root@1.1.0: @@ -2467,8 +2405,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -2493,6 +2431,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -2529,10 +2468,6 @@ packages: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -2584,8 +2519,8 @@ packages: engines: {node: '>=18'} hasBin: true - hyphenate-style-name@1.0.4: - resolution: {integrity: sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==} + hyphenate-style-name@1.0.5: + resolution: {integrity: sha512-fedL7PRwmeVkgyhu9hLeTBaI6wcGk7JGJswdaRsa5aUbkXI1kr1xZwTPBtaYPpwf56878iDek6VbVnuWMebJmw==} idb@8.0.0: resolution: {integrity: sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==} @@ -2600,8 +2535,8 @@ packages: immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@4.3.5: - resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} + immutable@4.3.6: + resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -2611,12 +2546,9 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -2827,8 +2759,8 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} language-tags@1.0.9: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} @@ -2886,16 +2818,6 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - loglevel-colored-level-prefix@1.0.0: - resolution: {integrity: sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==} - - loglevel@1.9.1: - resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} - engines: {node: '>= 0.6.0'} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2910,10 +2832,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - maath@0.10.7: resolution: {integrity: sha512-zQ2xd7dNOIVTjAS+hj22fyj1EFYmOJX6tzKjZ92r6WDoq8hyFxjuGA2q950tmR4iC/EKXoMQdSipkaJVuUHDTg==} peerDependencies: @@ -2948,8 +2866,8 @@ packages: meshoptimizer@0.18.1: resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -2974,8 +2892,8 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} mrmime@2.0.0: @@ -3147,9 +3065,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -3159,8 +3077,8 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -3203,18 +3121,6 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-eslint@16.3.0: - resolution: {integrity: sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==} - engines: {node: '>=16.10.0'} - peerDependencies: - prettier-plugin-svelte: ^3.0.0 - svelte-eslint-parser: '*' - peerDependenciesMeta: - prettier-plugin-svelte: - optional: true - svelte-eslint-parser: - optional: true - prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} @@ -3224,10 +3130,6 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - promise-worker-transferable@1.0.4: resolution: {integrity: sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw==} @@ -3257,9 +3159,6 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: - resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-reconciler@0.27.0: resolution: {integrity: sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==} engines: {node: '>=0.10.0'} @@ -3363,9 +3262,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-relative@0.8.7: - resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -3393,6 +3289,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@4.14.3: @@ -3417,8 +3314,8 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} - sass@1.76.0: - resolution: {integrity: sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==} + sass@1.77.2: + resolution: {integrity: sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==} engines: {node: '>=14.0.0'} hasBin: true @@ -3441,8 +3338,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true @@ -3535,8 +3432,8 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -3595,10 +3492,6 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3631,10 +3524,6 @@ packages: stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3659,8 +3548,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@3.2.0: - resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} engines: {node: '>=14.0.0'} hasBin: true @@ -3700,8 +3589,8 @@ packages: peerDependencies: three: '>= 0.151.0' - three-stdlib@2.29.10: - resolution: {integrity: sha512-zFPNF6oALvlyKmoKwxcfC8PyIS7z55DVgMs0CoKZGcTuFnKIW5nR50t/ozaoLaf9qt+Q7DfpfqsYLMbJeHzuaA==} + three-stdlib@2.30.1: + resolution: {integrity: sha512-3WHpc6rB5aiqkrbVA0h09NcwwCdcZ/bTN/01BbjcxzLQLjclhi163JUA02VZ93jR5zN7und6gfrWwewNHQTMog==} peerDependencies: three: '>=0.128.0' @@ -3820,8 +3709,8 @@ packages: resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} engines: {node: '>=4'} - update-browserslist-db@1.0.14: - resolution: {integrity: sha512-JixKH8GR2pWYshIPUg/NujK3JO7JiqEEUiNArE86NQyrgUuZeTlZQN3xuS/yiV5Kb48ev9K6RqNkaJjXsdg7Jw==} + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3865,12 +3754,6 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vue-eslint-parser@9.4.2: - resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} - engines: {node: ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: 8.57.0 - watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -3964,9 +3847,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -4013,25 +3893,25 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.24.2': + '@babel/code-frame@7.24.6': dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.0 + '@babel/highlight': 7.24.6 + picocolors: 1.0.1 - '@babel/compat-data@7.24.4': {} + '@babel/compat-data@7.24.6': {} - '@babel/core@7.24.5': + '@babel/core@7.24.6': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -4040,753 +3920,750 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.24.5': + '@babel/generator@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-annotate-as-pure@7.22.5': + '@babel/helper-annotate-as-pure@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-compilation-targets@7.23.6': + '@babel/helper-compilation-targets@7.24.6': dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-create-class-features-plugin@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-member-expression-to-functions': 7.24.6 + '@babel/helper-optimise-call-expression': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 semver: 6.3.1 - '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5)': + '@babel/helper-create-regexp-features-plugin@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.22.20': {} + '@babel/helper-environment-visitor@7.24.6': {} - '@babel/helper-function-name@7.23.0': + '@babel/helper-function-name@7.24.6': dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 - '@babel/helper-hoist-variables@7.22.5': + '@babel/helper-hoist-variables@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-member-expression-to-functions@7.24.5': + '@babel/helper-member-expression-to-functions@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-module-imports@7.24.3': + '@babel/helper-module-imports@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': + '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 - '@babel/helper-optimise-call-expression@7.22.5': + '@babel/helper-optimise-call-expression@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-plugin-utils@7.24.5': {} + '@babel/helper-plugin-utils@7.24.6': {} - '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5)': + '@babel/helper-remap-async-to-generator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-wrap-function': 7.24.6 - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5)': + '@babel/helper-replace-supers@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-member-expression-to-functions': 7.24.6 + '@babel/helper-optimise-call-expression': 7.24.6 - '@babel/helper-simple-access@7.24.5': + '@babel/helper-simple-access@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + '@babel/helper-skip-transparent-expression-wrappers@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-split-export-declaration@7.24.5': + '@babel/helper-split-export-declaration@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.24.6': {} - '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.24.6': {} - '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.24.6': {} - '@babel/helper-wrap-function@7.24.5': + '@babel/helper-wrap-function@7.24.6': dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/helper-function-name': 7.24.6 + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 - '@babel/helpers@7.24.5': + '@babel/helpers@7.24.6': dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 - '@babel/highlight@7.24.5': + '@babel/highlight@7.24.6': dependencies: - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-validator-identifier': 7.24.6 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 - '@babel/parser@7.24.5': + '@babel/parser@7.24.6': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + '@babel/plugin-transform-optional-chaining': 7.24.6(@babel/core@7.24.6) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-assertions@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-attributes@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-arrow-functions@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5)': + '@babel/plugin-transform-async-generator-functions@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-remap-async-to-generator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) - '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-async-to-generator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-remap-async-to-generator': 7.24.6(@babel/core@7.24.6) - '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoped-functions@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoping@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-class-properties@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5)': + '@babel/plugin-transform-class-static-block@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.6) - '@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-classes@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) + '@babel/helper-split-export-declaration': 7.24.6 globals: 11.12.0 - '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-computed-properties@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/template': 7.24.6 - '@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-destructuring@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dotall-regex@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-keys@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dynamic-import@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-exponentiation-operator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-export-namespace-from@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-for-of@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 - '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-function-name@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-json-strings@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-literals@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-logical-assignment-operators@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6) - '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-member-expression-literals@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-amd@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-commonjs@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-simple-access': 7.24.6 - '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-systemjs@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 - '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-umd@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-new-target@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-numeric-separator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6) - '@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-object-rest-spread@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-transform-parameters': 7.24.6(@babel/core@7.24.6) - '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-object-super@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-replace-supers': 7.24.6(@babel/core@7.24.6) - '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-catch-binding@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-chaining@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) - '@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-parameters@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-private-methods@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-private-property-in-object@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.6) - '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-property-literals@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-constant-elements@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-display-name@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.5)': + '@babel/plugin-transform-react-jsx-development@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6) - '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5)': + '@babel/plugin-transform-react-jsx@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/types': 7.24.6 - '@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-pure-annotations@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 - '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-regenerator@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - - '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) - - '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/preset-env@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.37.0 + '@babel/plugin-transform-reserved-words@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-shorthand-properties@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-spread@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.6 + + '@babel/plugin-transform-sticky-regex@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-template-literals@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-typeof-symbol@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-typescript@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-annotate-as-pure': 7.24.6 + '@babel/helper-create-class-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + '@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6) + + '@babel/plugin-transform-unicode-escapes@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-unicode-property-regex@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-unicode-regex@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-transform-unicode-sets-regex@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-create-regexp-features-plugin': 7.24.6(@babel/core@7.24.6) + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/preset-env@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/core': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-import-assertions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-import-attributes': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.6) + '@babel/plugin-transform-arrow-functions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-async-generator-functions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-async-to-generator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-block-scoped-functions': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-block-scoping': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-class-properties': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-class-static-block': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-classes': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-computed-properties': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-destructuring': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-dotall-regex': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-duplicate-keys': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-dynamic-import': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-exponentiation-operator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-export-namespace-from': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-for-of': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-function-name': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-json-strings': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-logical-assignment-operators': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-member-expression-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-amd': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-commonjs': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-systemjs': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-umd': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-new-target': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-numeric-separator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-object-rest-spread': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-object-super': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-optional-catch-binding': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-optional-chaining': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-parameters': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-private-methods': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-private-property-in-object': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-property-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-regenerator': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-reserved-words': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-shorthand-properties': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-spread': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-sticky-regex': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-template-literals': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-typeof-symbol': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-unicode-escapes': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-unicode-property-regex': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-unicode-regex': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-unicode-sets-regex': 7.24.6(@babel/core@7.24.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.6) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.6) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.6) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.6) + core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/types': 7.24.6 esutils: 2.0.3 - '@babel/preset-react@7.24.1(@babel/core@7.24.5)': + '@babel/preset-react@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + '@babel/plugin-transform-react-display-name': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-jsx-development': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-react-pure-annotations': 7.24.6(@babel/core@7.24.6) - '@babel/preset-typescript@7.24.1(@babel/core@7.24.5)': + '@babel/preset-typescript@7.24.6(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-modules-commonjs': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-transform-typescript': 7.24.6(@babel/core@7.24.6) '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.24.5': + '@babel/runtime@7.24.6': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.0': + '@babel/template@7.24.6': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 - '@babel/traverse@7.24.5': + '@babel/traverse@7.24.6': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.5': + '@babel/types@7.24.6': dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 to-fast-properties: 2.0.0 '@builder.io/partytown@0.10.2': {} @@ -4796,12 +4673,12 @@ snapshots: chalk: 4.1.2 find-root: 1.1.0 lodash.groupby: 4.6.0 - semver: 7.6.0 + semver: 7.6.2 webpack: 5.91.0 '@corex/deepmerge@4.0.43': {} - '@darkroom.engineering/hamo@0.6.36(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@darkroom.engineering/hamo@0.6.42(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@darkroom.engineering/tempus': 0.0.46 just-debounce-it: 3.2.0 @@ -4836,18 +4713,18 @@ snapshots: '@eslint/js@8.57.0': {} - '@floating-ui/core@1.6.1': + '@floating-ui/core@1.6.2': dependencies: '@floating-ui/utils': 0.2.2 - '@floating-ui/dom@1.6.4': + '@floating-ui/dom@1.6.5': dependencies: - '@floating-ui/core': 1.6.1 + '@floating-ui/core': 1.6.2 '@floating-ui/utils': 0.2.2 - '@floating-ui/react-dom@2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@floating-ui/react-dom@2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.4 + '@floating-ui/dom': 1.6.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -4874,10 +4751,6 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jest/schemas@29.6.3': - dependencies: - '@sinclair/typebox': 0.27.8 - '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -4949,9 +4822,9 @@ snapshots: '@next/swc-win32-x64-msvc@14.2.3': optional: true - '@next/third-parties@14.2.3(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0))(react@18.3.1)': + '@next/third-parties@14.2.3(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(react@18.3.1)': dependencies: - next: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) react: 18.3.1 third-party-capital: 1.0.20 @@ -4974,231 +4847,231 @@ snapshots: '@radix-ui/number@1.0.1': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 - '@radix-ui/react-arrow@1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-arrow@1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-collection@1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-collection@1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-context@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-direction@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-direction@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.1)(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-focus-scope@1.0.4(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-focus-scope@1.0.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-id@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 - - '@radix-ui/react-popper@1.1.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/runtime': 7.24.5 - '@floating-ui/react-dom': 2.0.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-arrow': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@types/react': 18.3.3 + + '@radix-ui/react-popper@1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.24.6 + '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/rect': 1.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-portal@1.0.4(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-portal@1.0.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-primitive@1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-primitive@1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-select@2.0.0(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-select@2.0.0(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-context': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-direction': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-id': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-popper': 1.1.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-portal': 1.0.4(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.1)(react@18.3.1) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collection': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-direction': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.0.5(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.0.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-popper': 1.1.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.0.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-use-previous': 1.0.1(@types/react@18.3.3)(react@18.3.1) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) aria-hidden: 1.2.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.5.5(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll: 2.5.5(@types/react@18.3.3)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-slot@1.0.2(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-previous@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-rect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@radix-ui/rect': 1.0.1 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-use-size@1.0.1(@types/react@18.3.1)(react@18.3.1)': + '@radix-ui/react-use-size@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.1)(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@radix-ui/react-visually-hidden@1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@radix-ui/react-visually-hidden@1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.5 - '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@babel/runtime': 7.24.6 + '@radix-ui/react-primitive': 1.0.3(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 '@radix-ui/rect@1.0.1': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@react-spring/animated@9.6.1(react@18.3.1)': dependencies: @@ -5222,25 +5095,25 @@ snapshots: '@react-spring/types': 9.6.1 react: 18.3.1 - '@react-spring/three@9.6.1(@react-three/fiber@8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(react@18.3.1)(three@0.164.1)': + '@react-spring/three@9.6.1(@react-three/fiber@8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(react@18.3.1)(three@0.164.1)': dependencies: '@react-spring/animated': 9.6.1(react@18.3.1) '@react-spring/core': 9.6.1(react@18.3.1) '@react-spring/shared': 9.6.1(react@18.3.1) '@react-spring/types': 9.6.1 - '@react-three/fiber': 8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) + '@react-three/fiber': 8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) react: 18.3.1 three: 0.164.1 '@react-spring/types@9.6.1': {} - '@react-three/drei@9.105.5(@react-three/fiber@8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(@types/react@18.3.1)(@types/three@0.163.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1)': + '@react-three/drei@9.105.6(@react-three/fiber@8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(@types/react@18.3.3)(@types/three@0.163.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@mediapipe/tasks-vision': 0.10.8 '@monogrid/gainmap-js': 3.0.5(three@0.164.1) - '@react-spring/three': 9.6.1(@react-three/fiber@8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(react@18.3.1)(three@0.164.1) - '@react-three/fiber': 8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) + '@react-spring/three': 9.6.1(@react-three/fiber@8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1))(react@18.3.1)(three@0.164.1) + '@react-three/fiber': 8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1) '@use-gesture/react': 10.3.1(react@18.3.1) camera-controls: 2.8.3(three@0.164.1) cross-env: 7.0.3 @@ -5256,9 +5129,9 @@ snapshots: suspend-react: 0.1.3(react@18.3.1) three: 0.164.1 three-mesh-bvh: 0.7.4(three@0.164.1) - three-stdlib: 2.29.10(three@0.164.1) + three-stdlib: 2.30.1(three@0.164.1) troika-three-text: 0.49.1(three@0.164.1) - tunnel-rat: 0.1.2(@types/react@18.3.1)(react@18.3.1) + tunnel-rat: 0.1.2(@types/react@18.3.3)(react@18.3.1) utility-types: 3.11.0 uuid: 9.0.1 zustand: 3.7.2(react@18.3.1) @@ -5269,11 +5142,11 @@ snapshots: - '@types/three' - immer - '@react-three/fiber@8.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1)': + '@react-three/fiber@8.16.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(three@0.164.1)': dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 '@types/react-reconciler': 0.26.7 - '@types/webxr': 0.5.15 + '@types/webxr': 0.5.16 base64-js: 1.5.1 buffer: 6.0.3 its-fine: 1.2.5(react@18.3.1) @@ -5335,7 +5208,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.14.3': optional: true - '@rushstack/eslint-patch@1.10.2': {} + '@rushstack/eslint-patch@1.10.3': {} '@serwist/build@9.0.2(typescript@5.4.5)': dependencies: @@ -5351,14 +5224,14 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@serwist/next@9.0.2(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0))(typescript@5.4.5)(webpack@5.91.0)': + '@serwist/next@9.0.2(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2))(typescript@5.4.5)(webpack@5.91.0)': dependencies: '@serwist/build': 9.0.2(typescript@5.4.5) '@serwist/webpack-plugin': 9.0.2(typescript@5.4.5)(webpack@5.91.0) '@serwist/window': 9.0.2(typescript@5.4.5) chalk: 5.3.0 glob: 10.3.12 - next: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) serwist: 9.0.2(typescript@5.4.5) zod: 3.22.4 optionalDependencies: @@ -5395,60 +5268,58 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@sinclair/typebox@0.27.8': {} - '@storyblok/js@3.0.8': dependencies: storyblok-js-client: 6.7.3 - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 - '@svgr/babel-preset@8.1.0(@babel/core@7.24.5)': + '@svgr/babel-preset@8.1.0(@babel/core@7.24.6)': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.5) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.6) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.6) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.6) '@svgr/core@8.1.0(typescript@5.4.5)': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.6) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.4.5) snake-case: 3.0.4 @@ -5458,13 +5329,13 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.6 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.4.5))': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@svgr/babel-preset': 8.1.0(@babel/core@7.24.6) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -5476,17 +5347,17 @@ snapshots: '@svgr/core': 8.1.0(typescript@5.4.5) cosmiconfig: 8.3.6(typescript@5.4.5) deepmerge: 4.3.1 - svgo: 3.2.0 + svgo: 3.3.2 transitivePeerDependencies: - typescript '@svgr/webpack@8.1.0(typescript@5.4.5)': dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-react': 7.24.1(@babel/core@7.24.5) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/plugin-transform-react-constant-elements': 7.24.6(@babel/core@7.24.6) + '@babel/preset-env': 7.24.6(@babel/core@7.24.6) + '@babel/preset-react': 7.24.6(@babel/core@7.24.6) + '@babel/preset-typescript': 7.24.6(@babel/core@7.24.6) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5))(typescript@5.4.5) @@ -5501,24 +5372,24 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.6.2 - '@theatre/core@0.7.1': + '@theatre/core@0.7.2': dependencies: - '@theatre/dataverse': 0.7.1 + '@theatre/dataverse': 0.7.2 - '@theatre/dataverse@0.7.1': + '@theatre/dataverse@0.7.2': dependencies: lodash-es: 4.17.21 - '@theatre/studio@0.7.1(@theatre/core@0.7.1)': + '@theatre/studio@0.7.2(@theatre/core@0.7.2)': dependencies: - '@theatre/core': 0.7.1 - '@theatre/dataverse': 0.7.1 + '@theatre/core': 0.7.2 + '@theatre/dataverse': 0.7.2 '@trysound/sax@0.2.0': {} - '@tweenjs/tween.js@23.1.1': {} + '@tweenjs/tween.js@23.1.2': {} - '@types/draco3d@1.4.9': {} + '@types/draco3d@1.4.10': {} '@types/eslint-scope@3.7.7': dependencies: @@ -5538,7 +5409,7 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@20.12.7': + '@types/node@20.12.12': dependencies: undici-types: 5.26.5 @@ -5548,13 +5419,13 @@ snapshots: '@types/react-reconciler@0.26.7': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 '@types/react-reconciler@0.28.8': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - '@types/react@18.3.1': + '@types/react@18.3.3': dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 @@ -5563,28 +5434,15 @@ snapshots: '@types/three@0.163.0': dependencies: - '@tweenjs/tween.js': 23.1.1 + '@tweenjs/tween.js': 23.1.2 '@types/stats.js': 0.17.3 - '@types/webxr': 0.5.15 + '@types/webxr': 0.5.16 fflate: 0.8.2 meshoptimizer: 0.18.1 '@types/trusted-types@2.0.7': {} - '@types/webxr@0.5.15': {} - - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color + '@types/webxr@0.5.16': {} '@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: @@ -5599,35 +5457,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/scope-manager@7.2.0': dependencies: '@typescript-eslint/types': 7.2.0 '@typescript-eslint/visitor-keys': 7.2.0 - '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/types@7.2.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5)': dependencies: '@typescript-eslint/types': 7.2.0 @@ -5636,18 +5472,13 @@ snapshots: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.2.0': dependencies: '@typescript-eslint/types': 7.2.0 @@ -5769,14 +5600,10 @@ snapshots: ansi-colors@4.1.3: {} - ansi-regex@2.1.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} - ansi-styles@2.2.1: {} - ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -5785,8 +5612,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} anymatch@3.1.3: @@ -5890,27 +5715,27 @@ snapshots: dependencies: dequal: 2.0.3 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.6): dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/compat-data': 7.24.6 + '@babel/core': 7.24.6 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.6) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.6): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.37.0 + '@babel/core': 7.24.6 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.6) + core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.6): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.24.6 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.6) transitivePeerDependencies: - supports-color @@ -5935,16 +5760,16 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 browserslist@4.23.0: dependencies: - caniuse-lite: 1.0.30001614 - electron-to-chromium: 1.4.752 + caniuse-lite: 1.0.30001623 + electron-to-chromium: 1.4.783 node-releases: 2.0.14 - update-browserslist-db: 1.0.14(browserslist@4.23.0) + update-browserslist-db: 1.0.16(browserslist@4.23.0) buffer-from@1.1.2: {} @@ -5973,15 +5798,7 @@ snapshots: dependencies: three: 0.164.1 - caniuse-lite@1.0.30001614: {} - - chalk@1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 + caniuse-lite@1.0.30001623: {} chalk@2.4.2: dependencies: @@ -5999,7 +5816,7 @@ snapshots: chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -6048,7 +5865,7 @@ snapshots: dependencies: toggle-selection: 1.0.6 - core-js-compat@3.37.0: + core-js-compat@3.37.1: dependencies: browserslist: 4.23.0 @@ -6091,7 +5908,7 @@ snapshots: css-in-js-utils@3.1.0: dependencies: - hyphenate-style-name: 1.0.4 + hyphenate-style-name: 1.0.5 css-select@5.1.0: dependencies: @@ -6182,8 +5999,6 @@ snapshots: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -6227,13 +6042,13 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.752: {} + electron-to-chromium@1.4.783: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - enhanced-resolve@5.16.0: + enhanced-resolve@5.16.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -6320,7 +6135,7 @@ snapshots: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - es-module-lexer@1.5.2: {} + es-module-lexer@1.5.3: {} es-object-atoms@1.0.0: dependencies: @@ -6351,7 +6166,7 @@ snapshots: eslint-config-next@14.2.3(eslint@8.57.0)(typescript@5.4.5): dependencies: '@next/eslint-plugin-next': 14.2.3 - '@rushstack/eslint-patch': 1.10.2 + '@rushstack/eslint-patch': 1.10.3 '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -6381,12 +6196,12 @@ snapshots: eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: debug: 4.3.4 - enhanced-resolve: 5.16.0 + enhanced-resolve: 5.16.1 eslint: 8.57.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.3 + get-tsconfig: 4.7.5 is-core-module: 2.13.1 is-glob: 4.0.3 transitivePeerDependencies: @@ -6435,7 +6250,7 @@ snapshots: eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -6566,7 +6381,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 fast-json-stable-stringify@2.1.0: {} @@ -6590,7 +6405,7 @@ snapshots: dependencies: flat-cache: 3.2.0 - fill-range@7.0.1: + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -6662,7 +6477,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: + get-tsconfig@4.7.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -6681,16 +6496,16 @@ snapshots: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 glob@10.3.12: dependencies: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.2 + minipass: 7.1.2 + path-scurry: 1.11.1 glob@7.2.3: dependencies: @@ -6737,10 +6552,6 @@ snapshots: dependencies: duplexer: 0.1.2 - has-ansi@2.0.0: - dependencies: - ansi-regex: 2.1.1 - has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -6786,7 +6597,7 @@ snapshots: husky@9.0.11: {} - hyphenate-style-name@1.0.4: {} + hyphenate-style-name@1.0.5: {} idb@8.0.0: {} @@ -6796,7 +6607,7 @@ snapshots: immediate@3.0.6: {} - immutable@4.3.5: {} + immutable@4.3.6: {} import-fresh@3.3.0: dependencies: @@ -6805,8 +6616,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -6958,7 +6767,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.12 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -7009,11 +6818,11 @@ snapshots: dependencies: json-buffer: 3.0.1 - language-subtag-registry@0.3.22: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 lenis@1.0.45(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -7065,15 +6874,6 @@ snapshots: lodash.sortby@4.7.0: {} - lodash@4.17.21: {} - - loglevel-colored-level-prefix@1.0.0: - dependencies: - chalk: 1.1.3 - loglevel: 1.9.1 - - loglevel@1.9.1: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -7088,10 +6888,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - maath@0.10.7(@types/three@0.163.0)(three@0.164.1): dependencies: '@types/three': 0.163.0 @@ -7115,9 +6911,9 @@ snapshots: meshoptimizer@0.18.1: {} - micromatch@4.0.5: + micromatch@4.0.7: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 mime-db@1.52.0: {} @@ -7140,7 +6936,7 @@ snapshots: minimist@1.2.8: {} - minipass@7.0.4: {} + minipass@7.1.2: {} mrmime@2.0.0: {} @@ -7169,25 +6965,25 @@ snapshots: neo-async@2.6.2: {} - next-sitemap@4.2.3(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0)): + next-sitemap@4.2.3(next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2)): dependencies: '@corex/deepmerge': 4.0.43 '@next/env': 13.5.6 fast-glob: 3.3.2 minimist: 1.2.8 - next: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0) + next: 14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2) - next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.76.0): + next@14.2.3(@babel/core@7.24.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.2): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001614 + caniuse-lite: 1.0.30001623 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.5)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.24.6)(react@18.3.1) optionalDependencies: '@next/swc-darwin-arm64': 14.2.3 '@next/swc-darwin-x64': 14.2.3 @@ -7198,7 +6994,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.3 '@next/swc-win32-ia32-msvc': 14.2.3 '@next/swc-win32-x64-msvc': 14.2.3 - sass: 1.76.0 + sass: 1.77.2 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -7320,7 +7116,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7335,10 +7131,10 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.10.2: + path-scurry@1.11.1: dependencies: lru-cache: 10.2.2 - minipass: 7.0.4 + minipass: 7.1.2 path-type@3.0.0: dependencies: @@ -7346,7 +7142,7 @@ snapshots: path-type@4.0.0: {} - picocolors@1.0.0: {} + picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -7361,13 +7157,13 @@ snapshots: postcss@8.4.31: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 postcss@8.4.38: dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 + picocolors: 1.0.1 source-map-js: 1.2.0 postprocessing@6.35.4(three@0.164.1): @@ -7378,33 +7174,10 @@ snapshots: prelude-ls@1.2.1: {} - prettier-eslint@16.3.0: - dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - common-tags: 1.8.2 - dlv: 1.1.3 - eslint: 8.57.0 - indent-string: 4.0.0 - lodash.merge: 4.6.2 - loglevel-colored-level-prefix: 1.0.0 - prettier: 3.2.5 - pretty-format: 29.7.0 - require-relative: 0.8.7 - typescript: 5.4.5 - vue-eslint-parser: 9.4.2(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - prettier@3.2.5: {} pretty-bytes@6.1.1: {} - pretty-format@29.7.0: - dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.3.1 - promise-worker-transferable@1.0.4: dependencies: is-promise: 2.2.2 @@ -7437,41 +7210,39 @@ snapshots: react-is@16.13.1: {} - react-is@18.3.1: {} - react-reconciler@0.27.0(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.0 - react-remove-scroll-bar@2.3.6(@types/react@18.3.1)(react@18.3.1): + react-remove-scroll-bar@2.3.6(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - react-remove-scroll@2.5.5(@types/react@18.3.1)(react@18.3.1): + react-remove-scroll@2.5.5(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 - react-remove-scroll-bar: 2.3.6(@types/react@18.3.1)(react@18.3.1) - react-style-singleton: 2.2.1(@types/react@18.3.1)(react@18.3.1) + react-remove-scroll-bar: 2.3.6(@types/react@18.3.3)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.3)(react@18.3.1) tslib: 2.6.2 - use-callback-ref: 1.3.2(@types/react@18.3.1)(react@18.3.1) - use-sidecar: 1.1.2(@types/react@18.3.1)(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.3)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.3)(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - react-style-singleton@2.2.1(@types/react@18.3.1)(react@18.3.1): + react-style-singleton@2.2.1(@types/react@18.3.3)(react@18.3.1): dependencies: get-nonce: 1.0.1 invariant: 2.2.4 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 react-universal-interface@0.6.2(react@18.3.1)(tslib@2.6.2): dependencies: @@ -7537,7 +7308,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 regexp.prototype.flags@1.5.2: dependencies: @@ -7563,8 +7334,6 @@ snapshots: require-from-string@2.0.2: {} - require-relative@0.8.7: {} - requires-port@1.0.0: {} resize-observer-polyfill@1.5.1: {} @@ -7615,7 +7384,7 @@ snapshots: rtl-css-js@1.16.1: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.24.6 run-parallel@1.2.0: dependencies: @@ -7636,10 +7405,10 @@ snapshots: es-errors: 1.3.0 is-regex: 1.1.4 - sass@1.76.0: + sass@1.77.2: dependencies: chokidar: 3.6.0 - immutable: 4.3.5 + immutable: 4.3.6 source-map-js: 1.2.0 scheduler@0.23.0: @@ -7658,9 +7427,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 + semver@7.6.2: {} serialize-javascript@6.0.2: dependencies: @@ -7744,16 +7511,16 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.18 - spdx-license-ids@3.0.17: {} + spdx-license-ids@3.0.18: {} stack-generator@2.0.10: dependencies: @@ -7839,10 +7606,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - strip-ansi@3.0.1: - dependencies: - ansi-regex: 2.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -7855,17 +7618,15 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.24.6)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 optionalDependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.24.6 stylis@4.3.2: {} - supports-color@2.0.0: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -7886,7 +7647,7 @@ snapshots: svg-parser@2.0.4: {} - svgo@3.2.0: + svgo@3.3.2: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -7894,7 +7655,7 @@ snapshots: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.0.1 tapable@2.2.1: {} @@ -7922,11 +7683,11 @@ snapshots: dependencies: three: 0.164.1 - three-stdlib@2.29.10(three@0.164.1): + three-stdlib@2.30.1(three@0.164.1): dependencies: - '@types/draco3d': 1.4.9 + '@types/draco3d': 1.4.10 '@types/offscreencanvas': 2019.7.3 - '@types/webxr': 0.5.15 + '@types/webxr': 0.5.16 draco3d: 1.5.7 fflate: 0.6.10 potpack: 1.0.2 @@ -7979,9 +7740,9 @@ snapshots: tslib@2.6.2: {} - tunnel-rat@0.1.2(@types/react@18.3.1)(react@18.3.1): + tunnel-rat@0.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: - zustand: 4.5.2(@types/react@18.3.1)(react@18.3.1) + zustand: 4.5.2(@types/react@18.3.3)(react@18.3.1) transitivePeerDependencies: - '@types/react' - immer @@ -8051,30 +7812,30 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.0.14(browserslist@4.23.0): + update-browserslist-db@1.0.16(browserslist@4.23.0): dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 uri-js@4.4.1: dependencies: punycode: 2.3.1 - use-callback-ref@1.3.2(@types/react@18.3.1)(react@18.3.1): + use-callback-ref@1.3.2(@types/react@18.3.3)(react@18.3.1): dependencies: react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 - use-sidecar@1.1.2(@types/react@18.3.1)(react@18.3.1): + use-sidecar@1.1.2(@types/react@18.3.3)(react@18.3.1): dependencies: detect-node-es: 1.1.0 react: 18.3.1 tslib: 2.6.2 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 use-sync-external-store@1.2.0(react@18.3.1): dependencies: @@ -8089,19 +7850,6 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vue-eslint-parser@9.4.2(eslint@8.57.0): - dependencies: - debug: 4.3.4 - eslint: 8.57.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - lodash: 4.17.21 - semver: 7.6.0 - transitivePeerDependencies: - - supports-color - watchpack@2.4.1: dependencies: glob-to-regexp: 0.4.1 @@ -8125,7 +7873,7 @@ snapshots: html-escaper: 2.0.2 is-plain-object: 5.0.0 opener: 1.5.2 - picocolors: 1.0.0 + picocolors: 1.0.1 sirv: 2.0.4 ws: 7.5.9 transitivePeerDependencies: @@ -8145,8 +7893,8 @@ snapshots: acorn-import-assertions: 1.9.0(acorn@8.11.3) browserslist: 4.23.0 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.2 + enhanced-resolve: 5.16.1 + es-module-lexer: 1.5.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -8239,8 +7987,6 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} - yargs-parser@21.1.1: {} yargs@17.7.2: @@ -8261,9 +8007,9 @@ snapshots: optionalDependencies: react: 18.3.1 - zustand@4.5.2(@types/react@18.3.1)(react@18.3.1): + zustand@4.5.2(@types/react@18.3.3)(react@18.3.1): dependencies: use-sync-external-store: 1.2.0(react@18.3.1) optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.3 react: 18.3.1 diff --git a/public/admin/index.html b/public/admin/index.html deleted file mode 100644 index 4bf6adb5..00000000 --- a/public/admin/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - TinaCMS - - - - - - - - -
- - \ No newline at end of file diff --git a/public/sw.js b/public/sw.js index 1b744dd1..91f09b63 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,206 +1,2 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/index.worker.js": -/*!*****************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/index.worker.js ***! - \*****************************************************************************************************************************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PAGES_CACHE_NAME: function() { return /* binding */ PAGES_CACHE_NAME; },\n/* harmony export */ defaultCache: function() { return /* binding */ defaultCache; }\n/* harmony export */ });\n/* harmony import */ var serwist__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! serwist */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/index.js\");\n\n\nconst PAGES_CACHE_NAME = {\n rscPrefetch: \"pages-rsc-prefetch\",\n rsc: \"pages-rsc\",\n html: \"pages\"\n};\n\nconst defaultCache = true ? [] : 0;\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vQHNlcndpc3QrbmV4dEA5LjAuMl9uZXh0QDE0LjIuM19AYmFiZWwrY29yZUA3LjI0LjVfcmVhY3QtZG9tQDE4LjMuMV9yZWFjdEAxOC4zLjFfX3JlYWN0QDE4LjMuX2UybmttZXRlcnBxbGxnc2g0NHdmeGs3azJxL25vZGVfbW9kdWxlcy9Ac2Vyd2lzdC9uZXh0L2Rpc3QvaW5kZXgud29ya2VyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFnSDs7QUFFaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsS0FBcUMsUUFBUSxDQW1QakU7O0FBRXlDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2Vyd2lzdCtuZXh0QDkuMC4yX25leHRAMTQuMi4zX0BiYWJlbCtjb3JlQDcuMjQuNV9yZWFjdC1kb21AMTguMy4xX3JlYWN0QDE4LjMuMV9fcmVhY3RAMTguMy5fZTJua21ldGVycHFsbGdzaDQ0d2Z4azdrMnEvbm9kZV9tb2R1bGVzL0BzZXJ3aXN0L25leHQvZGlzdC9pbmRleC53b3JrZXIuanM/NzM1ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYWNoZUZpcnN0LCBFeHBpcmF0aW9uUGx1Z2luLCBTdGFsZVdoaWxlUmV2YWxpZGF0ZSwgUmFuZ2VSZXF1ZXN0c1BsdWdpbiwgTmV0d29ya0ZpcnN0IH0gZnJvbSAnc2Vyd2lzdCc7XG5cbmNvbnN0IFBBR0VTX0NBQ0hFX05BTUUgPSB7XG4gICAgcnNjUHJlZmV0Y2g6IFwicGFnZXMtcnNjLXByZWZldGNoXCIsXG4gICAgcnNjOiBcInBhZ2VzLXJzY1wiLFxuICAgIGh0bWw6IFwicGFnZXNcIlxufTtcblxuY29uc3QgZGVmYXVsdENhY2hlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gW10gOiBbXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAvXmh0dHBzOlxcL1xcL2ZvbnRzXFwuKD86Z3N0YXRpYylcXC5jb21cXC8uKi9pLFxuICAgICAgICBoYW5kbGVyOiBuZXcgQ2FjaGVGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwiZ29vZ2xlLWZvbnRzLXdlYmZvbnRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiA0LFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZUZyb206IFwibGFzdC11c2VkXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAvXmh0dHBzOlxcL1xcL2ZvbnRzXFwuKD86Z29vZ2xlYXBpcylcXC5jb21cXC8uKi9pLFxuICAgICAgICBoYW5kbGVyOiBuZXcgU3RhbGVXaGlsZVJldmFsaWRhdGUoe1xuICAgICAgICAgICAgY2FjaGVOYW1lOiBcImdvb2dsZS1mb250cy1zdHlsZXNoZWV0c1wiLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgIG5ldyBFeHBpcmF0aW9uUGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgbWF4RW50cmllczogNCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlRnJvbTogXCJsYXN0LXVzZWRcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1hdGNoZXI6IC9cXC4oPzplb3R8b3RmfHR0Y3x0dGZ8d29mZnx3b2ZmMnxmb250LmNzcykkL2ksXG4gICAgICAgIGhhbmRsZXI6IG5ldyBTdGFsZVdoaWxlUmV2YWxpZGF0ZSh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwic3RhdGljLWZvbnQtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiA0LFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiA3ICogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogL1xcLig/OmpwZ3xqcGVnfGdpZnxwbmd8c3ZnfGljb3x3ZWJwKSQvaSxcbiAgICAgICAgaGFuZGxlcjogbmV3IFN0YWxlV2hpbGVSZXZhbGlkYXRlKHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJzdGF0aWMtaW1hZ2UtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZUZyb206IFwibGFzdC11c2VkXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAvXFwvX25leHRcXC9zdGF0aWMuK1xcLmpzJC9pLFxuICAgICAgICBoYW5kbGVyOiBuZXcgQ2FjaGVGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwibmV4dC1zdGF0aWMtanMtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogL1xcL19uZXh0XFwvaW1hZ2VcXD91cmw9LiskL2ksXG4gICAgICAgIGhhbmRsZXI6IG5ldyBTdGFsZVdoaWxlUmV2YWxpZGF0ZSh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwibmV4dC1pbWFnZVwiLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgIG5ldyBFeHBpcmF0aW9uUGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgbWF4RW50cmllczogNjQsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZVNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlRnJvbTogXCJsYXN0LXVzZWRcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSxcbiAgICB7XG4gICAgICAgIG1hdGNoZXI6IC9cXC4oPzptcDN8d2F2fG9nZykkL2ksXG4gICAgICAgIGhhbmRsZXI6IG5ldyBDYWNoZUZpcnN0KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJzdGF0aWMtYXVkaW8tYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IFJhbmdlUmVxdWVzdHNQbHVnaW4oKVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAvXFwuKD86bXA0fHdlYm0pJC9pLFxuICAgICAgICBoYW5kbGVyOiBuZXcgQ2FjaGVGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwic3RhdGljLXZpZGVvLWFzc2V0c1wiLFxuICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgIG5ldyBFeHBpcmF0aW9uUGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgbWF4RW50cmllczogMzIsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZVNlY29uZHM6IDI0ICogNjAgKiA2MCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlRnJvbTogXCJsYXN0LXVzZWRcIlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBSYW5nZVJlcXVlc3RzUGx1Z2luKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogL1xcLig/OmpzKSQvaSxcbiAgICAgICAgaGFuZGxlcjogbmV3IFN0YWxlV2hpbGVSZXZhbGlkYXRlKHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJzdGF0aWMtanMtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiA0OCxcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogL1xcLig/OmNzc3xsZXNzKSQvaSxcbiAgICAgICAgaGFuZGxlcjogbmV3IFN0YWxlV2hpbGVSZXZhbGlkYXRlKHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJzdGF0aWMtc3R5bGUtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogL1xcL19uZXh0XFwvZGF0YVxcLy4rXFwvLitcXC5qc29uJC9pLFxuICAgICAgICBoYW5kbGVyOiBuZXcgTmV0d29ya0ZpcnN0KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJuZXh0LWRhdGFcIixcbiAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgRXhwaXJhdGlvblBsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIG1heEVudHJpZXM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAyNCAqIDYwICogNjAsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZUZyb206IFwibGFzdC11c2VkXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAvXFwuKD86anNvbnx4bWx8Y3N2KSQvaSxcbiAgICAgICAgaGFuZGxlcjogbmV3IE5ldHdvcmtGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwic3RhdGljLWRhdGEtYXNzZXRzXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VGcm9tOiBcImxhc3QtdXNlZFwiXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogKHsgc2FtZU9yaWdpbiwgdXJsOiB7IHBhdGhuYW1lIH0gfSk9PntcbiAgICAgICAgICAgIGlmICghc2FtZU9yaWdpbiB8fCBwYXRobmFtZS5zdGFydHNXaXRoKFwiL2FwaS9hdXRoL2NhbGxiYWNrXCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvYXBpL1wiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIGhhbmRsZXI6IG5ldyBOZXR3b3JrRmlyc3Qoe1xuICAgICAgICAgICAgY2FjaGVOYW1lOiBcImFwaXNcIixcbiAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgRXhwaXJhdGlvblBsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIG1heEVudHJpZXM6IDE2LFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAyNCAqIDYwICogNjAsXG4gICAgICAgICAgICAgICAgICAgIG1heEFnZUZyb206IFwibGFzdC11c2VkXCJcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG5ldHdvcmtUaW1lb3V0U2Vjb25kczogMTBcbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogKHsgcmVxdWVzdCwgdXJsOiB7IHBhdGhuYW1lIH0sIHNhbWVPcmlnaW4gfSk9PnJlcXVlc3QuaGVhZGVycy5nZXQoXCJSU0NcIikgPT09IFwiMVwiICYmIHJlcXVlc3QuaGVhZGVycy5nZXQoXCJOZXh0LVJvdXRlci1QcmVmZXRjaFwiKSA9PT0gXCIxXCIgJiYgc2FtZU9yaWdpbiAmJiAhcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9hcGkvXCIpLFxuICAgICAgICBoYW5kbGVyOiBuZXcgTmV0d29ya0ZpcnN0KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogUEFHRVNfQ0FDSEVfTkFNRS5yc2NQcmVmZXRjaCxcbiAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgRXhwaXJhdGlvblBsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIG1heEVudHJpZXM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAyNCAqIDYwICogNjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAoeyByZXF1ZXN0LCB1cmw6IHsgcGF0aG5hbWUgfSwgc2FtZU9yaWdpbiB9KT0+cmVxdWVzdC5oZWFkZXJzLmdldChcIlJTQ1wiKSA9PT0gXCIxXCIgJiYgc2FtZU9yaWdpbiAmJiAhcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9hcGkvXCIpLFxuICAgICAgICBoYW5kbGVyOiBuZXcgTmV0d29ya0ZpcnN0KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogUEFHRVNfQ0FDSEVfTkFNRS5yc2MsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogMjQgKiA2MCAqIDYwXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9LFxuICAgIHtcbiAgICAgICAgbWF0Y2hlcjogKHsgcmVxdWVzdCwgdXJsOiB7IHBhdGhuYW1lIH0sIHNhbWVPcmlnaW4gfSk9PnJlcXVlc3QuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIik/LmluY2x1ZGVzKFwidGV4dC9odG1sXCIpICYmIHNhbWVPcmlnaW4gJiYgIXBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvYXBpL1wiKSxcbiAgICAgICAgaGFuZGxlcjogbmV3IE5ldHdvcmtGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFBBR0VTX0NBQ0hFX05BTUUuaHRtbCxcbiAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgRXhwaXJhdGlvblBsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIG1heEVudHJpZXM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAyNCAqIDYwICogNjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAoeyB1cmw6IHsgcGF0aG5hbWUgfSwgc2FtZU9yaWdpbiB9KT0+c2FtZU9yaWdpbiAmJiAhcGF0aG5hbWUuc3RhcnRzV2l0aChcIi9hcGkvXCIpLFxuICAgICAgICBoYW5kbGVyOiBuZXcgTmV0d29ya0ZpcnN0KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogXCJvdGhlcnNcIixcbiAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICBuZXcgRXhwaXJhdGlvblBsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIG1heEVudHJpZXM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBtYXhBZ2VTZWNvbmRzOiAyNCAqIDYwICogNjBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0sXG4gICAge1xuICAgICAgICBtYXRjaGVyOiAoeyBzYW1lT3JpZ2luIH0pPT4hc2FtZU9yaWdpbixcbiAgICAgICAgaGFuZGxlcjogbmV3IE5ldHdvcmtGaXJzdCh7XG4gICAgICAgICAgICBjYWNoZU5hbWU6IFwiY3Jvc3Mtb3JpZ2luXCIsXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgbmV3IEV4cGlyYXRpb25QbHVnaW4oe1xuICAgICAgICAgICAgICAgICAgICBtYXhFbnRyaWVzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgbWF4QWdlU2Vjb25kczogNjAgKiA2MFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbmV0d29ya1RpbWVvdXRTZWNvbmRzOiAxMFxuICAgICAgICB9KVxuICAgIH1cbl07XG5cbmV4cG9ydCB7IFBBR0VTX0NBQ0hFX05BTUUsIGRlZmF1bHRDYWNoZSB9O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/index.worker.js\n")); - -/***/ }), - -/***/ "./node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js": -/*!**********************************************************************!*\ - !*** ./node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js ***! - \**********************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deleteDB: function() { return /* binding */ deleteDB; },\n/* harmony export */ openDB: function() { return /* binding */ openDB; },\n/* harmony export */ unwrap: function() { return /* binding */ unwrap; },\n/* harmony export */ wrap: function() { return /* binding */ wrap; }\n/* harmony export */ });\nconst instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(this.request);\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vaWRiQDguMC4wL25vZGVfbW9kdWxlcy9pZGIvYnVpbGQvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMseUNBQXlDLElBQUk7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsVUFBVSxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQzs7QUFFeUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2lkYkA4LjAuMC9ub2RlX21vZHVsZXMvaWRiL2J1aWxkL2luZGV4LmpzP2ZhMGEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaW5zdGFuY2VPZkFueSA9IChvYmplY3QsIGNvbnN0cnVjdG9ycykgPT4gY29uc3RydWN0b3JzLnNvbWUoKGMpID0+IG9iamVjdCBpbnN0YW5jZW9mIGMpO1xuXG5sZXQgaWRiUHJveHlhYmxlVHlwZXM7XG5sZXQgY3Vyc29yQWR2YW5jZU1ldGhvZHM7XG4vLyBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gcHJldmVudCBpdCB0aHJvd2luZyB1cCBpbiBub2RlIGVudmlyb25tZW50cy5cbmZ1bmN0aW9uIGdldElkYlByb3h5YWJsZVR5cGVzKCkge1xuICAgIHJldHVybiAoaWRiUHJveHlhYmxlVHlwZXMgfHxcbiAgICAgICAgKGlkYlByb3h5YWJsZVR5cGVzID0gW1xuICAgICAgICAgICAgSURCRGF0YWJhc2UsXG4gICAgICAgICAgICBJREJPYmplY3RTdG9yZSxcbiAgICAgICAgICAgIElEQkluZGV4LFxuICAgICAgICAgICAgSURCQ3Vyc29yLFxuICAgICAgICAgICAgSURCVHJhbnNhY3Rpb24sXG4gICAgICAgIF0pKTtcbn1cbi8vIFRoaXMgaXMgYSBmdW5jdGlvbiB0byBwcmV2ZW50IGl0IHRocm93aW5nIHVwIGluIG5vZGUgZW52aXJvbm1lbnRzLlxuZnVuY3Rpb24gZ2V0Q3Vyc29yQWR2YW5jZU1ldGhvZHMoKSB7XG4gICAgcmV0dXJuIChjdXJzb3JBZHZhbmNlTWV0aG9kcyB8fFxuICAgICAgICAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgPSBbXG4gICAgICAgICAgICBJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsXG4gICAgICAgICAgICBJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlLFxuICAgICAgICAgICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXksXG4gICAgICAgIF0pKTtcbn1cbmNvbnN0IHRyYW5zYWN0aW9uRG9uZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCB0cmFuc2Zvcm1DYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCByZXZlcnNlVHJhbnNmb3JtQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gcHJvbWlzaWZ5UmVxdWVzdChyZXF1ZXN0KSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgdW5saXN0ZW4gPSAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1Y2Nlc3MnLCBzdWNjZXNzKTtcbiAgICAgICAgICAgIHJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHdyYXAocmVxdWVzdC5yZXN1bHQpKTtcbiAgICAgICAgICAgIHVubGlzdGVuKCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KHJlcXVlc3QuZXJyb3IpO1xuICAgICAgICAgICAgdW5saXN0ZW4oKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdzdWNjZXNzJywgc3VjY2Vzcyk7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgfSk7XG4gICAgLy8gVGhpcyBtYXBwaW5nIGV4aXN0cyBpbiByZXZlcnNlVHJhbnNmb3JtQ2FjaGUgYnV0IGRvZXNuJ3QgZG9lc24ndCBleGlzdCBpbiB0cmFuc2Zvcm1DYWNoZS4gVGhpc1xuICAgIC8vIGlzIGJlY2F1c2Ugd2UgY3JlYXRlIG1hbnkgcHJvbWlzZXMgZnJvbSBhIHNpbmdsZSBJREJSZXF1ZXN0LlxuICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5zZXQocHJvbWlzZSwgcmVxdWVzdCk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5mdW5jdGlvbiBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odHgpIHtcbiAgICAvLyBFYXJseSBiYWlsIGlmIHdlJ3ZlIGFscmVhZHkgY3JlYXRlZCBhIGRvbmUgcHJvbWlzZSBmb3IgdGhpcyB0cmFuc2FjdGlvbi5cbiAgICBpZiAodHJhbnNhY3Rpb25Eb25lTWFwLmhhcyh0eCkpXG4gICAgICAgIHJldHVybjtcbiAgICBjb25zdCBkb25lID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbXBsZXRlJywgY29tcGxldGUpO1xuICAgICAgICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgICAgICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlcnJvciA9ICgpID0+IHtcbiAgICAgICAgICAgIHJlamVjdCh0eC5lcnJvciB8fCBuZXcgRE9NRXhjZXB0aW9uKCdBYm9ydEVycm9yJywgJ0Fib3J0RXJyb3InKSk7XG4gICAgICAgICAgICB1bmxpc3RlbigpO1xuICAgICAgICB9O1xuICAgICAgICB0eC5hZGRFdmVudExpc3RlbmVyKCdjb21wbGV0ZScsIGNvbXBsZXRlKTtcbiAgICAgICAgdHguYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZXJyb3IpO1xuICAgIH0pO1xuICAgIC8vIENhY2hlIGl0IGZvciBsYXRlciByZXRyaWV2YWwuXG4gICAgdHJhbnNhY3Rpb25Eb25lTWFwLnNldCh0eCwgZG9uZSk7XG59XG5sZXQgaWRiUHJveHlUcmFwcyA9IHtcbiAgICBnZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHRyYW5zYWN0aW9uLmRvbmUuXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2RvbmUnKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkRvbmVNYXAuZ2V0KHRhcmdldCk7XG4gICAgICAgICAgICAvLyBNYWtlIHR4LnN0b3JlIHJldHVybiB0aGUgb25seSBzdG9yZSBpbiB0aGUgdHJhbnNhY3Rpb24sIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbWFueS5cbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnc3RvcmUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMV1cbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiByZWNlaXZlci5vYmplY3RTdG9yZShyZWNlaXZlci5vYmplY3RTdG9yZU5hbWVzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbHNlIHRyYW5zZm9ybSB3aGF0ZXZlciB3ZSBnZXQgYmFjay5cbiAgICAgICAgcmV0dXJuIHdyYXAodGFyZ2V0W3Byb3BdKTtcbiAgICB9LFxuICAgIHNldCh0YXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uICYmXG4gICAgICAgICAgICAocHJvcCA9PT0gJ2RvbmUnIHx8IHByb3AgPT09ICdzdG9yZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcCBpbiB0YXJnZXQ7XG4gICAgfSxcbn07XG5mdW5jdGlvbiByZXBsYWNlVHJhcHMoY2FsbGJhY2spIHtcbiAgICBpZGJQcm94eVRyYXBzID0gY2FsbGJhY2soaWRiUHJveHlUcmFwcyk7XG59XG5mdW5jdGlvbiB3cmFwRnVuY3Rpb24oZnVuYykge1xuICAgIC8vIER1ZSB0byBleHBlY3RlZCBvYmplY3QgZXF1YWxpdHkgKHdoaWNoIGlzIGVuZm9yY2VkIGJ5IHRoZSBjYWNoaW5nIGluIGB3cmFwYCksIHdlXG4gICAgLy8gb25seSBjcmVhdGUgb25lIG5ldyBmdW5jIHBlciBmdW5jLlxuICAgIC8vIEN1cnNvciBtZXRob2RzIGFyZSBzcGVjaWFsLCBhcyB0aGUgYmVoYXZpb3VyIGlzIGEgbGl0dGxlIG1vcmUgZGlmZmVyZW50IHRvIHN0YW5kYXJkIElEQi4gSW5cbiAgICAvLyBJREIsIHlvdSBhZHZhbmNlIHRoZSBjdXJzb3IgYW5kIHdhaXQgZm9yIGEgbmV3ICdzdWNjZXNzJyBvbiB0aGUgSURCUmVxdWVzdCB0aGF0IGdhdmUgeW91IHRoZVxuICAgIC8vIGN1cnNvci4gSXQncyBraW5kYSBsaWtlIGEgcHJvbWlzZSB0aGF0IGNhbiByZXNvbHZlIHdpdGggbWFueSB2YWx1ZXMuIFRoYXQgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgLy8gd2l0aCByZWFsIHByb21pc2VzLCBzbyBlYWNoIGFkdmFuY2UgbWV0aG9kcyByZXR1cm5zIGEgbmV3IHByb21pc2UgZm9yIHRoZSBjdXJzb3Igb2JqZWN0LCBvclxuICAgIC8vIHVuZGVmaW5lZCBpZiB0aGUgZW5kIG9mIHRoZSBjdXJzb3IgaGFzIGJlZW4gcmVhY2hlZC5cbiAgICBpZiAoZ2V0Q3Vyc29yQWR2YW5jZU1ldGhvZHMoKS5pbmNsdWRlcyhmdW5jKSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIC8vIENhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggdGhlIHByb3h5IGFzICd0aGlzJyBjYXVzZXMgSUxMRUdBTCBJTlZPQ0FUSU9OLCBzbyB3ZSB1c2VcbiAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBvYmplY3QuXG4gICAgICAgICAgICBmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gd3JhcCh0aGlzLnJlcXVlc3QpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gQ2FsbGluZyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCB0aGUgcHJveHkgYXMgJ3RoaXMnIGNhdXNlcyBJTExFR0FMIElOVk9DQVRJT04sIHNvIHdlIHVzZVxuICAgICAgICAvLyB0aGUgb3JpZ2luYWwgb2JqZWN0LlxuICAgICAgICByZXR1cm4gd3JhcChmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncykpO1xuICAgIH07XG59XG5mdW5jdGlvbiB0cmFuc2Zvcm1DYWNoYWJsZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIHdyYXBGdW5jdGlvbih2YWx1ZSk7XG4gICAgLy8gVGhpcyBkb2Vzbid0IHJldHVybiwgaXQganVzdCBjcmVhdGVzIGEgJ2RvbmUnIHByb21pc2UgZm9yIHRoZSB0cmFuc2FjdGlvbixcbiAgICAvLyB3aGljaCBpcyBsYXRlciByZXR1cm5lZCBmb3IgdHJhbnNhY3Rpb24uZG9uZSAoc2VlIGlkYk9iamVjdEhhbmRsZXIpLlxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElEQlRyYW5zYWN0aW9uKVxuICAgICAgICBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odmFsdWUpO1xuICAgIGlmIChpbnN0YW5jZU9mQW55KHZhbHVlLCBnZXRJZGJQcm94eWFibGVUeXBlcygpKSlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZSwgaWRiUHJveHlUcmFwcyk7XG4gICAgLy8gUmV0dXJuIHRoZSBzYW1lIHZhbHVlIGJhY2sgaWYgd2UncmUgbm90IGdvaW5nIHRvIHRyYW5zZm9ybSBpdC5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiB3cmFwKHZhbHVlKSB7XG4gICAgLy8gV2Ugc29tZXRpbWVzIGdlbmVyYXRlIG11bHRpcGxlIHByb21pc2VzIGZyb20gYSBzaW5nbGUgSURCUmVxdWVzdCAoZWcgd2hlbiBjdXJzb3JpbmcpLCBiZWNhdXNlXG4gICAgLy8gSURCIGlzIHdlaXJkIGFuZCBhIHNpbmdsZSBJREJSZXF1ZXN0IGNhbiB5aWVsZCBtYW55IHJlc3BvbnNlcywgc28gdGhlc2UgY2FuJ3QgYmUgY2FjaGVkLlxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIElEQlJlcXVlc3QpXG4gICAgICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHZhbHVlKTtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHRyYW5zZm9ybWVkIHRoaXMgdmFsdWUgYmVmb3JlLCByZXVzZSB0aGUgdHJhbnNmb3JtZWQgdmFsdWUuXG4gICAgLy8gVGhpcyBpcyBmYXN0ZXIsIGJ1dCBpdCBhbHNvIHByb3ZpZGVzIG9iamVjdCBlcXVhbGl0eS5cbiAgICBpZiAodHJhbnNmb3JtQ2FjaGUuaGFzKHZhbHVlKSlcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0cmFuc2Zvcm1DYWNoYWJsZVZhbHVlKHZhbHVlKTtcbiAgICAvLyBOb3QgYWxsIHR5cGVzIGFyZSB0cmFuc2Zvcm1lZC5cbiAgICAvLyBUaGVzZSBtYXkgYmUgcHJpbWl0aXZlIHR5cGVzLCBzbyB0aGV5IGNhbid0IGJlIFdlYWtNYXAga2V5cy5cbiAgICBpZiAobmV3VmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgIHRyYW5zZm9ybUNhY2hlLnNldCh2YWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KG5ld1ZhbHVlLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZTtcbn1cbmNvbnN0IHVud3JhcCA9ICh2YWx1ZSkgPT4gcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZSk7XG5cbi8qKlxuICogT3BlbiBhIGRhdGFiYXNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGRhdGFiYXNlLlxuICogQHBhcmFtIHZlcnNpb24gU2NoZW1hIHZlcnNpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2tzIEFkZGl0aW9uYWwgY2FsbGJhY2tzLlxuICovXG5mdW5jdGlvbiBvcGVuREIobmFtZSwgdmVyc2lvbiwgeyBibG9ja2VkLCB1cGdyYWRlLCBibG9ja2luZywgdGVybWluYXRlZCB9ID0ge30pIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbik7XG4gICAgY29uc3Qgb3BlblByb21pc2UgPSB3cmFwKHJlcXVlc3QpO1xuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigndXBncmFkZW5lZWRlZCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdXBncmFkZSh3cmFwKHJlcXVlc3QucmVzdWx0KSwgZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgd3JhcChyZXF1ZXN0LnRyYW5zYWN0aW9uKSwgZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdibG9ja2VkJywgKGV2ZW50KSA9PiBibG9ja2VkKFxuICAgICAgICAvLyBDYXN0aW5nIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQtRE9NLWxpYi1nZW5lcmF0b3IvcHVsbC8xNDA1XG4gICAgICAgIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50Lm5ld1ZlcnNpb24sIGV2ZW50KSk7XG4gICAgfVxuICAgIG9wZW5Qcm9taXNlXG4gICAgICAgIC50aGVuKChkYikgPT4ge1xuICAgICAgICBpZiAodGVybWluYXRlZClcbiAgICAgICAgICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgKCkgPT4gdGVybWluYXRlZCgpKTtcbiAgICAgICAgaWYgKGJsb2NraW5nKSB7XG4gICAgICAgICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCd2ZXJzaW9uY2hhbmdlJywgKGV2ZW50KSA9PiBibG9ja2luZyhldmVudC5vbGRWZXJzaW9uLCBldmVudC5uZXdWZXJzaW9uLCBldmVudCkpO1xuICAgICAgICB9XG4gICAgfSlcbiAgICAgICAgLmNhdGNoKCgpID0+IHsgfSk7XG4gICAgcmV0dXJuIG9wZW5Qcm9taXNlO1xufVxuLyoqXG4gKiBEZWxldGUgYSBkYXRhYmFzZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBkYXRhYmFzZS5cbiAqL1xuZnVuY3Rpb24gZGVsZXRlREIobmFtZSwgeyBibG9ja2VkIH0gPSB7fSkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UobmFtZSk7XG4gICAgaWYgKGJsb2NrZWQpIHtcbiAgICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdibG9ja2VkJywgKGV2ZW50KSA9PiBibG9ja2VkKFxuICAgICAgICAvLyBDYXN0aW5nIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQtRE9NLWxpYi1nZW5lcmF0b3IvcHVsbC8xNDA1XG4gICAgICAgIGV2ZW50Lm9sZFZlcnNpb24sIGV2ZW50KSk7XG4gICAgfVxuICAgIHJldHVybiB3cmFwKHJlcXVlc3QpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKTtcbn1cblxuY29uc3QgcmVhZE1ldGhvZHMgPSBbJ2dldCcsICdnZXRLZXknLCAnZ2V0QWxsJywgJ2dldEFsbEtleXMnLCAnY291bnQnXTtcbmNvbnN0IHdyaXRlTWV0aG9kcyA9IFsncHV0JywgJ2FkZCcsICdkZWxldGUnLCAnY2xlYXInXTtcbmNvbnN0IGNhY2hlZE1ldGhvZHMgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB7XG4gICAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSURCRGF0YWJhc2UgJiZcbiAgICAgICAgIShwcm9wIGluIHRhcmdldCkgJiZcbiAgICAgICAgdHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZWRNZXRob2RzLmdldChwcm9wKSlcbiAgICAgICAgcmV0dXJuIGNhY2hlZE1ldGhvZHMuZ2V0KHByb3ApO1xuICAgIGNvbnN0IHRhcmdldEZ1bmNOYW1lID0gcHJvcC5yZXBsYWNlKC9Gcm9tSW5kZXgkLywgJycpO1xuICAgIGNvbnN0IHVzZUluZGV4ID0gcHJvcCAhPT0gdGFyZ2V0RnVuY05hbWU7XG4gICAgY29uc3QgaXNXcml0ZSA9IHdyaXRlTWV0aG9kcy5pbmNsdWRlcyh0YXJnZXRGdW5jTmFtZSk7XG4gICAgaWYgKFxuICAgIC8vIEJhaWwgaWYgdGhlIHRhcmdldCBkb2Vzbid0IGV4aXN0IG9uIHRoZSB0YXJnZXQuIEVnLCBnZXRBbGwgaXNuJ3QgaW4gRWRnZS5cbiAgICAhKHRhcmdldEZ1bmNOYW1lIGluICh1c2VJbmRleCA/IElEQkluZGV4IDogSURCT2JqZWN0U3RvcmUpLnByb3RvdHlwZSkgfHxcbiAgICAgICAgIShpc1dyaXRlIHx8IHJlYWRNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtZXRob2QgPSBhc3luYyBmdW5jdGlvbiAoc3RvcmVOYW1lLCAuLi5hcmdzKSB7XG4gICAgICAgIC8vIGlzV3JpdGUgPyAncmVhZHdyaXRlJyA6IHVuZGVmaW5lZCBnemlwcHMgYmV0dGVyLCBidXQgZmFpbHMgaW4gRWRnZSA6KFxuICAgICAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBpc1dyaXRlID8gJ3JlYWR3cml0ZScgOiAncmVhZG9ubHknKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IHR4LnN0b3JlO1xuICAgICAgICBpZiAodXNlSW5kZXgpXG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuaW5kZXgoYXJncy5zaGlmdCgpKTtcbiAgICAgICAgLy8gTXVzdCByZWplY3QgaWYgb3AgcmVqZWN0cy5cbiAgICAgICAgLy8gSWYgaXQncyBhIHdyaXRlIG9wZXJhdGlvbiwgbXVzdCByZWplY3QgaWYgdHguZG9uZSByZWplY3RzLlxuICAgICAgICAvLyBNdXN0IHJlamVjdCB3aXRoIG9wIHJlamVjdGlvbiBmaXJzdC5cbiAgICAgICAgLy8gTXVzdCByZXNvbHZlIHdpdGggb3AgdmFsdWUuXG4gICAgICAgIC8vIE11c3QgaGFuZGxlIGJvdGggcHJvbWlzZXMgKG5vIHVuaGFuZGxlZCByZWplY3Rpb25zKVxuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHRhcmdldFt0YXJnZXRGdW5jTmFtZV0oLi4uYXJncyksXG4gICAgICAgICAgICBpc1dyaXRlICYmIHR4LmRvbmUsXG4gICAgICAgIF0pKVswXTtcbiAgICB9O1xuICAgIGNhY2hlZE1ldGhvZHMuc2V0KHByb3AsIG1ldGhvZCk7XG4gICAgcmV0dXJuIG1ldGhvZDtcbn1cbnJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7XG4gICAgLi4ub2xkVHJhcHMsXG4gICAgZ2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4gZ2V0TWV0aG9kKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpLFxuICAgIGhhczogKHRhcmdldCwgcHJvcCkgPT4gISFnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5oYXModGFyZ2V0LCBwcm9wKSxcbn0pKTtcblxuY29uc3QgYWR2YW5jZU1ldGhvZFByb3BzID0gWydjb250aW51ZScsICdjb250aW51ZVByaW1hcnlLZXknLCAnYWR2YW5jZSddO1xuY29uc3QgbWV0aG9kTWFwID0ge307XG5jb25zdCBhZHZhbmNlUmVzdWx0cyA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBpdHRyUHJveGllZEN1cnNvclRvT3JpZ2luYWxQcm94eSA9IG5ldyBXZWFrTWFwKCk7XG5jb25zdCBjdXJzb3JJdGVyYXRvclRyYXBzID0ge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgaWYgKCFhZHZhbmNlTWV0aG9kUHJvcHMuaW5jbHVkZXMocHJvcCkpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgICBsZXQgY2FjaGVkRnVuYyA9IG1ldGhvZE1hcFtwcm9wXTtcbiAgICAgICAgaWYgKCFjYWNoZWRGdW5jKSB7XG4gICAgICAgICAgICBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBhZHZhbmNlUmVzdWx0cy5zZXQodGhpcywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuZ2V0KHRoaXMpW3Byb3BdKC4uLmFyZ3MpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZEZ1bmM7XG4gICAgfSxcbn07XG5hc3luYyBmdW5jdGlvbiogaXRlcmF0ZSguLi5hcmdzKSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXRoaXMtYXNzaWdubWVudFxuICAgIGxldCBjdXJzb3IgPSB0aGlzO1xuICAgIGlmICghKGN1cnNvciBpbnN0YW5jZW9mIElEQkN1cnNvcikpIHtcbiAgICAgICAgY3Vyc29yID0gYXdhaXQgY3Vyc29yLm9wZW5DdXJzb3IoLi4uYXJncyk7XG4gICAgfVxuICAgIGlmICghY3Vyc29yKVxuICAgICAgICByZXR1cm47XG4gICAgY3Vyc29yID0gY3Vyc29yO1xuICAgIGNvbnN0IHByb3hpZWRDdXJzb3IgPSBuZXcgUHJveHkoY3Vyc29yLCBjdXJzb3JJdGVyYXRvclRyYXBzKTtcbiAgICBpdHRyUHJveGllZEN1cnNvclRvT3JpZ2luYWxQcm94eS5zZXQocHJveGllZEN1cnNvciwgY3Vyc29yKTtcbiAgICAvLyBNYXAgdGhpcyBkb3VibGUtcHJveHkgYmFjayB0byB0aGUgb3JpZ2luYWwsIHNvIG90aGVyIGN1cnNvciBtZXRob2RzIHdvcmsuXG4gICAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm94aWVkQ3Vyc29yLCB1bndyYXAoY3Vyc29yKSk7XG4gICAgd2hpbGUgKGN1cnNvcikge1xuICAgICAgICB5aWVsZCBwcm94aWVkQ3Vyc29yO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGFkdmFuY2luZyBtZXRob2RzIHdhcyBub3QgY2FsbGVkLCBjYWxsIGNvbnRpbnVlKCkuXG4gICAgICAgIGN1cnNvciA9IGF3YWl0IChhZHZhbmNlUmVzdWx0cy5nZXQocHJveGllZEN1cnNvcikgfHwgY3Vyc29yLmNvbnRpbnVlKCkpO1xuICAgICAgICBhZHZhbmNlUmVzdWx0cy5kZWxldGUocHJveGllZEN1cnNvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNJdGVyYXRvclByb3AodGFyZ2V0LCBwcm9wKSB7XG4gICAgcmV0dXJuICgocHJvcCA9PT0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiZcbiAgICAgICAgaW5zdGFuY2VPZkFueSh0YXJnZXQsIFtJREJJbmRleCwgSURCT2JqZWN0U3RvcmUsIElEQkN1cnNvcl0pKSB8fFxuICAgICAgICAocHJvcCA9PT0gJ2l0ZXJhdGUnICYmIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlXSkpKTtcbn1cbnJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7XG4gICAgLi4ub2xkVHJhcHMsXG4gICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgaWYgKGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkpXG4gICAgICAgICAgICByZXR1cm4gaXRlcmF0ZTtcbiAgICAgICAgcmV0dXJuIG9sZFRyYXBzLmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICB9LFxuICAgIGhhcyh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgcmV0dXJuIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCk7XG4gICAgfSxcbn0pKTtcblxuZXhwb3J0IHsgZGVsZXRlREIsIG9wZW5EQiwgdW53cmFwLCB3cmFwIH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js\n")); - -/***/ }), - -/***/ "./app/sw.js": -/*!*******************!*\ - !*** ./app/sw.js ***! - \*******************/ -/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _serwist_next_worker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @serwist/next/worker */ \"./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/index.worker.js\");\n/* harmony import */ var serwist__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! serwist */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/index.js\");\n\n\nconst serwist = new serwist__WEBPACK_IMPORTED_MODULE_1__.Serwist({\n precacheEntries: undefined,\n skipWaiting: true,\n clientsClaim: true,\n navigationPreload: true,\n runtimeCaching: _serwist_next_worker__WEBPACK_IMPORTED_MODULE_0__.defaultCache\n});\nserwist.addEventListeners();\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = __webpack_module__.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = __webpack_module__.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, __webpack_module__.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n __webpack_module__.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n /* unsupported import.meta.webpackHot */ undefined.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n __webpack_module__.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n __webpack_module__.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9hcHAvc3cuanMiLCJtYXBwaW5ncyI6Ijs7O0FBQW1EO0FBQ2xCO0FBRWpDLE1BQU1FLFVBQVUsSUFBSUQsNENBQU9BLENBQUM7SUFDMUJFLGlCQUFpQkMsS0FBS0MsYUFBYTtJQUNuQ0MsYUFBYTtJQUNiQyxjQUFjO0lBQ2RDLG1CQUFtQjtJQUNuQkMsZ0JBQWdCVCw4REFBWUE7QUFDOUI7QUFFQUUsUUFBUVEsaUJBQWlCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2FwcC9zdy5qcz9lODQ4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHRDYWNoZSB9IGZyb20gJ0BzZXJ3aXN0L25leHQvd29ya2VyJ1xyXG5pbXBvcnQgeyBTZXJ3aXN0IH0gZnJvbSAnc2Vyd2lzdCdcclxuXHJcbmNvbnN0IHNlcndpc3QgPSBuZXcgU2Vyd2lzdCh7XHJcbiAgcHJlY2FjaGVFbnRyaWVzOiBzZWxmLl9fU1dfTUFOSUZFU1QsXHJcbiAgc2tpcFdhaXRpbmc6IHRydWUsXHJcbiAgY2xpZW50c0NsYWltOiB0cnVlLFxyXG4gIG5hdmlnYXRpb25QcmVsb2FkOiB0cnVlLFxyXG4gIHJ1bnRpbWVDYWNoaW5nOiBkZWZhdWx0Q2FjaGUsXHJcbn0pXHJcblxyXG5zZXJ3aXN0LmFkZEV2ZW50TGlzdGVuZXJzKClcclxuIl0sIm5hbWVzIjpbImRlZmF1bHRDYWNoZSIsIlNlcndpc3QiLCJzZXJ3aXN0IiwicHJlY2FjaGVFbnRyaWVzIiwic2VsZiIsIl9fU1dfTUFOSUZFU1QiLCJza2lwV2FpdGluZyIsImNsaWVudHNDbGFpbSIsIm5hdmlnYXRpb25QcmVsb2FkIiwicnVudGltZUNhY2hpbmciLCJhZGRFdmVudExpc3RlbmVycyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app/sw.js\n")); - -/***/ }), - -/***/ "./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/printInstallDetails.js": -/*!*******************************************************************************************************************!*\ - !*** ./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/printInstallDetails.js ***! - \*******************************************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ B: function() { return /* binding */ BackgroundSyncPlugin; },\n/* harmony export */ N: function() { return /* binding */ NetworkOnly; },\n/* harmony export */ P: function() { return /* binding */ PrecacheStrategy; },\n/* harmony export */ R: function() { return /* binding */ Route; },\n/* harmony export */ S: function() { return /* binding */ Strategy; },\n/* harmony export */ a: function() { return /* binding */ NetworkFirst; },\n/* harmony export */ b: function() { return /* binding */ NavigationRoute; },\n/* harmony export */ c: function() { return /* binding */ createCacheKey; },\n/* harmony export */ d: function() { return /* binding */ disableDevLogs; },\n/* harmony export */ e: function() { return /* binding */ enableNavigationPreload; },\n/* harmony export */ f: function() { return /* binding */ printInstallDetails; },\n/* harmony export */ g: function() { return /* binding */ generateURLVariations; },\n/* harmony export */ h: function() { return /* binding */ printCleanupDetails; },\n/* harmony export */ i: function() { return /* binding */ defaultMethod; },\n/* harmony export */ j: function() { return /* binding */ parseRoute; },\n/* harmony export */ k: function() { return /* binding */ PrecacheInstallReportPlugin; },\n/* harmony export */ l: function() { return /* binding */ cacheOkAndOpaquePlugin; },\n/* harmony export */ m: function() { return /* binding */ messages; },\n/* harmony export */ n: function() { return /* binding */ normalizeHandler; },\n/* harmony export */ o: function() { return /* binding */ copyResponse; },\n/* harmony export */ p: function() { return /* binding */ parallel; },\n/* harmony export */ q: function() { return /* binding */ disableNavigationPreload; },\n/* harmony export */ r: function() { return /* binding */ isNavigationPreloadSupported; },\n/* harmony export */ s: function() { return /* binding */ setCacheNameDetails; },\n/* harmony export */ t: function() { return /* binding */ StrategyHandler; },\n/* harmony export */ u: function() { return /* binding */ RegExpRoute; },\n/* harmony export */ v: function() { return /* binding */ BackgroundSyncQueue; },\n/* harmony export */ w: function() { return /* binding */ BackgroundSyncQueueStore; },\n/* harmony export */ x: function() { return /* binding */ StorableRequest; }\n/* harmony export */ });\n/* harmony import */ var _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./waitUntil.js */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js\");\n/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! idb */ \"./node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js\");\n\n\n\nconst defaultMethod = \"GET\";\nconst validMethods = [\n \"DELETE\",\n \"GET\",\n \"HEAD\",\n \"PATCH\",\n \"POST\",\n \"PUT\"\n];\n\nconst normalizeHandler = (handler)=>{\n if (handler && typeof handler === \"object\") {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.hasMethod(handler, \"handle\", {\n moduleName: \"serwist\",\n className: \"Route\",\n funcName: \"constructor\",\n paramName: \"handler\"\n });\n }\n return handler;\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(handler, \"function\", {\n moduleName: \"serwist\",\n className: \"Route\",\n funcName: \"constructor\",\n paramName: \"handler\"\n });\n }\n return {\n handle: handler\n };\n};\n\nclass Route {\n handler;\n match;\n method;\n catchHandler;\n constructor(match, handler, method = defaultMethod){\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(match, \"function\", {\n moduleName: \"serwist\",\n className: \"Route\",\n funcName: \"constructor\",\n paramName: \"match\"\n });\n if (method) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isOneOf(method, validMethods, {\n paramName: \"method\"\n });\n }\n }\n this.handler = normalizeHandler(handler);\n this.match = match;\n this.method = method;\n }\n setCatchHandler(handler) {\n this.catchHandler = normalizeHandler(handler);\n }\n}\n\nclass NavigationRoute extends Route {\n _allowlist;\n _denylist;\n constructor(handler, { allowlist = [\n /./\n ], denylist = [] } = {}){\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isArrayOfClass(allowlist, RegExp, {\n moduleName: \"serwist\",\n className: \"NavigationRoute\",\n funcName: \"constructor\",\n paramName: \"options.allowlist\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isArrayOfClass(denylist, RegExp, {\n moduleName: \"serwist\",\n className: \"NavigationRoute\",\n funcName: \"constructor\",\n paramName: \"options.denylist\"\n });\n }\n super((options)=>this._match(options), handler);\n this._allowlist = allowlist;\n this._denylist = denylist;\n }\n _match({ url, request }) {\n if (request && request.mode !== \"navigate\") {\n return false;\n }\n const pathnameAndSearch = url.pathname + url.search;\n for (const regExp of this._denylist){\n if (regExp.test(pathnameAndSearch)) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`The navigation route ${pathnameAndSearch} is not being used, since the URL matches this denylist pattern: ${regExp.toString()}`);\n }\n return false;\n }\n }\n if (this._allowlist.some((regExp)=>regExp.test(pathnameAndSearch))) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`The navigation route ${pathnameAndSearch} is being used.`);\n }\n return true;\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`The navigation route ${pathnameAndSearch} is not being used, since the URL being navigated to doesn't match the allowlist.`);\n }\n return false;\n }\n}\n\nconst removeIgnoredSearchParams = (urlObject, ignoreURLParametersMatching = [])=>{\n for (const paramName of [\n ...urlObject.searchParams.keys()\n ]){\n if (ignoreURLParametersMatching.some((regExp)=>regExp.test(paramName))) {\n urlObject.searchParams.delete(paramName);\n }\n }\n return urlObject;\n};\n\nfunction* generateURLVariations(url, { directoryIndex = \"index.html\", ignoreURLParametersMatching = [\n /^utm_/,\n /^fbclid$/\n], cleanURLs = true, urlManipulation } = {}) {\n const urlObject = new URL(url, location.href);\n urlObject.hash = \"\";\n yield urlObject.href;\n const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n yield urlWithoutIgnoredParams.href;\n if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith(\"/\")) {\n const directoryURL = new URL(urlWithoutIgnoredParams.href);\n directoryURL.pathname += directoryIndex;\n yield directoryURL.href;\n }\n if (cleanURLs) {\n const cleanURL = new URL(urlWithoutIgnoredParams.href);\n cleanURL.pathname += \".html\";\n yield cleanURL.href;\n }\n if (urlManipulation) {\n const additionalURLs = urlManipulation({\n url: urlObject\n });\n for (const urlToAttempt of additionalURLs){\n yield urlToAttempt.href;\n }\n }\n}\n\nclass RegExpRoute extends Route {\n constructor(regExp, handler, method){\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(regExp, RegExp, {\n moduleName: \"serwist\",\n className: \"RegExpRoute\",\n funcName: \"constructor\",\n paramName: \"pattern\"\n });\n }\n const match = ({ url })=>{\n const result = regExp.exec(url.href);\n if (!result) {\n return;\n }\n if (url.origin !== location.origin && result.index !== 0) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`The regular expression '${regExp.toString()}' only partially matched against the cross-origin URL '${url.toString()}'. RegExpRoute's will only handle cross-origin requests if they match the entire URL.`);\n }\n return;\n }\n return result.slice(1);\n };\n super(match, handler, method);\n }\n}\n\nconst parallel = async (limit, array, func)=>{\n const work = array.map((item, index)=>({\n index,\n item\n }));\n const processor = async (res)=>{\n const results = [];\n while(true){\n const next = work.pop();\n if (!next) {\n return res(results);\n }\n const result = await func(next.item);\n results.push({\n result: result,\n index: next.index\n });\n }\n };\n const queues = Array.from({\n length: limit\n }, ()=>new Promise(processor));\n const results = (await Promise.all(queues)).flat().sort((a, b)=>a.index < b.index ? -1 : 1).map((res)=>res.result);\n return results;\n};\n\nconst disableDevLogs = ()=>{\n self.__WB_DISABLE_DEV_LOGS = true;\n};\n\nfunction toRequest(input) {\n return typeof input === \"string\" ? new Request(input) : input;\n}\nclass StrategyHandler {\n event;\n request;\n url;\n params;\n _cacheKeys = {};\n _strategy;\n _handlerDeferred;\n _extendLifetimePromises;\n _plugins;\n _pluginStateMap;\n constructor(strategy, options){\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(options.event, ExtendableEvent, {\n moduleName: \"serwist\",\n className: \"StrategyHandler\",\n funcName: \"constructor\",\n paramName: \"options.event\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(options.request, Request, {\n moduleName: \"serwist\",\n className: \"StrategyHandler\",\n funcName: \"constructor\",\n paramName: \"options.request\"\n });\n }\n this.event = options.event;\n this.request = options.request;\n if (options.url) {\n this.url = options.url;\n this.params = options.params;\n }\n this._strategy = strategy;\n this._handlerDeferred = new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.D();\n this._extendLifetimePromises = [];\n this._plugins = [\n ...strategy.plugins\n ];\n this._pluginStateMap = new Map();\n for (const plugin of this._plugins){\n this._pluginStateMap.set(plugin, {});\n }\n this.event.waitUntil(this._handlerDeferred.promise);\n }\n async fetch(input) {\n const { event } = this;\n let request = toRequest(input);\n if (request.mode === \"navigate\" && event instanceof FetchEvent && event.preloadResponse) {\n const possiblePreloadResponse = await event.preloadResponse;\n if (possiblePreloadResponse) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Using a preloaded navigation response for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}'`);\n }\n return possiblePreloadResponse;\n }\n }\n const originalRequest = this.hasCallback(\"fetchDidFail\") ? request.clone() : null;\n try {\n for (const cb of this.iterateCallbacks(\"requestWillFetch\")){\n request = await cb({\n request: request.clone(),\n event\n });\n }\n } catch (err) {\n if (err instanceof Error) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"plugin-error-request-will-fetch\", {\n thrownErrorMessage: err.message\n });\n }\n }\n const pluginFilteredRequest = request.clone();\n try {\n let fetchResponse;\n fetchResponse = await fetch(request, request.mode === \"navigate\" ? undefined : this._strategy.fetchOptions);\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`Network request for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}' returned a response with status '${fetchResponse.status}'.`);\n }\n for (const callback of this.iterateCallbacks(\"fetchDidSucceed\")){\n fetchResponse = await callback({\n event,\n request: pluginFilteredRequest,\n response: fetchResponse\n });\n }\n return fetchResponse;\n } catch (error) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Network request for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}' threw an error.`, error);\n }\n if (originalRequest) {\n await this.runCallbacks(\"fetchDidFail\", {\n error: error,\n event,\n originalRequest: originalRequest.clone(),\n request: pluginFilteredRequest.clone()\n });\n }\n throw error;\n }\n }\n async fetchAndCachePut(input) {\n const response = await this.fetch(input);\n const responseClone = response.clone();\n void this.waitUntil(this.cachePut(input, responseClone));\n return response;\n }\n async cacheMatch(key) {\n const request = toRequest(key);\n let cachedResponse;\n const { cacheName, matchOptions } = this._strategy;\n const effectiveRequest = await this.getCacheKey(request, \"read\");\n const multiMatchOptions = {\n ...matchOptions,\n ...{\n cacheName\n }\n };\n cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n if (true) {\n if (cachedResponse) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`Found a cached response in '${cacheName}'.`);\n } else {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`No cached response found in '${cacheName}'.`);\n }\n }\n for (const callback of this.iterateCallbacks(\"cachedResponseWillBeUsed\")){\n cachedResponse = await callback({\n cacheName,\n matchOptions,\n cachedResponse,\n request: effectiveRequest,\n event: this.event\n }) || undefined;\n }\n return cachedResponse;\n }\n async cachePut(key, response) {\n const request = toRequest(key);\n await (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.t)(0);\n const effectiveRequest = await this.getCacheKey(request, \"write\");\n if (true) {\n if (effectiveRequest.method && effectiveRequest.method !== \"GET\") {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"attempt-to-cache-non-get-request\", {\n url: (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url),\n method: effectiveRequest.method\n });\n }\n }\n if (!response) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.error(`Cannot cache non-existent response for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url)}'.`);\n }\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"cache-put-with-no-response\", {\n url: (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url)\n });\n }\n const responseToCache = await this._ensureResponseSafeToCache(response);\n if (!responseToCache) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`Response '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url)}' will not be cached.`, responseToCache);\n }\n return false;\n }\n const { cacheName, matchOptions } = this._strategy;\n const cache = await self.caches.open(cacheName);\n if (true) {\n const vary = response.headers.get(\"Vary\");\n if (vary && matchOptions?.ignoreVary !== true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`The response for ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url)} has a 'Vary: ${vary}' header. Consider setting the {ignoreVary: true} option on your strategy to ensure cache matching and deletion works as expected.`);\n }\n }\n const hasCacheUpdateCallback = this.hasCallback(\"cacheDidUpdate\");\n const oldResponse = hasCacheUpdateCallback ? await (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.d)(cache, effectiveRequest.clone(), [\n \"__WB_REVISION__\"\n ], matchOptions) : null;\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`Updating the '${cacheName}' cache with a new Response for ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(effectiveRequest.url)}.`);\n }\n try {\n await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === \"QuotaExceededError\") {\n await (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.e)();\n }\n throw error;\n }\n }\n for (const callback of this.iterateCallbacks(\"cacheDidUpdate\")){\n await callback({\n cacheName,\n oldResponse,\n newResponse: responseToCache.clone(),\n request: effectiveRequest,\n event: this.event\n });\n }\n return true;\n }\n async getCacheKey(request, mode) {\n const key = `${request.url} | ${mode}`;\n if (!this._cacheKeys[key]) {\n let effectiveRequest = request;\n for (const callback of this.iterateCallbacks(\"cacheKeyWillBeUsed\")){\n effectiveRequest = toRequest(await callback({\n mode,\n request: effectiveRequest,\n event: this.event,\n params: this.params\n }));\n }\n this._cacheKeys[key] = effectiveRequest;\n }\n return this._cacheKeys[key];\n }\n hasCallback(name) {\n for (const plugin of this._strategy.plugins){\n if (name in plugin) {\n return true;\n }\n }\n return false;\n }\n async runCallbacks(name, param) {\n for (const callback of this.iterateCallbacks(name)){\n await callback(param);\n }\n }\n *iterateCallbacks(name) {\n for (const plugin of this._strategy.plugins){\n if (typeof plugin[name] === \"function\") {\n const state = this._pluginStateMap.get(plugin);\n const statefulCallback = (param)=>{\n const statefulParam = {\n ...param,\n state\n };\n return plugin[name](statefulParam);\n };\n yield statefulCallback;\n }\n }\n }\n waitUntil(promise) {\n this._extendLifetimePromises.push(promise);\n return promise;\n }\n async doneWaiting() {\n let promise = undefined;\n while(promise = this._extendLifetimePromises.shift()){\n await promise;\n }\n }\n destroy() {\n this._handlerDeferred.resolve(null);\n }\n async _ensureResponseSafeToCache(response) {\n let responseToCache = response;\n let pluginsUsed = false;\n for (const callback of this.iterateCallbacks(\"cacheWillUpdate\")){\n responseToCache = await callback({\n request: this.request,\n response: responseToCache,\n event: this.event\n }) || undefined;\n pluginsUsed = true;\n if (!responseToCache) {\n break;\n }\n }\n if (!pluginsUsed) {\n if (responseToCache && responseToCache.status !== 200) {\n responseToCache = undefined;\n }\n if (true) {\n if (responseToCache) {\n if (responseToCache.status !== 200) {\n if (responseToCache.status === 0) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.warn(`The response for '${this.request.url}' is an opaque response. The caching strategy that you're using will not cache opaque responses by default.`);\n } else {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`The response for '${this.request.url}' returned a status code of '${response.status}' and won't be cached as a result.`);\n }\n }\n }\n }\n }\n return responseToCache;\n }\n}\n\nclass Strategy {\n cacheName;\n plugins;\n fetchOptions;\n matchOptions;\n constructor(options = {}){\n this.cacheName = _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.c.getRuntimeName(options.cacheName);\n this.plugins = options.plugins || [];\n this.fetchOptions = options.fetchOptions;\n this.matchOptions = options.matchOptions;\n }\n handle(options) {\n const [responseDone] = this.handleAll(options);\n return responseDone;\n }\n handleAll(options) {\n if (options instanceof FetchEvent) {\n options = {\n event: options,\n request: options.request\n };\n }\n const event = options.event;\n const request = typeof options.request === \"string\" ? new Request(options.request) : options.request;\n const handler = new StrategyHandler(this, options.url ? {\n event,\n request,\n url: options.url,\n params: options.params\n } : {\n event,\n request\n });\n const responseDone = this._getResponse(handler, request, event);\n const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n return [\n responseDone,\n handlerDone\n ];\n }\n async _getResponse(handler, request, event) {\n await handler.runCallbacks(\"handlerWillStart\", {\n event,\n request\n });\n let response = undefined;\n try {\n response = await this._handle(request, handler);\n if (response === undefined || response.type === \"error\") {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"no-response\", {\n url: request.url\n });\n }\n } catch (error) {\n if (error instanceof Error) {\n for (const callback of handler.iterateCallbacks(\"handlerDidError\")){\n response = await callback({\n error,\n event,\n request\n });\n if (response !== undefined) {\n break;\n }\n }\n }\n if (!response) {\n throw error;\n }\n if (true) {\n throw _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`While responding to '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}', an ${error instanceof Error ? error.toString() : \"\"} error occurred. Using a fallback response provided by a handlerDidError plugin.`);\n }\n }\n for (const callback of handler.iterateCallbacks(\"handlerWillRespond\")){\n response = await callback({\n event,\n request,\n response\n });\n }\n return response;\n }\n async _awaitComplete(responseDone, handler, request, event) {\n let response = undefined;\n let error = undefined;\n try {\n response = await responseDone;\n } catch (error) {}\n try {\n await handler.runCallbacks(\"handlerDidRespond\", {\n event,\n request,\n response\n });\n await handler.doneWaiting();\n } catch (waitUntilError) {\n if (waitUntilError instanceof Error) {\n error = waitUntilError;\n }\n }\n await handler.runCallbacks(\"handlerDidComplete\", {\n event,\n request,\n response,\n error\n });\n handler.destroy();\n if (error) {\n throw error;\n }\n }\n}\n\nconst cacheOkAndOpaquePlugin = {\n cacheWillUpdate: async ({ response })=>{\n if (response.status === 200 || response.status === 0) {\n return response;\n }\n return null;\n }\n};\n\nconst messages = {\n strategyStart: (strategyName, request)=>`Using ${strategyName} to respond to '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}'`,\n printFinalResponse: (response)=>{\n if (response) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(\"View the final response here.\");\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(response || \"[No response returned]\");\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n }\n};\n\nclass NetworkFirst extends Strategy {\n _networkTimeoutSeconds;\n constructor(options = {}){\n super(options);\n if (!this.plugins.some((p)=>\"cacheWillUpdate\" in p)) {\n this.plugins.unshift(cacheOkAndOpaquePlugin);\n }\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n if (true) {\n if (this._networkTimeoutSeconds) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(this._networkTimeoutSeconds, \"number\", {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"constructor\",\n paramName: \"networkTimeoutSeconds\"\n });\n }\n }\n }\n async _handle(request, handler) {\n const logs = [];\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"handle\",\n paramName: \"makeRequest\"\n });\n }\n const promises = [];\n let timeoutId;\n if (this._networkTimeoutSeconds) {\n const { id, promise } = this._getTimeoutPromise({\n request,\n logs,\n handler\n });\n timeoutId = id;\n promises.push(promise);\n }\n const networkPromise = this._getNetworkPromise({\n timeoutId,\n request,\n logs,\n handler\n });\n promises.push(networkPromise);\n const response = await handler.waitUntil((async ()=>{\n return await handler.waitUntil(Promise.race(promises)) || await networkPromise;\n })());\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n for (const log of logs){\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(log);\n }\n messages.printFinalResponse(response);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n if (!response) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"no-response\", {\n url: request.url\n });\n }\n return response;\n }\n _getTimeoutPromise({ request, logs, handler }) {\n let timeoutId;\n const timeoutPromise = new Promise((resolve)=>{\n const onNetworkTimeout = async ()=>{\n if (true) {\n logs.push(`Timing out the network response at ${this._networkTimeoutSeconds} seconds.`);\n }\n resolve(await handler.cacheMatch(request));\n };\n timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n });\n return {\n promise: timeoutPromise,\n id: timeoutId\n };\n }\n async _getNetworkPromise({ timeoutId, request, logs, handler }) {\n let error = undefined;\n let response = undefined;\n try {\n response = await handler.fetchAndCachePut(request);\n } catch (fetchError) {\n if (fetchError instanceof Error) {\n error = fetchError;\n }\n }\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (true) {\n if (response) {\n logs.push(\"Got response from network.\");\n } else {\n logs.push(\"Unable to get a response from the network. Will respond \" + \"with a cached response.\");\n }\n }\n if (error || !response) {\n response = await handler.cacheMatch(request);\n if (true) {\n if (response) {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n } else {\n logs.push(`No response found in the '${this.cacheName}' cache.`);\n }\n }\n }\n return response;\n }\n}\n\nclass NetworkOnly extends Strategy {\n _networkTimeoutSeconds;\n constructor(options = {}){\n super(options);\n this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n }\n async _handle(request, handler) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"_handle\",\n paramName: \"request\"\n });\n }\n let error = undefined;\n let response;\n try {\n const promises = [\n handler.fetch(request)\n ];\n if (this._networkTimeoutSeconds) {\n const timeoutPromise = (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.t)(this._networkTimeoutSeconds * 1000);\n promises.push(timeoutPromise);\n }\n response = await Promise.race(promises);\n if (!response) {\n throw new Error(`Timed out the network response after ${this._networkTimeoutSeconds} seconds.`);\n }\n } catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n if (response) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Got response from network.\");\n } else {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Unable to get a response from the network.\");\n }\n messages.printFinalResponse(response);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n if (!response) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"no-response\", {\n url: request.url,\n error\n });\n }\n return response;\n }\n}\n\nconst BACKGROUND_SYNC_DB_VERSION = 3;\nconst BACKGROUND_SYNC_DB_NAME = \"serwist-background-sync\";\nconst REQUEST_OBJECT_STORE_NAME = \"requests\";\nconst QUEUE_NAME_INDEX = \"queueName\";\nclass BackgroundSyncQueueDb {\n _db = null;\n async addEntry(entry) {\n const db = await this.getDb();\n const tx = db.transaction(REQUEST_OBJECT_STORE_NAME, \"readwrite\", {\n durability: \"relaxed\"\n });\n await tx.store.add(entry);\n await tx.done;\n }\n async getFirstEntryId() {\n const db = await this.getDb();\n const cursor = await db.transaction(REQUEST_OBJECT_STORE_NAME).store.openCursor();\n return cursor?.value.id;\n }\n async getAllEntriesByQueueName(queueName) {\n const db = await this.getDb();\n const results = await db.getAllFromIndex(REQUEST_OBJECT_STORE_NAME, QUEUE_NAME_INDEX, IDBKeyRange.only(queueName));\n return results ? results : new Array();\n }\n async getEntryCountByQueueName(queueName) {\n const db = await this.getDb();\n return db.countFromIndex(REQUEST_OBJECT_STORE_NAME, QUEUE_NAME_INDEX, IDBKeyRange.only(queueName));\n }\n async deleteEntry(id) {\n const db = await this.getDb();\n await db.delete(REQUEST_OBJECT_STORE_NAME, id);\n }\n async getFirstEntryByQueueName(queueName) {\n return await this.getEndEntryFromIndex(IDBKeyRange.only(queueName), \"next\");\n }\n async getLastEntryByQueueName(queueName) {\n return await this.getEndEntryFromIndex(IDBKeyRange.only(queueName), \"prev\");\n }\n async getEndEntryFromIndex(query, direction) {\n const db = await this.getDb();\n const cursor = await db.transaction(REQUEST_OBJECT_STORE_NAME).store.index(QUEUE_NAME_INDEX).openCursor(query, direction);\n return cursor?.value;\n }\n async getDb() {\n if (!this._db) {\n this._db = await (0,idb__WEBPACK_IMPORTED_MODULE_1__.openDB)(BACKGROUND_SYNC_DB_NAME, BACKGROUND_SYNC_DB_VERSION, {\n upgrade: this._upgradeDb\n });\n }\n return this._db;\n }\n _upgradeDb(db, oldVersion) {\n if (oldVersion > 0 && oldVersion < BACKGROUND_SYNC_DB_VERSION) {\n if (db.objectStoreNames.contains(REQUEST_OBJECT_STORE_NAME)) {\n db.deleteObjectStore(REQUEST_OBJECT_STORE_NAME);\n }\n }\n const objStore = db.createObjectStore(REQUEST_OBJECT_STORE_NAME, {\n autoIncrement: true,\n keyPath: \"id\"\n });\n objStore.createIndex(QUEUE_NAME_INDEX, QUEUE_NAME_INDEX, {\n unique: false\n });\n }\n}\n\nclass BackgroundSyncQueueStore {\n _queueName;\n _queueDb;\n constructor(queueName){\n this._queueName = queueName;\n this._queueDb = new BackgroundSyncQueueDb();\n }\n async pushEntry(entry) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueueStore\",\n funcName: \"pushEntry\",\n paramName: \"entry\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry.requestData, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueueStore\",\n funcName: \"pushEntry\",\n paramName: \"entry.requestData\"\n });\n }\n delete entry.id;\n entry.queueName = this._queueName;\n await this._queueDb.addEntry(entry);\n }\n async unshiftEntry(entry) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueueStore\",\n funcName: \"unshiftEntry\",\n paramName: \"entry\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry.requestData, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueueStore\",\n funcName: \"unshiftEntry\",\n paramName: \"entry.requestData\"\n });\n }\n const firstId = await this._queueDb.getFirstEntryId();\n if (firstId) {\n entry.id = firstId - 1;\n } else {\n delete entry.id;\n }\n entry.queueName = this._queueName;\n await this._queueDb.addEntry(entry);\n }\n async popEntry() {\n return this._removeEntry(await this._queueDb.getLastEntryByQueueName(this._queueName));\n }\n async shiftEntry() {\n return this._removeEntry(await this._queueDb.getFirstEntryByQueueName(this._queueName));\n }\n async getAll() {\n return await this._queueDb.getAllEntriesByQueueName(this._queueName);\n }\n async size() {\n return await this._queueDb.getEntryCountByQueueName(this._queueName);\n }\n async deleteEntry(id) {\n await this._queueDb.deleteEntry(id);\n }\n async _removeEntry(entry) {\n if (entry) {\n await this.deleteEntry(entry.id);\n }\n return entry;\n }\n}\n\nconst serializableProperties = [\n \"method\",\n \"referrer\",\n \"referrerPolicy\",\n \"mode\",\n \"credentials\",\n \"cache\",\n \"redirect\",\n \"integrity\",\n \"keepalive\"\n];\nclass StorableRequest {\n _requestData;\n static async fromRequest(request) {\n const requestData = {\n url: request.url,\n headers: {}\n };\n if (request.method !== \"GET\") {\n requestData.body = await request.clone().arrayBuffer();\n }\n request.headers.forEach((value, key)=>{\n requestData.headers[key] = value;\n });\n for (const prop of serializableProperties){\n if (request[prop] !== undefined) {\n requestData[prop] = request[prop];\n }\n }\n return new StorableRequest(requestData);\n }\n constructor(requestData){\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(requestData, \"object\", {\n moduleName: \"serwist\",\n className: \"StorableRequest\",\n funcName: \"constructor\",\n paramName: \"requestData\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(requestData.url, \"string\", {\n moduleName: \"serwist\",\n className: \"StorableRequest\",\n funcName: \"constructor\",\n paramName: \"requestData.url\"\n });\n }\n if (requestData.mode === \"navigate\") {\n requestData.mode = \"same-origin\";\n }\n this._requestData = requestData;\n }\n toObject() {\n const requestData = Object.assign({}, this._requestData);\n requestData.headers = Object.assign({}, this._requestData.headers);\n if (requestData.body) {\n requestData.body = requestData.body.slice(0);\n }\n return requestData;\n }\n toRequest() {\n return new Request(this._requestData.url, this._requestData);\n }\n clone() {\n return new StorableRequest(this.toObject());\n }\n}\n\nconst TAG_PREFIX = \"serwist-background-sync\";\nconst MAX_RETENTION_TIME = 60 * 24 * 7;\nconst queueNames = new Set();\nconst convertEntry = (queueStoreEntry)=>{\n const queueEntry = {\n request: new StorableRequest(queueStoreEntry.requestData).toRequest(),\n timestamp: queueStoreEntry.timestamp\n };\n if (queueStoreEntry.metadata) {\n queueEntry.metadata = queueStoreEntry.metadata;\n }\n return queueEntry;\n};\nclass BackgroundSyncQueue {\n _name;\n _onSync;\n _maxRetentionTime;\n _queueStore;\n _forceSyncFallback;\n _syncInProgress = false;\n _requestsAddedDuringSync = false;\n constructor(name, { forceSyncFallback, onSync, maxRetentionTime } = {}){\n if (queueNames.has(name)) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"duplicate-queue-name\", {\n name\n });\n }\n queueNames.add(name);\n this._name = name;\n this._onSync = onSync || this.replayRequests;\n this._maxRetentionTime = maxRetentionTime || MAX_RETENTION_TIME;\n this._forceSyncFallback = Boolean(forceSyncFallback);\n this._queueStore = new BackgroundSyncQueueStore(this._name);\n this._addSyncListener();\n }\n get name() {\n return this._name;\n }\n async pushRequest(entry) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueue\",\n funcName: \"pushRequest\",\n paramName: \"entry\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(entry.request, Request, {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueue\",\n funcName: \"pushRequest\",\n paramName: \"entry.request\"\n });\n }\n await this._addRequest(entry, \"push\");\n }\n async unshiftRequest(entry) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(entry, \"object\", {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueue\",\n funcName: \"unshiftRequest\",\n paramName: \"entry\"\n });\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isInstance(entry.request, Request, {\n moduleName: \"serwist\",\n className: \"BackgroundSyncQueue\",\n funcName: \"unshiftRequest\",\n paramName: \"entry.request\"\n });\n }\n await this._addRequest(entry, \"unshift\");\n }\n async popRequest() {\n return this._removeRequest(\"pop\");\n }\n async shiftRequest() {\n return this._removeRequest(\"shift\");\n }\n async getAll() {\n const allEntries = await this._queueStore.getAll();\n const now = Date.now();\n const unexpiredEntries = [];\n for (const entry of allEntries){\n const maxRetentionTimeInMs = this._maxRetentionTime * 60 * 1000;\n if (now - entry.timestamp > maxRetentionTimeInMs) {\n await this._queueStore.deleteEntry(entry.id);\n } else {\n unexpiredEntries.push(convertEntry(entry));\n }\n }\n return unexpiredEntries;\n }\n async size() {\n return await this._queueStore.size();\n }\n async _addRequest({ request, metadata, timestamp = Date.now() }, operation) {\n const storableRequest = await StorableRequest.fromRequest(request.clone());\n const entry = {\n requestData: storableRequest.toObject(),\n timestamp\n };\n if (metadata) {\n entry.metadata = metadata;\n }\n switch(operation){\n case \"push\":\n await this._queueStore.pushEntry(entry);\n break;\n case \"unshift\":\n await this._queueStore.unshiftEntry(entry);\n break;\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Request for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}' has ` + `been added to background sync queue '${this._name}'.`);\n }\n if (this._syncInProgress) {\n this._requestsAddedDuringSync = true;\n } else {\n await this.registerSync();\n }\n }\n async _removeRequest(operation) {\n const now = Date.now();\n let entry;\n switch(operation){\n case \"pop\":\n entry = await this._queueStore.popEntry();\n break;\n case \"shift\":\n entry = await this._queueStore.shiftEntry();\n break;\n }\n if (entry) {\n const maxRetentionTimeInMs = this._maxRetentionTime * 60 * 1000;\n if (now - entry.timestamp > maxRetentionTimeInMs) {\n return this._removeRequest(operation);\n }\n return convertEntry(entry);\n }\n return undefined;\n }\n async replayRequests() {\n let entry = undefined;\n while(entry = await this.shiftRequest()){\n try {\n await fetch(entry.request.clone());\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Request for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(entry.request.url)}' ` + `has been replayed in queue '${this._name}'`);\n }\n } catch (error) {\n await this.unshiftRequest(entry);\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Request for '${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(entry.request.url)}' ` + `failed to replay, putting it back in queue '${this._name}'`);\n }\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"queue-replay-failed\", {\n name: this._name\n });\n }\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`All requests in queue '${this.name}' have successfully replayed; the queue is now empty!`);\n }\n }\n async registerSync() {\n if (\"sync\" in self.registration && !this._forceSyncFallback) {\n try {\n await self.registration.sync.register(`${TAG_PREFIX}:${this._name}`);\n } catch (err) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.warn(`Unable to register sync event for '${this._name}'.`, err);\n }\n }\n }\n }\n _addSyncListener() {\n if (\"sync\" in self.registration && !this._forceSyncFallback) {\n self.addEventListener(\"sync\", (event)=>{\n if (event.tag === `${TAG_PREFIX}:${this._name}`) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Background sync for tag '${event.tag}' has been received`);\n }\n const syncComplete = async ()=>{\n this._syncInProgress = true;\n let syncError = undefined;\n try {\n await this._onSync({\n queue: this\n });\n } catch (error) {\n if (error instanceof Error) {\n syncError = error;\n throw syncError;\n }\n } finally{\n if (this._requestsAddedDuringSync && !(syncError && !event.lastChance)) {\n await this.registerSync();\n }\n this._syncInProgress = false;\n this._requestsAddedDuringSync = false;\n }\n };\n event.waitUntil(syncComplete());\n }\n });\n } else {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Background sync replaying without background sync event\");\n }\n void this._onSync({\n queue: this\n });\n }\n }\n static get _queueNames() {\n return queueNames;\n }\n}\n\nclass BackgroundSyncPlugin {\n _queue;\n constructor(name, options){\n this._queue = new BackgroundSyncQueue(name, options);\n }\n async fetchDidFail({ request }) {\n await this._queue.pushRequest({\n request\n });\n }\n}\n\nconst copyResponse = async (response, modifier)=>{\n let origin = null;\n if (response.url) {\n const responseURL = new URL(response.url);\n origin = responseURL.origin;\n }\n if (origin !== self.location.origin) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"cross-origin-copy-response\", {\n origin\n });\n }\n const clonedResponse = response.clone();\n const responseInit = {\n headers: new Headers(clonedResponse.headers),\n status: clonedResponse.status,\n statusText: clonedResponse.statusText\n };\n const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n const body = (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.h)() ? clonedResponse.body : await clonedResponse.blob();\n return new Response(body, modifiedResponseInit);\n};\n\nclass PrecacheStrategy extends Strategy {\n _fallbackToNetwork;\n static defaultPrecacheCacheabilityPlugin = {\n async cacheWillUpdate ({ response }) {\n if (!response || response.status >= 400) {\n return null;\n }\n return response;\n }\n };\n static copyRedirectedCacheableResponsesPlugin = {\n async cacheWillUpdate ({ response }) {\n return response.redirected ? await copyResponse(response) : response;\n }\n };\n constructor(options = {}){\n options.cacheName = _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.c.getPrecacheName(options.cacheName);\n super(options);\n this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true;\n this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n }\n async _handle(request, handler) {\n const response = await handler.cacheMatch(request);\n if (response) {\n return response;\n }\n if (handler.event && handler.event.type === \"install\") {\n return await this._handleInstall(request, handler);\n }\n return await this._handleFetch(request, handler);\n }\n async _handleFetch(request, handler) {\n let response = undefined;\n const params = handler.params || {};\n if (this._fallbackToNetwork) {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.warn(`The precached response for ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)} in ${this.cacheName} was not found. Falling back to the network.`);\n }\n const integrityInManifest = params.integrity;\n const integrityInRequest = request.integrity;\n const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n response = await handler.fetch(new Request(request, {\n integrity: request.mode !== \"no-cors\" ? integrityInRequest || integrityInManifest : undefined\n }));\n if (integrityInManifest && noIntegrityConflict && request.mode !== \"no-cors\") {\n this._useDefaultCacheabilityPluginIfNeeded();\n const wasCached = await handler.cachePut(request, response.clone());\n if (true) {\n if (wasCached) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`A response for ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)} was used to \"repair\" the precache.`);\n }\n }\n }\n } else {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"missing-precache-entry\", {\n cacheName: this.cacheName,\n url: request.url\n });\n }\n if (true) {\n const cacheKey = params.cacheKey || await handler.getCacheKey(request, \"read\");\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(`Precaching is responding to: ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url)}`);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(`Serving the precached url: ${(0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.g)(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(\"View request details here.\");\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(request);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(\"View response details here.\");\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(response);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n return response;\n }\n async _handleInstall(request, handler) {\n this._useDefaultCacheabilityPluginIfNeeded();\n const response = await handler.fetch(request);\n const wasCached = await handler.cachePut(request, response.clone());\n if (!wasCached) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"bad-precaching-response\", {\n url: request.url,\n status: response.status\n });\n }\n return response;\n }\n _useDefaultCacheabilityPluginIfNeeded() {\n let defaultPluginIndex = null;\n let cacheWillUpdatePluginCount = 0;\n for (const [index, plugin] of this.plugins.entries()){\n if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n continue;\n }\n if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n defaultPluginIndex = index;\n }\n if (plugin.cacheWillUpdate) {\n cacheWillUpdatePluginCount++;\n }\n }\n if (cacheWillUpdatePluginCount === 0) {\n this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n this.plugins.splice(defaultPluginIndex, 1);\n }\n }\n}\n\nconst isNavigationPreloadSupported = ()=>{\n return Boolean(self.registration?.navigationPreload);\n};\nconst enableNavigationPreload = (headerValue)=>{\n if (isNavigationPreloadSupported()) {\n self.addEventListener(\"activate\", (event)=>{\n event.waitUntil(self.registration.navigationPreload.enable().then(()=>{\n if (headerValue) {\n void self.registration.navigationPreload.setHeaderValue(headerValue);\n }\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Navigation preloading is enabled.\");\n }\n }));\n });\n } else {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Navigation preloading is not supported in this browser.\");\n }\n }\n};\nconst disableNavigationPreload = ()=>{\n if (isNavigationPreloadSupported()) {\n self.addEventListener(\"activate\", (event)=>{\n event.waitUntil(self.registration.navigationPreload.disable().then(()=>{\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Navigation preloading is disabled.\");\n }\n }));\n });\n } else {\n if (true) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(\"Navigation preloading is not supported in this browser.\");\n }\n }\n};\n\nconst setCacheNameDetails = (details)=>{\n if (true) {\n for (const key of Object.keys(details)){\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.f.isType(details[key], \"string\", {\n moduleName: \"@serwist/core\",\n funcName: \"setCacheNameDetails\",\n paramName: `details.${key}`\n });\n }\n if (details.precache?.length === 0) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"invalid-cache-name\", {\n cacheNameId: \"precache\",\n value: details.precache\n });\n }\n if (details.runtime?.length === 0) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"invalid-cache-name\", {\n cacheNameId: \"runtime\",\n value: details.runtime\n });\n }\n if (details.googleAnalytics?.length === 0) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"invalid-cache-name\", {\n cacheNameId: \"googleAnalytics\",\n value: details.googleAnalytics\n });\n }\n }\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.c.updateDetails(details);\n};\n\nclass PrecacheInstallReportPlugin {\n updatedURLs = [];\n notUpdatedURLs = [];\n handlerWillStart = async ({ request, state })=>{\n if (state) {\n state.originalRequest = request;\n }\n };\n cachedResponseWillBeUsed = async ({ event, state, cachedResponse })=>{\n if (event.type === \"install\") {\n if (state?.originalRequest && state.originalRequest instanceof Request) {\n const url = state.originalRequest.url;\n if (cachedResponse) {\n this.notUpdatedURLs.push(url);\n } else {\n this.updatedURLs.push(url);\n }\n }\n }\n return cachedResponse;\n };\n}\n\nconst REVISION_SEARCH_PARAM = \"__WB_REVISION__\";\nconst createCacheKey = (entry)=>{\n if (!entry) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"add-to-cache-list-unexpected-type\", {\n entry\n });\n }\n if (typeof entry === \"string\") {\n const urlObject = new URL(entry, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href\n };\n }\n const { revision, url } = entry;\n if (!url) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"add-to-cache-list-unexpected-type\", {\n entry\n });\n }\n if (!revision) {\n const urlObject = new URL(url, location.href);\n return {\n cacheKey: urlObject.href,\n url: urlObject.href\n };\n }\n const cacheKeyURL = new URL(url, location.href);\n const originalURL = new URL(url, location.href);\n cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n return {\n cacheKey: cacheKeyURL.href,\n url: originalURL.href\n };\n};\n\nconst parseRoute = (capture, handler, method)=>{\n if (typeof capture === \"string\") {\n const captureUrl = new URL(capture, location.href);\n if (true) {\n if (!(capture.startsWith(\"/\") || capture.startsWith(\"http\"))) {\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"invalid-string\", {\n moduleName: \"serwist\",\n funcName: \"parseRoute\",\n paramName: \"capture\"\n });\n }\n const valueToCheck = capture.startsWith(\"http\") ? captureUrl.pathname : capture;\n const wildcards = \"[*:?+]\";\n if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`The '$capture' parameter contains an Express-style wildcard character (${wildcards}). Strings are now always interpreted as exact matches; use a RegExp for partial or wildcard matches.`);\n }\n }\n const matchCallback = ({ url })=>{\n if (true) {\n if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.debug(`${capture} only partially matches the cross-origin URL ${url.toString()}. This route will only handle cross-origin requests if they match the entire URL.`);\n }\n }\n return url.href === captureUrl.href;\n };\n return new Route(matchCallback, handler, method);\n }\n if (capture instanceof RegExp) {\n return new RegExpRoute(capture, handler, method);\n }\n if (typeof capture === \"function\") {\n return new Route(capture, handler, method);\n }\n if (capture instanceof Route) {\n return capture;\n }\n throw new _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.S(\"unsupported-route-type\", {\n moduleName: \"serwist\",\n funcName: \"parseRoute\",\n paramName: \"capture\"\n });\n};\n\nconst logGroup = (groupTitle, deletedURLs)=>{\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(groupTitle);\n for (const url of deletedURLs){\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(url);\n }\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n};\nconst printCleanupDetails = (deletedURLs)=>{\n const deletionCount = deletedURLs.length;\n if (deletionCount > 0) {\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(`During precaching cleanup, ${deletionCount} cached request${deletionCount === 1 ? \" was\" : \"s were\"} deleted.`);\n logGroup(\"Deleted Cache Requests\", deletedURLs);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n};\n\nfunction _nestedGroup(groupTitle, urls) {\n if (urls.length === 0) {\n return;\n }\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(groupTitle);\n for (const url of urls){\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.log(url);\n }\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n}\nconst printInstallDetails = (urlsToPrecache, urlsAlreadyPrecached)=>{\n const precachedCount = urlsToPrecache.length;\n const alreadyPrecachedCount = urlsAlreadyPrecached.length;\n if (precachedCount || alreadyPrecachedCount) {\n let message = `Precaching ${precachedCount} file${precachedCount === 1 ? \"\" : \"s\"}.`;\n if (alreadyPrecachedCount > 0) {\n message += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? \" is\" : \"s are\"} already cached.`;\n }\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupCollapsed(message);\n _nestedGroup(\"View newly precached URLs.\", urlsToPrecache);\n _nestedGroup(\"View previously precached URLs.\", urlsAlreadyPrecached);\n _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.l.groupEnd();\n }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vc2Vyd2lzdEA5LjAuMl90eXBlc2NyaXB0QDUuNC41L25vZGVfbW9kdWxlcy9zZXJ3aXN0L2Rpc3QvY2h1bmtzL3ByaW50SW5zdGFsbERldGFpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtUTtBQUN0Tzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0MsUUFBUSw0Q0FBa0I7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsZ0JBQWdCLDRDQUFrQjtBQUNsQztBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSx1QkFBdUIsSUFBSTtBQUMzQixZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQXFDO0FBQ3pELG9CQUFvQiw0Q0FBTSw2QkFBNkIsbUJBQW1CLGtFQUFrRSxr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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QiwyQ0FBTTtBQUNuQztBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQsWUFBWSw0Q0FBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsWUFBWSw0Q0FBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQsWUFBWSw0Q0FBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsWUFBWSw0Q0FBa0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUMsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsOENBQThDLElBQUk7QUFDMUU7QUFDQSxzQkFBc0IsNENBQVk7QUFDbEM7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFlBQVksNENBQWtCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRCxZQUFZLDRDQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixZQUFZLDRDQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsMkNBQTJDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRCxZQUFZLDRDQUFNLHFCQUFxQixnREFBYyxjQUFjLGtEQUFrRCxXQUFXO0FBQ2hJO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFxQztBQUN6RCxvQkFBb0IsNENBQU0scUJBQXFCLGdEQUFjLG9CQUFvQixxQ0FBcUMsV0FBVztBQUNqSTtBQUNBLGNBQWM7QUFDZDtBQUNBLG9CQUFvQixJQUFxQztBQUN6RCxvQkFBb0IsNENBQU0scUJBQXFCLGdEQUFjLG9CQUFvQixxREFBcUQsV0FBVztBQUNqSjtBQUNBLDBCQUEwQiw0Q0FBWTtBQUN0QztBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRCxZQUFZLDRDQUFNLCtCQUErQixVQUFVLDhCQUE4QjtBQUN6RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELFdBQVcsR0FBRyxXQUFXO0FBQ2xGLGNBQWM7QUFDZCxvQkFBb0IsSUFBcUM7QUFDekQsb0JBQW9CLDRDQUFNLDRDQUE0QyxXQUFXO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLFdBQVcsR0FBRyxXQUFXO0FBQzlELHdCQUF3QixJQUFxQztBQUM3RCx3QkFBd0IsNENBQU0saUNBQWlDLFVBQVU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixVQUFVO0FBQ1YsZ0JBQWdCLElBQXFDO0FBQ3JELGdCQUFnQiw0Q0FBTTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsU0FBUztBQUNsQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNENBQVk7QUFDOUI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnREFBa0M7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsVUFBVTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxVQUFVO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qiw0QkFBNEIsNENBQVU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLElBQXFDO0FBQ3JELGdCQUFnQiw0Q0FBTSxvQ0FBb0MsZ0RBQWMsZUFBZSxLQUFLLGdCQUFnQjtBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLElBQXFDO0FBQ3pEO0FBQ0Esd0JBQXdCLDRDQUFNLHVCQUF1QixnREFBYyxlQUFlO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixzQkFBc0IsNENBQVk7QUFDbEM7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQSxZQUFZLDRDQUFNLGdEQUFnRCxnREFBYyxjQUFjO0FBQzlGLFlBQVksNENBQU0sbUNBQW1DLGdEQUFjLHdEQUF3RDtBQUMzSCxZQUFZLDRDQUFNO0FBQ2xCLFlBQVksNENBQU07QUFDbEIsWUFBWSw0Q0FBTTtBQUNsQixZQUFZLDRDQUFNO0FBQ2xCLFlBQVksNENBQU07QUFDbEIsWUFBWSw0Q0FBTTtBQUNsQixZQUFZLDRDQUFNO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsNENBQVk7QUFDbEM7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFxQztBQUN6RCxvQkFBb0IsNENBQU07QUFDMUI7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNULE1BQU07QUFDTixZQUFZLElBQXFDO0FBQ2pELFlBQVksNENBQU07QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBcUM7QUFDekQsb0JBQW9CLDRDQUFNO0FBQzFCO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxNQUFNO0FBQ04sWUFBWSxJQUFxQztBQUNqRCxZQUFZLDRDQUFNO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQSxZQUFZLDRDQUFrQjtBQUM5QjtBQUNBO0FBQ0Esc0NBQXNDLElBQUk7QUFDMUMsYUFBYTtBQUNiO0FBQ0E7QUFDQSxzQkFBc0IsNENBQVk7QUFDbEM7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0Esc0JBQXNCLDRDQUFZO0FBQ2xDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBWTtBQUNsQztBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxJQUFJLDRDQUFVO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGdCQUFnQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qyw4QkFBOEI7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNENBQVk7QUFDOUI7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksZ0JBQWdCO0FBQzVCO0FBQ0Esa0JBQWtCLDRDQUFZO0FBQzlCO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQ7QUFDQSwwQkFBMEIsNENBQVk7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixVQUFVO0FBQ3hDLGdCQUFnQiw0Q0FBTSxpRkFBaUYsVUFBVSx3REFBd0Q7QUFDeks7QUFDQTtBQUNBLGlDQUFpQyxLQUFLO0FBQ3RDLGdCQUFnQixJQUFxQztBQUNyRDtBQUNBLG9CQUFvQiw0Q0FBTSxVQUFVLFNBQVMsOENBQThDLGVBQWU7QUFDMUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyw0Q0FBWTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxJQUFJLDRDQUFNO0FBQ1Y7QUFDQSxRQUFRLDRDQUFNO0FBQ2Q7QUFDQSxJQUFJLDRDQUFNO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDRDQUFNLDhDQUE4QyxlQUFlLGdCQUFnQix5Q0FBeUM7QUFDcEk7QUFDQSxRQUFRLDRDQUFNO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksNENBQU07QUFDVjtBQUNBLFFBQVEsNENBQU07QUFDZDtBQUNBLElBQUksNENBQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGdCQUFnQixNQUFNLGdDQUFnQztBQUMxRjtBQUNBLDJCQUEyQix1QkFBdUIsV0FBVywrQ0FBK0M7QUFDNUc7QUFDQSxRQUFRLDRDQUFNO0FBQ2Q7QUFDQTtBQUNBLFFBQVEsNENBQU07QUFDZDtBQUNBOztBQUV5cUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzLy5wbnBtL3Nlcndpc3RAOS4wLjJfdHlwZXNjcmlwdEA1LjQuNS9ub2RlX21vZHVsZXMvc2Vyd2lzdC9kaXN0L2NodW5rcy9wcmludEluc3RhbGxEZXRhaWxzLmpzPzQ0NTYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZiBhcyBmaW5hbEFzc2VydEV4cG9ydHMsIGwgYXMgbG9nZ2VyLCBEIGFzIERlZmVycmVkLCBnIGFzIGdldEZyaWVuZGx5VVJMLCBTIGFzIFNlcndpc3RFcnJvciwgdCBhcyB0aW1lb3V0LCBkIGFzIGNhY2hlTWF0Y2hJZ25vcmVQYXJhbXMsIGUgYXMgZXhlY3V0ZVF1b3RhRXJyb3JDYWxsYmFja3MsIGMgYXMgY2FjaGVOYW1lcywgaCBhcyBjYW5Db25zdHJ1Y3RSZXNwb25zZUZyb21Cb2R5U3RyZWFtIH0gZnJvbSAnLi93YWl0VW50aWwuanMnO1xuaW1wb3J0IHsgb3BlbkRCIH0gZnJvbSAnaWRiJztcblxuY29uc3QgZGVmYXVsdE1ldGhvZCA9IFwiR0VUXCI7XG5jb25zdCB2YWxpZE1ldGhvZHMgPSBbXG4gICAgXCJERUxFVEVcIixcbiAgICBcIkdFVFwiLFxuICAgIFwiSEVBRFwiLFxuICAgIFwiUEFUQ0hcIixcbiAgICBcIlBPU1RcIixcbiAgICBcIlBVVFwiXG5dO1xuXG5jb25zdCBub3JtYWxpemVIYW5kbGVyID0gKGhhbmRsZXIpPT57XG4gICAgaWYgKGhhbmRsZXIgJiYgdHlwZW9mIGhhbmRsZXIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmhhc01ldGhvZChoYW5kbGVyLCBcImhhbmRsZVwiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlJvdXRlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiaGFuZGxlclwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlcjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGhhbmRsZXIsIFwiZnVuY3Rpb25cIiwge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICBjbGFzc05hbWU6IFwiUm91dGVcIixcbiAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCIsXG4gICAgICAgICAgICBwYXJhbU5hbWU6IFwiaGFuZGxlclwiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBoYW5kbGU6IGhhbmRsZXJcbiAgICB9O1xufTtcblxuY2xhc3MgUm91dGUge1xuICAgIGhhbmRsZXI7XG4gICAgbWF0Y2g7XG4gICAgbWV0aG9kO1xuICAgIGNhdGNoSGFuZGxlcjtcbiAgICBjb25zdHJ1Y3RvcihtYXRjaCwgaGFuZGxlciwgbWV0aG9kID0gZGVmYXVsdE1ldGhvZCl7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUobWF0Y2gsIFwiZnVuY3Rpb25cIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJSb3V0ZVwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcIm1hdGNoXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCkge1xuICAgICAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc09uZU9mKG1ldGhvZCwgdmFsaWRNZXRob2RzLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJtZXRob2RcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IG5vcm1hbGl6ZUhhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgIHRoaXMubWF0Y2ggPSBtYXRjaDtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgfVxuICAgIHNldENhdGNoSGFuZGxlcihoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuY2F0Y2hIYW5kbGVyID0gbm9ybWFsaXplSGFuZGxlcihoYW5kbGVyKTtcbiAgICB9XG59XG5cbmNsYXNzIE5hdmlnYXRpb25Sb3V0ZSBleHRlbmRzIFJvdXRlIHtcbiAgICBfYWxsb3dsaXN0O1xuICAgIF9kZW55bGlzdDtcbiAgICBjb25zdHJ1Y3RvcihoYW5kbGVyLCB7IGFsbG93bGlzdCA9IFtcbiAgICAgICAgLy4vXG4gICAgXSwgZGVueWxpc3QgPSBbXSB9ID0ge30pe1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNBcnJheU9mQ2xhc3MoYWxsb3dsaXN0LCBSZWdFeHAsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiTmF2aWdhdGlvblJvdXRlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwib3B0aW9ucy5hbGxvd2xpc3RcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNBcnJheU9mQ2xhc3MoZGVueWxpc3QsIFJlZ0V4cCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJOYXZpZ2F0aW9uUm91dGVcIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJvcHRpb25zLmRlbnlsaXN0XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKChvcHRpb25zKT0+dGhpcy5fbWF0Y2gob3B0aW9ucyksIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLl9hbGxvd2xpc3QgPSBhbGxvd2xpc3Q7XG4gICAgICAgIHRoaXMuX2RlbnlsaXN0ID0gZGVueWxpc3Q7XG4gICAgfVxuICAgIF9tYXRjaCh7IHVybCwgcmVxdWVzdCB9KSB7XG4gICAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QubW9kZSAhPT0gXCJuYXZpZ2F0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGF0aG5hbWVBbmRTZWFyY2ggPSB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoO1xuICAgICAgICBmb3IgKGNvbnN0IHJlZ0V4cCBvZiB0aGlzLl9kZW55bGlzdCl7XG4gICAgICAgICAgICBpZiAocmVnRXhwLnRlc3QocGF0aG5hbWVBbmRTZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBUaGUgbmF2aWdhdGlvbiByb3V0ZSAke3BhdGhuYW1lQW5kU2VhcmNofSBpcyBub3QgYmVpbmcgdXNlZCwgc2luY2UgdGhlIFVSTCBtYXRjaGVzIHRoaXMgZGVueWxpc3QgcGF0dGVybjogJHtyZWdFeHAudG9TdHJpbmcoKX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hbGxvd2xpc3Quc29tZSgocmVnRXhwKT0+cmVnRXhwLnRlc3QocGF0aG5hbWVBbmRTZWFyY2gpKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgVGhlIG5hdmlnYXRpb24gcm91dGUgJHtwYXRobmFtZUFuZFNlYXJjaH0gaXMgYmVpbmcgdXNlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coYFRoZSBuYXZpZ2F0aW9uIHJvdXRlICR7cGF0aG5hbWVBbmRTZWFyY2h9IGlzIG5vdCBiZWluZyB1c2VkLCBzaW5jZSB0aGUgVVJMIGJlaW5nIG5hdmlnYXRlZCB0byBkb2Vzbid0IG1hdGNoIHRoZSBhbGxvd2xpc3QuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuY29uc3QgcmVtb3ZlSWdub3JlZFNlYXJjaFBhcmFtcyA9ICh1cmxPYmplY3QsIGlnbm9yZVVSTFBhcmFtZXRlcnNNYXRjaGluZyA9IFtdKT0+e1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIFtcbiAgICAgICAgLi4udXJsT2JqZWN0LnNlYXJjaFBhcmFtcy5rZXlzKClcbiAgICBdKXtcbiAgICAgICAgaWYgKGlnbm9yZVVSTFBhcmFtZXRlcnNNYXRjaGluZy5zb21lKChyZWdFeHApPT5yZWdFeHAudGVzdChwYXJhbU5hbWUpKSkge1xuICAgICAgICAgICAgdXJsT2JqZWN0LnNlYXJjaFBhcmFtcy5kZWxldGUocGFyYW1OYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsT2JqZWN0O1xufTtcblxuZnVuY3Rpb24qIGdlbmVyYXRlVVJMVmFyaWF0aW9ucyh1cmwsIHsgZGlyZWN0b3J5SW5kZXggPSBcImluZGV4Lmh0bWxcIiwgaWdub3JlVVJMUGFyYW1ldGVyc01hdGNoaW5nID0gW1xuICAgIC9edXRtXy8sXG4gICAgL15mYmNsaWQkL1xuXSwgY2xlYW5VUkxzID0gdHJ1ZSwgdXJsTWFuaXB1bGF0aW9uIH0gPSB7fSkge1xuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbi5ocmVmKTtcbiAgICB1cmxPYmplY3QuaGFzaCA9IFwiXCI7XG4gICAgeWllbGQgdXJsT2JqZWN0LmhyZWY7XG4gICAgY29uc3QgdXJsV2l0aG91dElnbm9yZWRQYXJhbXMgPSByZW1vdmVJZ25vcmVkU2VhcmNoUGFyYW1zKHVybE9iamVjdCwgaWdub3JlVVJMUGFyYW1ldGVyc01hdGNoaW5nKTtcbiAgICB5aWVsZCB1cmxXaXRob3V0SWdub3JlZFBhcmFtcy5ocmVmO1xuICAgIGlmIChkaXJlY3RvcnlJbmRleCAmJiB1cmxXaXRob3V0SWdub3JlZFBhcmFtcy5wYXRobmFtZS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgY29uc3QgZGlyZWN0b3J5VVJMID0gbmV3IFVSTCh1cmxXaXRob3V0SWdub3JlZFBhcmFtcy5ocmVmKTtcbiAgICAgICAgZGlyZWN0b3J5VVJMLnBhdGhuYW1lICs9IGRpcmVjdG9yeUluZGV4O1xuICAgICAgICB5aWVsZCBkaXJlY3RvcnlVUkwuaHJlZjtcbiAgICB9XG4gICAgaWYgKGNsZWFuVVJMcykge1xuICAgICAgICBjb25zdCBjbGVhblVSTCA9IG5ldyBVUkwodXJsV2l0aG91dElnbm9yZWRQYXJhbXMuaHJlZik7XG4gICAgICAgIGNsZWFuVVJMLnBhdGhuYW1lICs9IFwiLmh0bWxcIjtcbiAgICAgICAgeWllbGQgY2xlYW5VUkwuaHJlZjtcbiAgICB9XG4gICAgaWYgKHVybE1hbmlwdWxhdGlvbikge1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsVVJMcyA9IHVybE1hbmlwdWxhdGlvbih7XG4gICAgICAgICAgICB1cmw6IHVybE9iamVjdFxuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCB1cmxUb0F0dGVtcHQgb2YgYWRkaXRpb25hbFVSTHMpe1xuICAgICAgICAgICAgeWllbGQgdXJsVG9BdHRlbXB0LmhyZWY7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJlZ0V4cFJvdXRlIGV4dGVuZHMgUm91dGUge1xuICAgIGNvbnN0cnVjdG9yKHJlZ0V4cCwgaGFuZGxlciwgbWV0aG9kKXtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UocmVnRXhwLCBSZWdFeHAsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUmVnRXhwUm91dGVcIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJwYXR0ZXJuXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKHsgdXJsIH0pPT57XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZWdFeHAuZXhlYyh1cmwuaHJlZik7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh1cmwub3JpZ2luICE9PSBsb2NhdGlvbi5vcmlnaW4gJiYgcmVzdWx0LmluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFRoZSByZWd1bGFyIGV4cHJlc3Npb24gJyR7cmVnRXhwLnRvU3RyaW5nKCl9JyBvbmx5IHBhcnRpYWxseSBtYXRjaGVkIGFnYWluc3QgdGhlIGNyb3NzLW9yaWdpbiBVUkwgJyR7dXJsLnRvU3RyaW5nKCl9Jy4gUmVnRXhwUm91dGUncyB3aWxsIG9ubHkgaGFuZGxlIGNyb3NzLW9yaWdpbiByZXF1ZXN0cyBpZiB0aGV5IG1hdGNoIHRoZSBlbnRpcmUgVVJMLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDEpO1xuICAgICAgICB9O1xuICAgICAgICBzdXBlcihtYXRjaCwgaGFuZGxlciwgbWV0aG9kKTtcbiAgICB9XG59XG5cbmNvbnN0IHBhcmFsbGVsID0gYXN5bmMgKGxpbWl0LCBhcnJheSwgZnVuYyk9PntcbiAgICBjb25zdCB3b3JrID0gYXJyYXkubWFwKChpdGVtLCBpbmRleCk9Pih7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgfSkpO1xuICAgIGNvbnN0IHByb2Nlc3NvciA9IGFzeW5jIChyZXMpPT57XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgd2hpbGUodHJ1ZSl7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gd29yay5wb3AoKTtcbiAgICAgICAgICAgIGlmICghbmV4dCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXMocmVzdWx0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmdW5jKG5leHQuaXRlbSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIGluZGV4OiBuZXh0LmluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcXVldWVzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgIGxlbmd0aDogbGltaXRcbiAgICB9LCAoKT0+bmV3IFByb21pc2UocHJvY2Vzc29yKSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IChhd2FpdCBQcm9taXNlLmFsbChxdWV1ZXMpKS5mbGF0KCkuc29ydCgoYSwgYik9PmEuaW5kZXggPCBiLmluZGV4ID8gLTEgOiAxKS5tYXAoKHJlcyk9PnJlcy5yZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHRzO1xufTtcblxuY29uc3QgZGlzYWJsZURldkxvZ3MgPSAoKT0+e1xuICAgIHNlbGYuX19XQl9ESVNBQkxFX0RFVl9MT0dTID0gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIHRvUmVxdWVzdChpbnB1dCkge1xuICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIgPyBuZXcgUmVxdWVzdChpbnB1dCkgOiBpbnB1dDtcbn1cbmNsYXNzIFN0cmF0ZWd5SGFuZGxlciB7XG4gICAgZXZlbnQ7XG4gICAgcmVxdWVzdDtcbiAgICB1cmw7XG4gICAgcGFyYW1zO1xuICAgIF9jYWNoZUtleXMgPSB7fTtcbiAgICBfc3RyYXRlZ3k7XG4gICAgX2hhbmRsZXJEZWZlcnJlZDtcbiAgICBfZXh0ZW5kTGlmZXRpbWVQcm9taXNlcztcbiAgICBfcGx1Z2lucztcbiAgICBfcGx1Z2luU3RhdGVNYXA7XG4gICAgY29uc3RydWN0b3Ioc3RyYXRlZ3ksIG9wdGlvbnMpe1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNJbnN0YW5jZShvcHRpb25zLmV2ZW50LCBFeHRlbmRhYmxlRXZlbnQsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU3RyYXRlZ3lIYW5kbGVyXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwib3B0aW9ucy5ldmVudFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0luc3RhbmNlKG9wdGlvbnMucmVxdWVzdCwgUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTdHJhdGVneUhhbmRsZXJcIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJvcHRpb25zLnJlcXVlc3RcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudCA9IG9wdGlvbnMuZXZlbnQ7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9IG9wdGlvbnMucmVxdWVzdDtcbiAgICAgICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsO1xuICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdHJhdGVneSA9IHN0cmF0ZWd5O1xuICAgICAgICB0aGlzLl9oYW5kbGVyRGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgdGhpcy5fZXh0ZW5kTGlmZXRpbWVQcm9taXNlcyA9IFtdO1xuICAgICAgICB0aGlzLl9wbHVnaW5zID0gW1xuICAgICAgICAgICAgLi4uc3RyYXRlZ3kucGx1Z2luc1xuICAgICAgICBdO1xuICAgICAgICB0aGlzLl9wbHVnaW5TdGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5fcGx1Z2lucyl7XG4gICAgICAgICAgICB0aGlzLl9wbHVnaW5TdGF0ZU1hcC5zZXQocGx1Z2luLCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudC53YWl0VW50aWwodGhpcy5faGFuZGxlckRlZmVycmVkLnByb21pc2UpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaChpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGV2ZW50IH0gPSB0aGlzO1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRvUmVxdWVzdChpbnB1dCk7XG4gICAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09IFwibmF2aWdhdGVcIiAmJiBldmVudCBpbnN0YW5jZW9mIEZldGNoRXZlbnQgJiYgZXZlbnQucHJlbG9hZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVByZWxvYWRSZXNwb25zZSA9IGF3YWl0IGV2ZW50LnByZWxvYWRSZXNwb25zZTtcbiAgICAgICAgICAgIGlmIChwb3NzaWJsZVByZWxvYWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgVXNpbmcgYSBwcmVsb2FkZWQgbmF2aWdhdGlvbiByZXNwb25zZSBmb3IgJyR7Z2V0RnJpZW5kbHlVUkwocmVxdWVzdC51cmwpfSdgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc3NpYmxlUHJlbG9hZFJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWVzdCA9IHRoaXMuaGFzQ2FsbGJhY2soXCJmZXRjaERpZEZhaWxcIikgPyByZXF1ZXN0LmNsb25lKCkgOiBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYiBvZiB0aGlzLml0ZXJhdGVDYWxsYmFja3MoXCJyZXF1ZXN0V2lsbEZldGNoXCIpKXtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gYXdhaXQgY2Ioe1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0LmNsb25lKCksXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcInBsdWdpbi1lcnJvci1yZXF1ZXN0LXdpbGwtZmV0Y2hcIiwge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd25FcnJvck1lc3NhZ2U6IGVyci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGx1Z2luRmlsdGVyZWRSZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGZldGNoUmVzcG9uc2U7XG4gICAgICAgICAgICBmZXRjaFJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCwgcmVxdWVzdC5tb2RlID09PSBcIm5hdmlnYXRlXCIgPyB1bmRlZmluZWQgOiB0aGlzLl9zdHJhdGVneS5mZXRjaE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgTmV0d29yayByZXF1ZXN0IGZvciAnJHtnZXRGcmllbmRseVVSTChyZXF1ZXN0LnVybCl9JyByZXR1cm5lZCBhIHJlc3BvbnNlIHdpdGggc3RhdHVzICcke2ZldGNoUmVzcG9uc2Uuc3RhdHVzfScuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuaXRlcmF0ZUNhbGxiYWNrcyhcImZldGNoRGlkU3VjY2VlZFwiKSl7XG4gICAgICAgICAgICAgICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHBsdWdpbkZpbHRlcmVkUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U6IGZldGNoUmVzcG9uc2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmZXRjaFJlc3BvbnNlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coYE5ldHdvcmsgcmVxdWVzdCBmb3IgJyR7Z2V0RnJpZW5kbHlVUkwocmVxdWVzdC51cmwpfScgdGhyZXcgYW4gZXJyb3IuYCwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuQ2FsbGJhY2tzKFwiZmV0Y2hEaWRGYWlsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxSZXF1ZXN0OiBvcmlnaW5hbFJlcXVlc3QuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDogcGx1Z2luRmlsdGVyZWRSZXF1ZXN0LmNsb25lKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGZldGNoQW5kQ2FjaGVQdXQoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoKGlucHV0KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2VDbG9uZSA9IHJlc3BvbnNlLmNsb25lKCk7XG4gICAgICAgIHZvaWQgdGhpcy53YWl0VW50aWwodGhpcy5jYWNoZVB1dChpbnB1dCwgcmVzcG9uc2VDbG9uZSkpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIGNhY2hlTWF0Y2goa2V5KSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0b1JlcXVlc3Qoa2V5KTtcbiAgICAgICAgbGV0IGNhY2hlZFJlc3BvbnNlO1xuICAgICAgICBjb25zdCB7IGNhY2hlTmFtZSwgbWF0Y2hPcHRpb25zIH0gPSB0aGlzLl9zdHJhdGVneTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlUmVxdWVzdCA9IGF3YWl0IHRoaXMuZ2V0Q2FjaGVLZXkocmVxdWVzdCwgXCJyZWFkXCIpO1xuICAgICAgICBjb25zdCBtdWx0aU1hdGNoT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLm1hdGNoT3B0aW9ucyxcbiAgICAgICAgICAgIC4uLntcbiAgICAgICAgICAgICAgICBjYWNoZU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY2FjaGVkUmVzcG9uc2UgPSBhd2FpdCBjYWNoZXMubWF0Y2goZWZmZWN0aXZlUmVxdWVzdCwgbXVsdGlNYXRjaE9wdGlvbnMpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYEZvdW5kIGEgY2FjaGVkIHJlc3BvbnNlIGluICcke2NhY2hlTmFtZX0nLmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYE5vIGNhY2hlZCByZXNwb25zZSBmb3VuZCBpbiAnJHtjYWNoZU5hbWV9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuaXRlcmF0ZUNhbGxiYWNrcyhcImNhY2hlZFJlc3BvbnNlV2lsbEJlVXNlZFwiKSl7XG4gICAgICAgICAgICBjYWNoZWRSZXNwb25zZSA9IGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBjYWNoZU5hbWUsXG4gICAgICAgICAgICAgICAgbWF0Y2hPcHRpb25zLFxuICAgICAgICAgICAgICAgIGNhY2hlZFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IGVmZmVjdGl2ZVJlcXVlc3QsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHRoaXMuZXZlbnRcbiAgICAgICAgICAgIH0pIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVkUmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIGNhY2hlUHV0KGtleSwgcmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRvUmVxdWVzdChrZXkpO1xuICAgICAgICBhd2FpdCB0aW1lb3V0KDApO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVSZXF1ZXN0ID0gYXdhaXQgdGhpcy5nZXRDYWNoZUtleShyZXF1ZXN0LCBcIndyaXRlXCIpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoZWZmZWN0aXZlUmVxdWVzdC5tZXRob2QgJiYgZWZmZWN0aXZlUmVxdWVzdC5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiYXR0ZW1wdC10by1jYWNoZS1ub24tZ2V0LXJlcXVlc3RcIiwge1xuICAgICAgICAgICAgICAgICAgICB1cmw6IGdldEZyaWVuZGx5VVJMKGVmZmVjdGl2ZVJlcXVlc3QudXJsKSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBlZmZlY3RpdmVSZXF1ZXN0Lm1ldGhvZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCBjYWNoZSBub24tZXhpc3RlbnQgcmVzcG9uc2UgZm9yICcke2dldEZyaWVuZGx5VVJMKGVmZmVjdGl2ZVJlcXVlc3QudXJsKX0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImNhY2hlLXB1dC13aXRoLW5vLXJlc3BvbnNlXCIsIHtcbiAgICAgICAgICAgICAgICB1cmw6IGdldEZyaWVuZGx5VVJMKGVmZmVjdGl2ZVJlcXVlc3QudXJsKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2VUb0NhY2hlID0gYXdhaXQgdGhpcy5fZW5zdXJlUmVzcG9uc2VTYWZlVG9DYWNoZShyZXNwb25zZSk7XG4gICAgICAgIGlmICghcmVzcG9uc2VUb0NhY2hlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXNwb25zZSAnJHtnZXRGcmllbmRseVVSTChlZmZlY3RpdmVSZXF1ZXN0LnVybCl9JyB3aWxsIG5vdCBiZSBjYWNoZWQuYCwgcmVzcG9uc2VUb0NhY2hlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGNhY2hlTmFtZSwgbWF0Y2hPcHRpb25zIH0gPSB0aGlzLl9zdHJhdGVneTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCBzZWxmLmNhY2hlcy5vcGVuKGNhY2hlTmFtZSk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcnkgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIlZhcnlcIik7XG4gICAgICAgICAgICBpZiAodmFyeSAmJiBtYXRjaE9wdGlvbnM/Lmlnbm9yZVZhcnkgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFRoZSByZXNwb25zZSBmb3IgJHtnZXRGcmllbmRseVVSTChlZmZlY3RpdmVSZXF1ZXN0LnVybCl9IGhhcyBhICdWYXJ5OiAke3Zhcnl9JyBoZWFkZXIuIENvbnNpZGVyIHNldHRpbmcgdGhlIHtpZ25vcmVWYXJ5OiB0cnVlfSBvcHRpb24gb24geW91ciBzdHJhdGVneSB0byBlbnN1cmUgY2FjaGUgbWF0Y2hpbmcgYW5kIGRlbGV0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhhc0NhY2hlVXBkYXRlQ2FsbGJhY2sgPSB0aGlzLmhhc0NhbGxiYWNrKFwiY2FjaGVEaWRVcGRhdGVcIik7XG4gICAgICAgIGNvbnN0IG9sZFJlc3BvbnNlID0gaGFzQ2FjaGVVcGRhdGVDYWxsYmFjayA/IGF3YWl0IGNhY2hlTWF0Y2hJZ25vcmVQYXJhbXMoY2FjaGUsIGVmZmVjdGl2ZVJlcXVlc3QuY2xvbmUoKSwgW1xuICAgICAgICAgICAgXCJfX1dCX1JFVklTSU9OX19cIlxuICAgICAgICBdLCBtYXRjaE9wdGlvbnMpIDogbnVsbDtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBVcGRhdGluZyB0aGUgJyR7Y2FjaGVOYW1lfScgY2FjaGUgd2l0aCBhIG5ldyBSZXNwb25zZSBmb3IgJHtnZXRGcmllbmRseVVSTChlZmZlY3RpdmVSZXF1ZXN0LnVybCl9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjYWNoZS5wdXQoZWZmZWN0aXZlUmVxdWVzdCwgaGFzQ2FjaGVVcGRhdGVDYWxsYmFjayA/IHJlc3BvbnNlVG9DYWNoZS5jbG9uZSgpIDogcmVzcG9uc2VUb0NhY2hlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiUXVvdGFFeGNlZWRlZEVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXhlY3V0ZVF1b3RhRXJyb3JDYWxsYmFja3MoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLml0ZXJhdGVDYWxsYmFja3MoXCJjYWNoZURpZFVwZGF0ZVwiKSl7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgY2FjaGVOYW1lLFxuICAgICAgICAgICAgICAgIG9sZFJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIG5ld1Jlc3BvbnNlOiByZXNwb25zZVRvQ2FjaGUuY2xvbmUoKSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBlZmZlY3RpdmVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIGV2ZW50OiB0aGlzLmV2ZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q2FjaGVLZXkocmVxdWVzdCwgbW9kZSkge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtyZXF1ZXN0LnVybH0gfCAke21vZGV9YDtcbiAgICAgICAgaWYgKCF0aGlzLl9jYWNoZUtleXNba2V5XSkge1xuICAgICAgICAgICAgbGV0IGVmZmVjdGl2ZVJlcXVlc3QgPSByZXF1ZXN0O1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiB0aGlzLml0ZXJhdGVDYWxsYmFja3MoXCJjYWNoZUtleVdpbGxCZVVzZWRcIikpe1xuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVJlcXVlc3QgPSB0b1JlcXVlc3QoYXdhaXQgY2FsbGJhY2soe1xuICAgICAgICAgICAgICAgICAgICBtb2RlLFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBlZmZlY3RpdmVSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBldmVudDogdGhpcy5ldmVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtc1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2NhY2hlS2V5c1trZXldID0gZWZmZWN0aXZlUmVxdWVzdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVLZXlzW2tleV07XG4gICAgfVxuICAgIGhhc0NhbGxiYWNrKG5hbWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5fc3RyYXRlZ3kucGx1Z2lucyl7XG4gICAgICAgICAgICBpZiAobmFtZSBpbiBwbHVnaW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGFzeW5jIHJ1bkNhbGxiYWNrcyhuYW1lLCBwYXJhbSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuaXRlcmF0ZUNhbGxiYWNrcyhuYW1lKSl7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhwYXJhbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKml0ZXJhdGVDYWxsYmFja3MobmFtZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLl9zdHJhdGVneS5wbHVnaW5zKXtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luW25hbWVdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX3BsdWdpblN0YXRlTWFwLmdldChwbHVnaW4pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlZnVsQ2FsbGJhY2sgPSAocGFyYW0pPT57XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlZnVsUGFyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwbHVnaW5bbmFtZV0oc3RhdGVmdWxQYXJhbSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB5aWVsZCBzdGF0ZWZ1bENhbGxiYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHdhaXRVbnRpbChwcm9taXNlKSB7XG4gICAgICAgIHRoaXMuX2V4dGVuZExpZmV0aW1lUHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuICAgIGFzeW5jIGRvbmVXYWl0aW5nKCkge1xuICAgICAgICBsZXQgcHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUocHJvbWlzZSA9IHRoaXMuX2V4dGVuZExpZmV0aW1lUHJvbWlzZXMuc2hpZnQoKSl7XG4gICAgICAgICAgICBhd2FpdCBwcm9taXNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJEZWZlcnJlZC5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBhc3luYyBfZW5zdXJlUmVzcG9uc2VTYWZlVG9DYWNoZShyZXNwb25zZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2VUb0NhY2hlID0gcmVzcG9uc2U7XG4gICAgICAgIGxldCBwbHVnaW5zVXNlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHRoaXMuaXRlcmF0ZUNhbGxiYWNrcyhcImNhY2hlV2lsbFVwZGF0ZVwiKSl7XG4gICAgICAgICAgICByZXNwb25zZVRvQ2FjaGUgPSBhd2FpdCBjYWxsYmFjayh7XG4gICAgICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVRvQ2FjaGUsXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHRoaXMuZXZlbnRcbiAgICAgICAgICAgIH0pIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHBsdWdpbnNVc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2VUb0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwbHVnaW5zVXNlZCkge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVG9DYWNoZSAmJiByZXNwb25zZVRvQ2FjaGUuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVRvQ2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVG9DYWNoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VUb0NhY2hlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VUb0NhY2hlLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBUaGUgcmVzcG9uc2UgZm9yICcke3RoaXMucmVxdWVzdC51cmx9JyBpcyBhbiBvcGFxdWUgcmVzcG9uc2UuIFRoZSBjYWNoaW5nIHN0cmF0ZWd5IHRoYXQgeW91J3JlIHVzaW5nIHdpbGwgbm90IGNhY2hlIG9wYXF1ZSByZXNwb25zZXMgYnkgZGVmYXVsdC5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBUaGUgcmVzcG9uc2UgZm9yICcke3RoaXMucmVxdWVzdC51cmx9JyByZXR1cm5lZCBhIHN0YXR1cyBjb2RlIG9mICcke3Jlc3BvbnNlLnN0YXR1c30nIGFuZCB3b24ndCBiZSBjYWNoZWQgYXMgYSByZXN1bHQuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlVG9DYWNoZTtcbiAgICB9XG59XG5cbmNsYXNzIFN0cmF0ZWd5IHtcbiAgICBjYWNoZU5hbWU7XG4gICAgcGx1Z2lucztcbiAgICBmZXRjaE9wdGlvbnM7XG4gICAgbWF0Y2hPcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSl7XG4gICAgICAgIHRoaXMuY2FjaGVOYW1lID0gY2FjaGVOYW1lcy5nZXRSdW50aW1lTmFtZShvcHRpb25zLmNhY2hlTmFtZSk7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IG9wdGlvbnMucGx1Z2lucyB8fCBbXTtcbiAgICAgICAgdGhpcy5mZXRjaE9wdGlvbnMgPSBvcHRpb25zLmZldGNoT3B0aW9ucztcbiAgICAgICAgdGhpcy5tYXRjaE9wdGlvbnMgPSBvcHRpb25zLm1hdGNoT3B0aW9ucztcbiAgICB9XG4gICAgaGFuZGxlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgW3Jlc3BvbnNlRG9uZV0gPSB0aGlzLmhhbmRsZUFsbChvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRG9uZTtcbiAgICB9XG4gICAgaGFuZGxlQWxsKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBGZXRjaEV2ZW50KSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IG9wdGlvbnMuZXZlbnQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0ID09PSBcInN0cmluZ1wiID8gbmV3IFJlcXVlc3Qob3B0aW9ucy5yZXF1ZXN0KSA6IG9wdGlvbnMucmVxdWVzdDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBTdHJhdGVneUhhbmRsZXIodGhpcywgb3B0aW9ucy51cmwgPyB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgICAgICAgICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtc1xuICAgICAgICB9IDoge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXNwb25zZURvbmUgPSB0aGlzLl9nZXRSZXNwb25zZShoYW5kbGVyLCByZXF1ZXN0LCBldmVudCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJEb25lID0gdGhpcy5fYXdhaXRDb21wbGV0ZShyZXNwb25zZURvbmUsIGhhbmRsZXIsIHJlcXVlc3QsIGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHJlc3BvbnNlRG9uZSxcbiAgICAgICAgICAgIGhhbmRsZXJEb25lXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIF9nZXRSZXNwb25zZShoYW5kbGVyLCByZXF1ZXN0LCBldmVudCkge1xuICAgICAgICBhd2FpdCBoYW5kbGVyLnJ1bkNhbGxiYWNrcyhcImhhbmRsZXJXaWxsU3RhcnRcIiwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2hhbmRsZShyZXF1ZXN0LCBoYW5kbGVyKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkIHx8IHJlc3BvbnNlLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJuby1yZXNwb25zZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBoYW5kbGVyLml0ZXJhdGVDYWxsYmFja3MoXCJoYW5kbGVyRGlkRXJyb3JcIikpe1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbG9nZ2VyLmxvZyhgV2hpbGUgcmVzcG9uZGluZyB0byAnJHtnZXRGcmllbmRseVVSTChyZXF1ZXN0LnVybCl9JywgYW4gJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IudG9TdHJpbmcoKSA6IFwiXCJ9IGVycm9yIG9jY3VycmVkLiBVc2luZyBhIGZhbGxiYWNrIHJlc3BvbnNlIHByb3ZpZGVkIGJ5IGEgaGFuZGxlckRpZEVycm9yIHBsdWdpbi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGhhbmRsZXIuaXRlcmF0ZUNhbGxiYWNrcyhcImhhbmRsZXJXaWxsUmVzcG9uZFwiKSl7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICAgIGFzeW5jIF9hd2FpdENvbXBsZXRlKHJlc3BvbnNlRG9uZSwgaGFuZGxlciwgcmVxdWVzdCwgZXZlbnQpIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlRG9uZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBoYW5kbGVyLnJ1bkNhbGxiYWNrcyhcImhhbmRsZXJEaWRSZXNwb25kXCIsIHtcbiAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IGhhbmRsZXIuZG9uZVdhaXRpbmcoKTtcbiAgICAgICAgfSBjYXRjaCAod2FpdFVudGlsRXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh3YWl0VW50aWxFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB3YWl0VW50aWxFcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBoYW5kbGVyLnJ1bkNhbGxiYWNrcyhcImhhbmRsZXJEaWRDb21wbGV0ZVwiLCB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICBoYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgY2FjaGVPa0FuZE9wYXF1ZVBsdWdpbiA9IHtcbiAgICBjYWNoZVdpbGxVcGRhdGU6IGFzeW5jICh7IHJlc3BvbnNlIH0pPT57XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5jb25zdCBtZXNzYWdlcyA9IHtcbiAgICBzdHJhdGVneVN0YXJ0OiAoc3RyYXRlZ3lOYW1lLCByZXF1ZXN0KT0+YFVzaW5nICR7c3RyYXRlZ3lOYW1lfSB0byByZXNwb25kIHRvICcke2dldEZyaWVuZGx5VVJMKHJlcXVlc3QudXJsKX0nYCxcbiAgICBwcmludEZpbmFsUmVzcG9uc2U6IChyZXNwb25zZSk9PntcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQoXCJWaWV3IHRoZSBmaW5hbCByZXNwb25zZSBoZXJlLlwiKTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2cocmVzcG9uc2UgfHwgXCJbTm8gcmVzcG9uc2UgcmV0dXJuZWRdXCIpO1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jbGFzcyBOZXR3b3JrRmlyc3QgZXh0ZW5kcyBTdHJhdGVneSB7XG4gICAgX25ldHdvcmtUaW1lb3V0U2Vjb25kcztcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pe1xuICAgICAgICBzdXBlcihvcHRpb25zKTtcbiAgICAgICAgaWYgKCF0aGlzLnBsdWdpbnMuc29tZSgocCk9PlwiY2FjaGVXaWxsVXBkYXRlXCIgaW4gcCkpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy51bnNoaWZ0KGNhY2hlT2tBbmRPcGFxdWVQbHVnaW4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25ldHdvcmtUaW1lb3V0U2Vjb25kcyA9IG9wdGlvbnMubmV0d29ya1RpbWVvdXRTZWNvbmRzIHx8IDA7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXR3b3JrVGltZW91dFNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKHRoaXMuX25ldHdvcmtUaW1lb3V0U2Vjb25kcywgXCJudW1iZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJuZXR3b3JrVGltZW91dFNlY29uZHNcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9oYW5kbGUocmVxdWVzdCwgaGFuZGxlcikge1xuICAgICAgICBjb25zdCBsb2dzID0gW107XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0luc3RhbmNlKHJlcXVlc3QsIFJlcXVlc3QsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRoaXMuY29uc3RydWN0b3IubmFtZSxcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJoYW5kbGVcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwibWFrZVJlcXVlc3RcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgbGV0IHRpbWVvdXRJZDtcbiAgICAgICAgaWYgKHRoaXMuX25ldHdvcmtUaW1lb3V0U2Vjb25kcykge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgcHJvbWlzZSB9ID0gdGhpcy5fZ2V0VGltZW91dFByb21pc2Uoe1xuICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgbG9ncyxcbiAgICAgICAgICAgICAgICBoYW5kbGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IGlkO1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXR3b3JrUHJvbWlzZSA9IHRoaXMuX2dldE5ldHdvcmtQcm9taXNlKHtcbiAgICAgICAgICAgIHRpbWVvdXRJZCxcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICBsb2dzLFxuICAgICAgICAgICAgaGFuZGxlclxuICAgICAgICB9KTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChuZXR3b3JrUHJvbWlzZSk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlci53YWl0VW50aWwoKGFzeW5jICgpPT57XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlci53YWl0VW50aWwoUHJvbWlzZS5yYWNlKHByb21pc2VzKSkgfHwgYXdhaXQgbmV0d29ya1Byb21pc2U7XG4gICAgICAgIH0pKCkpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQobWVzc2FnZXMuc3RyYXRlZ3lTdGFydCh0aGlzLmNvbnN0cnVjdG9yLm5hbWUsIHJlcXVlc3QpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbG9nIG9mIGxvZ3Mpe1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobG9nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1lc3NhZ2VzLnByaW50RmluYWxSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm8tcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgX2dldFRpbWVvdXRQcm9taXNlKHsgcmVxdWVzdCwgbG9ncywgaGFuZGxlciB9KSB7XG4gICAgICAgIGxldCB0aW1lb3V0SWQ7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgICAgICBjb25zdCBvbk5ldHdvcmtUaW1lb3V0ID0gYXN5bmMgKCk9PntcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaChgVGltaW5nIG91dCB0aGUgbmV0d29yayByZXNwb25zZSBhdCAke3RoaXMuX25ldHdvcmtUaW1lb3V0U2Vjb25kc30gc2Vjb25kcy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhd2FpdCBoYW5kbGVyLmNhY2hlTWF0Y2gocmVxdWVzdCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQob25OZXR3b3JrVGltZW91dCwgdGhpcy5fbmV0d29ya1RpbWVvdXRTZWNvbmRzICogMTAwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvbWlzZTogdGltZW91dFByb21pc2UsXG4gICAgICAgICAgICBpZDogdGltZW91dElkXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIF9nZXROZXR3b3JrUHJvbWlzZSh7IHRpbWVvdXRJZCwgcmVxdWVzdCwgbG9ncywgaGFuZGxlciB9KSB7XG4gICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBoYW5kbGVyLmZldGNoQW5kQ2FjaGVQdXQocmVxdWVzdCk7XG4gICAgICAgIH0gY2F0Y2ggKGZldGNoRXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChmZXRjaEVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGZldGNoRXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbG9ncy5wdXNoKFwiR290IHJlc3BvbnNlIGZyb20gbmV0d29yay5cIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ3MucHVzaChcIlVuYWJsZSB0byBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBuZXR3b3JrLiBXaWxsIHJlc3BvbmQgXCIgKyBcIndpdGggYSBjYWNoZWQgcmVzcG9uc2UuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciB8fCAhcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlci5jYWNoZU1hdGNoKHJlcXVlc3QpO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBsb2dzLnB1c2goYEZvdW5kIGEgY2FjaGVkIHJlc3BvbnNlIGluIHRoZSAnJHt0aGlzLmNhY2hlTmFtZX0nIGNhY2hlLmApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaChgTm8gcmVzcG9uc2UgZm91bmQgaW4gdGhlICcke3RoaXMuY2FjaGVOYW1lfScgY2FjaGUuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNsYXNzIE5ldHdvcmtPbmx5IGV4dGVuZHMgU3RyYXRlZ3kge1xuICAgIF9uZXR3b3JrVGltZW91dFNlY29uZHM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KXtcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX25ldHdvcmtUaW1lb3V0U2Vjb25kcyA9IG9wdGlvbnMubmV0d29ya1RpbWVvdXRTZWNvbmRzIHx8IDA7XG4gICAgfVxuICAgIGFzeW5jIF9oYW5kbGUocmVxdWVzdCwgaGFuZGxlcikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNJbnN0YW5jZShyZXF1ZXN0LCBSZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiX2hhbmRsZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyZXF1ZXN0XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJlc3BvbnNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXG4gICAgICAgICAgICAgICAgaGFuZGxlci5mZXRjaChyZXF1ZXN0KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9uZXR3b3JrVGltZW91dFNlY29uZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IHRpbWVvdXQodGhpcy5fbmV0d29ya1RpbWVvdXRTZWNvbmRzICogMTAwMCk7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aW1lb3V0UHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShwcm9taXNlcyk7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgdGhlIG5ldHdvcmsgcmVzcG9uc2UgYWZ0ZXIgJHt0aGlzLl9uZXR3b3JrVGltZW91dFNlY29uZHN9IHNlY29uZHMuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKG1lc3NhZ2VzLnN0cmF0ZWd5U3RhcnQodGhpcy5jb25zdHJ1Y3Rvci5uYW1lLCByZXF1ZXN0KSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKFwiR290IHJlc3BvbnNlIGZyb20gbmV0d29yay5cIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coXCJVbmFibGUgdG8gZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgbmV0d29yay5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZXNzYWdlcy5wcmludEZpbmFsUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcIm5vLXJlc3BvbnNlXCIsIHtcbiAgICAgICAgICAgICAgICB1cmw6IHJlcXVlc3QudXJsLFxuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxufVxuXG5jb25zdCBCQUNLR1JPVU5EX1NZTkNfREJfVkVSU0lPTiA9IDM7XG5jb25zdCBCQUNLR1JPVU5EX1NZTkNfREJfTkFNRSA9IFwic2Vyd2lzdC1iYWNrZ3JvdW5kLXN5bmNcIjtcbmNvbnN0IFJFUVVFU1RfT0JKRUNUX1NUT1JFX05BTUUgPSBcInJlcXVlc3RzXCI7XG5jb25zdCBRVUVVRV9OQU1FX0lOREVYID0gXCJxdWV1ZU5hbWVcIjtcbmNsYXNzIEJhY2tncm91bmRTeW5jUXVldWVEYiB7XG4gICAgX2RiID0gbnVsbDtcbiAgICBhc3luYyBhZGRFbnRyeShlbnRyeSkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgY29uc3QgdHggPSBkYi50cmFuc2FjdGlvbihSRVFVRVNUX09CSkVDVF9TVE9SRV9OQU1FLCBcInJlYWR3cml0ZVwiLCB7XG4gICAgICAgICAgICBkdXJhYmlsaXR5OiBcInJlbGF4ZWRcIlxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdHguc3RvcmUuYWRkKGVudHJ5KTtcbiAgICAgICAgYXdhaXQgdHguZG9uZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Rmlyc3RFbnRyeUlkKCkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgY29uc3QgY3Vyc29yID0gYXdhaXQgZGIudHJhbnNhY3Rpb24oUkVRVUVTVF9PQkpFQ1RfU1RPUkVfTkFNRSkuc3RvcmUub3BlbkN1cnNvcigpO1xuICAgICAgICByZXR1cm4gY3Vyc29yPy52YWx1ZS5pZDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QWxsRW50cmllc0J5UXVldWVOYW1lKHF1ZXVlTmFtZSkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGRiLmdldEFsbEZyb21JbmRleChSRVFVRVNUX09CSkVDVF9TVE9SRV9OQU1FLCBRVUVVRV9OQU1FX0lOREVYLCBJREJLZXlSYW5nZS5vbmx5KHF1ZXVlTmFtZSkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0cyA/IHJlc3VsdHMgOiBuZXcgQXJyYXkoKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0RW50cnlDb3VudEJ5UXVldWVOYW1lKHF1ZXVlTmFtZSkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgcmV0dXJuIGRiLmNvdW50RnJvbUluZGV4KFJFUVVFU1RfT0JKRUNUX1NUT1JFX05BTUUsIFFVRVVFX05BTUVfSU5ERVgsIElEQktleVJhbmdlLm9ubHkocXVldWVOYW1lKSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUVudHJ5KGlkKSB7XG4gICAgICAgIGNvbnN0IGRiID0gYXdhaXQgdGhpcy5nZXREYigpO1xuICAgICAgICBhd2FpdCBkYi5kZWxldGUoUkVRVUVTVF9PQkpFQ1RfU1RPUkVfTkFNRSwgaWQpO1xuICAgIH1cbiAgICBhc3luYyBnZXRGaXJzdEVudHJ5QnlRdWV1ZU5hbWUocXVldWVOYW1lKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldEVuZEVudHJ5RnJvbUluZGV4KElEQktleVJhbmdlLm9ubHkocXVldWVOYW1lKSwgXCJuZXh0XCIpO1xuICAgIH1cbiAgICBhc3luYyBnZXRMYXN0RW50cnlCeVF1ZXVlTmFtZShxdWV1ZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RW5kRW50cnlGcm9tSW5kZXgoSURCS2V5UmFuZ2Uub25seShxdWV1ZU5hbWUpLCBcInByZXZcIik7XG4gICAgfVxuICAgIGFzeW5jIGdldEVuZEVudHJ5RnJvbUluZGV4KHF1ZXJ5LCBkaXJlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCB0aGlzLmdldERiKCk7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IGRiLnRyYW5zYWN0aW9uKFJFUVVFU1RfT0JKRUNUX1NUT1JFX05BTUUpLnN0b3JlLmluZGV4KFFVRVVFX05BTUVfSU5ERVgpLm9wZW5DdXJzb3IocXVlcnksIGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiBjdXJzb3I/LnZhbHVlO1xuICAgIH1cbiAgICBhc3luYyBnZXREYigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYikge1xuICAgICAgICAgICAgdGhpcy5fZGIgPSBhd2FpdCBvcGVuREIoQkFDS0dST1VORF9TWU5DX0RCX05BTUUsIEJBQ0tHUk9VTkRfU1lOQ19EQl9WRVJTSU9OLCB7XG4gICAgICAgICAgICAgICAgdXBncmFkZTogdGhpcy5fdXBncmFkZURiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGI7XG4gICAgfVxuICAgIF91cGdyYWRlRGIoZGIsIG9sZFZlcnNpb24pIHtcbiAgICAgICAgaWYgKG9sZFZlcnNpb24gPiAwICYmIG9sZFZlcnNpb24gPCBCQUNLR1JPVU5EX1NZTkNfREJfVkVSU0lPTikge1xuICAgICAgICAgICAgaWYgKGRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoUkVRVUVTVF9PQkpFQ1RfU1RPUkVfTkFNRSkpIHtcbiAgICAgICAgICAgICAgICBkYi5kZWxldGVPYmplY3RTdG9yZShSRVFVRVNUX09CSkVDVF9TVE9SRV9OQU1FKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYmpTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKFJFUVVFU1RfT0JKRUNUX1NUT1JFX05BTUUsIHtcbiAgICAgICAgICAgIGF1dG9JbmNyZW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBrZXlQYXRoOiBcImlkXCJcbiAgICAgICAgfSk7XG4gICAgICAgIG9ialN0b3JlLmNyZWF0ZUluZGV4KFFVRVVFX05BTUVfSU5ERVgsIFFVRVVFX05BTUVfSU5ERVgsIHtcbiAgICAgICAgICAgIHVuaXF1ZTogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5jbGFzcyBCYWNrZ3JvdW5kU3luY1F1ZXVlU3RvcmUge1xuICAgIF9xdWV1ZU5hbWU7XG4gICAgX3F1ZXVlRGI7XG4gICAgY29uc3RydWN0b3IocXVldWVOYW1lKXtcbiAgICAgICAgdGhpcy5fcXVldWVOYW1lID0gcXVldWVOYW1lO1xuICAgICAgICB0aGlzLl9xdWV1ZURiID0gbmV3IEJhY2tncm91bmRTeW5jUXVldWVEYigpO1xuICAgIH1cbiAgICBhc3luYyBwdXNoRW50cnkoZW50cnkpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShlbnRyeSwgXCJvYmplY3RcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCYWNrZ3JvdW5kU3luY1F1ZXVlU3RvcmVcIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJwdXNoRW50cnlcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiZW50cnlcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGVudHJ5LnJlcXVlc3REYXRhLCBcIm9iamVjdFwiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJhY2tncm91bmRTeW5jUXVldWVTdG9yZVwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcInB1c2hFbnRyeVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJlbnRyeS5yZXF1ZXN0RGF0YVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgZW50cnkuaWQ7XG4gICAgICAgIGVudHJ5LnF1ZXVlTmFtZSA9IHRoaXMuX3F1ZXVlTmFtZTtcbiAgICAgICAgYXdhaXQgdGhpcy5fcXVldWVEYi5hZGRFbnRyeShlbnRyeSk7XG4gICAgfVxuICAgIGFzeW5jIHVuc2hpZnRFbnRyeShlbnRyeSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGVudHJ5LCBcIm9iamVjdFwiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJhY2tncm91bmRTeW5jUXVldWVTdG9yZVwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcInVuc2hpZnRFbnRyeVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJlbnRyeVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoZW50cnkucmVxdWVzdERhdGEsIFwib2JqZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmFja2dyb3VuZFN5bmNRdWV1ZVN0b3JlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwidW5zaGlmdEVudHJ5XCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImVudHJ5LnJlcXVlc3REYXRhXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0SWQgPSBhd2FpdCB0aGlzLl9xdWV1ZURiLmdldEZpcnN0RW50cnlJZCgpO1xuICAgICAgICBpZiAoZmlyc3RJZCkge1xuICAgICAgICAgICAgZW50cnkuaWQgPSBmaXJzdElkIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5pZDtcbiAgICAgICAgfVxuICAgICAgICBlbnRyeS5xdWV1ZU5hbWUgPSB0aGlzLl9xdWV1ZU5hbWU7XG4gICAgICAgIGF3YWl0IHRoaXMuX3F1ZXVlRGIuYWRkRW50cnkoZW50cnkpO1xuICAgIH1cbiAgICBhc3luYyBwb3BFbnRyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZUVudHJ5KGF3YWl0IHRoaXMuX3F1ZXVlRGIuZ2V0TGFzdEVudHJ5QnlRdWV1ZU5hbWUodGhpcy5fcXVldWVOYW1lKSk7XG4gICAgfVxuICAgIGFzeW5jIHNoaWZ0RW50cnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVFbnRyeShhd2FpdCB0aGlzLl9xdWV1ZURiLmdldEZpcnN0RW50cnlCeVF1ZXVlTmFtZSh0aGlzLl9xdWV1ZU5hbWUpKTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0QWxsKCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcXVldWVEYi5nZXRBbGxFbnRyaWVzQnlRdWV1ZU5hbWUodGhpcy5fcXVldWVOYW1lKTtcbiAgICB9XG4gICAgYXN5bmMgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3F1ZXVlRGIuZ2V0RW50cnlDb3VudEJ5UXVldWVOYW1lKHRoaXMuX3F1ZXVlTmFtZSk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUVudHJ5KGlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3F1ZXVlRGIuZGVsZXRlRW50cnkoaWQpO1xuICAgIH1cbiAgICBhc3luYyBfcmVtb3ZlRW50cnkoZW50cnkpIHtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUVudHJ5KGVudHJ5LmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxufVxuXG5jb25zdCBzZXJpYWxpemFibGVQcm9wZXJ0aWVzID0gW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJyZWZlcnJlclwiLFxuICAgIFwicmVmZXJyZXJQb2xpY3lcIixcbiAgICBcIm1vZGVcIixcbiAgICBcImNyZWRlbnRpYWxzXCIsXG4gICAgXCJjYWNoZVwiLFxuICAgIFwicmVkaXJlY3RcIixcbiAgICBcImludGVncml0eVwiLFxuICAgIFwia2VlcGFsaXZlXCJcbl07XG5jbGFzcyBTdG9yYWJsZVJlcXVlc3Qge1xuICAgIF9yZXF1ZXN0RGF0YTtcbiAgICBzdGF0aWMgYXN5bmMgZnJvbVJlcXVlc3QocmVxdWVzdCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IHtcbiAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7fVxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLmJvZHkgPSBhd2FpdCByZXF1ZXN0LmNsb25lKCkuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIGtleSk9PntcbiAgICAgICAgICAgIHJlcXVlc3REYXRhLmhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHNlcmlhbGl6YWJsZVByb3BlcnRpZXMpe1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RbcHJvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlcXVlc3REYXRhW3Byb3BdID0gcmVxdWVzdFtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFN0b3JhYmxlUmVxdWVzdChyZXF1ZXN0RGF0YSk7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHJlcXVlc3REYXRhKXtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShyZXF1ZXN0RGF0YSwgXCJvYmplY3RcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTdG9yYWJsZVJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyZXF1ZXN0RGF0YVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUocmVxdWVzdERhdGEudXJsLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlN0b3JhYmxlUmVxdWVzdFwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcInJlcXVlc3REYXRhLnVybFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxdWVzdERhdGEubW9kZSA9PT0gXCJuYXZpZ2F0ZVwiKSB7XG4gICAgICAgICAgICByZXF1ZXN0RGF0YS5tb2RlID0gXCJzYW1lLW9yaWdpblwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlcXVlc3REYXRhID0gcmVxdWVzdERhdGE7XG4gICAgfVxuICAgIHRvT2JqZWN0KCkge1xuICAgICAgICBjb25zdCByZXF1ZXN0RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3JlcXVlc3REYXRhKTtcbiAgICAgICAgcmVxdWVzdERhdGEuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3JlcXVlc3REYXRhLmhlYWRlcnMpO1xuICAgICAgICBpZiAocmVxdWVzdERhdGEuYm9keSkge1xuICAgICAgICAgICAgcmVxdWVzdERhdGEuYm9keSA9IHJlcXVlc3REYXRhLmJvZHkuc2xpY2UoMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3REYXRhO1xuICAgIH1cbiAgICB0b1JlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLl9yZXF1ZXN0RGF0YS51cmwsIHRoaXMuX3JlcXVlc3REYXRhKTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3RvcmFibGVSZXF1ZXN0KHRoaXMudG9PYmplY3QoKSk7XG4gICAgfVxufVxuXG5jb25zdCBUQUdfUFJFRklYID0gXCJzZXJ3aXN0LWJhY2tncm91bmQtc3luY1wiO1xuY29uc3QgTUFYX1JFVEVOVElPTl9USU1FID0gNjAgKiAyNCAqIDc7XG5jb25zdCBxdWV1ZU5hbWVzID0gbmV3IFNldCgpO1xuY29uc3QgY29udmVydEVudHJ5ID0gKHF1ZXVlU3RvcmVFbnRyeSk9PntcbiAgICBjb25zdCBxdWV1ZUVudHJ5ID0ge1xuICAgICAgICByZXF1ZXN0OiBuZXcgU3RvcmFibGVSZXF1ZXN0KHF1ZXVlU3RvcmVFbnRyeS5yZXF1ZXN0RGF0YSkudG9SZXF1ZXN0KCksXG4gICAgICAgIHRpbWVzdGFtcDogcXVldWVTdG9yZUVudHJ5LnRpbWVzdGFtcFxuICAgIH07XG4gICAgaWYgKHF1ZXVlU3RvcmVFbnRyeS5tZXRhZGF0YSkge1xuICAgICAgICBxdWV1ZUVudHJ5Lm1ldGFkYXRhID0gcXVldWVTdG9yZUVudHJ5Lm1ldGFkYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcXVldWVFbnRyeTtcbn07XG5jbGFzcyBCYWNrZ3JvdW5kU3luY1F1ZXVlIHtcbiAgICBfbmFtZTtcbiAgICBfb25TeW5jO1xuICAgIF9tYXhSZXRlbnRpb25UaW1lO1xuICAgIF9xdWV1ZVN0b3JlO1xuICAgIF9mb3JjZVN5bmNGYWxsYmFjaztcbiAgICBfc3luY0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICBfcmVxdWVzdHNBZGRlZER1cmluZ1N5bmMgPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB7IGZvcmNlU3luY0ZhbGxiYWNrLCBvblN5bmMsIG1heFJldGVudGlvblRpbWUgfSA9IHt9KXtcbiAgICAgICAgaWYgKHF1ZXVlTmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiZHVwbGljYXRlLXF1ZXVlLW5hbWVcIiwge1xuICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHF1ZXVlTmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fb25TeW5jID0gb25TeW5jIHx8IHRoaXMucmVwbGF5UmVxdWVzdHM7XG4gICAgICAgIHRoaXMuX21heFJldGVudGlvblRpbWUgPSBtYXhSZXRlbnRpb25UaW1lIHx8IE1BWF9SRVRFTlRJT05fVElNRTtcbiAgICAgICAgdGhpcy5fZm9yY2VTeW5jRmFsbGJhY2sgPSBCb29sZWFuKGZvcmNlU3luY0ZhbGxiYWNrKTtcbiAgICAgICAgdGhpcy5fcXVldWVTdG9yZSA9IG5ldyBCYWNrZ3JvdW5kU3luY1F1ZXVlU3RvcmUodGhpcy5fbmFtZSk7XG4gICAgICAgIHRoaXMuX2FkZFN5bmNMaXN0ZW5lcigpO1xuICAgIH1cbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuICAgIGFzeW5jIHB1c2hSZXF1ZXN0KGVudHJ5KSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoZW50cnksIFwib2JqZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmFja2dyb3VuZFN5bmNRdWV1ZVwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcInB1c2hSZXF1ZXN0XCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImVudHJ5XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UoZW50cnkucmVxdWVzdCwgUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCYWNrZ3JvdW5kU3luY1F1ZXVlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicHVzaFJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiZW50cnkucmVxdWVzdFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLl9hZGRSZXF1ZXN0KGVudHJ5LCBcInB1c2hcIik7XG4gICAgfVxuICAgIGFzeW5jIHVuc2hpZnRSZXF1ZXN0KGVudHJ5KSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoZW50cnksIFwib2JqZWN0XCIsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQmFja2dyb3VuZFN5bmNRdWV1ZVwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcInVuc2hpZnRSZXF1ZXN0XCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImVudHJ5XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UoZW50cnkucmVxdWVzdCwgUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJCYWNrZ3JvdW5kU3luY1F1ZXVlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwidW5zaGlmdFJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiZW50cnkucmVxdWVzdFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLl9hZGRSZXF1ZXN0KGVudHJ5LCBcInVuc2hpZnRcIik7XG4gICAgfVxuICAgIGFzeW5jIHBvcFJlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVSZXF1ZXN0KFwicG9wXCIpO1xuICAgIH1cbiAgICBhc3luYyBzaGlmdFJlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVSZXF1ZXN0KFwic2hpZnRcIik7XG4gICAgfVxuICAgIGFzeW5jIGdldEFsbCgpIHtcbiAgICAgICAgY29uc3QgYWxsRW50cmllcyA9IGF3YWl0IHRoaXMuX3F1ZXVlU3RvcmUuZ2V0QWxsKCk7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IHVuZXhwaXJlZEVudHJpZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBhbGxFbnRyaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IG1heFJldGVudGlvblRpbWVJbk1zID0gdGhpcy5fbWF4UmV0ZW50aW9uVGltZSAqIDYwICogMTAwMDtcbiAgICAgICAgICAgIGlmIChub3cgLSBlbnRyeS50aW1lc3RhbXAgPiBtYXhSZXRlbnRpb25UaW1lSW5Ncykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3F1ZXVlU3RvcmUuZGVsZXRlRW50cnkoZW50cnkuaWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmV4cGlyZWRFbnRyaWVzLnB1c2goY29udmVydEVudHJ5KGVudHJ5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZXhwaXJlZEVudHJpZXM7XG4gICAgfVxuICAgIGFzeW5jIHNpemUoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9xdWV1ZVN0b3JlLnNpemUoKTtcbiAgICB9XG4gICAgYXN5bmMgX2FkZFJlcXVlc3QoeyByZXF1ZXN0LCBtZXRhZGF0YSwgdGltZXN0YW1wID0gRGF0ZS5ub3coKSB9LCBvcGVyYXRpb24pIHtcbiAgICAgICAgY29uc3Qgc3RvcmFibGVSZXF1ZXN0ID0gYXdhaXQgU3RvcmFibGVSZXF1ZXN0LmZyb21SZXF1ZXN0KHJlcXVlc3QuY2xvbmUoKSk7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0ge1xuICAgICAgICAgICAgcmVxdWVzdERhdGE6IHN0b3JhYmxlUmVxdWVzdC50b09iamVjdCgpLFxuICAgICAgICAgICAgdGltZXN0YW1wXG4gICAgICAgIH07XG4gICAgICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgICAgICAgZW50cnkubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2gob3BlcmF0aW9uKXtcbiAgICAgICAgICAgIGNhc2UgXCJwdXNoXCI6XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcXVldWVTdG9yZS5wdXNoRW50cnkoZW50cnkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInVuc2hpZnRcIjpcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9xdWV1ZVN0b3JlLnVuc2hpZnRFbnRyeShlbnRyeSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhgUmVxdWVzdCBmb3IgJyR7Z2V0RnJpZW5kbHlVUkwocmVxdWVzdC51cmwpfScgaGFzIGAgKyBgYmVlbiBhZGRlZCB0byBiYWNrZ3JvdW5kIHN5bmMgcXVldWUgJyR7dGhpcy5fbmFtZX0nLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zeW5jSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHNBZGRlZER1cmluZ1N5bmMgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlclN5bmMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfcmVtb3ZlUmVxdWVzdChvcGVyYXRpb24pIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgbGV0IGVudHJ5O1xuICAgICAgICBzd2l0Y2gob3BlcmF0aW9uKXtcbiAgICAgICAgICAgIGNhc2UgXCJwb3BcIjpcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGF3YWl0IHRoaXMuX3F1ZXVlU3RvcmUucG9wRW50cnkoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzaGlmdFwiOlxuICAgICAgICAgICAgICAgIGVudHJ5ID0gYXdhaXQgdGhpcy5fcXVldWVTdG9yZS5zaGlmdEVudHJ5KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBtYXhSZXRlbnRpb25UaW1lSW5NcyA9IHRoaXMuX21heFJldGVudGlvblRpbWUgKiA2MCAqIDEwMDA7XG4gICAgICAgICAgICBpZiAobm93IC0gZW50cnkudGltZXN0YW1wID4gbWF4UmV0ZW50aW9uVGltZUluTXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlUmVxdWVzdChvcGVyYXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnRyeShlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXN5bmMgcmVwbGF5UmVxdWVzdHMoKSB7XG4gICAgICAgIGxldCBlbnRyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgd2hpbGUoZW50cnkgPSBhd2FpdCB0aGlzLnNoaWZ0UmVxdWVzdCgpKXtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZmV0Y2goZW50cnkucmVxdWVzdC5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coYFJlcXVlc3QgZm9yICcke2dldEZyaWVuZGx5VVJMKGVudHJ5LnJlcXVlc3QudXJsKX0nIGAgKyBgaGFzIGJlZW4gcmVwbGF5ZWQgaW4gcXVldWUgJyR7dGhpcy5fbmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVuc2hpZnRSZXF1ZXN0KGVudHJ5KTtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coYFJlcXVlc3QgZm9yICcke2dldEZyaWVuZGx5VVJMKGVudHJ5LnJlcXVlc3QudXJsKX0nIGAgKyBgZmFpbGVkIHRvIHJlcGxheSwgcHV0dGluZyBpdCBiYWNrIGluIHF1ZXVlICcke3RoaXMuX25hbWV9J2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwicXVldWUtcmVwbGF5LWZhaWxlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuX25hbWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGBBbGwgcmVxdWVzdHMgaW4gcXVldWUgJyR7dGhpcy5uYW1lfScgaGF2ZSBzdWNjZXNzZnVsbHkgcmVwbGF5ZWQ7IHRoZSBxdWV1ZSBpcyBub3cgZW1wdHkhYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgcmVnaXN0ZXJTeW5jKCkge1xuICAgICAgICBpZiAoXCJzeW5jXCIgaW4gc2VsZi5yZWdpc3RyYXRpb24gJiYgIXRoaXMuX2ZvcmNlU3luY0ZhbGxiYWNrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYucmVnaXN0cmF0aW9uLnN5bmMucmVnaXN0ZXIoYCR7VEFHX1BSRUZJWH06JHt0aGlzLl9uYW1lfWApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIHJlZ2lzdGVyIHN5bmMgZXZlbnQgZm9yICcke3RoaXMuX25hbWV9Jy5gLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBfYWRkU3luY0xpc3RlbmVyKCkge1xuICAgICAgICBpZiAoXCJzeW5jXCIgaW4gc2VsZi5yZWdpc3RyYXRpb24gJiYgIXRoaXMuX2ZvcmNlU3luY0ZhbGxiYWNrKSB7XG4gICAgICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJzeW5jXCIsIChldmVudCk9PntcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudGFnID09PSBgJHtUQUdfUFJFRklYfToke3RoaXMuX25hbWV9YCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBCYWNrZ3JvdW5kIHN5bmMgZm9yIHRhZyAnJHtldmVudC50YWd9JyBoYXMgYmVlbiByZWNlaXZlZGApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN5bmNDb21wbGV0ZSA9IGFzeW5jICgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3luY0Vycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9vblN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZTogdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3luY0Vycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdHNBZGRlZER1cmluZ1N5bmMgJiYgIShzeW5jRXJyb3IgJiYgIWV2ZW50Lmxhc3RDaGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXJTeW5jKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHNBZGRlZER1cmluZ1N5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKHN5bmNDb21wbGV0ZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKFwiQmFja2dyb3VuZCBzeW5jIHJlcGxheWluZyB3aXRob3V0IGJhY2tncm91bmQgc3luYyBldmVudFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZvaWQgdGhpcy5fb25TeW5jKHtcbiAgICAgICAgICAgICAgICBxdWV1ZTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGdldCBfcXVldWVOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHF1ZXVlTmFtZXM7XG4gICAgfVxufVxuXG5jbGFzcyBCYWNrZ3JvdW5kU3luY1BsdWdpbiB7XG4gICAgX3F1ZXVlO1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIG9wdGlvbnMpe1xuICAgICAgICB0aGlzLl9xdWV1ZSA9IG5ldyBCYWNrZ3JvdW5kU3luY1F1ZXVlKG5hbWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBhc3luYyBmZXRjaERpZEZhaWwoeyByZXF1ZXN0IH0pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fcXVldWUucHVzaFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVxdWVzdFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNvbnN0IGNvcHlSZXNwb25zZSA9IGFzeW5jIChyZXNwb25zZSwgbW9kaWZpZXIpPT57XG4gICAgbGV0IG9yaWdpbiA9IG51bGw7XG4gICAgaWYgKHJlc3BvbnNlLnVybCkge1xuICAgICAgICBjb25zdCByZXNwb25zZVVSTCA9IG5ldyBVUkwocmVzcG9uc2UudXJsKTtcbiAgICAgICAgb3JpZ2luID0gcmVzcG9uc2VVUkwub3JpZ2luO1xuICAgIH1cbiAgICBpZiAob3JpZ2luICE9PSBzZWxmLmxvY2F0aW9uLm9yaWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiY3Jvc3Mtb3JpZ2luLWNvcHktcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgb3JpZ2luXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IHJlc3BvbnNlLmNsb25lKCk7XG4gICAgY29uc3QgcmVzcG9uc2VJbml0ID0ge1xuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyhjbG9uZWRSZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiBjbG9uZWRSZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IGNsb25lZFJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICB9O1xuICAgIGNvbnN0IG1vZGlmaWVkUmVzcG9uc2VJbml0ID0gbW9kaWZpZXIgPyBtb2RpZmllcihyZXNwb25zZUluaXQpIDogcmVzcG9uc2VJbml0O1xuICAgIGNvbnN0IGJvZHkgPSBjYW5Db25zdHJ1Y3RSZXNwb25zZUZyb21Cb2R5U3RyZWFtKCkgPyBjbG9uZWRSZXNwb25zZS5ib2R5IDogYXdhaXQgY2xvbmVkUmVzcG9uc2UuYmxvYigpO1xuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoYm9keSwgbW9kaWZpZWRSZXNwb25zZUluaXQpO1xufTtcblxuY2xhc3MgUHJlY2FjaGVTdHJhdGVneSBleHRlbmRzIFN0cmF0ZWd5IHtcbiAgICBfZmFsbGJhY2tUb05ldHdvcms7XG4gICAgc3RhdGljIGRlZmF1bHRQcmVjYWNoZUNhY2hlYWJpbGl0eVBsdWdpbiA9IHtcbiAgICAgICAgYXN5bmMgY2FjaGVXaWxsVXBkYXRlICh7IHJlc3BvbnNlIH0pIHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UgfHwgcmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzdGF0aWMgY29weVJlZGlyZWN0ZWRDYWNoZWFibGVSZXNwb25zZXNQbHVnaW4gPSB7XG4gICAgICAgIGFzeW5jIGNhY2hlV2lsbFVwZGF0ZSAoeyByZXNwb25zZSB9KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVkaXJlY3RlZCA/IGF3YWl0IGNvcHlSZXNwb25zZShyZXNwb25zZSkgOiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KXtcbiAgICAgICAgb3B0aW9ucy5jYWNoZU5hbWUgPSBjYWNoZU5hbWVzLmdldFByZWNhY2hlTmFtZShvcHRpb25zLmNhY2hlTmFtZSk7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9mYWxsYmFja1RvTmV0d29yayA9IG9wdGlvbnMuZmFsbGJhY2tUb05ldHdvcmsgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICB0aGlzLnBsdWdpbnMucHVzaChQcmVjYWNoZVN0cmF0ZWd5LmNvcHlSZWRpcmVjdGVkQ2FjaGVhYmxlUmVzcG9uc2VzUGx1Z2luKTtcbiAgICB9XG4gICAgYXN5bmMgX2hhbmRsZShyZXF1ZXN0LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlci5jYWNoZU1hdGNoKHJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlci5ldmVudCAmJiBoYW5kbGVyLmV2ZW50LnR5cGUgPT09IFwiaW5zdGFsbFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faGFuZGxlSW5zdGFsbChyZXF1ZXN0LCBoYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faGFuZGxlRmV0Y2gocmVxdWVzdCwgaGFuZGxlcik7XG4gICAgfVxuICAgIGFzeW5jIF9oYW5kbGVGZXRjaChyZXF1ZXN0LCBoYW5kbGVyKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gaGFuZGxlci5wYXJhbXMgfHwge307XG4gICAgICAgIGlmICh0aGlzLl9mYWxsYmFja1RvTmV0d29yaykge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBUaGUgcHJlY2FjaGVkIHJlc3BvbnNlIGZvciAke2dldEZyaWVuZGx5VVJMKHJlcXVlc3QudXJsKX0gaW4gJHt0aGlzLmNhY2hlTmFtZX0gd2FzIG5vdCBmb3VuZC4gRmFsbGluZyBiYWNrIHRvIHRoZSBuZXR3b3JrLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW50ZWdyaXR5SW5NYW5pZmVzdCA9IHBhcmFtcy5pbnRlZ3JpdHk7XG4gICAgICAgICAgICBjb25zdCBpbnRlZ3JpdHlJblJlcXVlc3QgPSByZXF1ZXN0LmludGVncml0eTtcbiAgICAgICAgICAgIGNvbnN0IG5vSW50ZWdyaXR5Q29uZmxpY3QgPSAhaW50ZWdyaXR5SW5SZXF1ZXN0IHx8IGludGVncml0eUluUmVxdWVzdCA9PT0gaW50ZWdyaXR5SW5NYW5pZmVzdDtcbiAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlci5mZXRjaChuZXcgUmVxdWVzdChyZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiByZXF1ZXN0Lm1vZGUgIT09IFwibm8tY29yc1wiID8gaW50ZWdyaXR5SW5SZXF1ZXN0IHx8IGludGVncml0eUluTWFuaWZlc3QgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChpbnRlZ3JpdHlJbk1hbmlmZXN0ICYmIG5vSW50ZWdyaXR5Q29uZmxpY3QgJiYgcmVxdWVzdC5tb2RlICE9PSBcIm5vLWNvcnNcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZURlZmF1bHRDYWNoZWFiaWxpdHlQbHVnaW5JZk5lZWRlZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhc0NhY2hlZCA9IGF3YWl0IGhhbmRsZXIuY2FjaGVQdXQocmVxdWVzdCwgcmVzcG9uc2UuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2FzQ2FjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBBIHJlc3BvbnNlIGZvciAke2dldEZyaWVuZGx5VVJMKHJlcXVlc3QudXJsKX0gd2FzIHVzZWQgdG8gXCJyZXBhaXJcIiB0aGUgcHJlY2FjaGUuYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibWlzc2luZy1wcmVjYWNoZS1lbnRyeVwiLCB7XG4gICAgICAgICAgICAgICAgY2FjaGVOYW1lOiB0aGlzLmNhY2hlTmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IHJlcXVlc3QudXJsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHBhcmFtcy5jYWNoZUtleSB8fCBhd2FpdCBoYW5kbGVyLmdldENhY2hlS2V5KHJlcXVlc3QsIFwicmVhZFwiKTtcbiAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChgUHJlY2FjaGluZyBpcyByZXNwb25kaW5nIHRvOiAke2dldEZyaWVuZGx5VVJMKHJlcXVlc3QudXJsKX1gKTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coYFNlcnZpbmcgdGhlIHByZWNhY2hlZCB1cmw6ICR7Z2V0RnJpZW5kbHlVUkwoY2FjaGVLZXkgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gY2FjaGVLZXkudXJsIDogY2FjaGVLZXkpfWApO1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKFwiVmlldyByZXF1ZXN0IGRldGFpbHMgaGVyZS5cIik7XG4gICAgICAgICAgICBsb2dnZXIubG9nKHJlcXVlc3QpO1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQoXCJWaWV3IHJlc3BvbnNlIGRldGFpbHMgaGVyZS5cIik7XG4gICAgICAgICAgICBsb2dnZXIubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGxvZ2dlci5ncm91cEVuZCgpO1xuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICBhc3luYyBfaGFuZGxlSW5zdGFsbChyZXF1ZXN0LCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX3VzZURlZmF1bHRDYWNoZWFiaWxpdHlQbHVnaW5JZk5lZWRlZCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGhhbmRsZXIuZmV0Y2gocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IHdhc0NhY2hlZCA9IGF3YWl0IGhhbmRsZXIuY2FjaGVQdXQocmVxdWVzdCwgcmVzcG9uc2UuY2xvbmUoKSk7XG4gICAgICAgIGlmICghd2FzQ2FjaGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiYmFkLXByZWNhY2hpbmctcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gICAgX3VzZURlZmF1bHRDYWNoZWFiaWxpdHlQbHVnaW5JZk5lZWRlZCgpIHtcbiAgICAgICAgbGV0IGRlZmF1bHRQbHVnaW5JbmRleCA9IG51bGw7XG4gICAgICAgIGxldCBjYWNoZVdpbGxVcGRhdGVQbHVnaW5Db3VudCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBwbHVnaW5dIG9mIHRoaXMucGx1Z2lucy5lbnRyaWVzKCkpe1xuICAgICAgICAgICAgaWYgKHBsdWdpbiA9PT0gUHJlY2FjaGVTdHJhdGVneS5jb3B5UmVkaXJlY3RlZENhY2hlYWJsZVJlc3BvbnNlc1BsdWdpbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBsdWdpbiA9PT0gUHJlY2FjaGVTdHJhdGVneS5kZWZhdWx0UHJlY2FjaGVDYWNoZWFiaWxpdHlQbHVnaW4pIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0UGx1Z2luSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbHVnaW4uY2FjaGVXaWxsVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FjaGVXaWxsVXBkYXRlUGx1Z2luQ291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FjaGVXaWxsVXBkYXRlUGx1Z2luQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2lucy5wdXNoKFByZWNhY2hlU3RyYXRlZ3kuZGVmYXVsdFByZWNhY2hlQ2FjaGVhYmlsaXR5UGx1Z2luKTtcbiAgICAgICAgfSBlbHNlIGlmIChjYWNoZVdpbGxVcGRhdGVQbHVnaW5Db3VudCA+IDEgJiYgZGVmYXVsdFBsdWdpbkluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMuc3BsaWNlKGRlZmF1bHRQbHVnaW5JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGlzTmF2aWdhdGlvblByZWxvYWRTdXBwb3J0ZWQgPSAoKT0+e1xuICAgIHJldHVybiBCb29sZWFuKHNlbGYucmVnaXN0cmF0aW9uPy5uYXZpZ2F0aW9uUHJlbG9hZCk7XG59O1xuY29uc3QgZW5hYmxlTmF2aWdhdGlvblByZWxvYWQgPSAoaGVhZGVyVmFsdWUpPT57XG4gICAgaWYgKGlzTmF2aWdhdGlvblByZWxvYWRTdXBwb3J0ZWQoKSkge1xuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJhY3RpdmF0ZVwiLCAoZXZlbnQpPT57XG4gICAgICAgICAgICBldmVudC53YWl0VW50aWwoc2VsZi5yZWdpc3RyYXRpb24ubmF2aWdhdGlvblByZWxvYWQuZW5hYmxlKCkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2b2lkIHNlbGYucmVnaXN0cmF0aW9uLm5hdmlnYXRpb25QcmVsb2FkLnNldEhlYWRlclZhbHVlKGhlYWRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKFwiTmF2aWdhdGlvbiBwcmVsb2FkaW5nIGlzIGVuYWJsZWQuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhcIk5hdmlnYXRpb24gcHJlbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3Nlci5cIik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgZGlzYWJsZU5hdmlnYXRpb25QcmVsb2FkID0gKCk9PntcbiAgICBpZiAoaXNOYXZpZ2F0aW9uUHJlbG9hZFN1cHBvcnRlZCgpKSB7XG4gICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImFjdGl2YXRlXCIsIChldmVudCk9PntcbiAgICAgICAgICAgIGV2ZW50LndhaXRVbnRpbChzZWxmLnJlZ2lzdHJhdGlvbi5uYXZpZ2F0aW9uUHJlbG9hZC5kaXNhYmxlKCkudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhcIk5hdmlnYXRpb24gcHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKFwiTmF2aWdhdGlvbiBwcmVsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IHNldENhY2hlTmFtZURldGFpbHMgPSAoZGV0YWlscyk9PntcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGRldGFpbHMpKXtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoZGV0YWlsc1trZXldLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJAc2Vyd2lzdC9jb3JlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwic2V0Q2FjaGVOYW1lRGV0YWlsc1wiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogYGRldGFpbHMuJHtrZXl9YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldGFpbHMucHJlY2FjaGU/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImludmFsaWQtY2FjaGUtbmFtZVwiLCB7XG4gICAgICAgICAgICAgICAgY2FjaGVOYW1lSWQ6IFwicHJlY2FjaGVcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGV0YWlscy5wcmVjYWNoZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldGFpbHMucnVudGltZT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiaW52YWxpZC1jYWNoZS1uYW1lXCIsIHtcbiAgICAgICAgICAgICAgICBjYWNoZU5hbWVJZDogXCJydW50aW1lXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRldGFpbHMucnVudGltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldGFpbHMuZ29vZ2xlQW5hbHl0aWNzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJpbnZhbGlkLWNhY2hlLW5hbWVcIiwge1xuICAgICAgICAgICAgICAgIGNhY2hlTmFtZUlkOiBcImdvb2dsZUFuYWx5dGljc1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkZXRhaWxzLmdvb2dsZUFuYWx5dGljc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FjaGVOYW1lcy51cGRhdGVEZXRhaWxzKGRldGFpbHMpO1xufTtcblxuY2xhc3MgUHJlY2FjaGVJbnN0YWxsUmVwb3J0UGx1Z2luIHtcbiAgICB1cGRhdGVkVVJMcyA9IFtdO1xuICAgIG5vdFVwZGF0ZWRVUkxzID0gW107XG4gICAgaGFuZGxlcldpbGxTdGFydCA9IGFzeW5jICh7IHJlcXVlc3QsIHN0YXRlIH0pPT57XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgc3RhdGUub3JpZ2luYWxSZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY2FjaGVkUmVzcG9uc2VXaWxsQmVVc2VkID0gYXN5bmMgKHsgZXZlbnQsIHN0YXRlLCBjYWNoZWRSZXNwb25zZSB9KT0+e1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnN0YWxsXCIpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZT8ub3JpZ2luYWxSZXF1ZXN0ICYmIHN0YXRlLm9yaWdpbmFsUmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBzdGF0ZS5vcmlnaW5hbFJlcXVlc3QudXJsO1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdFVwZGF0ZWRVUkxzLnB1c2godXJsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZWRVUkxzLnB1c2godXJsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3BvbnNlO1xuICAgIH07XG59XG5cbmNvbnN0IFJFVklTSU9OX1NFQVJDSF9QQVJBTSA9IFwiX19XQl9SRVZJU0lPTl9fXCI7XG5jb25zdCBjcmVhdGVDYWNoZUtleSA9IChlbnRyeSk9PntcbiAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJhZGQtdG8tY2FjaGUtbGlzdC11bmV4cGVjdGVkLXR5cGVcIiwge1xuICAgICAgICAgICAgZW50cnlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gbmV3IFVSTChlbnRyeSwgbG9jYXRpb24uaHJlZik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYWNoZUtleTogdXJsT2JqZWN0LmhyZWYsXG4gICAgICAgICAgICB1cmw6IHVybE9iamVjdC5ocmVmXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHsgcmV2aXNpb24sIHVybCB9ID0gZW50cnk7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImFkZC10by1jYWNoZS1saXN0LXVuZXhwZWN0ZWQtdHlwZVwiLCB7XG4gICAgICAgICAgICBlbnRyeVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCFyZXZpc2lvbikge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBuZXcgVVJMKHVybCwgbG9jYXRpb24uaHJlZik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYWNoZUtleTogdXJsT2JqZWN0LmhyZWYsXG4gICAgICAgICAgICB1cmw6IHVybE9iamVjdC5ocmVmXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGNhY2hlS2V5VVJMID0gbmV3IFVSTCh1cmwsIGxvY2F0aW9uLmhyZWYpO1xuICAgIGNvbnN0IG9yaWdpbmFsVVJMID0gbmV3IFVSTCh1cmwsIGxvY2F0aW9uLmhyZWYpO1xuICAgIGNhY2hlS2V5VVJMLnNlYXJjaFBhcmFtcy5zZXQoUkVWSVNJT05fU0VBUkNIX1BBUkFNLCByZXZpc2lvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY2FjaGVLZXk6IGNhY2hlS2V5VVJMLmhyZWYsXG4gICAgICAgIHVybDogb3JpZ2luYWxVUkwuaHJlZlxuICAgIH07XG59O1xuXG5jb25zdCBwYXJzZVJvdXRlID0gKGNhcHR1cmUsIGhhbmRsZXIsIG1ldGhvZCk9PntcbiAgICBpZiAodHlwZW9mIGNhcHR1cmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZVVybCA9IG5ldyBVUkwoY2FwdHVyZSwgbG9jYXRpb24uaHJlZik7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICghKGNhcHR1cmUuc3RhcnRzV2l0aChcIi9cIikgfHwgY2FwdHVyZS5zdGFydHNXaXRoKFwiaHR0cFwiKSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiaW52YWxpZC1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicGFyc2VSb3V0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiY2FwdHVyZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRvQ2hlY2sgPSBjYXB0dXJlLnN0YXJ0c1dpdGgoXCJodHRwXCIpID8gY2FwdHVyZVVybC5wYXRobmFtZSA6IGNhcHR1cmU7XG4gICAgICAgICAgICBjb25zdCB3aWxkY2FyZHMgPSBcIlsqOj8rXVwiO1xuICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYCR7d2lsZGNhcmRzfWApLmV4ZWModmFsdWVUb0NoZWNrKSkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgVGhlICckY2FwdHVyZScgcGFyYW1ldGVyIGNvbnRhaW5zIGFuIEV4cHJlc3Mtc3R5bGUgd2lsZGNhcmQgY2hhcmFjdGVyICgke3dpbGRjYXJkc30pLiBTdHJpbmdzIGFyZSBub3cgYWx3YXlzIGludGVycHJldGVkIGFzIGV4YWN0IG1hdGNoZXM7IHVzZSBhIFJlZ0V4cCBmb3IgcGFydGlhbCBvciB3aWxkY2FyZCBtYXRjaGVzLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoQ2FsbGJhY2sgPSAoeyB1cmwgfSk9PntcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLnBhdGhuYW1lID09PSBjYXB0dXJlVXJsLnBhdGhuYW1lICYmIHVybC5vcmlnaW4gIT09IGNhcHR1cmVVcmwub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgJHtjYXB0dXJlfSBvbmx5IHBhcnRpYWxseSBtYXRjaGVzIHRoZSBjcm9zcy1vcmlnaW4gVVJMICR7dXJsLnRvU3RyaW5nKCl9LiBUaGlzIHJvdXRlIHdpbGwgb25seSBoYW5kbGUgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzIGlmIHRoZXkgbWF0Y2ggdGhlIGVudGlyZSBVUkwuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVybC5ocmVmID09PSBjYXB0dXJlVXJsLmhyZWY7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUm91dGUobWF0Y2hDYWxsYmFjaywgaGFuZGxlciwgbWV0aG9kKTtcbiAgICB9XG4gICAgaWYgKGNhcHR1cmUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHBSb3V0ZShjYXB0dXJlLCBoYW5kbGVyLCBtZXRob2QpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGNhcHR1cmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gbmV3IFJvdXRlKGNhcHR1cmUsIGhhbmRsZXIsIG1ldGhvZCk7XG4gICAgfVxuICAgIGlmIChjYXB0dXJlIGluc3RhbmNlb2YgUm91dGUpIHtcbiAgICAgICAgcmV0dXJuIGNhcHR1cmU7XG4gICAgfVxuICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJ1bnN1cHBvcnRlZC1yb3V0ZS10eXBlXCIsIHtcbiAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgIGZ1bmNOYW1lOiBcInBhcnNlUm91dGVcIixcbiAgICAgICAgcGFyYW1OYW1lOiBcImNhcHR1cmVcIlxuICAgIH0pO1xufTtcblxuY29uc3QgbG9nR3JvdXAgPSAoZ3JvdXBUaXRsZSwgZGVsZXRlZFVSTHMpPT57XG4gICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKGdyb3VwVGl0bGUpO1xuICAgIGZvciAoY29uc3QgdXJsIG9mIGRlbGV0ZWRVUkxzKXtcbiAgICAgICAgbG9nZ2VyLmxvZyh1cmwpO1xuICAgIH1cbiAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbn07XG5jb25zdCBwcmludENsZWFudXBEZXRhaWxzID0gKGRlbGV0ZWRVUkxzKT0+e1xuICAgIGNvbnN0IGRlbGV0aW9uQ291bnQgPSBkZWxldGVkVVJMcy5sZW5ndGg7XG4gICAgaWYgKGRlbGV0aW9uQ291bnQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChgRHVyaW5nIHByZWNhY2hpbmcgY2xlYW51cCwgJHtkZWxldGlvbkNvdW50fSBjYWNoZWQgcmVxdWVzdCR7ZGVsZXRpb25Db3VudCA9PT0gMSA/IFwiIHdhc1wiIDogXCJzIHdlcmVcIn0gZGVsZXRlZC5gKTtcbiAgICAgICAgbG9nR3JvdXAoXCJEZWxldGVkIENhY2hlIFJlcXVlc3RzXCIsIGRlbGV0ZWRVUkxzKTtcbiAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gX25lc3RlZEdyb3VwKGdyb3VwVGl0bGUsIHVybHMpIHtcbiAgICBpZiAodXJscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQoZ3JvdXBUaXRsZSk7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscyl7XG4gICAgICAgIGxvZ2dlci5sb2codXJsKTtcbiAgICB9XG4gICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG59XG5jb25zdCBwcmludEluc3RhbGxEZXRhaWxzID0gKHVybHNUb1ByZWNhY2hlLCB1cmxzQWxyZWFkeVByZWNhY2hlZCk9PntcbiAgICBjb25zdCBwcmVjYWNoZWRDb3VudCA9IHVybHNUb1ByZWNhY2hlLmxlbmd0aDtcbiAgICBjb25zdCBhbHJlYWR5UHJlY2FjaGVkQ291bnQgPSB1cmxzQWxyZWFkeVByZWNhY2hlZC5sZW5ndGg7XG4gICAgaWYgKHByZWNhY2hlZENvdW50IHx8IGFscmVhZHlQcmVjYWNoZWRDb3VudCkge1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGBQcmVjYWNoaW5nICR7cHJlY2FjaGVkQ291bnR9IGZpbGUke3ByZWNhY2hlZENvdW50ID09PSAxID8gXCJcIiA6IFwic1wifS5gO1xuICAgICAgICBpZiAoYWxyZWFkeVByZWNhY2hlZENvdW50ID4gMCkge1xuICAgICAgICAgICAgbWVzc2FnZSArPSBgICR7YWxyZWFkeVByZWNhY2hlZENvdW50fSBgICsgYGZpbGUke2FscmVhZHlQcmVjYWNoZWRDb3VudCA9PT0gMSA/IFwiIGlzXCIgOiBcInMgYXJlXCJ9IGFscmVhZHkgY2FjaGVkLmA7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKG1lc3NhZ2UpO1xuICAgICAgICBfbmVzdGVkR3JvdXAoXCJWaWV3IG5ld2x5IHByZWNhY2hlZCBVUkxzLlwiLCB1cmxzVG9QcmVjYWNoZSk7XG4gICAgICAgIF9uZXN0ZWRHcm91cChcIlZpZXcgcHJldmlvdXNseSBwcmVjYWNoZWQgVVJMcy5cIiwgdXJsc0FscmVhZHlQcmVjYWNoZWQpO1xuICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICB9XG59O1xuXG5leHBvcnQgeyBCYWNrZ3JvdW5kU3luY1BsdWdpbiBhcyBCLCBOZXR3b3JrT25seSBhcyBOLCBQcmVjYWNoZVN0cmF0ZWd5IGFzIFAsIFJvdXRlIGFzIFIsIFN0cmF0ZWd5IGFzIFMsIE5ldHdvcmtGaXJzdCBhcyBhLCBOYXZpZ2F0aW9uUm91dGUgYXMgYiwgY3JlYXRlQ2FjaGVLZXkgYXMgYywgZGlzYWJsZURldkxvZ3MgYXMgZCwgZW5hYmxlTmF2aWdhdGlvblByZWxvYWQgYXMgZSwgcHJpbnRJbnN0YWxsRGV0YWlscyBhcyBmLCBnZW5lcmF0ZVVSTFZhcmlhdGlvbnMgYXMgZywgcHJpbnRDbGVhbnVwRGV0YWlscyBhcyBoLCBkZWZhdWx0TWV0aG9kIGFzIGksIHBhcnNlUm91dGUgYXMgaiwgUHJlY2FjaGVJbnN0YWxsUmVwb3J0UGx1Z2luIGFzIGssIGNhY2hlT2tBbmRPcGFxdWVQbHVnaW4gYXMgbCwgbWVzc2FnZXMgYXMgbSwgbm9ybWFsaXplSGFuZGxlciBhcyBuLCBjb3B5UmVzcG9uc2UgYXMgbywgcGFyYWxsZWwgYXMgcCwgZGlzYWJsZU5hdmlnYXRpb25QcmVsb2FkIGFzIHEsIGlzTmF2aWdhdGlvblByZWxvYWRTdXBwb3J0ZWQgYXMgciwgc2V0Q2FjaGVOYW1lRGV0YWlscyBhcyBzLCBTdHJhdGVneUhhbmRsZXIgYXMgdCwgUmVnRXhwUm91dGUgYXMgdSwgQmFja2dyb3VuZFN5bmNRdWV1ZSBhcyB2LCBCYWNrZ3JvdW5kU3luY1F1ZXVlU3RvcmUgYXMgdywgU3RvcmFibGVSZXF1ZXN0IGFzIHggfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/printInstallDetails.js\n")); - -/***/ }), - -/***/ "./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/resultingClientExists.js": -/*!*********************************************************************************************************************!*\ - !*** ./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/resultingClientExists.js ***! - \*********************************************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ r: function() { return /* binding */ resultingClientExists; }\n/* harmony export */ });\n/* harmony import */ var _waitUntil_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./waitUntil.js */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js\");\n\n\nconst MAX_RETRY_TIME = 2000;\nasync function resultingClientExists(resultingClientId) {\n if (!resultingClientId) {\n return;\n }\n let existingWindows = await self.clients.matchAll({\n type: \"window\"\n });\n const existingWindowIds = new Set(existingWindows.map((w)=>w.id));\n let resultingWindow = undefined;\n const startTime = performance.now();\n while(performance.now() - startTime < MAX_RETRY_TIME){\n existingWindows = await self.clients.matchAll({\n type: \"window\"\n });\n resultingWindow = existingWindows.find((w)=>{\n if (resultingClientId) {\n return w.id === resultingClientId;\n }\n return !existingWindowIds.has(w.id);\n });\n if (resultingWindow) {\n break;\n }\n await (0,_waitUntil_js__WEBPACK_IMPORTED_MODULE_0__.t)(100);\n }\n return resultingWindow;\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vc2Vyd2lzdEA5LjAuMl90eXBlc2NyaXB0QDUuNC41L25vZGVfbW9kdWxlcy9zZXJ3aXN0L2Rpc3QvY2h1bmtzL3Jlc3VsdGluZ0NsaWVudEV4aXN0cy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsY0FBYyxnREFBTztBQUNyQjtBQUNBO0FBQ0E7O0FBRXNDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy8ucG5wbS9zZXJ3aXN0QDkuMC4yX3R5cGVzY3JpcHRANS40LjUvbm9kZV9tb2R1bGVzL3Nlcndpc3QvZGlzdC9jaHVua3MvcmVzdWx0aW5nQ2xpZW50RXhpc3RzLmpzPzQzNGIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdCBhcyB0aW1lb3V0IH0gZnJvbSAnLi93YWl0VW50aWwuanMnO1xuXG5jb25zdCBNQVhfUkVUUllfVElNRSA9IDIwMDA7XG5hc3luYyBmdW5jdGlvbiByZXN1bHRpbmdDbGllbnRFeGlzdHMocmVzdWx0aW5nQ2xpZW50SWQpIHtcbiAgICBpZiAoIXJlc3VsdGluZ0NsaWVudElkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGV4aXN0aW5nV2luZG93cyA9IGF3YWl0IHNlbGYuY2xpZW50cy5tYXRjaEFsbCh7XG4gICAgICAgIHR5cGU6IFwid2luZG93XCJcbiAgICB9KTtcbiAgICBjb25zdCBleGlzdGluZ1dpbmRvd0lkcyA9IG5ldyBTZXQoZXhpc3RpbmdXaW5kb3dzLm1hcCgodyk9PncuaWQpKTtcbiAgICBsZXQgcmVzdWx0aW5nV2luZG93ID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHdoaWxlKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lIDwgTUFYX1JFVFJZX1RJTUUpe1xuICAgICAgICBleGlzdGluZ1dpbmRvd3MgPSBhd2FpdCBzZWxmLmNsaWVudHMubWF0Y2hBbGwoe1xuICAgICAgICAgICAgdHlwZTogXCJ3aW5kb3dcIlxuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0aW5nV2luZG93ID0gZXhpc3RpbmdXaW5kb3dzLmZpbmQoKHcpPT57XG4gICAgICAgICAgICBpZiAocmVzdWx0aW5nQ2xpZW50SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdy5pZCA9PT0gcmVzdWx0aW5nQ2xpZW50SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIWV4aXN0aW5nV2luZG93SWRzLmhhcyh3LmlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHRpbmdXaW5kb3cpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRpbWVvdXQoMTAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdGluZ1dpbmRvdztcbn1cblxuZXhwb3J0IHsgcmVzdWx0aW5nQ2xpZW50RXhpc3RzIGFzIHIgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/resultingClientExists.js\n")); - -/***/ }), - -/***/ "./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js ***! - \*********************************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ D: function() { return /* binding */ Deferred; },\n/* harmony export */ S: function() { return /* binding */ SerwistError; },\n/* harmony export */ a: function() { return /* binding */ clientsClaim; },\n/* harmony export */ b: function() { return /* binding */ cleanupOutdatedCaches; },\n/* harmony export */ c: function() { return /* binding */ cacheNames; },\n/* harmony export */ d: function() { return /* binding */ cacheMatchIgnoreParams; },\n/* harmony export */ e: function() { return /* binding */ executeQuotaErrorCallbacks; },\n/* harmony export */ f: function() { return /* binding */ finalAssertExports; },\n/* harmony export */ g: function() { return /* binding */ getFriendlyURL; },\n/* harmony export */ h: function() { return /* binding */ canConstructResponseFromBodyStream; },\n/* harmony export */ l: function() { return /* binding */ logger; },\n/* harmony export */ q: function() { return /* binding */ quotaErrorCallbacks; },\n/* harmony export */ t: function() { return /* binding */ timeout; },\n/* harmony export */ w: function() { return /* binding */ waitUntil; }\n/* harmony export */ });\nconst messages = {\n \"invalid-value\": ({ paramName, validValueDescription, value })=>{\n if (!paramName || !validValueDescription) {\n throw new Error(`Unexpected input to 'invalid-value' error.`);\n }\n return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;\n },\n \"not-an-array\": ({ moduleName, className, funcName, paramName })=>{\n if (!moduleName || !className || !funcName || !paramName) {\n throw new Error(`Unexpected input to 'not-an-array' error.`);\n }\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;\n },\n \"incorrect-type\": ({ expectedType, paramName, moduleName, className, funcName })=>{\n if (!expectedType || !paramName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-type' error.`);\n }\n const classNameStr = className ? `${className}.` : \"\";\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.`;\n },\n \"incorrect-class\": ({ expectedClassName, paramName, moduleName, className, funcName, isReturnValueProblem })=>{\n if (!expectedClassName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'incorrect-class' error.`);\n }\n const classNameStr = className ? `${className}.` : \"\";\n if (isReturnValueProblem) {\n return `The return value from '${moduleName}.${classNameStr}${funcName}()' must be an instance of class ${expectedClassName}.`;\n }\n return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`;\n },\n \"missing-a-method\": ({ expectedMethod, paramName, moduleName, className, funcName })=>{\n if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {\n throw new Error(`Unexpected input to 'missing-a-method' error.`);\n }\n return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;\n },\n \"add-to-cache-list-unexpected-type\": ({ entry })=>{\n return `An unexpected entry was passed to 'serwist.Serwist.addToPrecacheList()' The entry '${JSON.stringify(entry)}' isn't supported. You must supply an array of strings with one or more characters, objects with a url property or Request objects.`;\n },\n \"add-to-cache-list-conflicting-entries\": ({ firstEntry, secondEntry })=>{\n if (!firstEntry || !secondEntry) {\n throw new Error(\"Unexpected input to \" + `'add-to-cache-list-duplicate-entries' error.`);\n }\n return `Two of the entries passed to 'serwist.Serwist.addToPrecacheList()' had the URL ${firstEntry} but different revision details. Serwist is unable to cache and version the asset correctly. Please remove one of the entries.`;\n },\n \"plugin-error-request-will-fetch\": ({ thrownErrorMessage })=>{\n if (!thrownErrorMessage) {\n throw new Error(\"Unexpected input to \" + `'plugin-error-request-will-fetch', error.`);\n }\n return `An error was thrown by a plugin's 'requestWillFetch()' method. The thrown error message was: '${thrownErrorMessage}'.`;\n },\n \"invalid-cache-name\": ({ cacheNameId, value })=>{\n if (!cacheNameId) {\n throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);\n }\n return `You must provide a name containing at least one character for setCacheDetails({${cacheNameId}: '...'}). Received a value of '${JSON.stringify(value)}'`;\n },\n \"unregister-route-but-not-found-with-method\": ({ method })=>{\n if (!method) {\n throw new Error(\"Unexpected input to \" + `'unregister-route-but-not-found-with-method' error.`);\n }\n return `The route you're trying to unregister was not previously registered for the method type '${method}'.`;\n },\n \"unregister-route-route-not-registered\": ()=>{\n return `The route you're trying to unregister was not previously ` + \"registered.\";\n },\n \"queue-replay-failed\": ({ name })=>{\n return `Replaying the background sync queue '${name}' failed.`;\n },\n \"duplicate-queue-name\": ({ name })=>{\n return `The queue name '${name}' is already being used. All instances of 'serwist.BackgroundSyncQueue' must be given unique names.`;\n },\n \"expired-test-without-max-age\": ({ methodName, paramName })=>{\n return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;\n },\n \"unsupported-route-type\": ({ moduleName, className, funcName, paramName })=>{\n return `The supplied '${paramName}' parameter was an unsupported type. Please check the docs for ${moduleName}.${className}.${funcName} for valid input types.`;\n },\n \"not-array-of-class\": ({ value, expectedClass, moduleName, className, funcName, paramName })=>{\n return `The supplied '${paramName}' parameter must be an array of '${expectedClass}' objects. Received '${JSON.stringify(value)},'. Please check the call to ${moduleName}.${className}.${funcName}() to fix the issue.`;\n },\n \"max-entries-or-age-required\": ({ moduleName, className, funcName })=>{\n return `You must define either 'config.maxEntries' or 'config.maxAgeSeconds' in '${moduleName}.${className}.${funcName}'`;\n },\n \"statuses-or-headers-required\": ({ moduleName, className, funcName })=>{\n return `You must define either 'config.statuses' or 'config.headers' in '${moduleName}.${className}.${funcName}'`;\n },\n \"invalid-string\": ({ moduleName, funcName, paramName })=>{\n if (!paramName || !moduleName || !funcName) {\n throw new Error(`Unexpected input to 'invalid-string' error.`);\n }\n return `When using strings, the '${paramName}' parameter must start with 'http' (for cross-origin matches) or '/' (for same-origin matches). Please see the docs for ${moduleName}.${funcName}() for more info.`;\n },\n \"channel-name-required\": ()=>{\n return \"You must provide a channelName to construct a \" + \"BroadcastCacheUpdate instance.\";\n },\n \"invalid-responses-are-same-args\": ()=>{\n return \"The arguments passed into responsesAreSame() appear to be \" + \"invalid. Please ensure valid Responses are used.\";\n },\n \"expire-custom-caches-only\": ()=>{\n return `You must provide a 'cacheName' property when using the ` + \"expiration plugin with a runtime caching strategy.\";\n },\n \"unit-must-be-bytes\": ({ normalizedRangeHeader })=>{\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);\n }\n return `The 'unit' portion of the Range header must be set to 'bytes'. The Range header provided was \"${normalizedRangeHeader}\"`;\n },\n \"single-range-only\": ({ normalizedRangeHeader })=>{\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'single-range-only' error.`);\n }\n return `Multiple ranges are not supported. Please use a single start value, and optional end value. The Range header provided was \"${normalizedRangeHeader}\"`;\n },\n \"invalid-range-values\": ({ normalizedRangeHeader })=>{\n if (!normalizedRangeHeader) {\n throw new Error(`Unexpected input to 'invalid-range-values' error.`);\n }\n return `The Range header is missing both start and end values. At least one of those values is needed. The Range header provided was \"${normalizedRangeHeader}\"`;\n },\n \"no-range-header\": ()=>{\n return \"No Range header was found in the Request provided.\";\n },\n \"range-not-satisfiable\": ({ size, start, end })=>{\n return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;\n },\n \"attempt-to-cache-non-get-request\": ({ url, method })=>{\n return `Unable to cache '${url}' because it is a '${method}' request and only 'GET' requests can be cached.`;\n },\n \"cache-put-with-no-response\": ({ url })=>{\n return `There was an attempt to cache '${url}' but the response was not defined.`;\n },\n \"no-response\": ({ url, error })=>{\n let message = `The strategy could not generate a response for '${url}'.`;\n if (error) {\n message += ` The underlying error is ${error}.`;\n }\n return message;\n },\n \"bad-precaching-response\": ({ url, status })=>{\n return `The precaching request for '${url}' failed${status ? ` with an HTTP status of ${status}.` : \".\"}`;\n },\n \"non-precached-url\": ({ url })=>{\n return `'createHandlerBoundToURL(\"${url}\")' was called, but that URL is not precached. Please pass in a URL that is precached instead.`;\n },\n \"add-to-cache-list-conflicting-integrities\": ({ url })=>{\n return `Two of the entries passed to 'serwist.Serwist.addToPrecacheList()' had the URL ${url} with different integrity values. Please remove one of them.`;\n },\n \"missing-precache-entry\": ({ cacheName, url })=>{\n return `Unable to find a precached response in ${cacheName} for ${url}.`;\n },\n \"cross-origin-copy-response\": ({ origin })=>{\n return `'@serwist/core.copyResponse()' can only be used with same-origin responses. It was passed a response with origin ${origin}.`;\n },\n \"opaque-streams-source\": ({ type })=>{\n const message = `One of the '@serwist/streams' sources resulted in an '${type}' response.`;\n if (type === \"opaqueredirect\") {\n return `${message} Please do not use a navigation request that results in a redirect as a source.`;\n }\n return `${message} Please ensure your sources are CORS-enabled.`;\n }\n};\n\nconst fallback = (code, ...args)=>{\n let msg = code;\n if (args.length > 0) {\n msg += ` :: ${JSON.stringify(args)}`;\n }\n return msg;\n};\nconst generatorFunction = (code, details = {})=>{\n const message = messages[code];\n if (!message) {\n throw new Error(`Unable to find message for code '${code}'.`);\n }\n return message(details);\n};\nconst messageGenerator = false ? 0 : generatorFunction;\n\nclass SerwistError extends Error {\n details;\n constructor(errorCode, details){\n const message = messageGenerator(errorCode, details);\n super(message);\n this.name = errorCode;\n this.details = details;\n }\n}\n\nconst isArray = (value, details)=>{\n if (!Array.isArray(value)) {\n throw new SerwistError(\"not-an-array\", details);\n }\n};\nconst hasMethod = (object, expectedMethod, details)=>{\n const type = typeof object[expectedMethod];\n if (type !== \"function\") {\n details.expectedMethod = expectedMethod;\n throw new SerwistError(\"missing-a-method\", details);\n }\n};\nconst isType = (object, expectedType, details)=>{\n if (typeof object !== expectedType) {\n details.expectedType = expectedType;\n throw new SerwistError(\"incorrect-type\", details);\n }\n};\nconst isInstance = (object, expectedClass, details)=>{\n if (!(object instanceof expectedClass)) {\n details.expectedClassName = expectedClass.name;\n throw new SerwistError(\"incorrect-class\", details);\n }\n};\nconst isOneOf = (value, validValues, details)=>{\n if (!validValues.includes(value)) {\n details.validValueDescription = `Valid values are ${JSON.stringify(validValues)}.`;\n throw new SerwistError(\"invalid-value\", details);\n }\n};\nconst isArrayOfClass = (value, expectedClass, details)=>{\n const error = new SerwistError(\"not-array-of-class\", details);\n if (!Array.isArray(value)) {\n throw error;\n }\n for (const item of value){\n if (!(item instanceof expectedClass)) {\n throw error;\n }\n }\n};\nconst finalAssertExports = false ? 0 : {\n hasMethod,\n isArray,\n isInstance,\n isOneOf,\n isType,\n isArrayOfClass\n};\n\nconst logger = false ? 0 : (()=>{\n if (!(\"__WB_DISABLE_DEV_LOGS\" in globalThis)) {\n self.__WB_DISABLE_DEV_LOGS = false;\n }\n let inGroup = false;\n const methodToColorMap = {\n debug: \"#7f8c8d\",\n log: \"#2ecc71\",\n warn: \"#f39c12\",\n error: \"#c0392b\",\n groupCollapsed: \"#3498db\",\n groupEnd: null\n };\n const print = (method, args)=>{\n if (self.__WB_DISABLE_DEV_LOGS) {\n return;\n }\n if (method === \"groupCollapsed\") {\n if (typeof navigator !== \"undefined\" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n console[method](...args);\n return;\n }\n }\n const styles = [\n `background: ${methodToColorMap[method]}`,\n \"border-radius: 0.5em\",\n \"color: white\",\n \"font-weight: bold\",\n \"padding: 2px 0.5em\"\n ];\n const logPrefix = inGroup ? [] : [\n \"%cserwist\",\n styles.join(\";\")\n ];\n console[method](...logPrefix, ...args);\n if (method === \"groupCollapsed\") {\n inGroup = true;\n }\n if (method === \"groupEnd\") {\n inGroup = false;\n }\n };\n const loggerMethods = Object.keys(methodToColorMap);\n return loggerMethods.reduce((api, method)=>{\n api[method] = (...args)=>{\n print(method, args);\n };\n return api;\n }, {});\n})();\n\nconst getFriendlyURL = (url)=>{\n const urlObj = new URL(String(url), location.href);\n return urlObj.href.replace(new RegExp(`^${location.origin}`), \"\");\n};\n\nconst _cacheNameDetails = {\n googleAnalytics: \"googleAnalytics\",\n precache: \"precache-v2\",\n prefix: \"serwist\",\n runtime: \"runtime\",\n suffix: typeof registration !== \"undefined\" ? registration.scope : \"\"\n};\nconst _createCacheName = (cacheName)=>{\n return [\n _cacheNameDetails.prefix,\n cacheName,\n _cacheNameDetails.suffix\n ].filter((value)=>value && value.length > 0).join(\"-\");\n};\nconst eachCacheNameDetail = (fn)=>{\n for (const key of Object.keys(_cacheNameDetails)){\n fn(key);\n }\n};\nconst cacheNames = {\n updateDetails: (details)=>{\n eachCacheNameDetail((key)=>{\n const detail = details[key];\n if (typeof detail === \"string\") {\n _cacheNameDetails[key] = detail;\n }\n });\n },\n getGoogleAnalyticsName: (userCacheName)=>{\n return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n },\n getPrecacheName: (userCacheName)=>{\n return userCacheName || _createCacheName(_cacheNameDetails.precache);\n },\n getPrefix: ()=>{\n return _cacheNameDetails.prefix;\n },\n getRuntimeName: (userCacheName)=>{\n return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n },\n getSuffix: ()=>{\n return _cacheNameDetails.suffix;\n }\n};\n\nclass Deferred {\n promise;\n resolve;\n reject;\n constructor(){\n this.promise = new Promise((resolve, reject)=>{\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\n\nfunction stripParams(fullURL, ignoreParams) {\n const strippedURL = new URL(fullURL);\n for (const param of ignoreParams){\n strippedURL.searchParams.delete(param);\n }\n return strippedURL.href;\n}\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n const strippedRequestURL = stripParams(request.url, ignoreParams);\n if (request.url === strippedRequestURL) {\n return cache.match(request, matchOptions);\n }\n const keysOptions = {\n ...matchOptions,\n ignoreSearch: true\n };\n const cacheKeys = await cache.keys(request, keysOptions);\n for (const cacheKey of cacheKeys){\n const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n if (strippedRequestURL === strippedCacheKeyURL) {\n return cache.match(cacheKey, matchOptions);\n }\n }\n return;\n}\n\nconst quotaErrorCallbacks = new Set();\n\nconst executeQuotaErrorCallbacks = async ()=>{\n if (true) {\n logger.log(`About to run ${quotaErrorCallbacks.size} callbacks to clean up caches.`);\n }\n for (const callback of quotaErrorCallbacks){\n await callback();\n if (true) {\n logger.log(callback, \"is complete.\");\n }\n }\n if (true) {\n logger.log(\"Finished running callbacks.\");\n }\n};\n\nfunction timeout(ms) {\n return new Promise((resolve)=>setTimeout(resolve, ms));\n}\n\nlet supportStatus;\nfunction canConstructResponseFromBodyStream() {\n if (supportStatus === undefined) {\n const testResponse = new Response(\"\");\n if (\"body\" in testResponse) {\n try {\n new Response(testResponse.body);\n supportStatus = true;\n } catch (error) {\n supportStatus = false;\n }\n }\n supportStatus = false;\n }\n return supportStatus;\n}\n\nconst SUBSTRING_TO_FIND = \"-precache-\";\nconst deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND)=>{\n const cacheNames = await self.caches.keys();\n const cacheNamesToDelete = cacheNames.filter((cacheName)=>{\n return cacheName.includes(substringToFind) && cacheName.includes(self.registration.scope) && cacheName !== currentPrecacheName;\n });\n await Promise.all(cacheNamesToDelete.map((cacheName)=>self.caches.delete(cacheName)));\n return cacheNamesToDelete;\n};\n\nconst cleanupOutdatedCaches = (cacheName)=>{\n self.addEventListener(\"activate\", (event)=>{\n event.waitUntil(deleteOutdatedCaches(cacheNames.getPrecacheName(cacheName)).then((cachesDeleted)=>{\n if (true) {\n if (cachesDeleted.length > 0) {\n logger.log(\"The following out-of-date precaches were cleaned up automatically:\", cachesDeleted);\n }\n }\n }));\n });\n};\n\nconst clientsClaim = ()=>{\n self.addEventListener(\"activate\", ()=>self.clients.claim());\n};\n\nconst waitUntil = (event, asyncFn)=>{\n const returnPromise = asyncFn();\n event.waitUntil(returnPromise);\n return returnPromise;\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vc2Vyd2lzdEA5LjAuMl90eXBlc2NyaXB0QDUuNC41L25vZGVfbW9kdWxlcy9zZXJ3aXN0L2Rpc3QvY2h1bmtzL3dhaXRVbnRpbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0Esd0JBQXdCLHlDQUF5QztBQUNqRTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsVUFBVSwrREFBK0QsdUJBQXVCLDJCQUEyQixzQkFBc0I7QUFDeEssS0FBSztBQUNMLHVCQUF1Qiw0Q0FBNEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLFVBQVUsc0JBQXNCLFdBQVcsR0FBRyxVQUFVLEdBQUcsU0FBUztBQUNyRyxLQUFLO0FBQ0wseUJBQXlCLDBEQUEwRDtBQUNuRjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsVUFBVTtBQUN0RCxpQ0FBaUMsVUFBVSxzQkFBc0IsV0FBVyxHQUFHLGFBQWEsT0FBTyxTQUFTLHNCQUFzQixhQUFhO0FBQy9JLEtBQUs7QUFDTCwwQkFBMEIscUZBQXFGO0FBQy9HO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0EsNkNBQTZDLFdBQVcsR0FBRyxhQUFhLEVBQUUsU0FBUyxtQ0FBbUMsa0JBQWtCO0FBQ3hJO0FBQ0EsaUNBQWlDLFVBQVUsc0JBQXNCLFdBQVcsR0FBRyxhQUFhLEVBQUUsU0FBUyx3Q0FBd0Msa0JBQWtCO0FBQ2pLLEtBQUs7QUFDTCwyQkFBMkIsNERBQTREO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixXQUFXLEdBQUcsVUFBVSxHQUFHLFNBQVMsd0JBQXdCLFVBQVUsMkJBQTJCLGVBQWU7QUFDbEksS0FBSztBQUNMLDRDQUE0QyxPQUFPO0FBQ25ELHFHQUFxRyxzQkFBc0I7QUFDM0gsS0FBSztBQUNMLGdEQUFnRCx5QkFBeUI7QUFDekU7QUFDQTtBQUNBO0FBQ0EsaUdBQWlHLFlBQVk7QUFDN0csS0FBSztBQUNMLDBDQUEwQyxvQkFBb0I7QUFDOUQ7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCw0QkFBNEI7QUFDeEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFxQyxHQUFHLENBQUk7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxNQUFxQyxHQUFHLENBQUk7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix5QkFBeUI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1QsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsOENBQThDLGdCQUFnQjtBQUM5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0MsbUNBQW1DLDBCQUEwQjtBQUM3RDtBQUNBO0FBQ0E7QUFDQSxZQUFZLElBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixJQUFxQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXNVIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy8ucG5wbS9zZXJ3aXN0QDkuMC4yX3R5cGVzY3JpcHRANS40LjUvbm9kZV9tb2R1bGVzL3Nlcndpc3QvZGlzdC9jaHVua3Mvd2FpdFVudGlsLmpzP2IyZGQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbWVzc2FnZXMgPSB7XG4gICAgXCJpbnZhbGlkLXZhbHVlXCI6ICh7IHBhcmFtTmFtZSwgdmFsaWRWYWx1ZURlc2NyaXB0aW9uLCB2YWx1ZSB9KT0+e1xuICAgICAgICBpZiAoIXBhcmFtTmFtZSB8fCAhdmFsaWRWYWx1ZURlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgdG8gJ2ludmFsaWQtdmFsdWUnIGVycm9yLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgVGhlICcke3BhcmFtTmFtZX0nIHBhcmFtZXRlciB3YXMgZ2l2ZW4gYSB2YWx1ZSB3aXRoIGFuIGAgKyBgdW5leHBlY3RlZCB2YWx1ZS4gJHt2YWxpZFZhbHVlRGVzY3JpcHRpb259IFJlY2VpdmVkIGEgdmFsdWUgb2YgYCArIGAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0uYDtcbiAgICB9LFxuICAgIFwibm90LWFuLWFycmF5XCI6ICh7IG1vZHVsZU5hbWUsIGNsYXNzTmFtZSwgZnVuY05hbWUsIHBhcmFtTmFtZSB9KT0+e1xuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIWNsYXNzTmFtZSB8fCAhZnVuY05hbWUgfHwgIXBhcmFtTmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGlucHV0IHRvICdub3QtYW4tYXJyYXknIGVycm9yLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgVGhlIHBhcmFtZXRlciAnJHtwYXJhbU5hbWV9JyBwYXNzZWQgaW50byBgICsgYCcke21vZHVsZU5hbWV9LiR7Y2xhc3NOYW1lfS4ke2Z1bmNOYW1lfSgpJyBtdXN0IGJlIGFuIGFycmF5LmA7XG4gICAgfSxcbiAgICBcImluY29ycmVjdC10eXBlXCI6ICh7IGV4cGVjdGVkVHlwZSwgcGFyYW1OYW1lLCBtb2R1bGVOYW1lLCBjbGFzc05hbWUsIGZ1bmNOYW1lIH0pPT57XG4gICAgICAgIGlmICghZXhwZWN0ZWRUeXBlIHx8ICFwYXJhbU5hbWUgfHwgIW1vZHVsZU5hbWUgfHwgIWZ1bmNOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgdG8gJ2luY29ycmVjdC10eXBlJyBlcnJvci5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGFzc05hbWVTdHIgPSBjbGFzc05hbWUgPyBgJHtjbGFzc05hbWV9LmAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYFRoZSBwYXJhbWV0ZXIgJyR7cGFyYW1OYW1lfScgcGFzc2VkIGludG8gYCArIGAnJHttb2R1bGVOYW1lfS4ke2NsYXNzTmFtZVN0cn1gICsgYCR7ZnVuY05hbWV9KCknIG11c3QgYmUgb2YgdHlwZSAke2V4cGVjdGVkVHlwZX0uYDtcbiAgICB9LFxuICAgIFwiaW5jb3JyZWN0LWNsYXNzXCI6ICh7IGV4cGVjdGVkQ2xhc3NOYW1lLCBwYXJhbU5hbWUsIG1vZHVsZU5hbWUsIGNsYXNzTmFtZSwgZnVuY05hbWUsIGlzUmV0dXJuVmFsdWVQcm9ibGVtIH0pPT57XG4gICAgICAgIGlmICghZXhwZWN0ZWRDbGFzc05hbWUgfHwgIW1vZHVsZU5hbWUgfHwgIWZ1bmNOYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgdG8gJ2luY29ycmVjdC1jbGFzcycgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xhc3NOYW1lU3RyID0gY2xhc3NOYW1lID8gYCR7Y2xhc3NOYW1lfS5gIDogXCJcIjtcbiAgICAgICAgaWYgKGlzUmV0dXJuVmFsdWVQcm9ibGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYFRoZSByZXR1cm4gdmFsdWUgZnJvbSAnJHttb2R1bGVOYW1lfS4ke2NsYXNzTmFtZVN0cn0ke2Z1bmNOYW1lfSgpJyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGNsYXNzICR7ZXhwZWN0ZWRDbGFzc05hbWV9LmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBUaGUgcGFyYW1ldGVyICcke3BhcmFtTmFtZX0nIHBhc3NlZCBpbnRvIGAgKyBgJyR7bW9kdWxlTmFtZX0uJHtjbGFzc05hbWVTdHJ9JHtmdW5jTmFtZX0oKScgYCArIGBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGNsYXNzICR7ZXhwZWN0ZWRDbGFzc05hbWV9LmA7XG4gICAgfSxcbiAgICBcIm1pc3NpbmctYS1tZXRob2RcIjogKHsgZXhwZWN0ZWRNZXRob2QsIHBhcmFtTmFtZSwgbW9kdWxlTmFtZSwgY2xhc3NOYW1lLCBmdW5jTmFtZSB9KT0+e1xuICAgICAgICBpZiAoIWV4cGVjdGVkTWV0aG9kIHx8ICFwYXJhbU5hbWUgfHwgIW1vZHVsZU5hbWUgfHwgIWNsYXNzTmFtZSB8fCAhZnVuY05hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnB1dCB0byAnbWlzc2luZy1hLW1ldGhvZCcgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke21vZHVsZU5hbWV9LiR7Y2xhc3NOYW1lfS4ke2Z1bmNOYW1lfSgpIGV4cGVjdGVkIHRoZSBgICsgYCcke3BhcmFtTmFtZX0nIHBhcmFtZXRlciB0byBleHBvc2UgYSAnJHtleHBlY3RlZE1ldGhvZH0nIG1ldGhvZC5gO1xuICAgIH0sXG4gICAgXCJhZGQtdG8tY2FjaGUtbGlzdC11bmV4cGVjdGVkLXR5cGVcIjogKHsgZW50cnkgfSk9PntcbiAgICAgICAgcmV0dXJuIGBBbiB1bmV4cGVjdGVkIGVudHJ5IHdhcyBwYXNzZWQgdG8gJ3Nlcndpc3QuU2Vyd2lzdC5hZGRUb1ByZWNhY2hlTGlzdCgpJyBUaGUgZW50cnkgJyR7SlNPTi5zdHJpbmdpZnkoZW50cnkpfScgaXNuJ3Qgc3VwcG9ydGVkLiBZb3UgbXVzdCBzdXBwbHkgYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMsIG9iamVjdHMgd2l0aCBhIHVybCBwcm9wZXJ0eSBvciBSZXF1ZXN0IG9iamVjdHMuYDtcbiAgICB9LFxuICAgIFwiYWRkLXRvLWNhY2hlLWxpc3QtY29uZmxpY3RpbmctZW50cmllc1wiOiAoeyBmaXJzdEVudHJ5LCBzZWNvbmRFbnRyeSB9KT0+e1xuICAgICAgICBpZiAoIWZpcnN0RW50cnkgfHwgIXNlY29uZEVudHJ5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlucHV0IHRvIFwiICsgYCdhZGQtdG8tY2FjaGUtbGlzdC1kdXBsaWNhdGUtZW50cmllcycgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBUd28gb2YgdGhlIGVudHJpZXMgcGFzc2VkIHRvICdzZXJ3aXN0LlNlcndpc3QuYWRkVG9QcmVjYWNoZUxpc3QoKScgaGFkIHRoZSBVUkwgJHtmaXJzdEVudHJ5fSBidXQgZGlmZmVyZW50IHJldmlzaW9uIGRldGFpbHMuIFNlcndpc3QgaXMgdW5hYmxlIHRvIGNhY2hlIGFuZCB2ZXJzaW9uIHRoZSBhc3NldCBjb3JyZWN0bHkuIFBsZWFzZSByZW1vdmUgb25lIG9mIHRoZSBlbnRyaWVzLmA7XG4gICAgfSxcbiAgICBcInBsdWdpbi1lcnJvci1yZXF1ZXN0LXdpbGwtZmV0Y2hcIjogKHsgdGhyb3duRXJyb3JNZXNzYWdlIH0pPT57XG4gICAgICAgIGlmICghdGhyb3duRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlucHV0IHRvIFwiICsgYCdwbHVnaW4tZXJyb3ItcmVxdWVzdC13aWxsLWZldGNoJywgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBBbiBlcnJvciB3YXMgdGhyb3duIGJ5IGEgcGx1Z2luJ3MgJ3JlcXVlc3RXaWxsRmV0Y2goKScgbWV0aG9kLiBUaGUgdGhyb3duIGVycm9yIG1lc3NhZ2Ugd2FzOiAnJHt0aHJvd25FcnJvck1lc3NhZ2V9Jy5gO1xuICAgIH0sXG4gICAgXCJpbnZhbGlkLWNhY2hlLW5hbWVcIjogKHsgY2FjaGVOYW1lSWQsIHZhbHVlIH0pPT57XG4gICAgICAgIGlmICghY2FjaGVOYW1lSWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSAnY2FjaGVOYW1lSWQnIGZvciBlcnJvciAnaW52YWxpZC1jYWNoZS1uYW1lJ2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgWW91IG11c3QgcHJvdmlkZSBhIG5hbWUgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZvciBzZXRDYWNoZURldGFpbHMoeyR7Y2FjaGVOYW1lSWR9OiAnLi4uJ30pLiBSZWNlaXZlZCBhIHZhbHVlIG9mICcke0pTT04uc3RyaW5naWZ5KHZhbHVlKX0nYDtcbiAgICB9LFxuICAgIFwidW5yZWdpc3Rlci1yb3V0ZS1idXQtbm90LWZvdW5kLXdpdGgtbWV0aG9kXCI6ICh7IG1ldGhvZCB9KT0+e1xuICAgICAgICBpZiAoIW1ldGhvZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBpbnB1dCB0byBcIiArIGAndW5yZWdpc3Rlci1yb3V0ZS1idXQtbm90LWZvdW5kLXdpdGgtbWV0aG9kJyBlcnJvci5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYFRoZSByb3V0ZSB5b3UncmUgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgd2FzIG5vdCAgcHJldmlvdXNseSByZWdpc3RlcmVkIGZvciB0aGUgbWV0aG9kIHR5cGUgJyR7bWV0aG9kfScuYDtcbiAgICB9LFxuICAgIFwidW5yZWdpc3Rlci1yb3V0ZS1yb3V0ZS1ub3QtcmVnaXN0ZXJlZFwiOiAoKT0+e1xuICAgICAgICByZXR1cm4gYFRoZSByb3V0ZSB5b3UncmUgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgd2FzIG5vdCBwcmV2aW91c2x5IGAgKyBcInJlZ2lzdGVyZWQuXCI7XG4gICAgfSxcbiAgICBcInF1ZXVlLXJlcGxheS1mYWlsZWRcIjogKHsgbmFtZSB9KT0+e1xuICAgICAgICByZXR1cm4gYFJlcGxheWluZyB0aGUgYmFja2dyb3VuZCBzeW5jIHF1ZXVlICcke25hbWV9JyBmYWlsZWQuYDtcbiAgICB9LFxuICAgIFwiZHVwbGljYXRlLXF1ZXVlLW5hbWVcIjogKHsgbmFtZSB9KT0+e1xuICAgICAgICByZXR1cm4gYFRoZSBxdWV1ZSBuYW1lICcke25hbWV9JyBpcyBhbHJlYWR5IGJlaW5nIHVzZWQuIEFsbCBpbnN0YW5jZXMgb2YgJ3Nlcndpc3QuQmFja2dyb3VuZFN5bmNRdWV1ZScgbXVzdCBiZSBnaXZlbiB1bmlxdWUgbmFtZXMuYDtcbiAgICB9LFxuICAgIFwiZXhwaXJlZC10ZXN0LXdpdGhvdXQtbWF4LWFnZVwiOiAoeyBtZXRob2ROYW1lLCBwYXJhbU5hbWUgfSk9PntcbiAgICAgICAgcmV0dXJuIGBUaGUgJyR7bWV0aG9kTmFtZX0oKScgbWV0aG9kIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgYCArIGAnJHtwYXJhbU5hbWV9JyBpcyB1c2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5gO1xuICAgIH0sXG4gICAgXCJ1bnN1cHBvcnRlZC1yb3V0ZS10eXBlXCI6ICh7IG1vZHVsZU5hbWUsIGNsYXNzTmFtZSwgZnVuY05hbWUsIHBhcmFtTmFtZSB9KT0+e1xuICAgICAgICByZXR1cm4gYFRoZSBzdXBwbGllZCAnJHtwYXJhbU5hbWV9JyBwYXJhbWV0ZXIgd2FzIGFuIHVuc3VwcG9ydGVkIHR5cGUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcyBmb3IgJHttb2R1bGVOYW1lfS4ke2NsYXNzTmFtZX0uJHtmdW5jTmFtZX0gZm9yIHZhbGlkIGlucHV0IHR5cGVzLmA7XG4gICAgfSxcbiAgICBcIm5vdC1hcnJheS1vZi1jbGFzc1wiOiAoeyB2YWx1ZSwgZXhwZWN0ZWRDbGFzcywgbW9kdWxlTmFtZSwgY2xhc3NOYW1lLCBmdW5jTmFtZSwgcGFyYW1OYW1lIH0pPT57XG4gICAgICAgIHJldHVybiBgVGhlIHN1cHBsaWVkICcke3BhcmFtTmFtZX0nIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFycmF5IG9mICcke2V4cGVjdGVkQ2xhc3N9JyBvYmplY3RzLiBSZWNlaXZlZCAnJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9LCcuIFBsZWFzZSBjaGVjayB0aGUgY2FsbCB0byAke21vZHVsZU5hbWV9LiR7Y2xhc3NOYW1lfS4ke2Z1bmNOYW1lfSgpIHRvIGZpeCB0aGUgaXNzdWUuYDtcbiAgICB9LFxuICAgIFwibWF4LWVudHJpZXMtb3ItYWdlLXJlcXVpcmVkXCI6ICh7IG1vZHVsZU5hbWUsIGNsYXNzTmFtZSwgZnVuY05hbWUgfSk9PntcbiAgICAgICAgcmV0dXJuIGBZb3UgbXVzdCBkZWZpbmUgZWl0aGVyICdjb25maWcubWF4RW50cmllcycgb3IgJ2NvbmZpZy5tYXhBZ2VTZWNvbmRzJyBpbiAnJHttb2R1bGVOYW1lfS4ke2NsYXNzTmFtZX0uJHtmdW5jTmFtZX0nYDtcbiAgICB9LFxuICAgIFwic3RhdHVzZXMtb3ItaGVhZGVycy1yZXF1aXJlZFwiOiAoeyBtb2R1bGVOYW1lLCBjbGFzc05hbWUsIGZ1bmNOYW1lIH0pPT57XG4gICAgICAgIHJldHVybiBgWW91IG11c3QgZGVmaW5lIGVpdGhlciAnY29uZmlnLnN0YXR1c2VzJyBvciAnY29uZmlnLmhlYWRlcnMnIGluICcke21vZHVsZU5hbWV9LiR7Y2xhc3NOYW1lfS4ke2Z1bmNOYW1lfSdgO1xuICAgIH0sXG4gICAgXCJpbnZhbGlkLXN0cmluZ1wiOiAoeyBtb2R1bGVOYW1lLCBmdW5jTmFtZSwgcGFyYW1OYW1lIH0pPT57XG4gICAgICAgIGlmICghcGFyYW1OYW1lIHx8ICFtb2R1bGVOYW1lIHx8ICFmdW5jTmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGlucHV0IHRvICdpbnZhbGlkLXN0cmluZycgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBXaGVuIHVzaW5nIHN0cmluZ3MsIHRoZSAnJHtwYXJhbU5hbWV9JyBwYXJhbWV0ZXIgbXVzdCBzdGFydCB3aXRoICdodHRwJyAoZm9yIGNyb3NzLW9yaWdpbiBtYXRjaGVzKSBvciAnLycgKGZvciBzYW1lLW9yaWdpbiBtYXRjaGVzKS4gUGxlYXNlIHNlZSB0aGUgZG9jcyBmb3IgJHttb2R1bGVOYW1lfS4ke2Z1bmNOYW1lfSgpIGZvciBtb3JlIGluZm8uYDtcbiAgICB9LFxuICAgIFwiY2hhbm5lbC1uYW1lLXJlcXVpcmVkXCI6ICgpPT57XG4gICAgICAgIHJldHVybiBcIllvdSBtdXN0IHByb3ZpZGUgYSBjaGFubmVsTmFtZSB0byBjb25zdHJ1Y3QgYSBcIiArIFwiQnJvYWRjYXN0Q2FjaGVVcGRhdGUgaW5zdGFuY2UuXCI7XG4gICAgfSxcbiAgICBcImludmFsaWQtcmVzcG9uc2VzLWFyZS1zYW1lLWFyZ3NcIjogKCk9PntcbiAgICAgICAgcmV0dXJuIFwiVGhlIGFyZ3VtZW50cyBwYXNzZWQgaW50byByZXNwb25zZXNBcmVTYW1lKCkgYXBwZWFyIHRvIGJlIFwiICsgXCJpbnZhbGlkLiBQbGVhc2UgZW5zdXJlIHZhbGlkIFJlc3BvbnNlcyBhcmUgdXNlZC5cIjtcbiAgICB9LFxuICAgIFwiZXhwaXJlLWN1c3RvbS1jYWNoZXMtb25seVwiOiAoKT0+e1xuICAgICAgICByZXR1cm4gYFlvdSBtdXN0IHByb3ZpZGUgYSAnY2FjaGVOYW1lJyBwcm9wZXJ0eSB3aGVuIHVzaW5nIHRoZSBgICsgXCJleHBpcmF0aW9uIHBsdWdpbiB3aXRoIGEgcnVudGltZSBjYWNoaW5nIHN0cmF0ZWd5LlwiO1xuICAgIH0sXG4gICAgXCJ1bml0LW11c3QtYmUtYnl0ZXNcIjogKHsgbm9ybWFsaXplZFJhbmdlSGVhZGVyIH0pPT57XG4gICAgICAgIGlmICghbm9ybWFsaXplZFJhbmdlSGVhZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgdG8gJ3VuaXQtbXVzdC1iZS1ieXRlcycgZXJyb3IuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBUaGUgJ3VuaXQnIHBvcnRpb24gb2YgdGhlIFJhbmdlIGhlYWRlciBtdXN0IGJlIHNldCB0byAnYnl0ZXMnLiBUaGUgUmFuZ2UgaGVhZGVyIHByb3ZpZGVkIHdhcyBcIiR7bm9ybWFsaXplZFJhbmdlSGVhZGVyfVwiYDtcbiAgICB9LFxuICAgIFwic2luZ2xlLXJhbmdlLW9ubHlcIjogKHsgbm9ybWFsaXplZFJhbmdlSGVhZGVyIH0pPT57XG4gICAgICAgIGlmICghbm9ybWFsaXplZFJhbmdlSGVhZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgaW5wdXQgdG8gJ3NpbmdsZS1yYW5nZS1vbmx5JyBlcnJvci5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYE11bHRpcGxlIHJhbmdlcyBhcmUgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBhICBzaW5nbGUgc3RhcnQgdmFsdWUsIGFuZCBvcHRpb25hbCBlbmQgdmFsdWUuIFRoZSBSYW5nZSBoZWFkZXIgcHJvdmlkZWQgd2FzIFwiJHtub3JtYWxpemVkUmFuZ2VIZWFkZXJ9XCJgO1xuICAgIH0sXG4gICAgXCJpbnZhbGlkLXJhbmdlLXZhbHVlc1wiOiAoeyBub3JtYWxpemVkUmFuZ2VIZWFkZXIgfSk9PntcbiAgICAgICAgaWYgKCFub3JtYWxpemVkUmFuZ2VIZWFkZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBpbnB1dCB0byAnaW52YWxpZC1yYW5nZS12YWx1ZXMnIGVycm9yLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgVGhlIFJhbmdlIGhlYWRlciBpcyBtaXNzaW5nIGJvdGggc3RhcnQgYW5kIGVuZCB2YWx1ZXMuIEF0IGxlYXN0IG9uZSBvZiB0aG9zZSB2YWx1ZXMgaXMgbmVlZGVkLiBUaGUgUmFuZ2UgaGVhZGVyIHByb3ZpZGVkIHdhcyBcIiR7bm9ybWFsaXplZFJhbmdlSGVhZGVyfVwiYDtcbiAgICB9LFxuICAgIFwibm8tcmFuZ2UtaGVhZGVyXCI6ICgpPT57XG4gICAgICAgIHJldHVybiBcIk5vIFJhbmdlIGhlYWRlciB3YXMgZm91bmQgaW4gdGhlIFJlcXVlc3QgcHJvdmlkZWQuXCI7XG4gICAgfSxcbiAgICBcInJhbmdlLW5vdC1zYXRpc2ZpYWJsZVwiOiAoeyBzaXplLCBzdGFydCwgZW5kIH0pPT57XG4gICAgICAgIHJldHVybiBgVGhlIHN0YXJ0ICgke3N0YXJ0fSkgYW5kIGVuZCAoJHtlbmR9KSB2YWx1ZXMgaW4gdGhlIFJhbmdlIGFyZSBgICsgYG5vdCBzYXRpc2ZpYWJsZSBieSB0aGUgY2FjaGVkIHJlc3BvbnNlLCB3aGljaCBpcyAke3NpemV9IGJ5dGVzLmA7XG4gICAgfSxcbiAgICBcImF0dGVtcHQtdG8tY2FjaGUtbm9uLWdldC1yZXF1ZXN0XCI6ICh7IHVybCwgbWV0aG9kIH0pPT57XG4gICAgICAgIHJldHVybiBgVW5hYmxlIHRvIGNhY2hlICcke3VybH0nIGJlY2F1c2UgaXQgaXMgYSAnJHttZXRob2R9JyByZXF1ZXN0IGFuZCBvbmx5ICdHRVQnIHJlcXVlc3RzIGNhbiBiZSBjYWNoZWQuYDtcbiAgICB9LFxuICAgIFwiY2FjaGUtcHV0LXdpdGgtbm8tcmVzcG9uc2VcIjogKHsgdXJsIH0pPT57XG4gICAgICAgIHJldHVybiBgVGhlcmUgd2FzIGFuIGF0dGVtcHQgdG8gY2FjaGUgJyR7dXJsfScgYnV0IHRoZSByZXNwb25zZSB3YXMgbm90IGRlZmluZWQuYDtcbiAgICB9LFxuICAgIFwibm8tcmVzcG9uc2VcIjogKHsgdXJsLCBlcnJvciB9KT0+e1xuICAgICAgICBsZXQgbWVzc2FnZSA9IGBUaGUgc3RyYXRlZ3kgY291bGQgbm90IGdlbmVyYXRlIGEgcmVzcG9uc2UgZm9yICcke3VybH0nLmA7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgbWVzc2FnZSArPSBgIFRoZSB1bmRlcmx5aW5nIGVycm9yIGlzICR7ZXJyb3J9LmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSxcbiAgICBcImJhZC1wcmVjYWNoaW5nLXJlc3BvbnNlXCI6ICh7IHVybCwgc3RhdHVzIH0pPT57XG4gICAgICAgIHJldHVybiBgVGhlIHByZWNhY2hpbmcgcmVxdWVzdCBmb3IgJyR7dXJsfScgZmFpbGVkJHtzdGF0dXMgPyBgIHdpdGggYW4gSFRUUCBzdGF0dXMgb2YgJHtzdGF0dXN9LmAgOiBcIi5cIn1gO1xuICAgIH0sXG4gICAgXCJub24tcHJlY2FjaGVkLXVybFwiOiAoeyB1cmwgfSk9PntcbiAgICAgICAgcmV0dXJuIGAnY3JlYXRlSGFuZGxlckJvdW5kVG9VUkwoXCIke3VybH1cIiknIHdhcyBjYWxsZWQsIGJ1dCB0aGF0IFVSTCBpcyBub3QgcHJlY2FjaGVkLiBQbGVhc2UgcGFzcyBpbiBhIFVSTCB0aGF0IGlzIHByZWNhY2hlZCBpbnN0ZWFkLmA7XG4gICAgfSxcbiAgICBcImFkZC10by1jYWNoZS1saXN0LWNvbmZsaWN0aW5nLWludGVncml0aWVzXCI6ICh7IHVybCB9KT0+e1xuICAgICAgICByZXR1cm4gYFR3byBvZiB0aGUgZW50cmllcyBwYXNzZWQgdG8gJ3Nlcndpc3QuU2Vyd2lzdC5hZGRUb1ByZWNhY2hlTGlzdCgpJyBoYWQgdGhlIFVSTCAke3VybH0gd2l0aCBkaWZmZXJlbnQgaW50ZWdyaXR5IHZhbHVlcy4gUGxlYXNlIHJlbW92ZSBvbmUgb2YgdGhlbS5gO1xuICAgIH0sXG4gICAgXCJtaXNzaW5nLXByZWNhY2hlLWVudHJ5XCI6ICh7IGNhY2hlTmFtZSwgdXJsIH0pPT57XG4gICAgICAgIHJldHVybiBgVW5hYmxlIHRvIGZpbmQgYSBwcmVjYWNoZWQgcmVzcG9uc2UgaW4gJHtjYWNoZU5hbWV9IGZvciAke3VybH0uYDtcbiAgICB9LFxuICAgIFwiY3Jvc3Mtb3JpZ2luLWNvcHktcmVzcG9uc2VcIjogKHsgb3JpZ2luIH0pPT57XG4gICAgICAgIHJldHVybiBgJ0BzZXJ3aXN0L2NvcmUuY29weVJlc3BvbnNlKCknIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBzYW1lLW9yaWdpbiByZXNwb25zZXMuIEl0IHdhcyBwYXNzZWQgYSByZXNwb25zZSB3aXRoIG9yaWdpbiAke29yaWdpbn0uYDtcbiAgICB9LFxuICAgIFwib3BhcXVlLXN0cmVhbXMtc291cmNlXCI6ICh7IHR5cGUgfSk9PntcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBPbmUgb2YgdGhlICdAc2Vyd2lzdC9zdHJlYW1zJyBzb3VyY2VzIHJlc3VsdGVkIGluIGFuICcke3R5cGV9JyByZXNwb25zZS5gO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJvcGFxdWVyZWRpcmVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7bWVzc2FnZX0gUGxlYXNlIGRvIG5vdCB1c2UgYSBuYXZpZ2F0aW9uIHJlcXVlc3QgdGhhdCByZXN1bHRzIGluIGEgcmVkaXJlY3QgYXMgYSBzb3VyY2UuYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7bWVzc2FnZX0gUGxlYXNlIGVuc3VyZSB5b3VyIHNvdXJjZXMgYXJlIENPUlMtZW5hYmxlZC5gO1xuICAgIH1cbn07XG5cbmNvbnN0IGZhbGxiYWNrID0gKGNvZGUsIC4uLmFyZ3MpPT57XG4gICAgbGV0IG1zZyA9IGNvZGU7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBtc2cgKz0gYCA6OiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWA7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG59O1xuY29uc3QgZ2VuZXJhdG9yRnVuY3Rpb24gPSAoY29kZSwgZGV0YWlscyA9IHt9KT0+e1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tjb2RlXTtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBtZXNzYWdlIGZvciBjb2RlICcke2NvZGV9Jy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2UoZGV0YWlscyk7XG59O1xuY29uc3QgbWVzc2FnZUdlbmVyYXRvciA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZhbGxiYWNrIDogZ2VuZXJhdG9yRnVuY3Rpb247XG5cbmNsYXNzIFNlcndpc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBkZXRhaWxzO1xuICAgIGNvbnN0cnVjdG9yKGVycm9yQ29kZSwgZGV0YWlscyl7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlR2VuZXJhdG9yKGVycm9yQ29kZSwgZGV0YWlscyk7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBlcnJvckNvZGU7XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgfVxufVxuXG5jb25zdCBpc0FycmF5ID0gKHZhbHVlLCBkZXRhaWxzKT0+e1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcIm5vdC1hbi1hcnJheVwiLCBkZXRhaWxzKTtcbiAgICB9XG59O1xuY29uc3QgaGFzTWV0aG9kID0gKG9iamVjdCwgZXhwZWN0ZWRNZXRob2QsIGRldGFpbHMpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBvYmplY3RbZXhwZWN0ZWRNZXRob2RdO1xuICAgIGlmICh0eXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgZGV0YWlscy5leHBlY3RlZE1ldGhvZCA9IGV4cGVjdGVkTWV0aG9kO1xuICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibWlzc2luZy1hLW1ldGhvZFwiLCBkZXRhaWxzKTtcbiAgICB9XG59O1xuY29uc3QgaXNUeXBlID0gKG9iamVjdCwgZXhwZWN0ZWRUeXBlLCBkZXRhaWxzKT0+e1xuICAgIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgZGV0YWlscy5leHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7XG4gICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJpbmNvcnJlY3QtdHlwZVwiLCBkZXRhaWxzKTtcbiAgICB9XG59O1xuY29uc3QgaXNJbnN0YW5jZSA9IChvYmplY3QsIGV4cGVjdGVkQ2xhc3MsIGRldGFpbHMpPT57XG4gICAgaWYgKCEob2JqZWN0IGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgZGV0YWlscy5leHBlY3RlZENsYXNzTmFtZSA9IGV4cGVjdGVkQ2xhc3MubmFtZTtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImluY29ycmVjdC1jbGFzc1wiLCBkZXRhaWxzKTtcbiAgICB9XG59O1xuY29uc3QgaXNPbmVPZiA9ICh2YWx1ZSwgdmFsaWRWYWx1ZXMsIGRldGFpbHMpPT57XG4gICAgaWYgKCF2YWxpZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgZGV0YWlscy52YWxpZFZhbHVlRGVzY3JpcHRpb24gPSBgVmFsaWQgdmFsdWVzIGFyZSAke0pTT04uc3RyaW5naWZ5KHZhbGlkVmFsdWVzKX0uYDtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImludmFsaWQtdmFsdWVcIiwgZGV0YWlscyk7XG4gICAgfVxufTtcbmNvbnN0IGlzQXJyYXlPZkNsYXNzID0gKHZhbHVlLCBleHBlY3RlZENsYXNzLCBkZXRhaWxzKT0+e1xuICAgIGNvbnN0IGVycm9yID0gbmV3IFNlcndpc3RFcnJvcihcIm5vdC1hcnJheS1vZi1jbGFzc1wiLCBkZXRhaWxzKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpe1xuICAgICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufTtcbmNvbnN0IGZpbmFsQXNzZXJ0RXhwb3J0cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IG51bGwgOiB7XG4gICAgaGFzTWV0aG9kLFxuICAgIGlzQXJyYXksXG4gICAgaXNJbnN0YW5jZSxcbiAgICBpc09uZU9mLFxuICAgIGlzVHlwZSxcbiAgICBpc0FycmF5T2ZDbGFzc1xufTtcblxuY29uc3QgbG9nZ2VyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gbnVsbCA6ICgoKT0+e1xuICAgIGlmICghKFwiX19XQl9ESVNBQkxFX0RFVl9MT0dTXCIgaW4gZ2xvYmFsVGhpcykpIHtcbiAgICAgICAgc2VsZi5fX1dCX0RJU0FCTEVfREVWX0xPR1MgPSBmYWxzZTtcbiAgICB9XG4gICAgbGV0IGluR3JvdXAgPSBmYWxzZTtcbiAgICBjb25zdCBtZXRob2RUb0NvbG9yTWFwID0ge1xuICAgICAgICBkZWJ1ZzogXCIjN2Y4YzhkXCIsXG4gICAgICAgIGxvZzogXCIjMmVjYzcxXCIsXG4gICAgICAgIHdhcm46IFwiI2YzOWMxMlwiLFxuICAgICAgICBlcnJvcjogXCIjYzAzOTJiXCIsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBcIiMzNDk4ZGJcIixcbiAgICAgICAgZ3JvdXBFbmQ6IG51bGxcbiAgICB9O1xuICAgIGNvbnN0IHByaW50ID0gKG1ldGhvZCwgYXJncyk9PntcbiAgICAgICAgaWYgKHNlbGYuX19XQl9ESVNBQkxFX0RFVl9MT0dTKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJncm91cENvbGxhcHNlZFwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiAvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZVttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHlsZXMgPSBbXG4gICAgICAgICAgICBgYmFja2dyb3VuZDogJHttZXRob2RUb0NvbG9yTWFwW21ldGhvZF19YCxcbiAgICAgICAgICAgIFwiYm9yZGVyLXJhZGl1czogMC41ZW1cIixcbiAgICAgICAgICAgIFwiY29sb3I6IHdoaXRlXCIsXG4gICAgICAgICAgICBcImZvbnQtd2VpZ2h0OiBib2xkXCIsXG4gICAgICAgICAgICBcInBhZGRpbmc6IDJweCAwLjVlbVwiXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGxvZ1ByZWZpeCA9IGluR3JvdXAgPyBbXSA6IFtcbiAgICAgICAgICAgIFwiJWNzZXJ3aXN0XCIsXG4gICAgICAgICAgICBzdHlsZXMuam9pbihcIjtcIilcbiAgICAgICAgXTtcbiAgICAgICAgY29uc29sZVttZXRob2RdKC4uLmxvZ1ByZWZpeCwgLi4uYXJncyk7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiZ3JvdXBDb2xsYXBzZWRcIikge1xuICAgICAgICAgICAgaW5Hcm91cCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJncm91cEVuZFwiKSB7XG4gICAgICAgICAgICBpbkdyb3VwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGxvZ2dlck1ldGhvZHMgPSBPYmplY3Qua2V5cyhtZXRob2RUb0NvbG9yTWFwKTtcbiAgICByZXR1cm4gbG9nZ2VyTWV0aG9kcy5yZWR1Y2UoKGFwaSwgbWV0aG9kKT0+e1xuICAgICAgICBhcGlbbWV0aG9kXSA9ICguLi5hcmdzKT0+e1xuICAgICAgICAgICAgcHJpbnQobWV0aG9kLCBhcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LCB7fSk7XG59KSgpO1xuXG5jb25zdCBnZXRGcmllbmRseVVSTCA9ICh1cmwpPT57XG4gICAgY29uc3QgdXJsT2JqID0gbmV3IFVSTChTdHJpbmcodXJsKSwgbG9jYXRpb24uaHJlZik7XG4gICAgcmV0dXJuIHVybE9iai5ocmVmLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7bG9jYXRpb24ub3JpZ2lufWApLCBcIlwiKTtcbn07XG5cbmNvbnN0IF9jYWNoZU5hbWVEZXRhaWxzID0ge1xuICAgIGdvb2dsZUFuYWx5dGljczogXCJnb29nbGVBbmFseXRpY3NcIixcbiAgICBwcmVjYWNoZTogXCJwcmVjYWNoZS12MlwiLFxuICAgIHByZWZpeDogXCJzZXJ3aXN0XCIsXG4gICAgcnVudGltZTogXCJydW50aW1lXCIsXG4gICAgc3VmZml4OiB0eXBlb2YgcmVnaXN0cmF0aW9uICE9PSBcInVuZGVmaW5lZFwiID8gcmVnaXN0cmF0aW9uLnNjb3BlIDogXCJcIlxufTtcbmNvbnN0IF9jcmVhdGVDYWNoZU5hbWUgPSAoY2FjaGVOYW1lKT0+e1xuICAgIHJldHVybiBbXG4gICAgICAgIF9jYWNoZU5hbWVEZXRhaWxzLnByZWZpeCxcbiAgICAgICAgY2FjaGVOYW1lLFxuICAgICAgICBfY2FjaGVOYW1lRGV0YWlscy5zdWZmaXhcbiAgICBdLmZpbHRlcigodmFsdWUpPT52YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKS5qb2luKFwiLVwiKTtcbn07XG5jb25zdCBlYWNoQ2FjaGVOYW1lRGV0YWlsID0gKGZuKT0+e1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKF9jYWNoZU5hbWVEZXRhaWxzKSl7XG4gICAgICAgIGZuKGtleSk7XG4gICAgfVxufTtcbmNvbnN0IGNhY2hlTmFtZXMgPSB7XG4gICAgdXBkYXRlRGV0YWlsczogKGRldGFpbHMpPT57XG4gICAgICAgIGVhY2hDYWNoZU5hbWVEZXRhaWwoKGtleSk9PntcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IGRldGFpbHNba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGV0YWlsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgX2NhY2hlTmFtZURldGFpbHNba2V5XSA9IGRldGFpbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRHb29nbGVBbmFseXRpY3NOYW1lOiAodXNlckNhY2hlTmFtZSk9PntcbiAgICAgICAgcmV0dXJuIHVzZXJDYWNoZU5hbWUgfHwgX2NyZWF0ZUNhY2hlTmFtZShfY2FjaGVOYW1lRGV0YWlscy5nb29nbGVBbmFseXRpY3MpO1xuICAgIH0sXG4gICAgZ2V0UHJlY2FjaGVOYW1lOiAodXNlckNhY2hlTmFtZSk9PntcbiAgICAgICAgcmV0dXJuIHVzZXJDYWNoZU5hbWUgfHwgX2NyZWF0ZUNhY2hlTmFtZShfY2FjaGVOYW1lRGV0YWlscy5wcmVjYWNoZSk7XG4gICAgfSxcbiAgICBnZXRQcmVmaXg6ICgpPT57XG4gICAgICAgIHJldHVybiBfY2FjaGVOYW1lRGV0YWlscy5wcmVmaXg7XG4gICAgfSxcbiAgICBnZXRSdW50aW1lTmFtZTogKHVzZXJDYWNoZU5hbWUpPT57XG4gICAgICAgIHJldHVybiB1c2VyQ2FjaGVOYW1lIHx8IF9jcmVhdGVDYWNoZU5hbWUoX2NhY2hlTmFtZURldGFpbHMucnVudGltZSk7XG4gICAgfSxcbiAgICBnZXRTdWZmaXg6ICgpPT57XG4gICAgICAgIHJldHVybiBfY2FjaGVOYW1lRGV0YWlscy5zdWZmaXg7XG4gICAgfVxufTtcblxuY2xhc3MgRGVmZXJyZWQge1xuICAgIHByb21pc2U7XG4gICAgcmVzb2x2ZTtcbiAgICByZWplY3Q7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLnJlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdHJpcFBhcmFtcyhmdWxsVVJMLCBpZ25vcmVQYXJhbXMpIHtcbiAgICBjb25zdCBzdHJpcHBlZFVSTCA9IG5ldyBVUkwoZnVsbFVSTCk7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBpZ25vcmVQYXJhbXMpe1xuICAgICAgICBzdHJpcHBlZFVSTC5zZWFyY2hQYXJhbXMuZGVsZXRlKHBhcmFtKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmlwcGVkVVJMLmhyZWY7XG59XG5hc3luYyBmdW5jdGlvbiBjYWNoZU1hdGNoSWdub3JlUGFyYW1zKGNhY2hlLCByZXF1ZXN0LCBpZ25vcmVQYXJhbXMsIG1hdGNoT3B0aW9ucykge1xuICAgIGNvbnN0IHN0cmlwcGVkUmVxdWVzdFVSTCA9IHN0cmlwUGFyYW1zKHJlcXVlc3QudXJsLCBpZ25vcmVQYXJhbXMpO1xuICAgIGlmIChyZXF1ZXN0LnVybCA9PT0gc3RyaXBwZWRSZXF1ZXN0VVJMKSB7XG4gICAgICAgIHJldHVybiBjYWNoZS5tYXRjaChyZXF1ZXN0LCBtYXRjaE9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCBrZXlzT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ubWF0Y2hPcHRpb25zLFxuICAgICAgICBpZ25vcmVTZWFyY2g6IHRydWVcbiAgICB9O1xuICAgIGNvbnN0IGNhY2hlS2V5cyA9IGF3YWl0IGNhY2hlLmtleXMocmVxdWVzdCwga2V5c09wdGlvbnMpO1xuICAgIGZvciAoY29uc3QgY2FjaGVLZXkgb2YgY2FjaGVLZXlzKXtcbiAgICAgICAgY29uc3Qgc3RyaXBwZWRDYWNoZUtleVVSTCA9IHN0cmlwUGFyYW1zKGNhY2hlS2V5LnVybCwgaWdub3JlUGFyYW1zKTtcbiAgICAgICAgaWYgKHN0cmlwcGVkUmVxdWVzdFVSTCA9PT0gc3RyaXBwZWRDYWNoZUtleVVSTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLm1hdGNoKGNhY2hlS2V5LCBtYXRjaE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbn1cblxuY29uc3QgcXVvdGFFcnJvckNhbGxiYWNrcyA9IG5ldyBTZXQoKTtcblxuY29uc3QgZXhlY3V0ZVF1b3RhRXJyb3JDYWxsYmFja3MgPSBhc3luYyAoKT0+e1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgbG9nZ2VyLmxvZyhgQWJvdXQgdG8gcnVuICR7cXVvdGFFcnJvckNhbGxiYWNrcy5zaXplfSBjYWxsYmFja3MgdG8gY2xlYW4gdXAgY2FjaGVzLmApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIHF1b3RhRXJyb3JDYWxsYmFja3Mpe1xuICAgICAgICBhd2FpdCBjYWxsYmFjaygpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGNhbGxiYWNrLCBcImlzIGNvbXBsZXRlLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGxvZ2dlci5sb2coXCJGaW5pc2hlZCBydW5uaW5nIGNhbGxiYWNrcy5cIik7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gdGltZW91dChtcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxubGV0IHN1cHBvcnRTdGF0dXM7XG5mdW5jdGlvbiBjYW5Db25zdHJ1Y3RSZXNwb25zZUZyb21Cb2R5U3RyZWFtKCkge1xuICAgIGlmIChzdXBwb3J0U3RhdHVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGVzdFJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFwiXCIpO1xuICAgICAgICBpZiAoXCJib2R5XCIgaW4gdGVzdFJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG5ldyBSZXNwb25zZSh0ZXN0UmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICAgICAgc3VwcG9ydFN0YXR1cyA9IHRydWU7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHN1cHBvcnRTdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdXBwb3J0U3RhdHVzID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBzdXBwb3J0U3RhdHVzO1xufVxuXG5jb25zdCBTVUJTVFJJTkdfVE9fRklORCA9IFwiLXByZWNhY2hlLVwiO1xuY29uc3QgZGVsZXRlT3V0ZGF0ZWRDYWNoZXMgPSBhc3luYyAoY3VycmVudFByZWNhY2hlTmFtZSwgc3Vic3RyaW5nVG9GaW5kID0gU1VCU1RSSU5HX1RPX0ZJTkQpPT57XG4gICAgY29uc3QgY2FjaGVOYW1lcyA9IGF3YWl0IHNlbGYuY2FjaGVzLmtleXMoKTtcbiAgICBjb25zdCBjYWNoZU5hbWVzVG9EZWxldGUgPSBjYWNoZU5hbWVzLmZpbHRlcigoY2FjaGVOYW1lKT0+e1xuICAgICAgICByZXR1cm4gY2FjaGVOYW1lLmluY2x1ZGVzKHN1YnN0cmluZ1RvRmluZCkgJiYgY2FjaGVOYW1lLmluY2x1ZGVzKHNlbGYucmVnaXN0cmF0aW9uLnNjb3BlKSAmJiBjYWNoZU5hbWUgIT09IGN1cnJlbnRQcmVjYWNoZU5hbWU7XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2FjaGVOYW1lc1RvRGVsZXRlLm1hcCgoY2FjaGVOYW1lKT0+c2VsZi5jYWNoZXMuZGVsZXRlKGNhY2hlTmFtZSkpKTtcbiAgICByZXR1cm4gY2FjaGVOYW1lc1RvRGVsZXRlO1xufTtcblxuY29uc3QgY2xlYW51cE91dGRhdGVkQ2FjaGVzID0gKGNhY2hlTmFtZSk9PntcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJhY3RpdmF0ZVwiLCAoZXZlbnQpPT57XG4gICAgICAgIGV2ZW50LndhaXRVbnRpbChkZWxldGVPdXRkYXRlZENhY2hlcyhjYWNoZU5hbWVzLmdldFByZWNhY2hlTmFtZShjYWNoZU5hbWUpKS50aGVuKChjYWNoZXNEZWxldGVkKT0+e1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZXNEZWxldGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhcIlRoZSBmb2xsb3dpbmcgb3V0LW9mLWRhdGUgcHJlY2FjaGVzIHdlcmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5OlwiLCBjYWNoZXNEZWxldGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGNsaWVudHNDbGFpbSA9ICgpPT57XG4gICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiYWN0aXZhdGVcIiwgKCk9PnNlbGYuY2xpZW50cy5jbGFpbSgpKTtcbn07XG5cbmNvbnN0IHdhaXRVbnRpbCA9IChldmVudCwgYXN5bmNGbik9PntcbiAgICBjb25zdCByZXR1cm5Qcm9taXNlID0gYXN5bmNGbigpO1xuICAgIGV2ZW50LndhaXRVbnRpbChyZXR1cm5Qcm9taXNlKTtcbiAgICByZXR1cm4gcmV0dXJuUHJvbWlzZTtcbn07XG5cbmV4cG9ydCB7IERlZmVycmVkIGFzIEQsIFNlcndpc3RFcnJvciBhcyBTLCBjbGllbnRzQ2xhaW0gYXMgYSwgY2xlYW51cE91dGRhdGVkQ2FjaGVzIGFzIGIsIGNhY2hlTmFtZXMgYXMgYywgY2FjaGVNYXRjaElnbm9yZVBhcmFtcyBhcyBkLCBleGVjdXRlUXVvdGFFcnJvckNhbGxiYWNrcyBhcyBlLCBmaW5hbEFzc2VydEV4cG9ydHMgYXMgZiwgZ2V0RnJpZW5kbHlVUkwgYXMgZywgY2FuQ29uc3RydWN0UmVzcG9uc2VGcm9tQm9keVN0cmVhbSBhcyBoLCBsb2dnZXIgYXMgbCwgcXVvdGFFcnJvckNhbGxiYWNrcyBhcyBxLCB0aW1lb3V0IGFzIHQsIHdhaXRVbnRpbCBhcyB3IH07XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js\n")); - -/***/ }), - -/***/ "./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/index.js": -/*!**********************************************************************************************!*\ - !*** ./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/index.js ***! - \**********************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BROADCAST_UPDATE_DEFAULT_HEADERS: function() { return /* binding */ BROADCAST_UPDATE_DEFAULT_HEADERS; },\n/* harmony export */ BackgroundSyncPlugin: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.B; },\n/* harmony export */ BackgroundSyncQueue: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.v; },\n/* harmony export */ BackgroundSyncQueueStore: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.w; },\n/* harmony export */ BroadcastCacheUpdate: function() { return /* binding */ BroadcastCacheUpdate; },\n/* harmony export */ BroadcastUpdatePlugin: function() { return /* binding */ BroadcastUpdatePlugin; },\n/* harmony export */ CacheExpiration: function() { return /* binding */ CacheExpiration; },\n/* harmony export */ CacheFirst: function() { return /* binding */ CacheFirst; },\n/* harmony export */ CacheOnly: function() { return /* binding */ CacheOnly; },\n/* harmony export */ CacheableResponse: function() { return /* binding */ CacheableResponse; },\n/* harmony export */ CacheableResponsePlugin: function() { return /* binding */ CacheableResponsePlugin; },\n/* harmony export */ ExpirationPlugin: function() { return /* binding */ ExpirationPlugin; },\n/* harmony export */ NavigationRoute: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.b; },\n/* harmony export */ NetworkFirst: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.a; },\n/* harmony export */ NetworkOnly: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.N; },\n/* harmony export */ PrecacheFallbackPlugin: function() { return /* binding */ PrecacheFallbackPlugin; },\n/* harmony export */ PrecacheRoute: function() { return /* binding */ PrecacheRoute; },\n/* harmony export */ PrecacheStrategy: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.P; },\n/* harmony export */ RangeRequestsPlugin: function() { return /* binding */ RangeRequestsPlugin; },\n/* harmony export */ RegExpRoute: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.u; },\n/* harmony export */ Route: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R; },\n/* harmony export */ Serwist: function() { return /* binding */ Serwist; },\n/* harmony export */ StaleWhileRevalidate: function() { return /* binding */ StaleWhileRevalidate; },\n/* harmony export */ StorableRequest: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.x; },\n/* harmony export */ Strategy: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.S; },\n/* harmony export */ StrategyHandler: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.t; },\n/* harmony export */ cacheNames: function() { return /* binding */ cacheNames; },\n/* harmony export */ copyResponse: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.o; },\n/* harmony export */ createPartialResponse: function() { return /* binding */ createPartialResponse; },\n/* harmony export */ disableDevLogs: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.d; },\n/* harmony export */ disableNavigationPreload: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.q; },\n/* harmony export */ enableNavigationPreload: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.e; },\n/* harmony export */ initializeGoogleAnalytics: function() { return /* binding */ initializeGoogleAnalytics; },\n/* harmony export */ isNavigationPreloadSupported: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.r; },\n/* harmony export */ registerQuotaErrorCallback: function() { return /* binding */ registerQuotaErrorCallback; },\n/* harmony export */ responsesAreSame: function() { return /* binding */ responsesAreSame; },\n/* harmony export */ setCacheNameDetails: function() { return /* reexport safe */ _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.s; }\n/* harmony export */ });\n/* harmony import */ var _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/printInstallDetails.js */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/printInstallDetails.js\");\n/* harmony import */ var _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./chunks/waitUntil.js */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/waitUntil.js\");\n/* harmony import */ var _chunks_resultingClientExists_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunks/resultingClientExists.js */ \"./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/chunks/resultingClientExists.js\");\n/* harmony import */ var idb__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! idb */ \"./node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js\");\n\n\n\n\n\n\nclass PrecacheRoute extends _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R {\n constructor(serwist, options){\n const match = ({ request })=>{\n const urlsToCacheKeys = serwist.getUrlsToPrecacheKeys();\n for (const possibleURL of (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.g)(request.url, options)){\n const cacheKey = urlsToCacheKeys.get(possibleURL);\n if (cacheKey) {\n const integrity = serwist.getIntegrityForPrecacheKey(cacheKey);\n return {\n cacheKey,\n integrity\n };\n }\n }\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`Precaching did not find a match for ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(request.url)}.`);\n }\n return;\n };\n super(match, serwist.precacheStrategy);\n }\n}\n\nconst QUEUE_NAME = \"serwist-google-analytics\";\nconst MAX_RETENTION_TIME = 60 * 48;\nconst GOOGLE_ANALYTICS_HOST = \"www.google-analytics.com\";\nconst GTM_HOST = \"www.googletagmanager.com\";\nconst ANALYTICS_JS_PATH = \"/analytics.js\";\nconst GTAG_JS_PATH = \"/gtag/js\";\nconst GTM_JS_PATH = \"/gtm.js\";\nconst COLLECT_PATHS_REGEX = /^\\/(\\w+\\/)?collect/;\n\nconst createOnSyncCallback = (config)=>{\n return async ({ queue })=>{\n let entry = undefined;\n while(entry = await queue.shiftRequest()){\n const { request, timestamp } = entry;\n const url = new URL(request.url);\n try {\n const params = request.method === \"POST\" ? new URLSearchParams(await request.clone().text()) : url.searchParams;\n const originalHitTime = timestamp - (Number(params.get(\"qt\")) || 0);\n const queueTime = Date.now() - originalHitTime;\n params.set(\"qt\", String(queueTime));\n if (config.parameterOverrides) {\n for (const param of Object.keys(config.parameterOverrides)){\n const value = config.parameterOverrides[param];\n params.set(param, value);\n }\n }\n if (typeof config.hitFilter === \"function\") {\n config.hitFilter.call(null, params);\n }\n await fetch(new Request(url.origin + url.pathname, {\n body: params.toString(),\n method: \"POST\",\n mode: \"cors\",\n credentials: \"omit\",\n headers: {\n \"Content-Type\": \"text/plain\"\n }\n }));\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Request for '${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url.href)}' has been replayed`);\n }\n } catch (err) {\n await queue.unshiftRequest(entry);\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Request for '${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url.href)}' failed to replay, putting it back in the queue.`);\n }\n throw err;\n }\n }\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(\"All Google Analytics request successfully replayed; \" + \"the queue is now empty!\");\n }\n };\n};\nconst createCollectRoutes = (bgSyncPlugin)=>{\n const match = ({ url })=>url.hostname === GOOGLE_ANALYTICS_HOST && COLLECT_PATHS_REGEX.test(url.pathname);\n const handler = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.N({\n plugins: [\n bgSyncPlugin\n ]\n });\n return [\n new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R(match, handler, \"GET\"),\n new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R(match, handler, \"POST\")\n ];\n};\nconst createAnalyticsJsRoute = (cacheName)=>{\n const match = ({ url })=>url.hostname === GOOGLE_ANALYTICS_HOST && url.pathname === ANALYTICS_JS_PATH;\n const handler = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.a({\n cacheName\n });\n return new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R(match, handler, \"GET\");\n};\nconst createGtagJsRoute = (cacheName)=>{\n const match = ({ url })=>url.hostname === GTM_HOST && url.pathname === GTAG_JS_PATH;\n const handler = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.a({\n cacheName\n });\n return new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R(match, handler, \"GET\");\n};\nconst createGtmJsRoute = (cacheName)=>{\n const match = ({ url })=>url.hostname === GTM_HOST && url.pathname === GTM_JS_PATH;\n const handler = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.a({\n cacheName\n });\n return new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.R(match, handler, \"GET\");\n};\nconst initializeGoogleAnalytics = ({ serwist, cacheName, ...options })=>{\n const resolvedCacheName = _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getGoogleAnalyticsName(cacheName);\n const bgSyncPlugin = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.B(QUEUE_NAME, {\n maxRetentionTime: MAX_RETENTION_TIME,\n onSync: createOnSyncCallback(options)\n });\n const routes = [\n createGtmJsRoute(resolvedCacheName),\n createAnalyticsJsRoute(resolvedCacheName),\n createGtagJsRoute(resolvedCacheName),\n ...createCollectRoutes(bgSyncPlugin)\n ];\n for (const route of routes){\n serwist.registerRoute(route);\n }\n};\n\nclass PrecacheFallbackPlugin {\n _fallbackUrls;\n _serwist;\n constructor({ fallbackUrls, serwist }){\n this._fallbackUrls = fallbackUrls;\n this._serwist = serwist;\n }\n async handlerDidError(param) {\n for (const fallback of this._fallbackUrls){\n if (typeof fallback === \"string\") {\n const fallbackResponse = await this._serwist.matchPrecache(fallback);\n if (fallbackResponse !== undefined) {\n return fallbackResponse;\n }\n } else if (fallback.matcher(param)) {\n const fallbackResponse = await this._serwist.matchPrecache(fallback.url);\n if (fallbackResponse !== undefined) {\n return fallbackResponse;\n }\n }\n }\n return undefined;\n }\n}\n\nclass PrecacheCacheKeyPlugin {\n _precacheController;\n constructor({ precacheController }){\n this._precacheController = precacheController;\n }\n cacheKeyWillBeUsed = async ({ request, params })=>{\n const cacheKey = params?.cacheKey || this._precacheController.getPrecacheKeyForUrl(request.url);\n return cacheKey ? new Request(cacheKey, {\n headers: request.headers\n }) : request;\n };\n}\n\nclass Serwist {\n _urlsToCacheKeys = new Map();\n _urlsToCacheModes = new Map();\n _cacheKeysToIntegrities = new Map();\n _concurrentPrecaching;\n _precacheStrategy;\n _routes;\n _defaultHandlerMap;\n _catchHandler;\n constructor({ precacheEntries, precacheOptions, skipWaiting = false, importScripts, navigationPreload = false, cacheId, clientsClaim: clientsClaim$1 = false, runtimeCaching, offlineAnalyticsConfig, disableDevLogs: disableDevLogs$1 = false, fallbacks } = {}){\n this._concurrentPrecaching = precacheOptions?.concurrency ?? 10;\n this._precacheStrategy = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.P({\n cacheName: _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getPrecacheName(precacheOptions?.cacheName),\n plugins: [\n ...precacheOptions?.plugins ?? [],\n new PrecacheCacheKeyPlugin({\n precacheController: this\n })\n ],\n fallbackToNetwork: precacheOptions?.fallbackToNetwork\n });\n this._routes = new Map();\n this._defaultHandlerMap = new Map();\n this.handleInstall = this.handleInstall.bind(this);\n this.handleActivate = this.handleActivate.bind(this);\n this.handleFetch = this.handleFetch.bind(this);\n this.handleCache = this.handleCache.bind(this);\n if (!!importScripts && importScripts.length > 0) self.importScripts(...importScripts);\n if (navigationPreload) (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.e)();\n if (cacheId !== undefined) {\n (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.s)({\n prefix: cacheId\n });\n }\n if (skipWaiting) {\n self.skipWaiting();\n } else {\n self.addEventListener(\"message\", (event)=>{\n if (event.data && event.data.type === \"SKIP_WAITING\") {\n self.skipWaiting();\n }\n });\n }\n if (clientsClaim$1) (0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.a)();\n if (!!precacheEntries && precacheEntries.length > 0) {\n this.addToPrecacheList(precacheEntries);\n }\n if (precacheOptions?.cleanupOutdatedCaches) {\n (0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.b)(precacheOptions?.cacheName);\n }\n this.registerRoute(new PrecacheRoute(this, precacheOptions));\n if (precacheOptions?.navigateFallback) {\n this.registerRoute(new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.b(this.createHandlerBoundToUrl(precacheOptions?.navigateFallback), {\n allowlist: precacheOptions?.navigateFallbackAllowlist,\n denylist: precacheOptions?.navigateFallbackDenylist\n }));\n }\n if (offlineAnalyticsConfig !== undefined) {\n if (typeof offlineAnalyticsConfig === \"boolean\") {\n offlineAnalyticsConfig && initializeGoogleAnalytics({\n serwist: this\n });\n } else {\n initializeGoogleAnalytics({\n ...offlineAnalyticsConfig,\n serwist: this\n });\n }\n }\n if (runtimeCaching !== undefined) {\n if (fallbacks !== undefined) {\n const fallbackPlugin = new PrecacheFallbackPlugin({\n fallbackUrls: fallbacks.entries,\n serwist: this\n });\n runtimeCaching.forEach((cacheEntry)=>{\n if (cacheEntry.handler instanceof _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.S && !cacheEntry.handler.plugins.some((plugin)=>\"handlerDidError\" in plugin)) {\n cacheEntry.handler.plugins.push(fallbackPlugin);\n }\n });\n }\n for (const entry of runtimeCaching){\n this.registerCapture(entry.matcher, entry.handler, entry.method);\n }\n }\n if (disableDevLogs$1) (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.d)();\n }\n get precacheStrategy() {\n return this._precacheStrategy;\n }\n get routes() {\n return this._routes;\n }\n addEventListeners() {\n self.addEventListener(\"install\", this.handleInstall);\n self.addEventListener(\"activate\", this.handleActivate);\n self.addEventListener(\"fetch\", this.handleFetch);\n self.addEventListener(\"message\", this.handleCache);\n }\n addToPrecacheList(entries) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isArray(entries, {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"addToCacheList\",\n paramName: \"entries\"\n });\n }\n const urlsToWarnAbout = [];\n for (const entry of entries){\n if (typeof entry === \"string\") {\n urlsToWarnAbout.push(entry);\n } else if (entry && !entry.integrity && entry.revision === undefined) {\n urlsToWarnAbout.push(entry.url);\n }\n const { cacheKey, url } = (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.c)(entry);\n const cacheMode = typeof entry !== \"string\" && entry.revision ? \"reload\" : \"default\";\n if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"add-to-cache-list-conflicting-entries\", {\n firstEntry: this._urlsToCacheKeys.get(url),\n secondEntry: cacheKey\n });\n }\n if (typeof entry !== \"string\" && entry.integrity) {\n if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"add-to-cache-list-conflicting-integrities\", {\n url\n });\n }\n this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n }\n this._urlsToCacheKeys.set(url, cacheKey);\n this._urlsToCacheModes.set(url, cacheMode);\n if (urlsToWarnAbout.length > 0) {\n const warningMessage = `Serwist is precaching URLs without revision info: ${urlsToWarnAbout.join(\", \")}\\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;\n if (false) {} else {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(warningMessage);\n }\n }\n }\n }\n handleInstall(event) {\n return (0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.w)(event, async ()=>{\n const installReportPlugin = new _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.k();\n this.precacheStrategy.plugins.push(installReportPlugin);\n await (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.p)(this._concurrentPrecaching, Array.from(this._urlsToCacheKeys.entries()), async ([url, cacheKey])=>{\n const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n const cacheMode = this._urlsToCacheModes.get(url);\n const request = new Request(url, {\n integrity,\n cache: cacheMode,\n credentials: \"same-origin\"\n });\n await Promise.all(this.precacheStrategy.handleAll({\n event,\n request,\n url: new URL(request.url),\n params: {\n cacheKey\n }\n }));\n });\n const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n if (true) {\n (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.f)(updatedURLs, notUpdatedURLs);\n }\n return {\n updatedURLs,\n notUpdatedURLs\n };\n });\n }\n handleActivate(event) {\n return (0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.w)(event, async ()=>{\n const cache = await self.caches.open(this.precacheStrategy.cacheName);\n const currentlyCachedRequests = await cache.keys();\n const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n const deletedCacheRequests = [];\n for (const request of currentlyCachedRequests){\n if (!expectedCacheKeys.has(request.url)) {\n await cache.delete(request);\n deletedCacheRequests.push(request.url);\n }\n }\n if (true) {\n (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.h)(deletedCacheRequests);\n }\n return {\n deletedCacheRequests\n };\n });\n }\n handleFetch(event) {\n const { request } = event;\n const responsePromise = this.handleRequest({\n request,\n event\n });\n if (responsePromise) {\n event.respondWith(responsePromise);\n }\n }\n handleCache(event) {\n if (event.data && event.data.type === \"CACHE_URLS\") {\n const { payload } = event.data;\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Caching URLs from the window\", payload.urlsToCache);\n }\n const requestPromises = Promise.all(payload.urlsToCache.map((entry)=>{\n let request;\n if (typeof entry === \"string\") {\n request = new Request(entry);\n } else {\n request = new Request(...entry);\n }\n return this.handleRequest({\n request,\n event\n });\n }));\n event.waitUntil(requestPromises);\n if (event.ports?.[0]) {\n void requestPromises.then(()=>event.ports[0].postMessage(true));\n }\n }\n }\n setDefaultHandler(handler, method = _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.i) {\n this._defaultHandlerMap.set(method, (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.n)(handler));\n }\n setCatchHandler(handler) {\n this._catchHandler = (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.n)(handler);\n }\n registerCapture(capture, handler, method) {\n const route = (0,_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.j)(capture, handler, method);\n this.registerRoute(route);\n return route;\n }\n registerRoute(route) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(route, \"object\", {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"registerRoute\",\n paramName: \"route\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.hasMethod(route, \"match\", {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"registerRoute\",\n paramName: \"route\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(route.handler, \"object\", {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"registerRoute\",\n paramName: \"route\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.hasMethod(route.handler, \"handle\", {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"registerRoute\",\n paramName: \"route.handler\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(route.method, \"string\", {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"registerRoute\",\n paramName: \"route.method\"\n });\n }\n if (!this._routes.has(route.method)) {\n this._routes.set(route.method, []);\n }\n this._routes.get(route.method).push(route);\n }\n unregisterRoute(route) {\n if (!this._routes.has(route.method)) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"unregister-route-but-not-found-with-method\", {\n method: route.method\n });\n }\n const routeIndex = this._routes.get(route.method).indexOf(route);\n if (routeIndex > -1) {\n this._routes.get(route.method).splice(routeIndex, 1);\n } else {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"unregister-route-route-not-registered\");\n }\n }\n getUrlsToPrecacheKeys() {\n return this._urlsToCacheKeys;\n }\n getPrecachedUrls() {\n return [\n ...this._urlsToCacheKeys.keys()\n ];\n }\n getPrecacheKeyForUrl(url) {\n const urlObject = new URL(url, location.href);\n return this._urlsToCacheKeys.get(urlObject.href);\n }\n getIntegrityForPrecacheKey(cacheKey) {\n return this._cacheKeysToIntegrities.get(cacheKey);\n }\n async matchPrecache(request) {\n const url = request instanceof Request ? request.url : request;\n const cacheKey = this.getPrecacheKeyForUrl(url);\n if (cacheKey) {\n const cache = await self.caches.open(this.precacheStrategy.cacheName);\n return cache.match(cacheKey);\n }\n return undefined;\n }\n createHandlerBoundToUrl(url) {\n const cacheKey = this.getPrecacheKeyForUrl(url);\n if (!cacheKey) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"non-precached-url\", {\n url\n });\n }\n return (options)=>{\n options.request = new Request(url);\n options.params = {\n cacheKey,\n ...options.params\n };\n return this.precacheStrategy.handle(options);\n };\n }\n handleRequest({ request, event }) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: \"Serwist\",\n funcName: \"handleRequest\",\n paramName: \"options.request\"\n });\n }\n const url = new URL(request.url, location.href);\n if (!url.protocol.startsWith(\"http\")) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Router only supports URLs that start with 'http'.\");\n }\n return;\n }\n const sameOrigin = url.origin === location.origin;\n const { params, route } = this.findMatchingRoute({\n event,\n request,\n sameOrigin,\n url\n });\n let handler = route?.handler;\n const debugMessages = [];\n if (true) {\n if (handler) {\n debugMessages.push([\n \"Found a route to handle this request:\",\n route\n ]);\n if (params) {\n debugMessages.push([\n `Passing the following params to the route's handler:`,\n params\n ]);\n }\n }\n }\n const method = request.method;\n if (!handler && this._defaultHandlerMap.has(method)) {\n if (true) {\n debugMessages.push(`Failed to find a matching route. Falling back to the default handler for ${method}.`);\n }\n handler = this._defaultHandlerMap.get(method);\n }\n if (!handler) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(`No route found for: ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url)}`);\n }\n return;\n }\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(`Router is responding to: ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url)}`);\n for (const msg of debugMessages){\n if (Array.isArray(msg)) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(...msg);\n } else {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(msg);\n }\n }\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n let responsePromise;\n try {\n responsePromise = handler.handle({\n url,\n request,\n event,\n params\n });\n } catch (err) {\n responsePromise = Promise.reject(err);\n }\n const catchHandler = route?.catchHandler;\n if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {\n responsePromise = responsePromise.catch(async (err)=>{\n if (catchHandler) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(`Error thrown when responding to: ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url)}. Falling back to route's Catch Handler.`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.error(\"Error thrown by:\", route);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.error(err);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n try {\n return await catchHandler.handle({\n url,\n request,\n event,\n params\n });\n } catch (catchErr) {\n if (catchErr instanceof Error) {\n err = catchErr;\n }\n }\n }\n if (this._catchHandler) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(`Error thrown when responding to: ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url)}. Falling back to global Catch Handler.`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.error(\"Error thrown by:\", route);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.error(err);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n return this._catchHandler.handle({\n url,\n request,\n event\n });\n }\n throw err;\n });\n }\n return responsePromise;\n }\n findMatchingRoute({ url, sameOrigin, request, event }) {\n const routes = this._routes.get(request.method) || [];\n for (const route of routes){\n let params;\n const matchResult = route.match({\n url,\n sameOrigin,\n request,\n event\n });\n if (matchResult) {\n if (true) {\n if (matchResult instanceof Promise) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`While routing ${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(url)}, an async matchCallback function was used. Please convert the following route to use a synchronous matchCallback function:`, route);\n }\n }\n params = matchResult;\n if (Array.isArray(params) && params.length === 0) {\n params = undefined;\n } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0) {\n params = undefined;\n } else if (typeof matchResult === \"boolean\") {\n params = undefined;\n }\n return {\n route,\n params\n };\n }\n }\n return {};\n }\n}\n\nconst cacheNames = {\n get googleAnalytics () {\n return _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getGoogleAnalyticsName();\n },\n get precache () {\n return _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getPrecacheName();\n },\n get prefix () {\n return _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getPrefix();\n },\n get runtime () {\n return _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getRuntimeName();\n },\n get suffix () {\n return _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getSuffix();\n }\n};\n\nconst BROADCAST_UPDATE_MESSAGE_TYPE = \"CACHE_UPDATED\";\nconst BROADCAST_UPDATE_MESSAGE_META = \"serwist-broadcast-update\";\nconst BROADCAST_UPDATE_DEFAULT_NOTIFY = true;\nconst BROADCAST_UPDATE_DEFAULT_HEADERS = [\n \"content-length\",\n \"etag\",\n \"last-modified\"\n];\n\nconst responsesAreSame = (firstResponse, secondResponse, headersToCheck)=>{\n if (true) {\n if (!(firstResponse instanceof Response && secondResponse instanceof Response)) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"invalid-responses-are-same-args\");\n }\n }\n const atLeastOneHeaderAvailable = headersToCheck.some((header)=>{\n return firstResponse.headers.has(header) && secondResponse.headers.has(header);\n });\n if (!atLeastOneHeaderAvailable) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"Unable to determine where the response has been updated because none of the headers that would be checked are present.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Attempting to compare the following: \", firstResponse, secondResponse, headersToCheck);\n }\n return true;\n }\n return headersToCheck.every((header)=>{\n const headerStateComparison = firstResponse.headers.has(header) === secondResponse.headers.has(header);\n const headerValueComparison = firstResponse.headers.get(header) === secondResponse.headers.get(header);\n return headerStateComparison && headerValueComparison;\n });\n};\n\nconst isSafari = typeof navigator !== \"undefined\" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nconst defaultPayloadGenerator = (data)=>{\n return {\n cacheName: data.cacheName,\n updatedURL: data.request.url\n };\n};\nclass BroadcastCacheUpdate {\n _headersToCheck;\n _generatePayload;\n _notifyAllClients;\n constructor({ generatePayload, headersToCheck, notifyAllClients } = {}){\n this._headersToCheck = headersToCheck || BROADCAST_UPDATE_DEFAULT_HEADERS;\n this._generatePayload = generatePayload || defaultPayloadGenerator;\n this._notifyAllClients = notifyAllClients ?? BROADCAST_UPDATE_DEFAULT_NOTIFY;\n }\n async notifyIfUpdated(options) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(options.cacheName, \"string\", {\n moduleName: \"serwist\",\n className: \"BroadcastCacheUpdate\",\n funcName: \"notifyIfUpdated\",\n paramName: \"cacheName\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(options.newResponse, Response, {\n moduleName: \"serwist\",\n className: \"BroadcastCacheUpdate\",\n funcName: \"notifyIfUpdated\",\n paramName: \"newResponse\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(options.request, Request, {\n moduleName: \"serwist\",\n className: \"BroadcastCacheUpdate\",\n funcName: \"notifyIfUpdated\",\n paramName: \"request\"\n });\n }\n if (!options.oldResponse) {\n return;\n }\n if (!responsesAreSame(options.oldResponse, options.newResponse, this._headersToCheck)) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(\"Newer response found (and cached) for:\", options.request.url);\n }\n const messageData = {\n type: BROADCAST_UPDATE_MESSAGE_TYPE,\n meta: BROADCAST_UPDATE_MESSAGE_META,\n payload: this._generatePayload(options)\n };\n if (options.request.mode === \"navigate\") {\n let resultingClientId;\n if (options.event instanceof FetchEvent) {\n resultingClientId = options.event.resultingClientId;\n }\n const resultingWin = await (0,_chunks_resultingClientExists_js__WEBPACK_IMPORTED_MODULE_2__.r)(resultingClientId);\n if (!resultingWin || isSafari) {\n await (0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.t)(3500);\n }\n }\n if (this._notifyAllClients) {\n const windows = await self.clients.matchAll({\n type: \"window\"\n });\n for (const win of windows){\n win.postMessage(messageData);\n }\n } else {\n if (options.event instanceof FetchEvent) {\n const client = await self.clients.get(options.event.clientId);\n client?.postMessage(messageData);\n }\n }\n }\n }\n}\n\nclass BroadcastUpdatePlugin {\n _broadcastUpdate;\n constructor(options){\n this._broadcastUpdate = new BroadcastCacheUpdate(options);\n }\n cacheDidUpdate(options) {\n void this._broadcastUpdate.notifyIfUpdated(options);\n }\n}\n\nclass CacheableResponse {\n _statuses;\n _headers;\n constructor(config = {}){\n if (true) {\n if (!(config.statuses || config.headers)) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"statuses-or-headers-required\", {\n moduleName: \"serwist\",\n className: \"CacheableResponse\",\n funcName: \"constructor\"\n });\n }\n if (config.statuses) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isArray(config.statuses, {\n moduleName: \"serwist\",\n className: \"CacheableResponse\",\n funcName: \"constructor\",\n paramName: \"config.statuses\"\n });\n }\n if (config.headers) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.headers, \"object\", {\n moduleName: \"serwist\",\n className: \"CacheableResponse\",\n funcName: \"constructor\",\n paramName: \"config.headers\"\n });\n }\n }\n this._statuses = config.statuses;\n if (config.headers) {\n this._headers = new Headers(config.headers);\n }\n }\n isResponseCacheable(response) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(response, Response, {\n moduleName: \"serwist\",\n className: \"CacheableResponse\",\n funcName: \"isResponseCacheable\",\n paramName: \"response\"\n });\n }\n let cacheable = true;\n if (this._statuses) {\n cacheable = this._statuses.includes(response.status);\n }\n if (this._headers && cacheable) {\n for (const [headerName, headerValue] of this._headers.entries()){\n if (response.headers.get(headerName) !== headerValue) {\n cacheable = false;\n break;\n }\n }\n }\n if (true) {\n if (!cacheable) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(`The request for '${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(response.url)}' returned a response that does not meet the criteria for being cached.`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(\"View cacheability criteria here.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Cacheable statuses: ${JSON.stringify(this._statuses)}`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Cacheable headers: ${JSON.stringify(this._headers, null, 2)}`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n const logFriendlyHeaders = {};\n response.headers.forEach((value, key)=>{\n logFriendlyHeaders[key] = value;\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(\"View response status and headers here.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Response status: ${response.status}`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Response headers: ${JSON.stringify(logFriendlyHeaders, null, 2)}`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(\"View full response details here.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(response.headers);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(response);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n }\n return cacheable;\n }\n}\n\nclass CacheableResponsePlugin {\n _cacheableResponse;\n constructor(config){\n this._cacheableResponse = new CacheableResponse(config);\n }\n cacheWillUpdate = async ({ response })=>{\n if (this._cacheableResponse.isResponseCacheable(response)) {\n return response;\n }\n return null;\n };\n}\n\nconst DB_NAME = \"serwist-expiration\";\nconst CACHE_OBJECT_STORE = \"cache-entries\";\nconst normalizeURL = (unNormalizedUrl)=>{\n const url = new URL(unNormalizedUrl, location.href);\n url.hash = \"\";\n return url.href;\n};\nclass CacheTimestampsModel {\n _cacheName;\n _db = null;\n constructor(cacheName){\n this._cacheName = cacheName;\n }\n _getId(url) {\n return `${this._cacheName}|${normalizeURL(url)}`;\n }\n _upgradeDb(db) {\n const objStore = db.createObjectStore(CACHE_OBJECT_STORE, {\n keyPath: \"id\"\n });\n objStore.createIndex(\"cacheName\", \"cacheName\", {\n unique: false\n });\n objStore.createIndex(\"timestamp\", \"timestamp\", {\n unique: false\n });\n }\n _upgradeDbAndDeleteOldDbs(db) {\n this._upgradeDb(db);\n if (this._cacheName) {\n void (0,idb__WEBPACK_IMPORTED_MODULE_3__.deleteDB)(this._cacheName);\n }\n }\n async setTimestamp(url, timestamp) {\n url = normalizeURL(url);\n const entry = {\n id: this._getId(url),\n cacheName: this._cacheName,\n url,\n timestamp\n };\n const db = await this.getDb();\n const tx = db.transaction(CACHE_OBJECT_STORE, \"readwrite\", {\n durability: \"relaxed\"\n });\n await tx.store.put(entry);\n await tx.done;\n }\n async getTimestamp(url) {\n const db = await this.getDb();\n const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n return entry?.timestamp;\n }\n async expireEntries(minTimestamp, maxCount) {\n const db = await this.getDb();\n let cursor = await db.transaction(CACHE_OBJECT_STORE, \"readwrite\").store.index(\"timestamp\").openCursor(null, \"prev\");\n const urlsDeleted = [];\n let entriesNotDeletedCount = 0;\n while(cursor){\n const result = cursor.value;\n if (result.cacheName === this._cacheName) {\n if (minTimestamp && result.timestamp < minTimestamp || maxCount && entriesNotDeletedCount >= maxCount) {\n cursor.delete();\n urlsDeleted.push(result.url);\n } else {\n entriesNotDeletedCount++;\n }\n }\n cursor = await cursor.continue();\n }\n return urlsDeleted;\n }\n async getDb() {\n if (!this._db) {\n this._db = await (0,idb__WEBPACK_IMPORTED_MODULE_3__.openDB)(DB_NAME, 1, {\n upgrade: this._upgradeDbAndDeleteOldDbs.bind(this)\n });\n }\n return this._db;\n }\n}\n\nclass CacheExpiration {\n _isRunning = false;\n _rerunRequested = false;\n _maxEntries;\n _maxAgeSeconds;\n _matchOptions;\n _cacheName;\n _timestampModel;\n constructor(cacheName, config = {}){\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(cacheName, \"string\", {\n moduleName: \"serwist\",\n className: \"CacheExpiration\",\n funcName: \"constructor\",\n paramName: \"cacheName\"\n });\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"max-entries-or-age-required\", {\n moduleName: \"serwist\",\n className: \"CacheExpiration\",\n funcName: \"constructor\"\n });\n }\n if (config.maxEntries) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.maxEntries, \"number\", {\n moduleName: \"serwist\",\n className: \"CacheExpiration\",\n funcName: \"constructor\",\n paramName: \"config.maxEntries\"\n });\n }\n if (config.maxAgeSeconds) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.maxAgeSeconds, \"number\", {\n moduleName: \"serwist\",\n className: \"CacheExpiration\",\n funcName: \"constructor\",\n paramName: \"config.maxAgeSeconds\"\n });\n }\n }\n this._maxEntries = config.maxEntries;\n this._maxAgeSeconds = config.maxAgeSeconds;\n this._matchOptions = config.matchOptions;\n this._cacheName = cacheName;\n this._timestampModel = new CacheTimestampsModel(cacheName);\n }\n async expireEntries() {\n if (this._isRunning) {\n this._rerunRequested = true;\n return;\n }\n this._isRunning = true;\n const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1000 : 0;\n const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n const cache = await self.caches.open(this._cacheName);\n for (const url of urlsExpired){\n await cache.delete(url, this._matchOptions);\n }\n if (true) {\n if (urlsExpired.length > 0) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(`Expired ${urlsExpired.length} ` + `${urlsExpired.length === 1 ? \"entry\" : \"entries\"} and removed ` + `${urlsExpired.length === 1 ? \"it\" : \"them\"} from the ` + `'${this._cacheName}' cache.`);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Expired the following ${urlsExpired.length === 1 ? \"URL\" : \"URLs\"}:`);\n for (const url of urlsExpired){\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(` ${url}`);\n }\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n } else {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.debug(\"Cache expiration ran and found no entries to remove.\");\n }\n }\n this._isRunning = false;\n if (this._rerunRequested) {\n this._rerunRequested = false;\n void this.expireEntries();\n }\n }\n async updateTimestamp(url) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(url, \"string\", {\n moduleName: \"serwist\",\n className: \"CacheExpiration\",\n funcName: \"updateTimestamp\",\n paramName: \"url\"\n });\n }\n await this._timestampModel.setTimestamp(url, Date.now());\n }\n async isURLExpired(url) {\n if (!this._maxAgeSeconds) {\n if (true) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"expired-test-without-max-age\", {\n methodName: \"isURLExpired\",\n paramName: \"maxAgeSeconds\"\n });\n }\n return false;\n }\n const timestamp = await this._timestampModel.getTimestamp(url);\n const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n return timestamp !== undefined ? timestamp < expireOlderThan : true;\n }\n async delete() {\n this._rerunRequested = false;\n await this._timestampModel.expireEntries(Number.POSITIVE_INFINITY);\n }\n}\n\nconst registerQuotaErrorCallback = (callback)=>{\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(callback, \"function\", {\n moduleName: \"@serwist/core\",\n funcName: \"register\",\n paramName: \"callback\"\n });\n }\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.q.add(callback);\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(\"Registered a callback to respond to quota errors.\", callback);\n }\n};\n\nclass ExpirationPlugin {\n _config;\n _cacheExpirations;\n constructor(config = {}){\n if (true) {\n if (!(config.maxEntries || config.maxAgeSeconds)) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"max-entries-or-age-required\", {\n moduleName: \"serwist\",\n className: \"ExpirationPlugin\",\n funcName: \"constructor\"\n });\n }\n if (config.maxEntries) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.maxEntries, \"number\", {\n moduleName: \"serwist\",\n className: \"ExpirationPlugin\",\n funcName: \"constructor\",\n paramName: \"config.maxEntries\"\n });\n }\n if (config.maxAgeSeconds) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.maxAgeSeconds, \"number\", {\n moduleName: \"serwist\",\n className: \"ExpirationPlugin\",\n funcName: \"constructor\",\n paramName: \"config.maxAgeSeconds\"\n });\n }\n if (config.maxAgeFrom) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(config.maxAgeFrom, \"string\", {\n moduleName: \"serwist\",\n className: \"ExpirationPlugin\",\n funcName: \"constructor\",\n paramName: \"config.maxAgeFrom\"\n });\n }\n }\n this._config = config;\n this._cacheExpirations = new Map();\n if (!this._config.maxAgeFrom) {\n this._config.maxAgeFrom = \"last-fetched\";\n }\n if (this._config.purgeOnQuotaError) {\n registerQuotaErrorCallback(()=>this.deleteCacheAndMetadata());\n }\n }\n _getCacheExpiration(cacheName) {\n if (cacheName === _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.c.getRuntimeName()) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"expire-custom-caches-only\");\n }\n let cacheExpiration = this._cacheExpirations.get(cacheName);\n if (!cacheExpiration) {\n cacheExpiration = new CacheExpiration(cacheName, this._config);\n this._cacheExpirations.set(cacheName, cacheExpiration);\n }\n return cacheExpiration;\n }\n cachedResponseWillBeUsed({ event, cacheName, request, cachedResponse }) {\n if (!cachedResponse) {\n return null;\n }\n const isFresh = this._isResponseDateFresh(cachedResponse);\n const cacheExpiration = this._getCacheExpiration(cacheName);\n const isMaxAgeFromLastUsed = this._config.maxAgeFrom === \"last-used\";\n const done = (async ()=>{\n if (isMaxAgeFromLastUsed) {\n await cacheExpiration.updateTimestamp(request.url);\n }\n await cacheExpiration.expireEntries();\n })();\n try {\n event.waitUntil(done);\n } catch (error) {\n if (true) {\n if (event instanceof FetchEvent) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(`Unable to ensure service worker stays alive when updating cache entry for '${(0,_chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.g)(event.request.url)}'.`);\n }\n }\n }\n return isFresh ? cachedResponse : null;\n }\n _isResponseDateFresh(cachedResponse) {\n const isMaxAgeFromLastUsed = this._config.maxAgeFrom === \"last-used\";\n if (isMaxAgeFromLastUsed) {\n return true;\n }\n const now = Date.now();\n if (!this._config.maxAgeSeconds) {\n return true;\n }\n const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n if (dateHeaderTimestamp === null) {\n return true;\n }\n return dateHeaderTimestamp >= now - this._config.maxAgeSeconds * 1000;\n }\n _getDateHeaderTimestamp(cachedResponse) {\n if (!cachedResponse.headers.has(\"date\")) {\n return null;\n }\n const dateHeader = cachedResponse.headers.get(\"date\");\n const parsedDate = new Date(dateHeader);\n const headerTime = parsedDate.getTime();\n if (Number.isNaN(headerTime)) {\n return null;\n }\n return headerTime;\n }\n async cacheDidUpdate({ cacheName, request }) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(cacheName, \"string\", {\n moduleName: \"serwist\",\n className: \"Plugin\",\n funcName: \"cacheDidUpdate\",\n paramName: \"cacheName\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: \"Plugin\",\n funcName: \"cacheDidUpdate\",\n paramName: \"request\"\n });\n }\n const cacheExpiration = this._getCacheExpiration(cacheName);\n await cacheExpiration.updateTimestamp(request.url);\n await cacheExpiration.expireEntries();\n }\n async deleteCacheAndMetadata() {\n for (const [cacheName, cacheExpiration] of this._cacheExpirations){\n await self.caches.delete(cacheName);\n await cacheExpiration.delete();\n }\n this._cacheExpirations = new Map();\n }\n}\n\nconst calculateEffectiveBoundaries = (blob, start, end)=>{\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(blob, Blob, {\n moduleName: \"@serwist/range-requests\",\n funcName: \"calculateEffectiveBoundaries\",\n paramName: \"blob\"\n });\n }\n const blobSize = blob.size;\n if (end && end > blobSize || start && start < 0) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"range-not-satisfiable\", {\n size: blobSize,\n end,\n start\n });\n }\n let effectiveStart;\n let effectiveEnd;\n if (start !== undefined && end !== undefined) {\n effectiveStart = start;\n effectiveEnd = end + 1;\n } else if (start !== undefined && end === undefined) {\n effectiveStart = start;\n effectiveEnd = blobSize;\n } else if (end !== undefined && start === undefined) {\n effectiveStart = blobSize - end;\n effectiveEnd = blobSize;\n }\n return {\n start: effectiveStart,\n end: effectiveEnd\n };\n};\n\nconst parseRangeHeader = (rangeHeader)=>{\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isType(rangeHeader, \"string\", {\n moduleName: \"@serwist/range-requests\",\n funcName: \"parseRangeHeader\",\n paramName: \"rangeHeader\"\n });\n }\n const normalizedRangeHeader = rangeHeader.trim().toLowerCase();\n if (!normalizedRangeHeader.startsWith(\"bytes=\")) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"unit-must-be-bytes\", {\n normalizedRangeHeader\n });\n }\n if (normalizedRangeHeader.includes(\",\")) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"single-range-only\", {\n normalizedRangeHeader\n });\n }\n const rangeParts = /(\\d*)-(\\d*)/.exec(normalizedRangeHeader);\n if (!rangeParts || !(rangeParts[1] || rangeParts[2])) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"invalid-range-values\", {\n normalizedRangeHeader\n });\n }\n return {\n start: rangeParts[1] === \"\" ? undefined : Number(rangeParts[1]),\n end: rangeParts[2] === \"\" ? undefined : Number(rangeParts[2])\n };\n};\n\nconst createPartialResponse = async (request, originalResponse)=>{\n try {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"@serwist/range-requests\",\n funcName: \"createPartialResponse\",\n paramName: \"request\"\n });\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(originalResponse, Response, {\n moduleName: \"@serwist/range-requests\",\n funcName: \"createPartialResponse\",\n paramName: \"originalResponse\"\n });\n }\n if (originalResponse.status === 206) {\n return originalResponse;\n }\n const rangeHeader = request.headers.get(\"range\");\n if (!rangeHeader) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"no-range-header\");\n }\n const boundaries = parseRangeHeader(rangeHeader);\n const originalBlob = await originalResponse.blob();\n const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end);\n const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end);\n const slicedBlobSize = slicedBlob.size;\n const slicedResponse = new Response(slicedBlob, {\n status: 206,\n statusText: \"Partial Content\",\n headers: originalResponse.headers\n });\n slicedResponse.headers.set(\"Content-Length\", String(slicedBlobSize));\n slicedResponse.headers.set(\"Content-Range\", `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` + `${originalBlob.size}`);\n return slicedResponse;\n } catch (error) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.warn(\"Unable to construct a partial response; returning a \" + \"416 Range Not Satisfiable response instead.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(\"View details here.\");\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(error);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(request);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(originalResponse);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n return new Response(\"\", {\n status: 416,\n statusText: \"Range Not Satisfiable\"\n });\n }\n};\n\nclass RangeRequestsPlugin {\n cachedResponseWillBeUsed = async ({ request, cachedResponse })=>{\n if (cachedResponse && request.headers.has(\"range\")) {\n return await createPartialResponse(request, cachedResponse);\n }\n return cachedResponse;\n };\n}\n\nclass CacheFirst extends _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.S {\n async _handle(request, handler) {\n const logs = [];\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"makeRequest\",\n paramName: \"request\"\n });\n }\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (!response) {\n if (true) {\n logs.push(`No response found in the '${this.cacheName}' cache. Will respond with a network request.`);\n }\n try {\n response = await handler.fetchAndCachePut(request);\n } catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n if (true) {\n if (response) {\n logs.push(\"Got response from network.\");\n } else {\n logs.push(\"Unable to get a response from the network.\");\n }\n }\n } else {\n if (true) {\n logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n }\n }\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.strategyStart(this.constructor.name, request));\n for (const log of logs){\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(log);\n }\n _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.printFinalResponse(response);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n if (!response) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"no-response\", {\n url: request.url,\n error\n });\n }\n return response;\n }\n}\n\nclass CacheOnly extends _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.S {\n async _handle(request, handler) {\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"makeRequest\",\n paramName: \"request\"\n });\n }\n const response = await handler.cacheMatch(request);\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.strategyStart(this.constructor.name, request));\n if (response) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`Found a cached response in the '${this.cacheName}' cache.`);\n _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.printFinalResponse(response);\n } else {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(`No response found in the '${this.cacheName}' cache.`);\n }\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n if (!response) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"no-response\", {\n url: request.url\n });\n }\n return response;\n }\n}\n\nclass StaleWhileRevalidate extends _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.S {\n constructor(options = {}){\n super(options);\n if (!this.plugins.some((p)=>\"cacheWillUpdate\" in p)) {\n this.plugins.unshift(_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.l);\n }\n }\n async _handle(request, handler) {\n const logs = [];\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.f.isInstance(request, Request, {\n moduleName: \"serwist\",\n className: this.constructor.name,\n funcName: \"handle\",\n paramName: \"request\"\n });\n }\n const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(()=>{});\n void handler.waitUntil(fetchAndCachePromise);\n let response = await handler.cacheMatch(request);\n let error = undefined;\n if (response) {\n if (true) {\n logs.push(`Found a cached response in the '${this.cacheName}' cache. Will update with the network response in the background.`);\n }\n } else {\n if (true) {\n logs.push(`No response found in the '${this.cacheName}' cache. Will wait for the network response.`);\n }\n try {\n response = await fetchAndCachePromise;\n } catch (err) {\n if (err instanceof Error) {\n error = err;\n }\n }\n }\n if (true) {\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupCollapsed(_chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.strategyStart(this.constructor.name, request));\n for (const log of logs){\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.log(log);\n }\n _chunks_printInstallDetails_js__WEBPACK_IMPORTED_MODULE_0__.m.printFinalResponse(response);\n _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.l.groupEnd();\n }\n if (!response) {\n throw new _chunks_waitUntil_js__WEBPACK_IMPORTED_MODULE_1__.S(\"no-response\", {\n url: request.url,\n error\n });\n }\n return response;\n }\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vc2Vyd2lzdEA5LjAuMl90eXBlc2NyaXB0QDUuNC41L25vZGVfbW9kdWxlcy9zZXJ3aXN0L2Rpc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb2dCO0FBQ3ZRO0FBQ2Q7QUFDaEs7QUFDeEM7O0FBRXZDLDRCQUE0Qiw2REFBSztBQUNqQztBQUNBLHlCQUF5QixTQUFTO0FBQ2xDO0FBQ0Esc0NBQXNDLGlFQUFxQjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsSUFBcUM7QUFDckQsZ0JBQWdCLG1EQUFNLDhDQUE4Qyx1REFBYyxjQUFjO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0JBQW9CLE9BQU87QUFDM0I7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixvQkFBb0IsSUFBcUM7QUFDekQsb0JBQW9CLG1EQUFNLHFCQUFxQix1REFBYyxXQUFXO0FBQ3hFO0FBQ0EsY0FBYztBQUNkO0FBQ0Esb0JBQW9CLElBQXFDO0FBQ3pELG9CQUFvQixtREFBTSxxQkFBcUIsdURBQWMsV0FBVztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksSUFBcUM7QUFDakQsWUFBWSxtREFBTSwwREFBMEQ7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsS0FBSztBQUMxQix3QkFBd0IsNkRBQVc7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FB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QTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxJQUFxQztBQUNqRCxZQUFZLG1EQUFNLGdCQUFnQiw2REFBUTtBQUMxQztBQUNBLGdCQUFnQixtREFBTTtBQUN0QjtBQUNBLFlBQVksNkRBQVE7QUFDcEIsWUFBWSxtREFBTTtBQUNsQjtBQUNBO0FBQ0Esc0JBQXNCLG1EQUFZO0FBQ2xDO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRXlpQiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvLnBucG0vc2Vyd2lzdEA5LjAuMl90eXBlc2NyaXB0QDUuNC41L25vZGVfbW9kdWxlcy9zZXJ3aXN0L2Rpc3QvaW5kZXguanM/YWI3ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSIGFzIFJvdXRlLCBnIGFzIGdlbmVyYXRlVVJMVmFyaWF0aW9ucywgQiBhcyBCYWNrZ3JvdW5kU3luY1BsdWdpbiwgTiBhcyBOZXR3b3JrT25seSwgYSBhcyBOZXR3b3JrRmlyc3QsIFAgYXMgUHJlY2FjaGVTdHJhdGVneSwgZSBhcyBlbmFibGVOYXZpZ2F0aW9uUHJlbG9hZCwgcyBhcyBzZXRDYWNoZU5hbWVEZXRhaWxzLCBiIGFzIE5hdmlnYXRpb25Sb3V0ZSwgUyBhcyBTdHJhdGVneSwgZCBhcyBkaXNhYmxlRGV2TG9ncywgYyBhcyBjcmVhdGVDYWNoZUtleSwgcCBhcyBwYXJhbGxlbCwgZiBhcyBwcmludEluc3RhbGxEZXRhaWxzLCBoIGFzIHByaW50Q2xlYW51cERldGFpbHMsIG4gYXMgbm9ybWFsaXplSGFuZGxlciwgaSBhcyBkZWZhdWx0TWV0aG9kLCBqIGFzIHBhcnNlUm91dGUsIGsgYXMgUHJlY2FjaGVJbnN0YWxsUmVwb3J0UGx1Z2luLCBtIGFzIG1lc3NhZ2VzLCBsIGFzIGNhY2hlT2tBbmRPcGFxdWVQbHVnaW4gfSBmcm9tICcuL2NodW5rcy9wcmludEluc3RhbGxEZXRhaWxzLmpzJztcbmV4cG9ydCB7IHYgYXMgQmFja2dyb3VuZFN5bmNRdWV1ZSwgdyBhcyBCYWNrZ3JvdW5kU3luY1F1ZXVlU3RvcmUsIHUgYXMgUmVnRXhwUm91dGUsIHggYXMgU3RvcmFibGVSZXF1ZXN0LCB0IGFzIFN0cmF0ZWd5SGFuZGxlciwgbyBhcyBjb3B5UmVzcG9uc2UsIHEgYXMgZGlzYWJsZU5hdmlnYXRpb25QcmVsb2FkLCByIGFzIGlzTmF2aWdhdGlvblByZWxvYWRTdXBwb3J0ZWQgfSBmcm9tICcuL2NodW5rcy9wcmludEluc3RhbGxEZXRhaWxzLmpzJztcbmltcG9ydCB7IGwgYXMgbG9nZ2VyLCBnIGFzIGdldEZyaWVuZGx5VVJMLCBjIGFzIGNhY2hlTmFtZXMkMSwgYSBhcyBjbGllbnRzQ2xhaW0sIGIgYXMgY2xlYW51cE91dGRhdGVkQ2FjaGVzLCBmIGFzIGZpbmFsQXNzZXJ0RXhwb3J0cywgUyBhcyBTZXJ3aXN0RXJyb3IsIHcgYXMgd2FpdFVudGlsLCB0IGFzIHRpbWVvdXQsIHEgYXMgcXVvdGFFcnJvckNhbGxiYWNrcyB9IGZyb20gJy4vY2h1bmtzL3dhaXRVbnRpbC5qcyc7XG5pbXBvcnQgeyByIGFzIHJlc3VsdGluZ0NsaWVudEV4aXN0cyB9IGZyb20gJy4vY2h1bmtzL3Jlc3VsdGluZ0NsaWVudEV4aXN0cy5qcyc7XG5pbXBvcnQgeyBkZWxldGVEQiwgb3BlbkRCIH0gZnJvbSAnaWRiJztcblxuY2xhc3MgUHJlY2FjaGVSb3V0ZSBleHRlbmRzIFJvdXRlIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ3aXN0LCBvcHRpb25zKXtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAoeyByZXF1ZXN0IH0pPT57XG4gICAgICAgICAgICBjb25zdCB1cmxzVG9DYWNoZUtleXMgPSBzZXJ3aXN0LmdldFVybHNUb1ByZWNhY2hlS2V5cygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb3NzaWJsZVVSTCBvZiBnZW5lcmF0ZVVSTFZhcmlhdGlvbnMocmVxdWVzdC51cmwsIG9wdGlvbnMpKXtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IHVybHNUb0NhY2hlS2V5cy5nZXQocG9zc2libGVVUkwpO1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlZ3JpdHkgPSBzZXJ3aXN0LmdldEludGVncml0eUZvclByZWNhY2hlS2V5KGNhY2hlS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUHJlY2FjaGluZyBkaWQgbm90IGZpbmQgYSBtYXRjaCBmb3IgJHtnZXRGcmllbmRseVVSTChyZXF1ZXN0LnVybCl9LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBzdXBlcihtYXRjaCwgc2Vyd2lzdC5wcmVjYWNoZVN0cmF0ZWd5KTtcbiAgICB9XG59XG5cbmNvbnN0IFFVRVVFX05BTUUgPSBcInNlcndpc3QtZ29vZ2xlLWFuYWx5dGljc1wiO1xuY29uc3QgTUFYX1JFVEVOVElPTl9USU1FID0gNjAgKiA0ODtcbmNvbnN0IEdPT0dMRV9BTkFMWVRJQ1NfSE9TVCA9IFwid3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tXCI7XG5jb25zdCBHVE1fSE9TVCA9IFwid3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tXCI7XG5jb25zdCBBTkFMWVRJQ1NfSlNfUEFUSCA9IFwiL2FuYWx5dGljcy5qc1wiO1xuY29uc3QgR1RBR19KU19QQVRIID0gXCIvZ3RhZy9qc1wiO1xuY29uc3QgR1RNX0pTX1BBVEggPSBcIi9ndG0uanNcIjtcbmNvbnN0IENPTExFQ1RfUEFUSFNfUkVHRVggPSAvXlxcLyhcXHcrXFwvKT9jb2xsZWN0LztcblxuY29uc3QgY3JlYXRlT25TeW5jQ2FsbGJhY2sgPSAoY29uZmlnKT0+e1xuICAgIHJldHVybiBhc3luYyAoeyBxdWV1ZSB9KT0+e1xuICAgICAgICBsZXQgZW50cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlKGVudHJ5ID0gYXdhaXQgcXVldWUuc2hpZnRSZXF1ZXN0KCkpe1xuICAgICAgICAgICAgY29uc3QgeyByZXF1ZXN0LCB0aW1lc3RhbXAgfSA9IGVudHJ5O1xuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHJlcXVlc3QubWV0aG9kID09PSBcIlBPU1RcIiA/IG5ldyBVUkxTZWFyY2hQYXJhbXMoYXdhaXQgcmVxdWVzdC5jbG9uZSgpLnRleHQoKSkgOiB1cmwuc2VhcmNoUGFyYW1zO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSGl0VGltZSA9IHRpbWVzdGFtcCAtIChOdW1iZXIocGFyYW1zLmdldChcInF0XCIpKSB8fCAwKTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWV1ZVRpbWUgPSBEYXRlLm5vdygpIC0gb3JpZ2luYWxIaXRUaW1lO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5zZXQoXCJxdFwiLCBTdHJpbmcocXVldWVUaW1lKSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5wYXJhbWV0ZXJPdmVycmlkZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhjb25maWcucGFyYW1ldGVyT3ZlcnJpZGVzKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZy5wYXJhbWV0ZXJPdmVycmlkZXNbcGFyYW1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnNldChwYXJhbSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnLmhpdEZpbHRlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5oaXRGaWx0ZXIuY2FsbChudWxsLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBmZXRjaChuZXcgUmVxdWVzdCh1cmwub3JpZ2luICsgdXJsLnBhdGhuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IFwib21pdFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcInRleHQvcGxhaW5cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgUmVxdWVzdCBmb3IgJyR7Z2V0RnJpZW5kbHlVUkwodXJsLmhyZWYpfScgaGFzIGJlZW4gcmVwbGF5ZWRgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBxdWV1ZS51bnNoaWZ0UmVxdWVzdChlbnRyeSk7XG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBSZXF1ZXN0IGZvciAnJHtnZXRGcmllbmRseVVSTCh1cmwuaHJlZil9JyBmYWlsZWQgdG8gcmVwbGF5LCBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIHF1ZXVlLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhcIkFsbCBHb29nbGUgQW5hbHl0aWNzIHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IHJlcGxheWVkOyBcIiArIFwidGhlIHF1ZXVlIGlzIG5vdyBlbXB0eSFcIik7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmNvbnN0IGNyZWF0ZUNvbGxlY3RSb3V0ZXMgPSAoYmdTeW5jUGx1Z2luKT0+e1xuICAgIGNvbnN0IG1hdGNoID0gKHsgdXJsIH0pPT51cmwuaG9zdG5hbWUgPT09IEdPT0dMRV9BTkFMWVRJQ1NfSE9TVCAmJiBDT0xMRUNUX1BBVEhTX1JFR0VYLnRlc3QodXJsLnBhdGhuYW1lKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IE5ldHdvcmtPbmx5KHtcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgYmdTeW5jUGx1Z2luXG4gICAgICAgIF1cbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBuZXcgUm91dGUobWF0Y2gsIGhhbmRsZXIsIFwiR0VUXCIpLFxuICAgICAgICBuZXcgUm91dGUobWF0Y2gsIGhhbmRsZXIsIFwiUE9TVFwiKVxuICAgIF07XG59O1xuY29uc3QgY3JlYXRlQW5hbHl0aWNzSnNSb3V0ZSA9IChjYWNoZU5hbWUpPT57XG4gICAgY29uc3QgbWF0Y2ggPSAoeyB1cmwgfSk9PnVybC5ob3N0bmFtZSA9PT0gR09PR0xFX0FOQUxZVElDU19IT1NUICYmIHVybC5wYXRobmFtZSA9PT0gQU5BTFlUSUNTX0pTX1BBVEg7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBOZXR3b3JrRmlyc3Qoe1xuICAgICAgICBjYWNoZU5hbWVcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlKG1hdGNoLCBoYW5kbGVyLCBcIkdFVFwiKTtcbn07XG5jb25zdCBjcmVhdGVHdGFnSnNSb3V0ZSA9IChjYWNoZU5hbWUpPT57XG4gICAgY29uc3QgbWF0Y2ggPSAoeyB1cmwgfSk9PnVybC5ob3N0bmFtZSA9PT0gR1RNX0hPU1QgJiYgdXJsLnBhdGhuYW1lID09PSBHVEFHX0pTX1BBVEg7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBOZXR3b3JrRmlyc3Qoe1xuICAgICAgICBjYWNoZU5hbWVcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJvdXRlKG1hdGNoLCBoYW5kbGVyLCBcIkdFVFwiKTtcbn07XG5jb25zdCBjcmVhdGVHdG1Kc1JvdXRlID0gKGNhY2hlTmFtZSk9PntcbiAgICBjb25zdCBtYXRjaCA9ICh7IHVybCB9KT0+dXJsLmhvc3RuYW1lID09PSBHVE1fSE9TVCAmJiB1cmwucGF0aG5hbWUgPT09IEdUTV9KU19QQVRIO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTmV0d29ya0ZpcnN0KHtcbiAgICAgICAgY2FjaGVOYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSb3V0ZShtYXRjaCwgaGFuZGxlciwgXCJHRVRcIik7XG59O1xuY29uc3QgaW5pdGlhbGl6ZUdvb2dsZUFuYWx5dGljcyA9ICh7IHNlcndpc3QsIGNhY2hlTmFtZSwgLi4ub3B0aW9ucyB9KT0+e1xuICAgIGNvbnN0IHJlc29sdmVkQ2FjaGVOYW1lID0gY2FjaGVOYW1lcyQxLmdldEdvb2dsZUFuYWx5dGljc05hbWUoY2FjaGVOYW1lKTtcbiAgICBjb25zdCBiZ1N5bmNQbHVnaW4gPSBuZXcgQmFja2dyb3VuZFN5bmNQbHVnaW4oUVVFVUVfTkFNRSwge1xuICAgICAgICBtYXhSZXRlbnRpb25UaW1lOiBNQVhfUkVURU5USU9OX1RJTUUsXG4gICAgICAgIG9uU3luYzogY3JlYXRlT25TeW5jQ2FsbGJhY2sob3B0aW9ucylcbiAgICB9KTtcbiAgICBjb25zdCByb3V0ZXMgPSBbXG4gICAgICAgIGNyZWF0ZUd0bUpzUm91dGUocmVzb2x2ZWRDYWNoZU5hbWUpLFxuICAgICAgICBjcmVhdGVBbmFseXRpY3NKc1JvdXRlKHJlc29sdmVkQ2FjaGVOYW1lKSxcbiAgICAgICAgY3JlYXRlR3RhZ0pzUm91dGUocmVzb2x2ZWRDYWNoZU5hbWUpLFxuICAgICAgICAuLi5jcmVhdGVDb2xsZWN0Um91dGVzKGJnU3luY1BsdWdpbilcbiAgICBdO1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKXtcbiAgICAgICAgc2Vyd2lzdC5yZWdpc3RlclJvdXRlKHJvdXRlKTtcbiAgICB9XG59O1xuXG5jbGFzcyBQcmVjYWNoZUZhbGxiYWNrUGx1Z2luIHtcbiAgICBfZmFsbGJhY2tVcmxzO1xuICAgIF9zZXJ3aXN0O1xuICAgIGNvbnN0cnVjdG9yKHsgZmFsbGJhY2tVcmxzLCBzZXJ3aXN0IH0pe1xuICAgICAgICB0aGlzLl9mYWxsYmFja1VybHMgPSBmYWxsYmFja1VybHM7XG4gICAgICAgIHRoaXMuX3Nlcndpc3QgPSBzZXJ3aXN0O1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVyRGlkRXJyb3IocGFyYW0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmYWxsYmFjayBvZiB0aGlzLl9mYWxsYmFja1VybHMpe1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFjayA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9zZXJ3aXN0Lm1hdGNoUHJlY2FjaGUoZmFsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChmYWxsYmFja1Jlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmYWxsYmFjay5tYXRjaGVyKHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhbGxiYWNrUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9zZXJ3aXN0Lm1hdGNoUHJlY2FjaGUoZmFsbGJhY2sudXJsKTtcbiAgICAgICAgICAgICAgICBpZiAoZmFsbGJhY2tSZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFja1Jlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuY2xhc3MgUHJlY2FjaGVDYWNoZUtleVBsdWdpbiB7XG4gICAgX3ByZWNhY2hlQ29udHJvbGxlcjtcbiAgICBjb25zdHJ1Y3Rvcih7IHByZWNhY2hlQ29udHJvbGxlciB9KXtcbiAgICAgICAgdGhpcy5fcHJlY2FjaGVDb250cm9sbGVyID0gcHJlY2FjaGVDb250cm9sbGVyO1xuICAgIH1cbiAgICBjYWNoZUtleVdpbGxCZVVzZWQgPSBhc3luYyAoeyByZXF1ZXN0LCBwYXJhbXMgfSk9PntcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBwYXJhbXM/LmNhY2hlS2V5IHx8IHRoaXMuX3ByZWNhY2hlQ29udHJvbGxlci5nZXRQcmVjYWNoZUtleUZvclVybChyZXF1ZXN0LnVybCk7XG4gICAgICAgIHJldHVybiBjYWNoZUtleSA/IG5ldyBSZXF1ZXN0KGNhY2hlS2V5LCB7XG4gICAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0LmhlYWRlcnNcbiAgICAgICAgfSkgOiByZXF1ZXN0O1xuICAgIH07XG59XG5cbmNsYXNzIFNlcndpc3Qge1xuICAgIF91cmxzVG9DYWNoZUtleXMgPSBuZXcgTWFwKCk7XG4gICAgX3VybHNUb0NhY2hlTW9kZXMgPSBuZXcgTWFwKCk7XG4gICAgX2NhY2hlS2V5c1RvSW50ZWdyaXRpZXMgPSBuZXcgTWFwKCk7XG4gICAgX2NvbmN1cnJlbnRQcmVjYWNoaW5nO1xuICAgIF9wcmVjYWNoZVN0cmF0ZWd5O1xuICAgIF9yb3V0ZXM7XG4gICAgX2RlZmF1bHRIYW5kbGVyTWFwO1xuICAgIF9jYXRjaEhhbmRsZXI7XG4gICAgY29uc3RydWN0b3IoeyBwcmVjYWNoZUVudHJpZXMsIHByZWNhY2hlT3B0aW9ucywgc2tpcFdhaXRpbmcgPSBmYWxzZSwgaW1wb3J0U2NyaXB0cywgbmF2aWdhdGlvblByZWxvYWQgPSBmYWxzZSwgY2FjaGVJZCwgY2xpZW50c0NsYWltOiBjbGllbnRzQ2xhaW0kMSA9IGZhbHNlLCBydW50aW1lQ2FjaGluZywgb2ZmbGluZUFuYWx5dGljc0NvbmZpZywgZGlzYWJsZURldkxvZ3M6IGRpc2FibGVEZXZMb2dzJDEgPSBmYWxzZSwgZmFsbGJhY2tzIH0gPSB7fSl7XG4gICAgICAgIHRoaXMuX2NvbmN1cnJlbnRQcmVjYWNoaW5nID0gcHJlY2FjaGVPcHRpb25zPy5jb25jdXJyZW5jeSA/PyAxMDtcbiAgICAgICAgdGhpcy5fcHJlY2FjaGVTdHJhdGVneSA9IG5ldyBQcmVjYWNoZVN0cmF0ZWd5KHtcbiAgICAgICAgICAgIGNhY2hlTmFtZTogY2FjaGVOYW1lcyQxLmdldFByZWNhY2hlTmFtZShwcmVjYWNoZU9wdGlvbnM/LmNhY2hlTmFtZSksXG4gICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgLi4ucHJlY2FjaGVPcHRpb25zPy5wbHVnaW5zID8/IFtdLFxuICAgICAgICAgICAgICAgIG5ldyBQcmVjYWNoZUNhY2hlS2V5UGx1Z2luKHtcbiAgICAgICAgICAgICAgICAgICAgcHJlY2FjaGVDb250cm9sbGVyOiB0aGlzXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmYWxsYmFja1RvTmV0d29yazogcHJlY2FjaGVPcHRpb25zPy5mYWxsYmFja1RvTmV0d29ya1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fcm91dGVzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9kZWZhdWx0SGFuZGxlck1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVJbnN0YWxsID0gdGhpcy5oYW5kbGVJbnN0YWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQWN0aXZhdGUgPSB0aGlzLmhhbmRsZUFjdGl2YXRlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlRmV0Y2ggPSB0aGlzLmhhbmRsZUZldGNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2FjaGUgPSB0aGlzLmhhbmRsZUNhY2hlLmJpbmQodGhpcyk7XG4gICAgICAgIGlmICghIWltcG9ydFNjcmlwdHMgJiYgaW1wb3J0U2NyaXB0cy5sZW5ndGggPiAwKSBzZWxmLmltcG9ydFNjcmlwdHMoLi4uaW1wb3J0U2NyaXB0cyk7XG4gICAgICAgIGlmIChuYXZpZ2F0aW9uUHJlbG9hZCkgZW5hYmxlTmF2aWdhdGlvblByZWxvYWQoKTtcbiAgICAgICAgaWYgKGNhY2hlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0Q2FjaGVOYW1lRGV0YWlscyh7XG4gICAgICAgICAgICAgICAgcHJlZml4OiBjYWNoZUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2tpcFdhaXRpbmcpIHtcbiAgICAgICAgICAgIHNlbGYuc2tpcFdhaXRpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKGV2ZW50KT0+e1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhICYmIGV2ZW50LmRhdGEudHlwZSA9PT0gXCJTS0lQX1dBSVRJTkdcIikge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBXYWl0aW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNsaWVudHNDbGFpbSQxKSBjbGllbnRzQ2xhaW0oKTtcbiAgICAgICAgaWYgKCEhcHJlY2FjaGVFbnRyaWVzICYmIHByZWNhY2hlRW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvUHJlY2FjaGVMaXN0KHByZWNhY2hlRW50cmllcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWNhY2hlT3B0aW9ucz8uY2xlYW51cE91dGRhdGVkQ2FjaGVzKSB7XG4gICAgICAgICAgICBjbGVhbnVwT3V0ZGF0ZWRDYWNoZXMocHJlY2FjaGVPcHRpb25zPy5jYWNoZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVnaXN0ZXJSb3V0ZShuZXcgUHJlY2FjaGVSb3V0ZSh0aGlzLCBwcmVjYWNoZU9wdGlvbnMpKTtcbiAgICAgICAgaWYgKHByZWNhY2hlT3B0aW9ucz8ubmF2aWdhdGVGYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclJvdXRlKG5ldyBOYXZpZ2F0aW9uUm91dGUodGhpcy5jcmVhdGVIYW5kbGVyQm91bmRUb1VybChwcmVjYWNoZU9wdGlvbnM/Lm5hdmlnYXRlRmFsbGJhY2spLCB7XG4gICAgICAgICAgICAgICAgYWxsb3dsaXN0OiBwcmVjYWNoZU9wdGlvbnM/Lm5hdmlnYXRlRmFsbGJhY2tBbGxvd2xpc3QsXG4gICAgICAgICAgICAgICAgZGVueWxpc3Q6IHByZWNhY2hlT3B0aW9ucz8ubmF2aWdhdGVGYWxsYmFja0RlbnlsaXN0XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZmxpbmVBbmFseXRpY3NDb25maWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvZmZsaW5lQW5hbHl0aWNzQ29uZmlnID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgIG9mZmxpbmVBbmFseXRpY3NDb25maWcgJiYgaW5pdGlhbGl6ZUdvb2dsZUFuYWx5dGljcyh7XG4gICAgICAgICAgICAgICAgICAgIHNlcndpc3Q6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUdvb2dsZUFuYWx5dGljcyh7XG4gICAgICAgICAgICAgICAgICAgIC4uLm9mZmxpbmVBbmFseXRpY3NDb25maWcsXG4gICAgICAgICAgICAgICAgICAgIHNlcndpc3Q6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnVudGltZUNhY2hpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGZhbGxiYWNrcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tQbHVnaW4gPSBuZXcgUHJlY2FjaGVGYWxsYmFja1BsdWdpbih7XG4gICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrVXJsczogZmFsbGJhY2tzLmVudHJpZXMsXG4gICAgICAgICAgICAgICAgICAgIHNlcndpc3Q6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBydW50aW1lQ2FjaGluZy5mb3JFYWNoKChjYWNoZUVudHJ5KT0+e1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5oYW5kbGVyIGluc3RhbmNlb2YgU3RyYXRlZ3kgJiYgIWNhY2hlRW50cnkuaGFuZGxlci5wbHVnaW5zLnNvbWUoKHBsdWdpbik9PlwiaGFuZGxlckRpZEVycm9yXCIgaW4gcGx1Z2luKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVFbnRyeS5oYW5kbGVyLnBsdWdpbnMucHVzaChmYWxsYmFja1BsdWdpbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcnVudGltZUNhY2hpbmcpe1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJDYXB0dXJlKGVudHJ5Lm1hdGNoZXIsIGVudHJ5LmhhbmRsZXIsIGVudHJ5Lm1ldGhvZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc2FibGVEZXZMb2dzJDEpIGRpc2FibGVEZXZMb2dzKCk7XG4gICAgfVxuICAgIGdldCBwcmVjYWNoZVN0cmF0ZWd5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJlY2FjaGVTdHJhdGVneTtcbiAgICB9XG4gICAgZ2V0IHJvdXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlcztcbiAgICB9XG4gICAgYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImluc3RhbGxcIiwgdGhpcy5oYW5kbGVJbnN0YWxsKTtcbiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKFwiYWN0aXZhdGVcIiwgdGhpcy5oYW5kbGVBY3RpdmF0ZSk7XG4gICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImZldGNoXCIsIHRoaXMuaGFuZGxlRmV0Y2gpO1xuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuaGFuZGxlQ2FjaGUpO1xuICAgIH1cbiAgICBhZGRUb1ByZWNhY2hlTGlzdChlbnRyaWVzKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0FycmF5KGVudHJpZXMsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImFkZFRvQ2FjaGVMaXN0XCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImVudHJpZXNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXJsc1RvV2FybkFib3V0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcyl7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgdXJsc1RvV2FybkFib3V0LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeSAmJiAhZW50cnkuaW50ZWdyaXR5ICYmIGVudHJ5LnJldmlzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB1cmxzVG9XYXJuQWJvdXQucHVzaChlbnRyeS51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBjYWNoZUtleSwgdXJsIH0gPSBjcmVhdGVDYWNoZUtleShlbnRyeSk7XG4gICAgICAgICAgICBjb25zdCBjYWNoZU1vZGUgPSB0eXBlb2YgZW50cnkgIT09IFwic3RyaW5nXCIgJiYgZW50cnkucmV2aXNpb24gPyBcInJlbG9hZFwiIDogXCJkZWZhdWx0XCI7XG4gICAgICAgICAgICBpZiAodGhpcy5fdXJsc1RvQ2FjaGVLZXlzLmhhcyh1cmwpICYmIHRoaXMuX3VybHNUb0NhY2hlS2V5cy5nZXQodXJsKSAhPT0gY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwiYWRkLXRvLWNhY2hlLWxpc3QtY29uZmxpY3RpbmctZW50cmllc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnN0RW50cnk6IHRoaXMuX3VybHNUb0NhY2hlS2V5cy5nZXQodXJsKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kRW50cnk6IGNhY2hlS2V5XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5ICE9PSBcInN0cmluZ1wiICYmIGVudHJ5LmludGVncml0eSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZUtleXNUb0ludGVncml0aWVzLmhhcyhjYWNoZUtleSkgJiYgdGhpcy5fY2FjaGVLZXlzVG9JbnRlZ3JpdGllcy5nZXQoY2FjaGVLZXkpICE9PSBlbnRyeS5pbnRlZ3JpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImFkZC10by1jYWNoZS1saXN0LWNvbmZsaWN0aW5nLWludGVncml0aWVzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVLZXlzVG9JbnRlZ3JpdGllcy5zZXQoY2FjaGVLZXksIGVudHJ5LmludGVncml0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91cmxzVG9DYWNoZUtleXMuc2V0KHVybCwgY2FjaGVLZXkpO1xuICAgICAgICAgICAgdGhpcy5fdXJsc1RvQ2FjaGVNb2Rlcy5zZXQodXJsLCBjYWNoZU1vZGUpO1xuICAgICAgICAgICAgaWYgKHVybHNUb1dhcm5BYm91dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2FybmluZ01lc3NhZ2UgPSBgU2Vyd2lzdCBpcyBwcmVjYWNoaW5nIFVSTHMgd2l0aG91dCByZXZpc2lvbiBpbmZvOiAke3VybHNUb1dhcm5BYm91dC5qb2luKFwiLCBcIil9XFxuVGhpcyBpcyBnZW5lcmFsbHkgTk9UIHNhZmUuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9iaXQubHkvd2ItcHJlY2FjaGVgO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2Fybih3YXJuaW5nTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUluc3RhbGwoZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIHdhaXRVbnRpbChldmVudCwgYXN5bmMgKCk9PntcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbGxSZXBvcnRQbHVnaW4gPSBuZXcgUHJlY2FjaGVJbnN0YWxsUmVwb3J0UGx1Z2luKCk7XG4gICAgICAgICAgICB0aGlzLnByZWNhY2hlU3RyYXRlZ3kucGx1Z2lucy5wdXNoKGluc3RhbGxSZXBvcnRQbHVnaW4pO1xuICAgICAgICAgICAgYXdhaXQgcGFyYWxsZWwodGhpcy5fY29uY3VycmVudFByZWNhY2hpbmcsIEFycmF5LmZyb20odGhpcy5fdXJsc1RvQ2FjaGVLZXlzLmVudHJpZXMoKSksIGFzeW5jIChbdXJsLCBjYWNoZUtleV0pPT57XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZWdyaXR5ID0gdGhpcy5fY2FjaGVLZXlzVG9JbnRlZ3JpdGllcy5nZXQoY2FjaGVLZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhY2hlTW9kZSA9IHRoaXMuX3VybHNUb0NhY2hlTW9kZXMuZ2V0KHVybCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICAgICAgICAgICAgICBpbnRlZ3JpdHksXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBjYWNoZU1vZGUsXG4gICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLnByZWNhY2hlU3RyYXRlZ3kuaGFuZGxlQWxsKHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgIHVybDogbmV3IFVSTChyZXF1ZXN0LnVybCksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgeyB1cGRhdGVkVVJMcywgbm90VXBkYXRlZFVSTHMgfSA9IGluc3RhbGxSZXBvcnRQbHVnaW47XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRJbnN0YWxsRGV0YWlscyh1cGRhdGVkVVJMcywgbm90VXBkYXRlZFVSTHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVkVVJMcyxcbiAgICAgICAgICAgICAgICBub3RVcGRhdGVkVVJMc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUFjdGl2YXRlKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiB3YWl0VW50aWwoZXZlbnQsIGFzeW5jICgpPT57XG4gICAgICAgICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHNlbGYuY2FjaGVzLm9wZW4odGhpcy5wcmVjYWNoZVN0cmF0ZWd5LmNhY2hlTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50bHlDYWNoZWRSZXF1ZXN0cyA9IGF3YWl0IGNhY2hlLmtleXMoKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkQ2FjaGVLZXlzID0gbmV3IFNldCh0aGlzLl91cmxzVG9DYWNoZUtleXMudmFsdWVzKCkpO1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlZENhY2hlUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiBjdXJyZW50bHlDYWNoZWRSZXF1ZXN0cyl7XG4gICAgICAgICAgICAgICAgaWYgKCFleHBlY3RlZENhY2hlS2V5cy5oYXMocmVxdWVzdC51cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNhY2hlLmRlbGV0ZShyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlZENhY2hlUmVxdWVzdHMucHVzaChyZXF1ZXN0LnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHByaW50Q2xlYW51cERldGFpbHMoZGVsZXRlZENhY2hlUmVxdWVzdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWxldGVkQ2FjaGVSZXF1ZXN0c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUZldGNoKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IHRoaXMuaGFuZGxlUmVxdWVzdCh7XG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZVByb21pc2UpIHtcbiAgICAgICAgICAgIGV2ZW50LnJlc3BvbmRXaXRoKHJlc3BvbnNlUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQ2FjaGUoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgJiYgZXZlbnQuZGF0YS50eXBlID09PSBcIkNBQ0hFX1VSTFNcIikge1xuICAgICAgICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkNhY2hpbmcgVVJMcyBmcm9tIHRoZSB3aW5kb3dcIiwgcGF5bG9hZC51cmxzVG9DYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0UHJvbWlzZXMgPSBQcm9taXNlLmFsbChwYXlsb2FkLnVybHNUb0NhY2hlLm1hcCgoZW50cnkpPT57XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoZW50cnkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCguLi5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgZXZlbnQud2FpdFVudGlsKHJlcXVlc3RQcm9taXNlcyk7XG4gICAgICAgICAgICBpZiAoZXZlbnQucG9ydHM/LlswXSkge1xuICAgICAgICAgICAgICAgIHZvaWQgcmVxdWVzdFByb21pc2VzLnRoZW4oKCk9PmV2ZW50LnBvcnRzWzBdLnBvc3RNZXNzYWdlKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXREZWZhdWx0SGFuZGxlcihoYW5kbGVyLCBtZXRob2QgPSBkZWZhdWx0TWV0aG9kKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRIYW5kbGVyTWFwLnNldChtZXRob2QsIG5vcm1hbGl6ZUhhbmRsZXIoaGFuZGxlcikpO1xuICAgIH1cbiAgICBzZXRDYXRjaEhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgICB0aGlzLl9jYXRjaEhhbmRsZXIgPSBub3JtYWxpemVIYW5kbGVyKGhhbmRsZXIpO1xuICAgIH1cbiAgICByZWdpc3RlckNhcHR1cmUoY2FwdHVyZSwgaGFuZGxlciwgbWV0aG9kKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlID0gcGFyc2VSb3V0ZShjYXB0dXJlLCBoYW5kbGVyLCBtZXRob2QpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyUm91dGUocm91dGUpO1xuICAgICAgICByZXR1cm4gcm91dGU7XG4gICAgfVxuICAgIHJlZ2lzdGVyUm91dGUocm91dGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShyb3V0ZSwgXCJvYmplY3RcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicmVnaXN0ZXJSb3V0ZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyb3V0ZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5oYXNNZXRob2Qocm91dGUsIFwibWF0Y2hcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicmVnaXN0ZXJSb3V0ZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyb3V0ZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUocm91dGUuaGFuZGxlciwgXCJvYmplY3RcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicmVnaXN0ZXJSb3V0ZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyb3V0ZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5oYXNNZXRob2Qocm91dGUuaGFuZGxlciwgXCJoYW5kbGVcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJTZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwicmVnaXN0ZXJSb3V0ZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyb3V0ZS5oYW5kbGVyXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShyb3V0ZS5tZXRob2QsIFwic3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcInJlZ2lzdGVyUm91dGVcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwicm91dGUubWV0aG9kXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5fcm91dGVzLmhhcyhyb3V0ZS5tZXRob2QpKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3V0ZXMuc2V0KHJvdXRlLm1ldGhvZCwgW10pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JvdXRlcy5nZXQocm91dGUubWV0aG9kKS5wdXNoKHJvdXRlKTtcbiAgICB9XG4gICAgdW5yZWdpc3RlclJvdXRlKHJvdXRlKSB7XG4gICAgICAgIGlmICghdGhpcy5fcm91dGVzLmhhcyhyb3V0ZS5tZXRob2QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwidW5yZWdpc3Rlci1yb3V0ZS1idXQtbm90LWZvdW5kLXdpdGgtbWV0aG9kXCIsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHJvdXRlLm1ldGhvZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm91dGVJbmRleCA9IHRoaXMuX3JvdXRlcy5nZXQocm91dGUubWV0aG9kKS5pbmRleE9mKHJvdXRlKTtcbiAgICAgICAgaWYgKHJvdXRlSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5fcm91dGVzLmdldChyb3V0ZS5tZXRob2QpLnNwbGljZShyb3V0ZUluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJ1bnJlZ2lzdGVyLXJvdXRlLXJvdXRlLW5vdC1yZWdpc3RlcmVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFVybHNUb1ByZWNhY2hlS2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybHNUb0NhY2hlS2V5cztcbiAgICB9XG4gICAgZ2V0UHJlY2FjaGVkVXJscygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIC4uLnRoaXMuX3VybHNUb0NhY2hlS2V5cy5rZXlzKClcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZ2V0UHJlY2FjaGVLZXlGb3JVcmwodXJsKSB7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwodXJsLCBsb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybHNUb0NhY2hlS2V5cy5nZXQodXJsT2JqZWN0LmhyZWYpO1xuICAgIH1cbiAgICBnZXRJbnRlZ3JpdHlGb3JQcmVjYWNoZUtleShjYWNoZUtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVLZXlzVG9JbnRlZ3JpdGllcy5nZXQoY2FjaGVLZXkpO1xuICAgIH1cbiAgICBhc3luYyBtYXRjaFByZWNhY2hlKHJlcXVlc3QpIHtcbiAgICAgICAgY29uc3QgdXJsID0gcmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgPyByZXF1ZXN0LnVybCA6IHJlcXVlc3Q7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZXRQcmVjYWNoZUtleUZvclVybCh1cmwpO1xuICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgc2VsZi5jYWNoZXMub3Blbih0aGlzLnByZWNhY2hlU3RyYXRlZ3kuY2FjaGVOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5tYXRjaChjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3JlYXRlSGFuZGxlckJvdW5kVG9VcmwodXJsKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gdGhpcy5nZXRQcmVjYWNoZUtleUZvclVybCh1cmwpO1xuICAgICAgICBpZiAoIWNhY2hlS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm9uLXByZWNhY2hlZC11cmxcIiwge1xuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChvcHRpb25zKT0+e1xuICAgICAgICAgICAgb3B0aW9ucy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsKTtcbiAgICAgICAgICAgIG9wdGlvbnMucGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMucGFyYW1zXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlY2FjaGVTdHJhdGVneS5oYW5kbGUob3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGhhbmRsZVJlcXVlc3QoeyByZXF1ZXN0LCBldmVudCB9KSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0luc3RhbmNlKHJlcXVlc3QsIFJlcXVlc3QsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiU2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImhhbmRsZVJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwib3B0aW9ucy5yZXF1ZXN0XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGxvY2F0aW9uLmhyZWYpO1xuICAgICAgICBpZiAoIXVybC5wcm90b2NvbC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlJvdXRlciBvbmx5IHN1cHBvcnRzIFVSTHMgdGhhdCBzdGFydCB3aXRoICdodHRwJy5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FtZU9yaWdpbiA9IHVybC5vcmlnaW4gPT09IGxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgY29uc3QgeyBwYXJhbXMsIHJvdXRlIH0gPSB0aGlzLmZpbmRNYXRjaGluZ1JvdXRlKHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHNhbWVPcmlnaW4sXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBoYW5kbGVyID0gcm91dGU/LmhhbmRsZXI7XG4gICAgICAgIGNvbnN0IGRlYnVnTWVzc2FnZXMgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z01lc3NhZ2VzLnB1c2goW1xuICAgICAgICAgICAgICAgICAgICBcIkZvdW5kIGEgcm91dGUgdG8gaGFuZGxlIHRoaXMgcmVxdWVzdDpcIixcbiAgICAgICAgICAgICAgICAgICAgcm91dGVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnTWVzc2FnZXMucHVzaChbXG4gICAgICAgICAgICAgICAgICAgICAgICBgUGFzc2luZyB0aGUgZm9sbG93aW5nIHBhcmFtcyB0byB0aGUgcm91dGUncyBoYW5kbGVyOmAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcXVlc3QubWV0aG9kO1xuICAgICAgICBpZiAoIWhhbmRsZXIgJiYgdGhpcy5fZGVmYXVsdEhhbmRsZXJNYXAuaGFzKG1ldGhvZCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z01lc3NhZ2VzLnB1c2goYEZhaWxlZCB0byBmaW5kIGEgbWF0Y2hpbmcgcm91dGUuIEZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCBoYW5kbGVyIGZvciAke21ldGhvZH0uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyID0gdGhpcy5fZGVmYXVsdEhhbmRsZXJNYXAuZ2V0KG1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBObyByb3V0ZSBmb3VuZCBmb3I6ICR7Z2V0RnJpZW5kbHlVUkwodXJsKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQoYFJvdXRlciBpcyByZXNwb25kaW5nIHRvOiAke2dldEZyaWVuZGx5VVJMKHVybCl9YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBkZWJ1Z01lc3NhZ2VzKXtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtc2cpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coLi4ubXNnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlc3BvbnNlUHJvbWlzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZSA9IGhhbmRsZXIuaGFuZGxlKHtcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2F0Y2hIYW5kbGVyID0gcm91dGU/LmNhdGNoSGFuZGxlcjtcbiAgICAgICAgaWYgKHJlc3BvbnNlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UgJiYgKHRoaXMuX2NhdGNoSGFuZGxlciB8fCBjYXRjaEhhbmRsZXIpKSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UgPSByZXNwb25zZVByb21pc2UuY2F0Y2goYXN5bmMgKGVycik9PntcbiAgICAgICAgICAgICAgICBpZiAoY2F0Y2hIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChgRXJyb3IgdGhyb3duIHdoZW4gcmVzcG9uZGluZyB0bzogICR7Z2V0RnJpZW5kbHlVUkwodXJsKX0uIEZhbGxpbmcgYmFjayB0byByb3V0ZSdzIENhdGNoIEhhbmRsZXIuYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJFcnJvciB0aHJvd24gYnk6XCIsIHJvdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBjYXRjaEhhbmRsZXIuaGFuZGxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChjYXRjaEVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGNoRXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBjYXRjaEVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2F0Y2hIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChgRXJyb3IgdGhyb3duIHdoZW4gcmVzcG9uZGluZyB0bzogICR7Z2V0RnJpZW5kbHlVUkwodXJsKX0uIEZhbGxpbmcgYmFjayB0byBnbG9iYWwgQ2F0Y2ggSGFuZGxlci5gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHRocm93biBieTpcIiwgcm91dGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2F0Y2hIYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZVByb21pc2U7XG4gICAgfVxuICAgIGZpbmRNYXRjaGluZ1JvdXRlKHsgdXJsLCBzYW1lT3JpZ2luLCByZXF1ZXN0LCBldmVudCB9KSB7XG4gICAgICAgIGNvbnN0IHJvdXRlcyA9IHRoaXMuX3JvdXRlcy5nZXQocmVxdWVzdC5tZXRob2QpIHx8IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcyl7XG4gICAgICAgICAgICBsZXQgcGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSByb3V0ZS5tYXRjaCh7XG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHNhbWVPcmlnaW4sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaFJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGBXaGlsZSByb3V0aW5nICR7Z2V0RnJpZW5kbHlVUkwodXJsKX0sIGFuIGFzeW5jIG1hdGNoQ2FsbGJhY2sgZnVuY3Rpb24gd2FzIHVzZWQuIFBsZWFzZSBjb252ZXJ0IHRoZSBmb2xsb3dpbmcgcm91dGUgdG8gdXNlIGEgc3luY2hyb25vdXMgbWF0Y2hDYWxsYmFjayBmdW5jdGlvbjpgLCByb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gbWF0Y2hSZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSAmJiBwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoUmVzdWx0LmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgT2JqZWN0LmtleXMobWF0Y2hSZXN1bHQpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hSZXN1bHQgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcm91dGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cblxuY29uc3QgY2FjaGVOYW1lcyA9IHtcbiAgICBnZXQgZ29vZ2xlQW5hbHl0aWNzICgpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlTmFtZXMkMS5nZXRHb29nbGVBbmFseXRpY3NOYW1lKCk7XG4gICAgfSxcbiAgICBnZXQgcHJlY2FjaGUgKCkge1xuICAgICAgICByZXR1cm4gY2FjaGVOYW1lcyQxLmdldFByZWNhY2hlTmFtZSgpO1xuICAgIH0sXG4gICAgZ2V0IHByZWZpeCAoKSB7XG4gICAgICAgIHJldHVybiBjYWNoZU5hbWVzJDEuZ2V0UHJlZml4KCk7XG4gICAgfSxcbiAgICBnZXQgcnVudGltZSAoKSB7XG4gICAgICAgIHJldHVybiBjYWNoZU5hbWVzJDEuZ2V0UnVudGltZU5hbWUoKTtcbiAgICB9LFxuICAgIGdldCBzdWZmaXggKCkge1xuICAgICAgICByZXR1cm4gY2FjaGVOYW1lcyQxLmdldFN1ZmZpeCgpO1xuICAgIH1cbn07XG5cbmNvbnN0IEJST0FEQ0FTVF9VUERBVEVfTUVTU0FHRV9UWVBFID0gXCJDQUNIRV9VUERBVEVEXCI7XG5jb25zdCBCUk9BRENBU1RfVVBEQVRFX01FU1NBR0VfTUVUQSA9IFwic2Vyd2lzdC1icm9hZGNhc3QtdXBkYXRlXCI7XG5jb25zdCBCUk9BRENBU1RfVVBEQVRFX0RFRkFVTFRfTk9USUZZID0gdHJ1ZTtcbmNvbnN0IEJST0FEQ0FTVF9VUERBVEVfREVGQVVMVF9IRUFERVJTID0gW1xuICAgIFwiY29udGVudC1sZW5ndGhcIixcbiAgICBcImV0YWdcIixcbiAgICBcImxhc3QtbW9kaWZpZWRcIlxuXTtcblxuY29uc3QgcmVzcG9uc2VzQXJlU2FtZSA9IChmaXJzdFJlc3BvbnNlLCBzZWNvbmRSZXNwb25zZSwgaGVhZGVyc1RvQ2hlY2spPT57XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoIShmaXJzdFJlc3BvbnNlIGluc3RhbmNlb2YgUmVzcG9uc2UgJiYgc2Vjb25kUmVzcG9uc2UgaW5zdGFuY2VvZiBSZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJpbnZhbGlkLXJlc3BvbnNlcy1hcmUtc2FtZS1hcmdzXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGF0TGVhc3RPbmVIZWFkZXJBdmFpbGFibGUgPSBoZWFkZXJzVG9DaGVjay5zb21lKChoZWFkZXIpPT57XG4gICAgICAgIHJldHVybiBmaXJzdFJlc3BvbnNlLmhlYWRlcnMuaGFzKGhlYWRlcikgJiYgc2Vjb25kUmVzcG9uc2UuaGVhZGVycy5oYXMoaGVhZGVyKTtcbiAgICB9KTtcbiAgICBpZiAoIWF0TGVhc3RPbmVIZWFkZXJBdmFpbGFibGUpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oXCJVbmFibGUgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSByZXNwb25zZSBoYXMgYmVlbiB1cGRhdGVkIGJlY2F1c2Ugbm9uZSBvZiB0aGUgaGVhZGVycyB0aGF0IHdvdWxkIGJlIGNoZWNrZWQgYXJlIHByZXNlbnQuXCIpO1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiQXR0ZW1wdGluZyB0byBjb21wYXJlIHRoZSBmb2xsb3dpbmc6IFwiLCBmaXJzdFJlc3BvbnNlLCBzZWNvbmRSZXNwb25zZSwgaGVhZGVyc1RvQ2hlY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyc1RvQ2hlY2suZXZlcnkoKGhlYWRlcik9PntcbiAgICAgICAgY29uc3QgaGVhZGVyU3RhdGVDb21wYXJpc29uID0gZmlyc3RSZXNwb25zZS5oZWFkZXJzLmhhcyhoZWFkZXIpID09PSBzZWNvbmRSZXNwb25zZS5oZWFkZXJzLmhhcyhoZWFkZXIpO1xuICAgICAgICBjb25zdCBoZWFkZXJWYWx1ZUNvbXBhcmlzb24gPSBmaXJzdFJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlcikgPT09IHNlY29uZFJlc3BvbnNlLmhlYWRlcnMuZ2V0KGhlYWRlcik7XG4gICAgICAgIHJldHVybiBoZWFkZXJTdGF0ZUNvbXBhcmlzb24gJiYgaGVhZGVyVmFsdWVDb21wYXJpc29uO1xuICAgIH0pO1xufTtcblxuY29uc3QgaXNTYWZhcmkgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG5jb25zdCBkZWZhdWx0UGF5bG9hZEdlbmVyYXRvciA9IChkYXRhKT0+e1xuICAgIHJldHVybiB7XG4gICAgICAgIGNhY2hlTmFtZTogZGF0YS5jYWNoZU5hbWUsXG4gICAgICAgIHVwZGF0ZWRVUkw6IGRhdGEucmVxdWVzdC51cmxcbiAgICB9O1xufTtcbmNsYXNzIEJyb2FkY2FzdENhY2hlVXBkYXRlIHtcbiAgICBfaGVhZGVyc1RvQ2hlY2s7XG4gICAgX2dlbmVyYXRlUGF5bG9hZDtcbiAgICBfbm90aWZ5QWxsQ2xpZW50cztcbiAgICBjb25zdHJ1Y3Rvcih7IGdlbmVyYXRlUGF5bG9hZCwgaGVhZGVyc1RvQ2hlY2ssIG5vdGlmeUFsbENsaWVudHMgfSA9IHt9KXtcbiAgICAgICAgdGhpcy5faGVhZGVyc1RvQ2hlY2sgPSBoZWFkZXJzVG9DaGVjayB8fCBCUk9BRENBU1RfVVBEQVRFX0RFRkFVTFRfSEVBREVSUztcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVQYXlsb2FkID0gZ2VuZXJhdGVQYXlsb2FkIHx8IGRlZmF1bHRQYXlsb2FkR2VuZXJhdG9yO1xuICAgICAgICB0aGlzLl9ub3RpZnlBbGxDbGllbnRzID0gbm90aWZ5QWxsQ2xpZW50cyA/PyBCUk9BRENBU1RfVVBEQVRFX0RFRkFVTFRfTk9USUZZO1xuICAgIH1cbiAgICBhc3luYyBub3RpZnlJZlVwZGF0ZWQob3B0aW9ucykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKG9wdGlvbnMuY2FjaGVOYW1lLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJyb2FkY2FzdENhY2hlVXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwibm90aWZ5SWZVcGRhdGVkXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNhY2hlTmFtZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0luc3RhbmNlKG9wdGlvbnMubmV3UmVzcG9uc2UsIFJlc3BvbnNlLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJyb2FkY2FzdENhY2hlVXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwibm90aWZ5SWZVcGRhdGVkXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcIm5ld1Jlc3BvbnNlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2Uob3B0aW9ucy5yZXF1ZXN0LCBSZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkJyb2FkY2FzdENhY2hlVXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwibm90aWZ5SWZVcGRhdGVkXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcInJlcXVlc3RcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLm9sZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNwb25zZXNBcmVTYW1lKG9wdGlvbnMub2xkUmVzcG9uc2UsIG9wdGlvbnMubmV3UmVzcG9uc2UsIHRoaXMuX2hlYWRlcnNUb0NoZWNrKSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coXCJOZXdlciByZXNwb25zZSBmb3VuZCAoYW5kIGNhY2hlZCkgZm9yOlwiLCBvcHRpb25zLnJlcXVlc3QudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJST0FEQ0FTVF9VUERBVEVfTUVTU0FHRV9UWVBFLFxuICAgICAgICAgICAgICAgIG1ldGE6IEJST0FEQ0FTVF9VUERBVEVfTUVTU0FHRV9NRVRBLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRoaXMuX2dlbmVyYXRlUGF5bG9hZChvcHRpb25zKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlcXVlc3QubW9kZSA9PT0gXCJuYXZpZ2F0ZVwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGluZ0NsaWVudElkO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmV2ZW50IGluc3RhbmNlb2YgRmV0Y2hFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmdDbGllbnRJZCA9IG9wdGlvbnMuZXZlbnQucmVzdWx0aW5nQ2xpZW50SWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdGluZ1dpbiA9IGF3YWl0IHJlc3VsdGluZ0NsaWVudEV4aXN0cyhyZXN1bHRpbmdDbGllbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRpbmdXaW4gfHwgaXNTYWZhcmkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGltZW91dCgzNTAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fbm90aWZ5QWxsQ2xpZW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvd3MgPSBhd2FpdCBzZWxmLmNsaWVudHMubWF0Y2hBbGwoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIndpbmRvd1wiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB3aW4gb2Ygd2luZG93cyl7XG4gICAgICAgICAgICAgICAgICAgIHdpbi5wb3N0TWVzc2FnZShtZXNzYWdlRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ldmVudCBpbnN0YW5jZW9mIEZldGNoRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgc2VsZi5jbGllbnRzLmdldChvcHRpb25zLmV2ZW50LmNsaWVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50Py5wb3N0TWVzc2FnZShtZXNzYWdlRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBCcm9hZGNhc3RVcGRhdGVQbHVnaW4ge1xuICAgIF9icm9hZGNhc3RVcGRhdGU7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucyl7XG4gICAgICAgIHRoaXMuX2Jyb2FkY2FzdFVwZGF0ZSA9IG5ldyBCcm9hZGNhc3RDYWNoZVVwZGF0ZShvcHRpb25zKTtcbiAgICB9XG4gICAgY2FjaGVEaWRVcGRhdGUob3B0aW9ucykge1xuICAgICAgICB2b2lkIHRoaXMuX2Jyb2FkY2FzdFVwZGF0ZS5ub3RpZnlJZlVwZGF0ZWQob3B0aW9ucyk7XG4gICAgfVxufVxuXG5jbGFzcyBDYWNoZWFibGVSZXNwb25zZSB7XG4gICAgX3N0YXR1c2VzO1xuICAgIF9oZWFkZXJzO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KXtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKCEoY29uZmlnLnN0YXR1c2VzIHx8IGNvbmZpZy5oZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJzdGF0dXNlcy1vci1oZWFkZXJzLXJlcXVpcmVkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDYWNoZWFibGVSZXNwb25zZVwiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlnLnN0YXR1c2VzKSB7XG4gICAgICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzQXJyYXkoY29uZmlnLnN0YXR1c2VzLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2FjaGVhYmxlUmVzcG9uc2VcIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNvbmZpZy5zdGF0dXNlc1wiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlnLmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGNvbmZpZy5oZWFkZXJzLCBcIm9iamVjdFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2FjaGVhYmxlUmVzcG9uc2VcIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNvbmZpZy5oZWFkZXJzXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGF0dXNlcyA9IGNvbmZpZy5zdGF0dXNlcztcbiAgICAgICAgaWYgKGNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJzID0gbmV3IEhlYWRlcnMoY29uZmlnLmhlYWRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzUmVzcG9uc2VDYWNoZWFibGUocmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UocmVzcG9uc2UsIFJlc3BvbnNlLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkNhY2hlYWJsZVJlc3BvbnNlXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiaXNSZXNwb25zZUNhY2hlYWJsZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyZXNwb25zZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2FjaGVhYmxlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1c2VzKSB7XG4gICAgICAgICAgICBjYWNoZWFibGUgPSB0aGlzLl9zdGF0dXNlcy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9oZWFkZXJzICYmIGNhY2hlYWJsZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdIG9mIHRoaXMuX2hlYWRlcnMuZW50cmllcygpKXtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoaGVhZGVyTmFtZSkgIT09IGhlYWRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgaWYgKCFjYWNoZWFibGUpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQoYFRoZSByZXF1ZXN0IGZvciAnJHtnZXRGcmllbmRseVVSTChyZXNwb25zZS51cmwpfScgcmV0dXJuZWQgYSByZXNwb25zZSB0aGF0IGRvZXMgbm90IG1lZXQgdGhlIGNyaXRlcmlhIGZvciBiZWluZyBjYWNoZWQuYCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKFwiVmlldyBjYWNoZWFiaWxpdHkgY3JpdGVyaWEgaGVyZS5cIik7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgQ2FjaGVhYmxlIHN0YXR1c2VzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuX3N0YXR1c2VzKX1gKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBDYWNoZWFibGUgaGVhZGVyczogJHtKU09OLnN0cmluZ2lmeSh0aGlzLl9oZWFkZXJzLCBudWxsLCAyKX1gKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dGcmllbmRseUhlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlLCBrZXkpPT57XG4gICAgICAgICAgICAgICAgICAgIGxvZ0ZyaWVuZGx5SGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKFwiVmlldyByZXNwb25zZSBzdGF0dXMgYW5kIGhlYWRlcnMgaGVyZS5cIik7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgUmVzcG9uc2Ugc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGBSZXNwb25zZSBoZWFkZXJzOiAke0pTT04uc3RyaW5naWZ5KGxvZ0ZyaWVuZGx5SGVhZGVycywgbnVsbCwgMil9YCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwQ29sbGFwc2VkKFwiVmlldyBmdWxsIHJlc3BvbnNlIGRldGFpbHMgaGVyZS5cIik7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhyZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVhYmxlO1xuICAgIH1cbn1cblxuY2xhc3MgQ2FjaGVhYmxlUmVzcG9uc2VQbHVnaW4ge1xuICAgIF9jYWNoZWFibGVSZXNwb25zZTtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpe1xuICAgICAgICB0aGlzLl9jYWNoZWFibGVSZXNwb25zZSA9IG5ldyBDYWNoZWFibGVSZXNwb25zZShjb25maWcpO1xuICAgIH1cbiAgICBjYWNoZVdpbGxVcGRhdGUgPSBhc3luYyAoeyByZXNwb25zZSB9KT0+e1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVhYmxlUmVzcG9uc2UuaXNSZXNwb25zZUNhY2hlYWJsZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuXG5jb25zdCBEQl9OQU1FID0gXCJzZXJ3aXN0LWV4cGlyYXRpb25cIjtcbmNvbnN0IENBQ0hFX09CSkVDVF9TVE9SRSA9IFwiY2FjaGUtZW50cmllc1wiO1xuY29uc3Qgbm9ybWFsaXplVVJMID0gKHVuTm9ybWFsaXplZFVybCk9PntcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHVuTm9ybWFsaXplZFVybCwgbG9jYXRpb24uaHJlZik7XG4gICAgdXJsLmhhc2ggPSBcIlwiO1xuICAgIHJldHVybiB1cmwuaHJlZjtcbn07XG5jbGFzcyBDYWNoZVRpbWVzdGFtcHNNb2RlbCB7XG4gICAgX2NhY2hlTmFtZTtcbiAgICBfZGIgPSBudWxsO1xuICAgIGNvbnN0cnVjdG9yKGNhY2hlTmFtZSl7XG4gICAgICAgIHRoaXMuX2NhY2hlTmFtZSA9IGNhY2hlTmFtZTtcbiAgICB9XG4gICAgX2dldElkKHVybCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5fY2FjaGVOYW1lfXwke25vcm1hbGl6ZVVSTCh1cmwpfWA7XG4gICAgfVxuICAgIF91cGdyYWRlRGIoZGIpIHtcbiAgICAgICAgY29uc3Qgb2JqU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShDQUNIRV9PQkpFQ1RfU1RPUkUsIHtcbiAgICAgICAgICAgIGtleVBhdGg6IFwiaWRcIlxuICAgICAgICB9KTtcbiAgICAgICAgb2JqU3RvcmUuY3JlYXRlSW5kZXgoXCJjYWNoZU5hbWVcIiwgXCJjYWNoZU5hbWVcIiwge1xuICAgICAgICAgICAgdW5pcXVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgb2JqU3RvcmUuY3JlYXRlSW5kZXgoXCJ0aW1lc3RhbXBcIiwgXCJ0aW1lc3RhbXBcIiwge1xuICAgICAgICAgICAgdW5pcXVlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3VwZ3JhZGVEYkFuZERlbGV0ZU9sZERicyhkYikge1xuICAgICAgICB0aGlzLl91cGdyYWRlRGIoZGIpO1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVOYW1lKSB7XG4gICAgICAgICAgICB2b2lkIGRlbGV0ZURCKHRoaXMuX2NhY2hlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgc2V0VGltZXN0YW1wKHVybCwgdGltZXN0YW1wKSB7XG4gICAgICAgIHVybCA9IG5vcm1hbGl6ZVVSTCh1cmwpO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLl9nZXRJZCh1cmwpLFxuICAgICAgICAgICAgY2FjaGVOYW1lOiB0aGlzLl9jYWNoZU5hbWUsXG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICB0aW1lc3RhbXBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCB0aGlzLmdldERiKCk7XG4gICAgICAgIGNvbnN0IHR4ID0gZGIudHJhbnNhY3Rpb24oQ0FDSEVfT0JKRUNUX1NUT1JFLCBcInJlYWR3cml0ZVwiLCB7XG4gICAgICAgICAgICBkdXJhYmlsaXR5OiBcInJlbGF4ZWRcIlxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdHguc3RvcmUucHV0KGVudHJ5KTtcbiAgICAgICAgYXdhaXQgdHguZG9uZTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0VGltZXN0YW1wKHVybCkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSBhd2FpdCBkYi5nZXQoQ0FDSEVfT0JKRUNUX1NUT1JFLCB0aGlzLl9nZXRJZCh1cmwpKTtcbiAgICAgICAgcmV0dXJuIGVudHJ5Py50aW1lc3RhbXA7XG4gICAgfVxuICAgIGFzeW5jIGV4cGlyZUVudHJpZXMobWluVGltZXN0YW1wLCBtYXhDb3VudCkge1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZ2V0RGIoKTtcbiAgICAgICAgbGV0IGN1cnNvciA9IGF3YWl0IGRiLnRyYW5zYWN0aW9uKENBQ0hFX09CSkVDVF9TVE9SRSwgXCJyZWFkd3JpdGVcIikuc3RvcmUuaW5kZXgoXCJ0aW1lc3RhbXBcIikub3BlbkN1cnNvcihudWxsLCBcInByZXZcIik7XG4gICAgICAgIGNvbnN0IHVybHNEZWxldGVkID0gW107XG4gICAgICAgIGxldCBlbnRyaWVzTm90RGVsZXRlZENvdW50ID0gMDtcbiAgICAgICAgd2hpbGUoY3Vyc29yKXtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGN1cnNvci52YWx1ZTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuY2FjaGVOYW1lID09PSB0aGlzLl9jYWNoZU5hbWUpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluVGltZXN0YW1wICYmIHJlc3VsdC50aW1lc3RhbXAgPCBtaW5UaW1lc3RhbXAgfHwgbWF4Q291bnQgJiYgZW50cmllc05vdERlbGV0ZWRDb3VudCA+PSBtYXhDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3IuZGVsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHVybHNEZWxldGVkLnB1c2gocmVzdWx0LnVybCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllc05vdERlbGV0ZWRDb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvciA9IGF3YWl0IGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxzRGVsZXRlZDtcbiAgICB9XG4gICAgYXN5bmMgZ2V0RGIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RiID0gYXdhaXQgb3BlbkRCKERCX05BTUUsIDEsIHtcbiAgICAgICAgICAgICAgICB1cGdyYWRlOiB0aGlzLl91cGdyYWRlRGJBbmREZWxldGVPbGREYnMuYmluZCh0aGlzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RiO1xuICAgIH1cbn1cblxuY2xhc3MgQ2FjaGVFeHBpcmF0aW9uIHtcbiAgICBfaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgX3JlcnVuUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgX21heEVudHJpZXM7XG4gICAgX21heEFnZVNlY29uZHM7XG4gICAgX21hdGNoT3B0aW9ucztcbiAgICBfY2FjaGVOYW1lO1xuICAgIF90aW1lc3RhbXBNb2RlbDtcbiAgICBjb25zdHJ1Y3RvcihjYWNoZU5hbWUsIGNvbmZpZyA9IHt9KXtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShjYWNoZU5hbWUsIFwic3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2FjaGVFeHBpcmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiY2FjaGVOYW1lXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCEoY29uZmlnLm1heEVudHJpZXMgfHwgY29uZmlnLm1heEFnZVNlY29uZHMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcIm1heC1lbnRyaWVzLW9yLWFnZS1yZXF1aXJlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiQ2FjaGVFeHBpcmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcubWF4RW50cmllcykge1xuICAgICAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoY29uZmlnLm1heEVudHJpZXMsIFwibnVtYmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDYWNoZUV4cGlyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNvbmZpZy5tYXhFbnRyaWVzXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcubWF4QWdlU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoY29uZmlnLm1heEFnZVNlY29uZHMsIFwibnVtYmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDYWNoZUV4cGlyYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNvbmZpZy5tYXhBZ2VTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXhFbnRyaWVzID0gY29uZmlnLm1heEVudHJpZXM7XG4gICAgICAgIHRoaXMuX21heEFnZVNlY29uZHMgPSBjb25maWcubWF4QWdlU2Vjb25kcztcbiAgICAgICAgdGhpcy5fbWF0Y2hPcHRpb25zID0gY29uZmlnLm1hdGNoT3B0aW9ucztcbiAgICAgICAgdGhpcy5fY2FjaGVOYW1lID0gY2FjaGVOYW1lO1xuICAgICAgICB0aGlzLl90aW1lc3RhbXBNb2RlbCA9IG5ldyBDYWNoZVRpbWVzdGFtcHNNb2RlbChjYWNoZU5hbWUpO1xuICAgIH1cbiAgICBhc3luYyBleHBpcmVFbnRyaWVzKCkge1xuICAgICAgICBpZiAodGhpcy5faXNSdW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXJ1blJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWluVGltZXN0YW1wID0gdGhpcy5fbWF4QWdlU2Vjb25kcyA/IERhdGUubm93KCkgLSB0aGlzLl9tYXhBZ2VTZWNvbmRzICogMTAwMCA6IDA7XG4gICAgICAgIGNvbnN0IHVybHNFeHBpcmVkID0gYXdhaXQgdGhpcy5fdGltZXN0YW1wTW9kZWwuZXhwaXJlRW50cmllcyhtaW5UaW1lc3RhbXAsIHRoaXMuX21heEVudHJpZXMpO1xuICAgICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHNlbGYuY2FjaGVzLm9wZW4odGhpcy5fY2FjaGVOYW1lKTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdXJsc0V4cGlyZWQpe1xuICAgICAgICAgICAgYXdhaXQgY2FjaGUuZGVsZXRlKHVybCwgdGhpcy5fbWF0Y2hPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAodXJsc0V4cGlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChgRXhwaXJlZCAke3VybHNFeHBpcmVkLmxlbmd0aH0gYCArIGAke3VybHNFeHBpcmVkLmxlbmd0aCA9PT0gMSA/IFwiZW50cnlcIiA6IFwiZW50cmllc1wifSBhbmQgcmVtb3ZlZCBgICsgYCR7dXJsc0V4cGlyZWQubGVuZ3RoID09PSAxID8gXCJpdFwiIDogXCJ0aGVtXCJ9IGZyb20gdGhlIGAgKyBgJyR7dGhpcy5fY2FjaGVOYW1lfScgY2FjaGUuYCk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgRXhwaXJlZCB0aGUgZm9sbG93aW5nICR7dXJsc0V4cGlyZWQubGVuZ3RoID09PSAxID8gXCJVUkxcIiA6IFwiVVJMc1wifTpgKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzRXhwaXJlZCl7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coYCAgICAke3VybH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkNhY2hlIGV4cGlyYXRpb24gcmFuIGFuZCBmb3VuZCBubyBlbnRyaWVzIHRvIHJlbW92ZS5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9yZXJ1blJlcXVlc3RlZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVydW5SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHZvaWQgdGhpcy5leHBpcmVFbnRyaWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgdXBkYXRlVGltZXN0YW1wKHVybCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKHVybCwgXCJzdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJDYWNoZUV4cGlyYXRpb25cIixcbiAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJ1cGRhdGVUaW1lc3RhbXBcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwidXJsXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX3RpbWVzdGFtcE1vZGVsLnNldFRpbWVzdGFtcCh1cmwsIERhdGUubm93KCkpO1xuICAgIH1cbiAgICBhc3luYyBpc1VSTEV4cGlyZWQodXJsKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWF4QWdlU2Vjb25kcykge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJleHBpcmVkLXRlc3Qtd2l0aG91dC1tYXgtYWdlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZTogXCJpc1VSTEV4cGlyZWRcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcIm1heEFnZVNlY29uZHNcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGF3YWl0IHRoaXMuX3RpbWVzdGFtcE1vZGVsLmdldFRpbWVzdGFtcCh1cmwpO1xuICAgICAgICBjb25zdCBleHBpcmVPbGRlclRoYW4gPSBEYXRlLm5vdygpIC0gdGhpcy5fbWF4QWdlU2Vjb25kcyAqIDEwMDA7XG4gICAgICAgIHJldHVybiB0aW1lc3RhbXAgIT09IHVuZGVmaW5lZCA/IHRpbWVzdGFtcCA8IGV4cGlyZU9sZGVyVGhhbiA6IHRydWU7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVydW5SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5fdGltZXN0YW1wTW9kZWwuZXhwaXJlRW50cmllcyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpO1xuICAgIH1cbn1cblxuY29uc3QgcmVnaXN0ZXJRdW90YUVycm9yQ2FsbGJhY2sgPSAoY2FsbGJhY2spPT57XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGNhbGxiYWNrLCBcImZ1bmN0aW9uXCIsIHtcbiAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwiQHNlcndpc3QvY29yZVwiLFxuICAgICAgICAgICAgZnVuY05hbWU6IFwicmVnaXN0ZXJcIixcbiAgICAgICAgICAgIHBhcmFtTmFtZTogXCJjYWxsYmFja1wiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBxdW90YUVycm9yQ2FsbGJhY2tzLmFkZChjYWxsYmFjayk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBsb2dnZXIubG9nKFwiUmVnaXN0ZXJlZCBhIGNhbGxiYWNrIHRvIHJlc3BvbmQgdG8gcXVvdGEgZXJyb3JzLlwiLCBjYWxsYmFjayk7XG4gICAgfVxufTtcblxuY2xhc3MgRXhwaXJhdGlvblBsdWdpbiB7XG4gICAgX2NvbmZpZztcbiAgICBfY2FjaGVFeHBpcmF0aW9ucztcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSl7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICghKGNvbmZpZy5tYXhFbnRyaWVzIHx8IGNvbmZpZy5tYXhBZ2VTZWNvbmRzKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJtYXgtZW50cmllcy1vci1hZ2UtcmVxdWlyZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkV4cGlyYXRpb25QbHVnaW5cIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbmZpZy5tYXhFbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShjb25maWcubWF4RW50cmllcywgXCJudW1iZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIkV4cGlyYXRpb25QbHVnaW5cIixcbiAgICAgICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY29uc3RydWN0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNvbmZpZy5tYXhFbnRyaWVzXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25maWcubWF4QWdlU2Vjb25kcykge1xuICAgICAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoY29uZmlnLm1heEFnZVNlY29uZHMsIFwibnVtYmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJFeHBpcmF0aW9uUGx1Z2luXCIsXG4gICAgICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNvbnN0cnVjdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJjb25maWcubWF4QWdlU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29uZmlnLm1heEFnZUZyb20pIHtcbiAgICAgICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNUeXBlKGNvbmZpZy5tYXhBZ2VGcm9tLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiRXhwaXJhdGlvblBsdWdpblwiLFxuICAgICAgICAgICAgICAgICAgICBmdW5jTmFtZTogXCJjb25zdHJ1Y3RvclwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwiY29uZmlnLm1heEFnZUZyb21cIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5fY2FjaGVFeHBpcmF0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcubWF4QWdlRnJvbSkge1xuICAgICAgICAgICAgdGhpcy5fY29uZmlnLm1heEFnZUZyb20gPSBcImxhc3QtZmV0Y2hlZFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcucHVyZ2VPblF1b3RhRXJyb3IpIHtcbiAgICAgICAgICAgIHJlZ2lzdGVyUXVvdGFFcnJvckNhbGxiYWNrKCgpPT50aGlzLmRlbGV0ZUNhY2hlQW5kTWV0YWRhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2dldENhY2hlRXhwaXJhdGlvbihjYWNoZU5hbWUpIHtcbiAgICAgICAgaWYgKGNhY2hlTmFtZSA9PT0gY2FjaGVOYW1lcyQxLmdldFJ1bnRpbWVOYW1lKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJleHBpcmUtY3VzdG9tLWNhY2hlcy1vbmx5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZUV4cGlyYXRpb24gPSB0aGlzLl9jYWNoZUV4cGlyYXRpb25zLmdldChjYWNoZU5hbWUpO1xuICAgICAgICBpZiAoIWNhY2hlRXhwaXJhdGlvbikge1xuICAgICAgICAgICAgY2FjaGVFeHBpcmF0aW9uID0gbmV3IENhY2hlRXhwaXJhdGlvbihjYWNoZU5hbWUsIHRoaXMuX2NvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZUV4cGlyYXRpb25zLnNldChjYWNoZU5hbWUsIGNhY2hlRXhwaXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhY2hlRXhwaXJhdGlvbjtcbiAgICB9XG4gICAgY2FjaGVkUmVzcG9uc2VXaWxsQmVVc2VkKHsgZXZlbnQsIGNhY2hlTmFtZSwgcmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UgfSkge1xuICAgICAgICBpZiAoIWNhY2hlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0ZyZXNoID0gdGhpcy5faXNSZXNwb25zZURhdGVGcmVzaChjYWNoZWRSZXNwb25zZSk7XG4gICAgICAgIGNvbnN0IGNhY2hlRXhwaXJhdGlvbiA9IHRoaXMuX2dldENhY2hlRXhwaXJhdGlvbihjYWNoZU5hbWUpO1xuICAgICAgICBjb25zdCBpc01heEFnZUZyb21MYXN0VXNlZCA9IHRoaXMuX2NvbmZpZy5tYXhBZ2VGcm9tID09PSBcImxhc3QtdXNlZFwiO1xuICAgICAgICBjb25zdCBkb25lID0gKGFzeW5jICgpPT57XG4gICAgICAgICAgICBpZiAoaXNNYXhBZ2VGcm9tTGFzdFVzZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYWNoZUV4cGlyYXRpb24udXBkYXRlVGltZXN0YW1wKHJlcXVlc3QudXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNhY2hlRXhwaXJhdGlvbi5leHBpcmVFbnRyaWVzKCk7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmVudC53YWl0VW50aWwoZG9uZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgRmV0Y2hFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihgVW5hYmxlIHRvIGVuc3VyZSBzZXJ2aWNlIHdvcmtlciBzdGF5cyBhbGl2ZSB3aGVuIHVwZGF0aW5nIGNhY2hlIGVudHJ5IGZvciAnJHtnZXRGcmllbmRseVVSTChldmVudC5yZXF1ZXN0LnVybCl9Jy5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnJlc2ggPyBjYWNoZWRSZXNwb25zZSA6IG51bGw7XG4gICAgfVxuICAgIF9pc1Jlc3BvbnNlRGF0ZUZyZXNoKGNhY2hlZFJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGlzTWF4QWdlRnJvbUxhc3RVc2VkID0gdGhpcy5fY29uZmlnLm1heEFnZUZyb20gPT09IFwibGFzdC11c2VkXCI7XG4gICAgICAgIGlmIChpc01heEFnZUZyb21MYXN0VXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcubWF4QWdlU2Vjb25kcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZUhlYWRlclRpbWVzdGFtcCA9IHRoaXMuX2dldERhdGVIZWFkZXJUaW1lc3RhbXAoY2FjaGVkUmVzcG9uc2UpO1xuICAgICAgICBpZiAoZGF0ZUhlYWRlclRpbWVzdGFtcCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGVIZWFkZXJUaW1lc3RhbXAgPj0gbm93IC0gdGhpcy5fY29uZmlnLm1heEFnZVNlY29uZHMgKiAxMDAwO1xuICAgIH1cbiAgICBfZ2V0RGF0ZUhlYWRlclRpbWVzdGFtcChjYWNoZWRSZXNwb25zZSkge1xuICAgICAgICBpZiAoIWNhY2hlZFJlc3BvbnNlLmhlYWRlcnMuaGFzKFwiZGF0ZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZUhlYWRlciA9IGNhY2hlZFJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiZGF0ZVwiKTtcbiAgICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGVIZWFkZXIpO1xuICAgICAgICBjb25zdCBoZWFkZXJUaW1lID0gcGFyc2VkRGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4oaGVhZGVyVGltZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJUaW1lO1xuICAgIH1cbiAgICBhc3luYyBjYWNoZURpZFVwZGF0ZSh7IGNhY2hlTmFtZSwgcmVxdWVzdCB9KSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc1R5cGUoY2FjaGVOYW1lLCBcInN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcIlBsdWdpblwiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNhY2hlRGlkVXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcImNhY2hlTmFtZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZpbmFsQXNzZXJ0RXhwb3J0cy5pc0luc3RhbmNlKHJlcXVlc3QsIFJlcXVlc3QsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcInNlcndpc3RcIixcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiUGx1Z2luXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY2FjaGVEaWRVcGRhdGVcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwicmVxdWVzdFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjYWNoZUV4cGlyYXRpb24gPSB0aGlzLl9nZXRDYWNoZUV4cGlyYXRpb24oY2FjaGVOYW1lKTtcbiAgICAgICAgYXdhaXQgY2FjaGVFeHBpcmF0aW9uLnVwZGF0ZVRpbWVzdGFtcChyZXF1ZXN0LnVybCk7XG4gICAgICAgIGF3YWl0IGNhY2hlRXhwaXJhdGlvbi5leHBpcmVFbnRyaWVzKCk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUNhY2hlQW5kTWV0YWRhdGEoKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2NhY2hlTmFtZSwgY2FjaGVFeHBpcmF0aW9uXSBvZiB0aGlzLl9jYWNoZUV4cGlyYXRpb25zKXtcbiAgICAgICAgICAgIGF3YWl0IHNlbGYuY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpO1xuICAgICAgICAgICAgYXdhaXQgY2FjaGVFeHBpcmF0aW9uLmRlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NhY2hlRXhwaXJhdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgfVxufVxuXG5jb25zdCBjYWxjdWxhdGVFZmZlY3RpdmVCb3VuZGFyaWVzID0gKGJsb2IsIHN0YXJ0LCBlbmQpPT57XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNJbnN0YW5jZShibG9iLCBCbG9iLCB7XG4gICAgICAgICAgICBtb2R1bGVOYW1lOiBcIkBzZXJ3aXN0L3JhbmdlLXJlcXVlc3RzXCIsXG4gICAgICAgICAgICBmdW5jTmFtZTogXCJjYWxjdWxhdGVFZmZlY3RpdmVCb3VuZGFyaWVzXCIsXG4gICAgICAgICAgICBwYXJhbU5hbWU6IFwiYmxvYlwiXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBibG9iU2l6ZSA9IGJsb2Iuc2l6ZTtcbiAgICBpZiAoZW5kICYmIGVuZCA+IGJsb2JTaXplIHx8IHN0YXJ0ICYmIHN0YXJ0IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwicmFuZ2Utbm90LXNhdGlzZmlhYmxlXCIsIHtcbiAgICAgICAgICAgIHNpemU6IGJsb2JTaXplLFxuICAgICAgICAgICAgZW5kLFxuICAgICAgICAgICAgc3RhcnRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBlZmZlY3RpdmVTdGFydDtcbiAgICBsZXQgZWZmZWN0aXZlRW5kO1xuICAgIGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIGVuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVmZmVjdGl2ZVN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIGVmZmVjdGl2ZUVuZCA9IGVuZCArIDE7XG4gICAgfSBlbHNlIGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVmZmVjdGl2ZVN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgIGVmZmVjdGl2ZUVuZCA9IGJsb2JTaXplO1xuICAgIH0gZWxzZSBpZiAoZW5kICE9PSB1bmRlZmluZWQgJiYgc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlZmZlY3RpdmVTdGFydCA9IGJsb2JTaXplIC0gZW5kO1xuICAgICAgICBlZmZlY3RpdmVFbmQgPSBibG9iU2l6ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IGVmZmVjdGl2ZVN0YXJ0LFxuICAgICAgICBlbmQ6IGVmZmVjdGl2ZUVuZFxuICAgIH07XG59O1xuXG5jb25zdCBwYXJzZVJhbmdlSGVhZGVyID0gKHJhbmdlSGVhZGVyKT0+e1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzVHlwZShyYW5nZUhlYWRlciwgXCJzdHJpbmdcIiwge1xuICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJAc2Vyd2lzdC9yYW5nZS1yZXF1ZXN0c1wiLFxuICAgICAgICAgICAgZnVuY05hbWU6IFwicGFyc2VSYW5nZUhlYWRlclwiLFxuICAgICAgICAgICAgcGFyYW1OYW1lOiBcInJhbmdlSGVhZGVyXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSYW5nZUhlYWRlciA9IHJhbmdlSGVhZGVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghbm9ybWFsaXplZFJhbmdlSGVhZGVyLnN0YXJ0c1dpdGgoXCJieXRlcz1cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcInVuaXQtbXVzdC1iZS1ieXRlc1wiLCB7XG4gICAgICAgICAgICBub3JtYWxpemVkUmFuZ2VIZWFkZXJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChub3JtYWxpemVkUmFuZ2VIZWFkZXIuaW5jbHVkZXMoXCIsXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBTZXJ3aXN0RXJyb3IoXCJzaW5nbGUtcmFuZ2Utb25seVwiLCB7XG4gICAgICAgICAgICBub3JtYWxpemVkUmFuZ2VIZWFkZXJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlUGFydHMgPSAvKFxcZCopLShcXGQqKS8uZXhlYyhub3JtYWxpemVkUmFuZ2VIZWFkZXIpO1xuICAgIGlmICghcmFuZ2VQYXJ0cyB8fCAhKHJhbmdlUGFydHNbMV0gfHwgcmFuZ2VQYXJ0c1syXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlcndpc3RFcnJvcihcImludmFsaWQtcmFuZ2UtdmFsdWVzXCIsIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSYW5nZUhlYWRlclxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQ6IHJhbmdlUGFydHNbMV0gPT09IFwiXCIgPyB1bmRlZmluZWQgOiBOdW1iZXIocmFuZ2VQYXJ0c1sxXSksXG4gICAgICAgIGVuZDogcmFuZ2VQYXJ0c1syXSA9PT0gXCJcIiA/IHVuZGVmaW5lZCA6IE51bWJlcihyYW5nZVBhcnRzWzJdKVxuICAgIH07XG59O1xuXG5jb25zdCBjcmVhdGVQYXJ0aWFsUmVzcG9uc2UgPSBhc3luYyAocmVxdWVzdCwgb3JpZ2luYWxSZXNwb25zZSk9PntcbiAgICB0cnkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNJbnN0YW5jZShyZXF1ZXN0LCBSZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJAc2Vyd2lzdC9yYW5nZS1yZXF1ZXN0c1wiLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImNyZWF0ZVBhcnRpYWxSZXNwb25zZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyZXF1ZXN0XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2Uob3JpZ2luYWxSZXNwb25zZSwgUmVzcG9uc2UsIHtcbiAgICAgICAgICAgICAgICBtb2R1bGVOYW1lOiBcIkBzZXJ3aXN0L3JhbmdlLXJlcXVlc3RzXCIsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwiY3JlYXRlUGFydGlhbFJlc3BvbnNlXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcIm9yaWdpbmFsUmVzcG9uc2VcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yaWdpbmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYpIHtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlSGVhZGVyID0gcmVxdWVzdC5oZWFkZXJzLmdldChcInJhbmdlXCIpO1xuICAgICAgICBpZiAoIXJhbmdlSGVhZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm8tcmFuZ2UtaGVhZGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJvdW5kYXJpZXMgPSBwYXJzZVJhbmdlSGVhZGVyKHJhbmdlSGVhZGVyKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxCbG9iID0gYXdhaXQgb3JpZ2luYWxSZXNwb25zZS5ibG9iKCk7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUJvdW5kYXJpZXMgPSBjYWxjdWxhdGVFZmZlY3RpdmVCb3VuZGFyaWVzKG9yaWdpbmFsQmxvYiwgYm91bmRhcmllcy5zdGFydCwgYm91bmRhcmllcy5lbmQpO1xuICAgICAgICBjb25zdCBzbGljZWRCbG9iID0gb3JpZ2luYWxCbG9iLnNsaWNlKGVmZmVjdGl2ZUJvdW5kYXJpZXMuc3RhcnQsIGVmZmVjdGl2ZUJvdW5kYXJpZXMuZW5kKTtcbiAgICAgICAgY29uc3Qgc2xpY2VkQmxvYlNpemUgPSBzbGljZWRCbG9iLnNpemU7XG4gICAgICAgIGNvbnN0IHNsaWNlZFJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKHNsaWNlZEJsb2IsIHtcbiAgICAgICAgICAgIHN0YXR1czogMjA2LFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogXCJQYXJ0aWFsIENvbnRlbnRcIixcbiAgICAgICAgICAgIGhlYWRlcnM6IG9yaWdpbmFsUmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgc2xpY2VkUmVzcG9uc2UuaGVhZGVycy5zZXQoXCJDb250ZW50LUxlbmd0aFwiLCBTdHJpbmcoc2xpY2VkQmxvYlNpemUpKTtcbiAgICAgICAgc2xpY2VkUmVzcG9uc2UuaGVhZGVycy5zZXQoXCJDb250ZW50LVJhbmdlXCIsIGBieXRlcyAke2VmZmVjdGl2ZUJvdW5kYXJpZXMuc3RhcnR9LSR7ZWZmZWN0aXZlQm91bmRhcmllcy5lbmQgLSAxfS9gICsgYCR7b3JpZ2luYWxCbG9iLnNpemV9YCk7XG4gICAgICAgIHJldHVybiBzbGljZWRSZXNwb25zZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIlVuYWJsZSB0byBjb25zdHJ1Y3QgYSBwYXJ0aWFsIHJlc3BvbnNlOyByZXR1cm5pbmcgYSBcIiArIFwiNDE2IFJhbmdlIE5vdCBTYXRpc2ZpYWJsZSByZXNwb25zZSBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChcIlZpZXcgZGV0YWlscyBoZXJlLlwiKTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coZXJyb3IpO1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhyZXF1ZXN0KTtcbiAgICAgICAgICAgIGxvZ2dlci5sb2cob3JpZ2luYWxSZXNwb25zZSk7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiXCIsIHtcbiAgICAgICAgICAgIHN0YXR1czogNDE2LFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogXCJSYW5nZSBOb3QgU2F0aXNmaWFibGVcIlxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5jbGFzcyBSYW5nZVJlcXVlc3RzUGx1Z2luIHtcbiAgICBjYWNoZWRSZXNwb25zZVdpbGxCZVVzZWQgPSBhc3luYyAoeyByZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSB9KT0+e1xuICAgICAgICBpZiAoY2FjaGVkUmVzcG9uc2UgJiYgcmVxdWVzdC5oZWFkZXJzLmhhcyhcInJhbmdlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY3JlYXRlUGFydGlhbFJlc3BvbnNlKHJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVkUmVzcG9uc2U7XG4gICAgfTtcbn1cblxuY2xhc3MgQ2FjaGVGaXJzdCBleHRlbmRzIFN0cmF0ZWd5IHtcbiAgICBhc3luYyBfaGFuZGxlKHJlcXVlc3QsIGhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgbG9ncyA9IFtdO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBmaW5hbEFzc2VydEV4cG9ydHMuaXNJbnN0YW5jZShyZXF1ZXN0LCBSZXF1ZXN0LCB7XG4gICAgICAgICAgICAgICAgbW9kdWxlTmFtZTogXCJzZXJ3aXN0XCIsXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgICAgICAgICAgICAgZnVuY05hbWU6IFwibWFrZVJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IFwicmVxdWVzdFwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBoYW5kbGVyLmNhY2hlTWF0Y2gocmVxdWVzdCk7XG4gICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIGxvZ3MucHVzaChgTm8gcmVzcG9uc2UgZm91bmQgaW4gdGhlICcke3RoaXMuY2FjaGVOYW1lfScgY2FjaGUuIFdpbGwgcmVzcG9uZCB3aXRoIGEgbmV0d29yayByZXF1ZXN0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGhhbmRsZXIuZmV0Y2hBbmRDYWNoZVB1dChyZXF1ZXN0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaChcIkdvdCByZXNwb25zZSBmcm9tIG5ldHdvcmsuXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ3MucHVzaChcIlVuYWJsZSB0byBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBuZXR3b3JrLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbG9ncy5wdXNoKGBGb3VuZCBhIGNhY2hlZCByZXNwb25zZSBpbiB0aGUgJyR7dGhpcy5jYWNoZU5hbWV9JyBjYWNoZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQobWVzc2FnZXMuc3RyYXRlZ3lTdGFydCh0aGlzLmNvbnN0cnVjdG9yLm5hbWUsIHJlcXVlc3QpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbG9nIG9mIGxvZ3Mpe1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobG9nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1lc3NhZ2VzLnByaW50RmluYWxSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm8tcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNsYXNzIENhY2hlT25seSBleHRlbmRzIFN0cmF0ZWd5IHtcbiAgICBhc3luYyBfaGFuZGxlKHJlcXVlc3QsIGhhbmRsZXIpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UocmVxdWVzdCwgUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcIm1ha2VSZXF1ZXN0XCIsXG4gICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBcInJlcXVlc3RcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoYW5kbGVyLmNhY2hlTWF0Y2gocmVxdWVzdCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGxvZ2dlci5ncm91cENvbGxhcHNlZChtZXNzYWdlcy5zdHJhdGVneVN0YXJ0KHRoaXMuY29uc3RydWN0b3IubmFtZSwgcmVxdWVzdCkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgRm91bmQgYSBjYWNoZWQgcmVzcG9uc2UgaW4gdGhlICcke3RoaXMuY2FjaGVOYW1lfScgY2FjaGUuYCk7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHJpbnRGaW5hbFJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhgTm8gcmVzcG9uc2UgZm91bmQgaW4gdGhlICcke3RoaXMuY2FjaGVOYW1lfScgY2FjaGUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm8tcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNsYXNzIFN0YWxlV2hpbGVSZXZhbGlkYXRlIGV4dGVuZHMgU3RyYXRlZ3kge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSl7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRoaXMucGx1Z2lucy5zb21lKChwKT0+XCJjYWNoZVdpbGxVcGRhdGVcIiBpbiBwKSkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnVuc2hpZnQoY2FjaGVPa0FuZE9wYXF1ZVBsdWdpbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX2hhbmRsZShyZXF1ZXN0LCBoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGxvZ3MgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgZmluYWxBc3NlcnRFeHBvcnRzLmlzSW5zdGFuY2UocmVxdWVzdCwgUmVxdWVzdCwge1xuICAgICAgICAgICAgICAgIG1vZHVsZU5hbWU6IFwic2Vyd2lzdFwiLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgICAgICAgICAgICAgIGZ1bmNOYW1lOiBcImhhbmRsZVwiLFxuICAgICAgICAgICAgICAgIHBhcmFtTmFtZTogXCJyZXF1ZXN0XCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZldGNoQW5kQ2FjaGVQcm9taXNlID0gaGFuZGxlci5mZXRjaEFuZENhY2hlUHV0KHJlcXVlc3QpLmNhdGNoKCgpPT57fSk7XG4gICAgICAgIHZvaWQgaGFuZGxlci53YWl0VW50aWwoZmV0Y2hBbmRDYWNoZVByb21pc2UpO1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBoYW5kbGVyLmNhY2hlTWF0Y2gocmVxdWVzdCk7XG4gICAgICAgIGxldCBlcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgbG9ncy5wdXNoKGBGb3VuZCBhIGNhY2hlZCByZXNwb25zZSBpbiB0aGUgJyR7dGhpcy5jYWNoZU5hbWV9JyBjYWNoZS4gV2lsbCB1cGRhdGUgd2l0aCB0aGUgbmV0d29yayByZXNwb25zZSBpbiB0aGUgYmFja2dyb3VuZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBsb2dzLnB1c2goYE5vIHJlc3BvbnNlIGZvdW5kIGluIHRoZSAnJHt0aGlzLmNhY2hlTmFtZX0nIGNhY2hlLiBXaWxsIHdhaXQgZm9yIHRoZSBuZXR3b3JrIHJlc3BvbnNlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoQW5kQ2FjaGVQcm9taXNlO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBDb2xsYXBzZWQobWVzc2FnZXMuc3RyYXRlZ3lTdGFydCh0aGlzLmNvbnN0cnVjdG9yLm5hbWUsIHJlcXVlc3QpKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbG9nIG9mIGxvZ3Mpe1xuICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobG9nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1lc3NhZ2VzLnByaW50RmluYWxSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICBsb2dnZXIuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2Vyd2lzdEVycm9yKFwibm8tcmVzcG9uc2VcIiwge1xuICAgICAgICAgICAgICAgIHVybDogcmVxdWVzdC51cmwsXG4gICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEJST0FEQ0FTVF9VUERBVEVfREVGQVVMVF9IRUFERVJTLCBCYWNrZ3JvdW5kU3luY1BsdWdpbiwgQnJvYWRjYXN0Q2FjaGVVcGRhdGUsIEJyb2FkY2FzdFVwZGF0ZVBsdWdpbiwgQ2FjaGVFeHBpcmF0aW9uLCBDYWNoZUZpcnN0LCBDYWNoZU9ubHksIENhY2hlYWJsZVJlc3BvbnNlLCBDYWNoZWFibGVSZXNwb25zZVBsdWdpbiwgRXhwaXJhdGlvblBsdWdpbiwgTmF2aWdhdGlvblJvdXRlLCBOZXR3b3JrRmlyc3QsIE5ldHdvcmtPbmx5LCBQcmVjYWNoZUZhbGxiYWNrUGx1Z2luLCBQcmVjYWNoZVJvdXRlLCBQcmVjYWNoZVN0cmF0ZWd5LCBSYW5nZVJlcXVlc3RzUGx1Z2luLCBSb3V0ZSwgU2Vyd2lzdCwgU3RhbGVXaGlsZVJldmFsaWRhdGUsIFN0cmF0ZWd5LCBjYWNoZU5hbWVzLCBjcmVhdGVQYXJ0aWFsUmVzcG9uc2UsIGRpc2FibGVEZXZMb2dzLCBlbmFibGVOYXZpZ2F0aW9uUHJlbG9hZCwgaW5pdGlhbGl6ZUdvb2dsZUFuYWx5dGljcywgcmVnaXN0ZXJRdW90YUVycm9yQ2FsbGJhY2ssIHJlc3BvbnNlc0FyZVNhbWUsIHNldENhY2hlTmFtZURldGFpbHMgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/serwist@9.0.2_typescript@5.4.5/node_modules/serwist/dist/index.js\n")); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ if (cachedModule.error !== undefined) throw cachedModule.error; -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ id: moduleId, -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ var threw = true; -/******/ try { -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ threw = false; -/******/ } finally { -/******/ if(threw) delete __webpack_module_cache__[moduleId]; -/******/ } -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/trusted types policy */ -/******/ !function() { -/******/ var policy; -/******/ __webpack_require__.tt = function() { -/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet. -/******/ if (policy === undefined) { -/******/ policy = { -/******/ createScript: function(script) { return script; } -/******/ }; -/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) { -/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy); -/******/ } -/******/ } -/******/ return policy; -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/trusted types script */ -/******/ !function() { -/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/react refresh */ -/******/ !function() { -/******/ if (__webpack_require__.i) { -/******/ __webpack_require__.i.push(function(options) { -/******/ var originalFactory = options.factory; -/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) { -/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$; -/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {}; -/******/ try { -/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire); -/******/ } finally { -/******/ cleanup(); -/******/ } -/******/ } -/******/ }) -/******/ } -/******/ }(); -/******/ -/******/ /* webpack/runtime/compat */ -/******/ -/******/ -/******/ // noop fns to prevent runtime errors during initialization -/******/ if (typeof self !== "undefined") { -/******/ self.$RefreshReg$ = function () {}; -/******/ self.$RefreshSig$ = function () { -/******/ return function (type) { -/******/ return type; -/******/ }; -/******/ }; -/******/ } -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module can't be inlined because the eval-source-map devtool is used. -/******/ var __webpack_exports__ = __webpack_require__("./app/sw.js"); -/******/ -/******/ })() -; \ No newline at end of file +!function(){"use strict";let e,t,a,s,r;let n=(e,...t)=>{let a=e;return t.length>0&&(a+=` :: ${JSON.stringify(t)}`),a};class i extends Error{details;constructor(e,t){super(n(e,t)),this.name=e,this.details=t}}let c=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),""),o={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"serwist",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=e=>[o.prefix,e,o.suffix].filter(e=>e&&e.length>0).join("-"),h=e=>{for(let t of Object.keys(o))e(t)},u=e=>{h(t=>{let a=e[t];"string"==typeof a&&(o[t]=a)})},d=e=>e||l(o.googleAnalytics),m=e=>e||l(o.precache),f=e=>e||l(o.runtime);class g{promise;resolve;reject;constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}function w(e,t){let a=new URL(e);for(let e of t)a.searchParams.delete(e);return a.href}async function p(e,t,a,s){let r=w(t.url,a);if(t.url===r)return e.match(t,s);let n={...s,ignoreSearch:!0};for(let i of(await e.keys(t,n)))if(r===w(i.url,a))return e.match(i,s)}let y=new Set,_=async()=>{for(let e of y)await e()};function b(e){return new Promise(t=>setTimeout(t,e))}let x="-precache-",E=async(e,t=x)=>{let a=(await self.caches.keys()).filter(a=>a.includes(t)&&a.includes(self.registration.scope)&&a!==e);return await Promise.all(a.map(e=>self.caches.delete(e))),a},v=e=>{self.addEventListener("activate",t=>{t.waitUntil(E(m(e)).then(e=>{}))})},R=()=>{self.addEventListener("activate",()=>self.clients.claim())},q=(e,t)=>{let a=t();return e.waitUntil(a),a},S=(e,t)=>t.some(t=>e instanceof t),D=new WeakMap,N=new WeakMap,C=new WeakMap,T={get(e,t,a){if(e instanceof IDBTransaction){if("done"===t)return D.get(e);if("store"===t)return a.objectStoreNames[1]?void 0:a.objectStore(a.objectStoreNames[0])}return P(e[t])},set:(e,t,a)=>(e[t]=a,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function P(e){var s;if(e instanceof IDBRequest)return function(e){let t=new Promise((t,a)=>{let s=()=>{e.removeEventListener("success",r),e.removeEventListener("error",n)},r=()=>{t(P(e.result)),s()},n=()=>{a(e.error),s()};e.addEventListener("success",r),e.addEventListener("error",n)});return C.set(t,e),t}(e);if(N.has(e))return N.get(e);let r="function"==typeof(s=e)?(a||(a=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(s)?function(...e){return s.apply(k(this),e),P(this.request)}:function(...e){return P(s.apply(k(this),e))}:(s instanceof IDBTransaction&&function(e){if(D.has(e))return;let t=new Promise((t,a)=>{let s=()=>{e.removeEventListener("complete",r),e.removeEventListener("error",n),e.removeEventListener("abort",n)},r=()=>{t(),s()},n=()=>{a(e.error||new DOMException("AbortError","AbortError")),s()};e.addEventListener("complete",r),e.addEventListener("error",n),e.addEventListener("abort",n)});D.set(e,t)}(s),S(s,t||(t=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])))?new Proxy(s,T):s;return r!==e&&(N.set(e,r),C.set(r,e)),r}let k=e=>C.get(e);function A(e,t,{blocked:a,upgrade:s,blocking:r,terminated:n}={}){let i=indexedDB.open(e,t),c=P(i);return s&&i.addEventListener("upgradeneeded",e=>{s(P(i.result),e.oldVersion,e.newVersion,P(i.transaction),e)}),a&&i.addEventListener("blocked",e=>a(e.oldVersion,e.newVersion,e)),c.then(e=>{n&&e.addEventListener("close",()=>n()),r&&e.addEventListener("versionchange",e=>r(e.oldVersion,e.newVersion,e))}).catch(()=>{}),c}let I=["get","getKey","getAll","getAllKeys","count"],U=["put","add","delete","clear"],L=new Map;function F(e,t){if(!(e instanceof IDBDatabase&&!(t in e)&&"string"==typeof t))return;if(L.get(t))return L.get(t);let a=t.replace(/FromIndex$/,""),s=t!==a,r=U.includes(a);if(!(a in(s?IDBIndex:IDBObjectStore).prototype)||!(r||I.includes(a)))return;let n=async function(e,...t){let n=this.transaction(e,r?"readwrite":"readonly"),i=n.store;return s&&(i=i.index(t.shift())),(await Promise.all([i[a](...t),r&&n.done]))[0]};return L.set(t,n),n}T={...s=T,get:(e,t,a)=>F(e,t)||s.get(e,t,a),has:(e,t)=>!!F(e,t)||s.has(e,t)};let B=["continue","continuePrimaryKey","advance"],K={},M=new WeakMap,O=new WeakMap,W={get(e,t){if(!B.includes(t))return e[t];let a=K[t];return a||(a=K[t]=function(...e){M.set(this,O.get(this)[t](...e))}),a}};async function*j(...e){let t=this;if(t instanceof IDBCursor||(t=await t.openCursor(...e)),!t)return;let a=new Proxy(t,W);for(O.set(a,t),C.set(a,k(t));t;)yield a,t=await (M.get(a)||t.continue()),M.delete(a)}function $(e,t){return t===Symbol.asyncIterator&&S(e,[IDBIndex,IDBObjectStore,IDBCursor])||"iterate"===t&&S(e,[IDBIndex,IDBObjectStore])}T={...r=T,get:(e,t,a)=>$(e,t)?j:r.get(e,t,a),has:(e,t)=>$(e,t)||r.has(e,t)};let H=e=>e&&"object"==typeof e?e:{handle:e};class V{handler;match;method;catchHandler;constructor(e,t,a="GET"){this.handler=H(t),this.match=e,this.method=a}setCatchHandler(e){this.catchHandler=H(e)}}class G extends V{_allowlist;_denylist;constructor(e,{allowlist:t=[/./],denylist:a=[]}={}){super(e=>this._match(e),e),this._allowlist=t,this._denylist=a}_match({url:e,request:t}){if(t&&"navigate"!==t.mode)return!1;let a=e.pathname+e.search;for(let e of this._denylist)if(e.test(a))return!1;return!!this._allowlist.some(e=>e.test(a))}}let Q=(e,t=[])=>{for(let a of[...e.searchParams.keys()])t.some(e=>e.test(a))&&e.searchParams.delete(a);return e};class z extends V{constructor(e,t,a){super(({url:t})=>{let a=e.exec(t.href);if(a&&(t.origin===location.origin||0===a.index))return a.slice(1)},t,a)}}let J=async(e,t,a)=>{let s=t.map((e,t)=>({index:t,item:e})),r=async e=>{let t=[];for(;;){let r=s.pop();if(!r)return e(t);let n=await a(r.item);t.push({result:n,index:r.index})}},n=Array.from({length:e},()=>new Promise(r));return(await Promise.all(n)).flat().sort((e,t)=>e.indexe.result)},Y=()=>{self.__WB_DISABLE_DEV_LOGS=!0};function X(e){return"string"==typeof e?new Request(e):e}class Z{event;request;url;params;_cacheKeys={};_strategy;_handlerDeferred;_extendLifetimePromises;_plugins;_pluginStateMap;constructor(e,t){for(let a of(this.event=t.event,this.request=t.request,t.url&&(this.url=t.url,this.params=t.params),this._strategy=e,this._handlerDeferred=new g,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map,this._plugins))this._pluginStateMap.set(a,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:t}=this,a=X(e);if("navigate"===a.mode&&t instanceof FetchEvent&&t.preloadResponse){let e=await t.preloadResponse;if(e)return e}let s=this.hasCallback("fetchDidFail")?a.clone():null;try{for(let e of this.iterateCallbacks("requestWillFetch"))a=await e({request:a.clone(),event:t})}catch(e){if(e instanceof Error)throw new i("plugin-error-request-will-fetch",{thrownErrorMessage:e.message})}let r=a.clone();try{let e;for(let s of(e=await fetch(a,"navigate"===a.mode?void 0:this._strategy.fetchOptions),this.iterateCallbacks("fetchDidSucceed")))e=await s({event:t,request:r,response:e});return e}catch(e){throw s&&await this.runCallbacks("fetchDidFail",{error:e,event:t,originalRequest:s.clone(),request:r.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),a=t.clone();return this.waitUntil(this.cachePut(e,a)),t}async cacheMatch(e){let t;let a=X(e),{cacheName:s,matchOptions:r}=this._strategy,n=await this.getCacheKey(a,"read"),i={...r,cacheName:s};for(let e of(t=await caches.match(n,i),this.iterateCallbacks("cachedResponseWillBeUsed")))t=await e({cacheName:s,matchOptions:r,cachedResponse:t,request:n,event:this.event})||void 0;return t}async cachePut(e,t){let a=X(e);await b(0);let s=await this.getCacheKey(a,"write");if(!t)throw new i("cache-put-with-no-response",{url:c(s.url)});let r=await this._ensureResponseSafeToCache(t);if(!r)return!1;let{cacheName:n,matchOptions:o}=this._strategy,l=await self.caches.open(n),h=this.hasCallback("cacheDidUpdate"),u=h?await p(l,s.clone(),["__WB_REVISION__"],o):null;try{await l.put(s,h?r.clone():r)}catch(e){if(e instanceof Error)throw"QuotaExceededError"===e.name&&await _(),e}for(let e of this.iterateCallbacks("cacheDidUpdate"))await e({cacheName:n,oldResponse:u,newResponse:r.clone(),request:s,event:this.event});return!0}async getCacheKey(e,t){let a=`${e.url} | ${t}`;if(!this._cacheKeys[a]){let s=e;for(let e of this.iterateCallbacks("cacheKeyWillBeUsed"))s=X(await e({mode:t,request:s,event:this.event,params:this.params}));this._cacheKeys[a]=s}return this._cacheKeys[a]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let a of this.iterateCallbacks(e))await a(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if("function"==typeof t[e]){let a=this._pluginStateMap.get(t),s=s=>{let r={...s,state:a};return t[e](r)};yield s}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){let e;for(;e=this._extendLifetimePromises.shift();)await e}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,a=!1;for(let e of this.iterateCallbacks("cacheWillUpdate"))if(t=await e({request:this.request,response:t,event:this.event})||void 0,a=!0,!t)break;return!a&&t&&200!==t.status&&(t=void 0),t}}class ee{cacheName;plugins;fetchOptions;matchOptions;constructor(e={}){this.cacheName=f(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,a="string"==typeof e.request?new Request(e.request):e.request,s=new Z(this,e.url?{event:t,request:a,url:e.url,params:e.params}:{event:t,request:a}),r=this._getResponse(s,a,t),n=this._awaitComplete(r,s,a,t);return[r,n]}async _getResponse(e,t,a){let s;await e.runCallbacks("handlerWillStart",{event:a,request:t});try{if(s=await this._handle(t,e),void 0===s||"error"===s.type)throw new i("no-response",{url:t.url})}catch(r){if(r instanceof Error){for(let n of e.iterateCallbacks("handlerDidError"))if(void 0!==(s=await n({error:r,event:a,request:t})))break}if(!s)throw r}for(let r of e.iterateCallbacks("handlerWillRespond"))s=await r({event:a,request:t,response:s});return s}async _awaitComplete(e,t,a,s){let r,n;try{r=await e}catch(e){}try{await t.runCallbacks("handlerDidRespond",{event:s,request:a,response:r}),await t.doneWaiting()}catch(e){e instanceof Error&&(n=e)}if(await t.runCallbacks("handlerDidComplete",{event:s,request:a,response:r,error:n}),t.destroy(),n)throw n}}let et={cacheWillUpdate:async({response:e})=>200===e.status||0===e.status?e:null};class ea extends ee{_networkTimeoutSeconds;constructor(e={}){super(e),this.plugins.some(e=>"cacheWillUpdate"in e)||this.plugins.unshift(et),this._networkTimeoutSeconds=e.networkTimeoutSeconds||0}async _handle(e,t){let a;let s=[],r=[];if(this._networkTimeoutSeconds){let{id:n,promise:i}=this._getTimeoutPromise({request:e,logs:s,handler:t});a=n,r.push(i)}let n=this._getNetworkPromise({timeoutId:a,request:e,logs:s,handler:t});r.push(n);let c=await t.waitUntil((async()=>await t.waitUntil(Promise.race(r))||await n)());if(!c)throw new i("no-response",{url:e.url});return c}_getTimeoutPromise({request:e,logs:t,handler:a}){let s;return{promise:new Promise(t=>{s=setTimeout(async()=>{t(await a.cacheMatch(e))},1e3*this._networkTimeoutSeconds)}),id:s}}async _getNetworkPromise({timeoutId:e,request:t,logs:a,handler:s}){let r,n;try{n=await s.fetchAndCachePut(t)}catch(e){e instanceof Error&&(r=e)}return e&&clearTimeout(e),(r||!n)&&(n=await s.cacheMatch(t)),n}}class es extends ee{_networkTimeoutSeconds;constructor(e={}){super(e),this._networkTimeoutSeconds=e.networkTimeoutSeconds||0}async _handle(e,t){let a,s;try{let s=[t.fetch(e)];if(this._networkTimeoutSeconds){let e=b(1e3*this._networkTimeoutSeconds);s.push(e)}if(!(a=await Promise.race(s)))throw Error(`Timed out the network response after ${this._networkTimeoutSeconds} seconds.`)}catch(e){e instanceof Error&&(s=e)}if(!a)throw new i("no-response",{url:e.url,error:s});return a}}let er="requests",en="queueName";class ei{_db=null;async addEntry(e){let t=(await this.getDb()).transaction(er,"readwrite",{durability:"relaxed"});await t.store.add(e),await t.done}async getFirstEntryId(){let e=await this.getDb(),t=await e.transaction(er).store.openCursor();return t?.value.id}async getAllEntriesByQueueName(e){let t=await this.getDb();return await t.getAllFromIndex(er,en,IDBKeyRange.only(e))||[]}async getEntryCountByQueueName(e){return(await this.getDb()).countFromIndex(er,en,IDBKeyRange.only(e))}async deleteEntry(e){let t=await this.getDb();await t.delete(er,e)}async getFirstEntryByQueueName(e){return await this.getEndEntryFromIndex(IDBKeyRange.only(e),"next")}async getLastEntryByQueueName(e){return await this.getEndEntryFromIndex(IDBKeyRange.only(e),"prev")}async getEndEntryFromIndex(e,t){let a=await this.getDb(),s=await a.transaction(er).store.index(en).openCursor(e,t);return s?.value}async getDb(){return this._db||(this._db=await A("serwist-background-sync",3,{upgrade:this._upgradeDb})),this._db}_upgradeDb(e,t){t>0&&t<3&&e.objectStoreNames.contains(er)&&e.deleteObjectStore(er),e.createObjectStore(er,{autoIncrement:!0,keyPath:"id"}).createIndex(en,en,{unique:!1})}}class ec{_queueName;_queueDb;constructor(e){this._queueName=e,this._queueDb=new ei}async pushEntry(e){delete e.id,e.queueName=this._queueName,await this._queueDb.addEntry(e)}async unshiftEntry(e){let t=await this._queueDb.getFirstEntryId();t?e.id=t-1:delete e.id,e.queueName=this._queueName,await this._queueDb.addEntry(e)}async popEntry(){return this._removeEntry(await this._queueDb.getLastEntryByQueueName(this._queueName))}async shiftEntry(){return this._removeEntry(await this._queueDb.getFirstEntryByQueueName(this._queueName))}async getAll(){return await this._queueDb.getAllEntriesByQueueName(this._queueName)}async size(){return await this._queueDb.getEntryCountByQueueName(this._queueName)}async deleteEntry(e){await this._queueDb.deleteEntry(e)}async _removeEntry(e){return e&&await this.deleteEntry(e.id),e}}let eo=["method","referrer","referrerPolicy","mode","credentials","cache","redirect","integrity","keepalive"];class el{_requestData;static async fromRequest(e){let t={url:e.url,headers:{}};for(let a of("GET"!==e.method&&(t.body=await e.clone().arrayBuffer()),e.headers.forEach((e,a)=>{t.headers[a]=e}),eo))void 0!==e[a]&&(t[a]=e[a]);return new el(t)}constructor(e){"navigate"===e.mode&&(e.mode="same-origin"),this._requestData=e}toObject(){let e=Object.assign({},this._requestData);return e.headers=Object.assign({},this._requestData.headers),e.body&&(e.body=e.body.slice(0)),e}toRequest(){return new Request(this._requestData.url,this._requestData)}clone(){return new el(this.toObject())}}let eh="serwist-background-sync",eu=new Set,ed=e=>{let t={request:new el(e.requestData).toRequest(),timestamp:e.timestamp};return e.metadata&&(t.metadata=e.metadata),t};class em{_name;_onSync;_maxRetentionTime;_queueStore;_forceSyncFallback;_syncInProgress=!1;_requestsAddedDuringSync=!1;constructor(e,{forceSyncFallback:t,onSync:a,maxRetentionTime:s}={}){if(eu.has(e))throw new i("duplicate-queue-name",{name:e});eu.add(e),this._name=e,this._onSync=a||this.replayRequests,this._maxRetentionTime=s||10080,this._forceSyncFallback=!!t,this._queueStore=new ec(this._name),this._addSyncListener()}get name(){return this._name}async pushRequest(e){await this._addRequest(e,"push")}async unshiftRequest(e){await this._addRequest(e,"unshift")}async popRequest(){return this._removeRequest("pop")}async shiftRequest(){return this._removeRequest("shift")}async getAll(){let e=await this._queueStore.getAll(),t=Date.now(),a=[];for(let s of e){let e=6e4*this._maxRetentionTime;t-s.timestamp>e?await this._queueStore.deleteEntry(s.id):a.push(ed(s))}return a}async size(){return await this._queueStore.size()}async _addRequest({request:e,metadata:t,timestamp:a=Date.now()},s){let r={requestData:(await el.fromRequest(e.clone())).toObject(),timestamp:a};switch(t&&(r.metadata=t),s){case"push":await this._queueStore.pushEntry(r);break;case"unshift":await this._queueStore.unshiftEntry(r)}this._syncInProgress?this._requestsAddedDuringSync=!0:await this.registerSync()}async _removeRequest(e){let t;let a=Date.now();switch(e){case"pop":t=await this._queueStore.popEntry();break;case"shift":t=await this._queueStore.shiftEntry()}if(t){let s=6e4*this._maxRetentionTime;return a-t.timestamp>s?this._removeRequest(e):ed(t)}}async replayRequests(){let e;for(;e=await this.shiftRequest();)try{await fetch(e.request.clone())}catch(t){throw await this.unshiftRequest(e),new i("queue-replay-failed",{name:this._name})}}async registerSync(){if("sync"in self.registration&&!this._forceSyncFallback)try{await self.registration.sync.register(`${eh}:${this._name}`)}catch(e){}}_addSyncListener(){"sync"in self.registration&&!this._forceSyncFallback?self.addEventListener("sync",e=>{if(e.tag===`${eh}:${this._name}`){let t=async()=>{let t;this._syncInProgress=!0;try{await this._onSync({queue:this})}catch(e){if(e instanceof Error)throw e}finally{this._requestsAddedDuringSync&&!(t&&!e.lastChance)&&await this.registerSync(),this._syncInProgress=!1,this._requestsAddedDuringSync=!1}};e.waitUntil(t())}}):this._onSync({queue:this})}static get _queueNames(){return eu}}class ef{_queue;constructor(e,t){this._queue=new em(e,t)}async fetchDidFail({request:e}){await this._queue.pushRequest({request:e})}}let eg=async(t,a)=>{let s=null;if(t.url&&(s=new URL(t.url).origin),s!==self.location.origin)throw new i("cross-origin-copy-response",{origin:s});let r=t.clone(),n={headers:new Headers(r.headers),status:r.status,statusText:r.statusText},c=a?a(n):n,o=!function(){if(void 0===e){let t=new Response("");if("body"in t)try{new Response(t.body),e=!0}catch(t){e=!1}e=!1}return e}()?await r.blob():r.body;return new Response(o,c)};class ew extends ee{_fallbackToNetwork;static defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:e})=>!e||e.status>=400?null:e};static copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:e})=>e.redirected?await eg(e):e};constructor(e={}){e.cacheName=m(e.cacheName),super(e),this._fallbackToNetwork=!1!==e.fallbackToNetwork,this.plugins.push(ew.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&"install"===t.event.type?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,t){let a;let s=t.params||{};if(this._fallbackToNetwork){let r=s.integrity,n=e.integrity,i=!n||n===r;a=await t.fetch(new Request(e,{integrity:"no-cors"!==e.mode?n||r:void 0})),r&&i&&"no-cors"!==e.mode&&(this._useDefaultCacheabilityPluginIfNeeded(),await t.cachePut(e,a.clone()))}else throw new i("missing-precache-entry",{cacheName:this.cacheName,url:e.url});return a}async _handleInstall(e,t){this._useDefaultCacheabilityPluginIfNeeded();let a=await t.fetch(e);if(!await t.cachePut(e,a.clone()))throw new i("bad-precaching-response",{url:e.url,status:a.status});return a}_useDefaultCacheabilityPluginIfNeeded(){let e=null,t=0;for(let[a,s]of this.plugins.entries())s!==ew.copyRedirectedCacheableResponsesPlugin&&(s===ew.defaultPrecacheCacheabilityPlugin&&(e=a),s.cacheWillUpdate&&t++);0===t?this.plugins.push(ew.defaultPrecacheCacheabilityPlugin):t>1&&null!==e&&this.plugins.splice(e,1)}}let ep=()=>!!self.registration?.navigationPreload,ey=e=>{ep()&&self.addEventListener("activate",t=>{t.waitUntil(self.registration.navigationPreload.enable().then(()=>{e&&self.registration.navigationPreload.setHeaderValue(e)}))})},e_=e=>{u(e)};class eb{updatedURLs=[];notUpdatedURLs=[];handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)};cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:a})=>{if("install"===e.type&&t?.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;a?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return a}}let ex=e=>{if(!e)throw new i("add-to-cache-list-unexpected-type",{entry:e});if("string"==typeof e){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:t,url:a}=e;if(!a)throw new i("add-to-cache-list-unexpected-type",{entry:e});if(!t){let e=new URL(a,location.href);return{cacheKey:e.href,url:e.href}}let s=new URL(a,location.href),r=new URL(a,location.href);return s.searchParams.set("__WB_REVISION__",t),{cacheKey:s.href,url:r.href}},eE=(e,t,a)=>{if("string"==typeof e){let s=new URL(e,location.href);return new V(({url:e})=>e.href===s.href,t,a)}if(e instanceof RegExp)return new z(e,t,a);if("function"==typeof e)return new V(e,t,a);if(e instanceof V)return e;throw new i("unsupported-route-type",{moduleName:"serwist",funcName:"parseRoute",paramName:"capture"})};class ev extends V{constructor(e,t){super(({request:a})=>{let s=e.getUrlsToPrecacheKeys();for(let r of function*(e,{directoryIndex:t="index.html",ignoreURLParametersMatching:a=[/^utm_/,/^fbclid$/],cleanURLs:s=!0,urlManipulation:r}={}){let n=new URL(e,location.href);n.hash="",yield n.href;let i=Q(n,a);if(yield i.href,t&&i.pathname.endsWith("/")){let e=new URL(i.href);e.pathname+=t,yield e.href}if(s){let e=new URL(i.href);e.pathname+=".html",yield e.href}if(r)for(let e of r({url:n}))yield e.href}(a.url,t)){let t=s.get(r);if(t){let a=e.getIntegrityForPrecacheKey(t);return{cacheKey:t,integrity:a}}}},e.precacheStrategy)}}let eR="www.google-analytics.com",eq="www.googletagmanager.com",eS=/^\/(\w+\/)?collect/,eD=e=>async({queue:t})=>{let a;for(;a=await t.shiftRequest();){let{request:s,timestamp:r}=a,n=new URL(s.url);try{let t="POST"===s.method?new URLSearchParams(await s.clone().text()):n.searchParams,a=r-(Number(t.get("qt"))||0),i=Date.now()-a;if(t.set("qt",String(i)),e.parameterOverrides)for(let a of Object.keys(e.parameterOverrides)){let s=e.parameterOverrides[a];t.set(a,s)}"function"==typeof e.hitFilter&&e.hitFilter.call(null,t),await fetch(new Request(n.origin+n.pathname,{body:t.toString(),method:"POST",mode:"cors",credentials:"omit",headers:{"Content-Type":"text/plain"}}))}catch(e){throw await t.unshiftRequest(a),e}}},eN=e=>{let t=({url:e})=>e.hostname===eR&&eS.test(e.pathname),a=new es({plugins:[e]});return[new V(t,a,"GET"),new V(t,a,"POST")]},eC=e=>new V(({url:e})=>e.hostname===eR&&"/analytics.js"===e.pathname,new ea({cacheName:e}),"GET"),eT=e=>new V(({url:e})=>e.hostname===eq&&"/gtag/js"===e.pathname,new ea({cacheName:e}),"GET"),eP=e=>new V(({url:e})=>e.hostname===eq&&"/gtm.js"===e.pathname,new ea({cacheName:e}),"GET"),ek=({serwist:e,cacheName:t,...a})=>{let s=d(t),r=new ef("serwist-google-analytics",{maxRetentionTime:2880,onSync:eD(a)});for(let t of[eP(s),eC(s),eT(s),...eN(r)])e.registerRoute(t)};class eA{_fallbackUrls;_serwist;constructor({fallbackUrls:e,serwist:t}){this._fallbackUrls=e,this._serwist=t}async handlerDidError(e){for(let t of this._fallbackUrls)if("string"==typeof t){let e=await this._serwist.matchPrecache(t);if(void 0!==e)return e}else if(t.matcher(e)){let e=await this._serwist.matchPrecache(t.url);if(void 0!==e)return e}}}class eI{_precacheController;constructor({precacheController:e}){this._precacheController=e}cacheKeyWillBeUsed=async({request:e,params:t})=>{let a=t?.cacheKey||this._precacheController.getPrecacheKeyForUrl(e.url);return a?new Request(a,{headers:e.headers}):e}}class eU{_urlsToCacheKeys=new Map;_urlsToCacheModes=new Map;_cacheKeysToIntegrities=new Map;_concurrentPrecaching;_precacheStrategy;_routes;_defaultHandlerMap;_catchHandler;constructor({precacheEntries:e,precacheOptions:t,skipWaiting:a=!1,importScripts:s,navigationPreload:r=!1,cacheId:n,clientsClaim:i=!1,runtimeCaching:c,offlineAnalyticsConfig:o,disableDevLogs:l=!1,fallbacks:h}={}){if(this._concurrentPrecaching=t?.concurrency??10,this._precacheStrategy=new ew({cacheName:m(t?.cacheName),plugins:[...t?.plugins??[],new eI({precacheController:this})],fallbackToNetwork:t?.fallbackToNetwork}),this._routes=new Map,this._defaultHandlerMap=new Map,this.handleInstall=this.handleInstall.bind(this),this.handleActivate=this.handleActivate.bind(this),this.handleFetch=this.handleFetch.bind(this),this.handleCache=this.handleCache.bind(this),s&&s.length>0&&self.importScripts(...s),r&&ey(),void 0!==n&&e_({prefix:n}),a?self.skipWaiting():self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),i&&R(),e&&e.length>0&&this.addToPrecacheList(e),t?.cleanupOutdatedCaches&&v(t?.cacheName),this.registerRoute(new ev(this,t)),t?.navigateFallback&&this.registerRoute(new G(this.createHandlerBoundToUrl(t?.navigateFallback),{allowlist:t?.navigateFallbackAllowlist,denylist:t?.navigateFallbackDenylist})),void 0!==o&&("boolean"==typeof o?o&&ek({serwist:this}):ek({...o,serwist:this})),void 0!==c){if(void 0!==h){let e=new eA({fallbackUrls:h.entries,serwist:this});c.forEach(t=>{t.handler instanceof ee&&!t.handler.plugins.some(e=>"handlerDidError"in e)&&t.handler.plugins.push(e)})}for(let e of c)this.registerCapture(e.matcher,e.handler,e.method)}l&&Y()}get precacheStrategy(){return this._precacheStrategy}get routes(){return this._routes}addEventListeners(){self.addEventListener("install",this.handleInstall),self.addEventListener("activate",this.handleActivate),self.addEventListener("fetch",this.handleFetch),self.addEventListener("message",this.handleCache)}addToPrecacheList(e){let t=[];for(let a of e){"string"==typeof a?t.push(a):a&&!a.integrity&&void 0===a.revision&&t.push(a.url);let{cacheKey:e,url:s}=ex(a),r="string"!=typeof a&&a.revision?"reload":"default";if(this._urlsToCacheKeys.has(s)&&this._urlsToCacheKeys.get(s)!==e)throw new i("add-to-cache-list-conflicting-entries",{firstEntry:this._urlsToCacheKeys.get(s),secondEntry:e});if("string"!=typeof a&&a.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==a.integrity)throw new i("add-to-cache-list-conflicting-integrities",{url:s});this._cacheKeysToIntegrities.set(e,a.integrity)}this._urlsToCacheKeys.set(s,e),this._urlsToCacheModes.set(s,r),t.length>0&&console.warn(`Serwist is precaching URLs without revision info: ${t.join(", ")} +This is generally NOT safe. Learn more at https://bit.ly/wb-precache`)}}handleInstall(e){return q(e,async()=>{let t=new eb;this.precacheStrategy.plugins.push(t),await J(this._concurrentPrecaching,Array.from(this._urlsToCacheKeys.entries()),async([t,a])=>{let s=this._cacheKeysToIntegrities.get(a),r=this._urlsToCacheModes.get(t),n=new Request(t,{integrity:s,cache:r,credentials:"same-origin"});await Promise.all(this.precacheStrategy.handleAll({event:e,request:n,url:new URL(n.url),params:{cacheKey:a}}))});let{updatedURLs:a,notUpdatedURLs:s}=t;return{updatedURLs:a,notUpdatedURLs:s}})}handleActivate(e){return q(e,async()=>{let e=await self.caches.open(this.precacheStrategy.cacheName),t=await e.keys(),a=new Set(this._urlsToCacheKeys.values()),s=[];for(let r of t)a.has(r.url)||(await e.delete(r),s.push(r.url));return{deletedCacheRequests:s}})}handleFetch(e){let{request:t}=e,a=this.handleRequest({request:t,event:e});a&&e.respondWith(a)}handleCache(e){if(e.data&&"CACHE_URLS"===e.data.type){let{payload:t}=e.data,a=Promise.all(t.urlsToCache.map(t=>{let a;return a="string"==typeof t?new Request(t):new Request(...t),this.handleRequest({request:a,event:e})}));e.waitUntil(a),e.ports?.[0]&&a.then(()=>e.ports[0].postMessage(!0))}}setDefaultHandler(e,t="GET"){this._defaultHandlerMap.set(t,H(e))}setCatchHandler(e){this._catchHandler=H(e)}registerCapture(e,t,a){let s=eE(e,t,a);return this.registerRoute(s),s}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new i("unregister-route-but-not-found-with-method",{method:e.method});let t=this._routes.get(e.method).indexOf(e);if(t>-1)this._routes.get(e.method).splice(t,1);else throw new i("unregister-route-route-not-registered")}getUrlsToPrecacheKeys(){return this._urlsToCacheKeys}getPrecachedUrls(){return[...this._urlsToCacheKeys.keys()]}getPrecacheKeyForUrl(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForPrecacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,a=this.getPrecacheKeyForUrl(t);if(a)return(await self.caches.open(this.precacheStrategy.cacheName)).match(a)}createHandlerBoundToUrl(e){let t=this.getPrecacheKeyForUrl(e);if(!t)throw new i("non-precached-url",{url:e});return a=>(a.request=new Request(e),a.params={cacheKey:t,...a.params},this.precacheStrategy.handle(a))}handleRequest({request:e,event:t}){let a;let s=new URL(e.url,location.href);if(!s.protocol.startsWith("http"))return;let r=s.origin===location.origin,{params:n,route:i}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:s}),c=i?.handler,o=e.method;if(!c&&this._defaultHandlerMap.has(o)&&(c=this._defaultHandlerMap.get(o)),!c)return;try{a=c.handle({url:s,request:e,event:t,params:n})}catch(e){a=Promise.reject(e)}let l=i?.catchHandler;return a instanceof Promise&&(this._catchHandler||l)&&(a=a.catch(async a=>{if(l)try{return await l.handle({url:s,request:e,event:t,params:n})}catch(e){e instanceof Error&&(a=e)}if(this._catchHandler)return this._catchHandler.handle({url:s,request:e,event:t});throw a})),a}findMatchingRoute({url:e,sameOrigin:t,request:a,event:s}){for(let r of this._routes.get(a.method)||[]){let n;let i=r.match({url:e,sameOrigin:t,request:a,event:s});if(i)return Array.isArray(n=i)&&0===n.length?n=void 0:i.constructor===Object&&0===Object.keys(i).length?n=void 0:"boolean"==typeof i&&(n=void 0),{route:r,params:n}}return{}}}"undefined"!=typeof navigator&&/^((?!chrome|android).)*safari/i.test(navigator.userAgent);let eL="cache-entries",eF=e=>{let t=new URL(e,location.href);return t.hash="",t.href};class eB{_cacheName;_db=null;constructor(e){this._cacheName=e}_getId(e){return`${this._cacheName}|${eF(e)}`}_upgradeDb(e){let t=e.createObjectStore(eL,{keyPath:"id"});t.createIndex("cacheName","cacheName",{unique:!1}),t.createIndex("timestamp","timestamp",{unique:!1})}_upgradeDbAndDeleteOldDbs(e){this._upgradeDb(e),this._cacheName&&function(e,{blocked:t}={}){let a=indexedDB.deleteDatabase(e);t&&a.addEventListener("blocked",e=>t(e.oldVersion,e)),P(a).then(()=>void 0)}(this._cacheName)}async setTimestamp(e,t){e=eF(e);let a={id:this._getId(e),cacheName:this._cacheName,url:e,timestamp:t},s=(await this.getDb()).transaction(eL,"readwrite",{durability:"relaxed"});await s.store.put(a),await s.done}async getTimestamp(e){let t=await this.getDb(),a=await t.get(eL,this._getId(e));return a?.timestamp}async expireEntries(e,t){let a=await this.getDb(),s=await a.transaction(eL,"readwrite").store.index("timestamp").openCursor(null,"prev"),r=[],n=0;for(;s;){let a=s.value;a.cacheName===this._cacheName&&(e&&a.timestamp=t?(s.delete(),r.push(a.url)):n++),s=await s.continue()}return r}async getDb(){return this._db||(this._db=await A("serwist-expiration",1,{upgrade:this._upgradeDbAndDeleteOldDbs.bind(this)})),this._db}}class eK{_isRunning=!1;_rerunRequested=!1;_maxEntries;_maxAgeSeconds;_matchOptions;_cacheName;_timestampModel;constructor(e,t={}){this._maxEntries=t.maxEntries,this._maxAgeSeconds=t.maxAgeSeconds,this._matchOptions=t.matchOptions,this._cacheName=e,this._timestampModel=new eB(e)}async expireEntries(){if(this._isRunning){this._rerunRequested=!0;return}this._isRunning=!0;let e=this._maxAgeSeconds?Date.now()-1e3*this._maxAgeSeconds:0,t=await this._timestampModel.expireEntries(e,this._maxEntries),a=await self.caches.open(this._cacheName);for(let e of t)await a.delete(e,this._matchOptions);this._isRunning=!1,this._rerunRequested&&(this._rerunRequested=!1,this.expireEntries())}async updateTimestamp(e){await this._timestampModel.setTimestamp(e,Date.now())}async isURLExpired(e){if(!this._maxAgeSeconds)return!1;let t=await this._timestampModel.getTimestamp(e),a=Date.now()-1e3*this._maxAgeSeconds;return void 0===t||t{y.add(e)};class eO{_config;_cacheExpirations;constructor(e={}){this._config=e,this._cacheExpirations=new Map,this._config.maxAgeFrom||(this._config.maxAgeFrom="last-fetched"),this._config.purgeOnQuotaError&&eM(()=>this.deleteCacheAndMetadata())}_getCacheExpiration(e){if(e===f())throw new i("expire-custom-caches-only");let t=this._cacheExpirations.get(e);return t||(t=new eK(e,this._config),this._cacheExpirations.set(e,t)),t}cachedResponseWillBeUsed({event:e,cacheName:t,request:a,cachedResponse:s}){if(!s)return null;let r=this._isResponseDateFresh(s),n=this._getCacheExpiration(t),i="last-used"===this._config.maxAgeFrom,c=(async()=>{i&&await n.updateTimestamp(a.url),await n.expireEntries()})();try{e.waitUntil(c)}catch(e){}return r?s:null}_isResponseDateFresh(e){if("last-used"===this._config.maxAgeFrom)return!0;let t=Date.now();if(!this._config.maxAgeSeconds)return!0;let a=this._getDateHeaderTimestamp(e);return null===a||a>=t-1e3*this._config.maxAgeSeconds}_getDateHeaderTimestamp(e){if(!e.headers.has("date"))return null;let t=new Date(e.headers.get("date")).getTime();return Number.isNaN(t)?null:t}async cacheDidUpdate({cacheName:e,request:t}){let a=this._getCacheExpiration(e);await a.updateTimestamp(t.url),await a.expireEntries()}async deleteCacheAndMetadata(){for(let[e,t]of this._cacheExpirations)await self.caches.delete(e),await t.delete();this._cacheExpirations=new Map}}let eW=(e,t,a)=>{let s,r;let n=e.size;if(a&&a>n||t&&t<0)throw new i("range-not-satisfiable",{size:n,end:a,start:t});return void 0!==t&&void 0!==a?(s=t,r=a+1):void 0!==t&&void 0===a?(s=t,r=n):void 0!==a&&void 0===t&&(s=n-a,r=n),{start:s,end:r}},ej=e=>{let t=e.trim().toLowerCase();if(!t.startsWith("bytes="))throw new i("unit-must-be-bytes",{normalizedRangeHeader:t});if(t.includes(","))throw new i("single-range-only",{normalizedRangeHeader:t});let a=/(\d*)-(\d*)/.exec(t);if(!a||!(a[1]||a[2]))throw new i("invalid-range-values",{normalizedRangeHeader:t});return{start:""===a[1]?void 0:Number(a[1]),end:""===a[2]?void 0:Number(a[2])}},e$=async(e,t)=>{try{if(206===t.status)return t;let a=e.headers.get("range");if(!a)throw new i("no-range-header");let s=ej(a),r=await t.blob(),n=eW(r,s.start,s.end),c=r.slice(n.start,n.end),o=c.size,l=new Response(c,{status:206,statusText:"Partial Content",headers:t.headers});return l.headers.set("Content-Length",String(o)),l.headers.set("Content-Range",`bytes ${n.start}-${n.end-1}/${r.size}`),l}catch(e){return new Response("",{status:416,statusText:"Range Not Satisfiable"})}};class eH{cachedResponseWillBeUsed=async({request:e,cachedResponse:t})=>t&&e.headers.has("range")?await e$(e,t):t}class eV extends ee{async _handle(e,t){let a,s=await t.cacheMatch(e);if(!s)try{s=await t.fetchAndCachePut(e)}catch(e){e instanceof Error&&(a=e)}if(!s)throw new i("no-response",{url:e.url,error:a});return s}}class eG extends ee{constructor(e={}){super(e),this.plugins.some(e=>"cacheWillUpdate"in e)||this.plugins.unshift(et)}async _handle(e,t){let a;let s=t.fetchAndCachePut(e).catch(()=>{});t.waitUntil(s);let r=await t.cacheMatch(e);if(r);else try{r=await s}catch(e){e instanceof Error&&(a=e)}if(!r)throw new i("no-response",{url:e.url,error:a});return r}}let eQ=[{matcher:/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,handler:new eV({cacheName:"google-fonts-webfonts",plugins:[new eO({maxEntries:4,maxAgeSeconds:31536e3,maxAgeFrom:"last-used"})]})},{matcher:/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,handler:new eG({cacheName:"google-fonts-stylesheets",plugins:[new eO({maxEntries:4,maxAgeSeconds:604800,maxAgeFrom:"last-used"})]})},{matcher:/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,handler:new eG({cacheName:"static-font-assets",plugins:[new eO({maxEntries:4,maxAgeSeconds:604800,maxAgeFrom:"last-used"})]})},{matcher:/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,handler:new eG({cacheName:"static-image-assets",plugins:[new eO({maxEntries:64,maxAgeSeconds:2592e3,maxAgeFrom:"last-used"})]})},{matcher:/\/_next\/static.+\.js$/i,handler:new eV({cacheName:"next-static-js-assets",plugins:[new eO({maxEntries:64,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:/\/_next\/image\?url=.+$/i,handler:new eG({cacheName:"next-image",plugins:[new eO({maxEntries:64,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:/\.(?:mp3|wav|ogg)$/i,handler:new eV({cacheName:"static-audio-assets",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400,maxAgeFrom:"last-used"}),new eH]})},{matcher:/\.(?:mp4|webm)$/i,handler:new eV({cacheName:"static-video-assets",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400,maxAgeFrom:"last-used"}),new eH]})},{matcher:/\.(?:js)$/i,handler:new eG({cacheName:"static-js-assets",plugins:[new eO({maxEntries:48,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:/\.(?:css|less)$/i,handler:new eG({cacheName:"static-style-assets",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:/\/_next\/data\/.+\/.+\.json$/i,handler:new ea({cacheName:"next-data",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:/\.(?:json|xml|csv)$/i,handler:new ea({cacheName:"static-data-assets",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400,maxAgeFrom:"last-used"})]})},{matcher:({sameOrigin:e,url:{pathname:t}})=>!(!e||t.startsWith("/api/auth/callback"))&&!!t.startsWith("/api/"),method:"GET",handler:new ea({cacheName:"apis",plugins:[new eO({maxEntries:16,maxAgeSeconds:86400,maxAgeFrom:"last-used"})],networkTimeoutSeconds:10})},{matcher:({request:e,url:{pathname:t},sameOrigin:a})=>"1"===e.headers.get("RSC")&&"1"===e.headers.get("Next-Router-Prefetch")&&a&&!t.startsWith("/api/"),handler:new ea({cacheName:"pages-rsc-prefetch",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400})]})},{matcher:({request:e,url:{pathname:t},sameOrigin:a})=>"1"===e.headers.get("RSC")&&a&&!t.startsWith("/api/"),handler:new ea({cacheName:"pages-rsc",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400})]})},{matcher:({request:e,url:{pathname:t},sameOrigin:a})=>e.headers.get("Content-Type")?.includes("text/html")&&a&&!t.startsWith("/api/"),handler:new ea({cacheName:"pages",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400})]})},{matcher:({url:{pathname:e},sameOrigin:t})=>t&&!e.startsWith("/api/"),handler:new ea({cacheName:"others",plugins:[new eO({maxEntries:32,maxAgeSeconds:86400})]})},{matcher:({sameOrigin:e})=>!e,handler:new ea({cacheName:"cross-origin",plugins:[new eO({maxEntries:32,maxAgeSeconds:3600})],networkTimeoutSeconds:10})}];new eU({precacheEntries:[{'revision':'3b255bc0a9688d4e60af501ac94286d7','url':'/_next/static/4cUlh1MWcJGsMlVqjzEUE/_buildManifest.js'},{'revision':'b6652df95db52feb4daf4eca35380933','url':'/_next/static/4cUlh1MWcJGsMlVqjzEUE/_ssgManifest.js'},{'revision':null,'url':'/_next/static/chunks/114-9dac99d60d303cdb.js'},{'revision':null,'url':'/_next/static/chunks/137-af174fdcdfa683e4.js'},{'revision':null,'url':'/_next/static/chunks/229.6d23e71985131009.js'},{'revision':null,'url':'/_next/static/chunks/239-748ba98694b2a81f.js'},{'revision':null,'url':'/_next/static/chunks/269-3ee669d7f10b591f.js'},{'revision':null,'url':'/_next/static/chunks/2aa3bb4d-0befd012c1b61c48.js'},{'revision':null,'url':'/_next/static/chunks/30e9f638-5b9d253a77e55b48.js'},{'revision':null,'url':'/_next/static/chunks/315.1ca79ca90337eff1.js'},{'revision':null,'url':'/_next/static/chunks/319.83a292ffc521754d.js'},{'revision':null,'url':'/_next/static/chunks/346-f439f045aebc56c9.js'},{'revision':null,'url':'/_next/static/chunks/359-c22fa4a6f4688e2b.js'},{'revision':null,'url':'/_next/static/chunks/370.7bc26a021385abde.js'},{'revision':null,'url':'/_next/static/chunks/462.70be1a4f1dffe49a.js'},{'revision':null,'url':'/_next/static/chunks/662e2cae.20eb69266a07ecdf.js'},{'revision':null,'url':'/_next/static/chunks/757-e418ddca83ed94ba.js'},{'revision':null,'url':'/_next/static/chunks/834-cd150eca0be7f28f.js'},{'revision':null,'url':'/_next/static/chunks/90-87ee0fb8e1db4fb4.js'},{'revision':null,'url':'/_next/static/chunks/949-314718065113c810.js'},{'revision':null,'url':'/_next/static/chunks/94cf3c84-9c1cd18f226c8501.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/home/page-203efeca7a9f0278.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/hubspot/page-c581c811ac247ba4.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/layout-1e97d9748d48892b.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/r3f/page-678e6ed1711ea4dd.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/shopify/page-3a5380b3b00dd685.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/storyblok/%5Bslug%5D/page-be4e88872e7f6db8.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/storyblok/page-f1cdf61e82e94039.js'},{'revision':null,'url':'/_next/static/chunks/app/(pages)/template-5aefb155447be172.js'},{'revision':null,'url':'/_next/static/chunks/app/_not-found/page-c9cba6d6686cb842.js'},{'revision':null,'url':'/_next/static/chunks/app/debug/layout-5b2607305b7d6277.js'},{'revision':null,'url':'/_next/static/chunks/app/debug/orchestra/page-deb886f1f27bda11.js'},{'revision':null,'url':'/_next/static/chunks/ce650c42-3d6e4fc48bee4e4a.js'},{'revision':null,'url':'/_next/static/chunks/framework-f389d67e2530e54b.js'},{'revision':null,'url':'/_next/static/chunks/main-625dc5e2a83fb408.js'},{'revision':null,'url':'/_next/static/chunks/main-app-1f4815fc456ab89b.js'},{'revision':null,'url':'/_next/static/chunks/pages/_app-6afba8bb4235e0d7.js'},{'revision':null,'url':'/_next/static/chunks/pages/_error-d7c08f434e5cc41b.js'},{'revision':'79330112775102f91e1010318bae2bd3','url':'/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js'},{'revision':null,'url':'/_next/static/chunks/webpack-7b80a375d477e084.js'},{'revision':null,'url':'/_next/static/css/0847daa8068eb623.css'},{'revision':null,'url':'/_next/static/css/15985cab45436ff4.css'},{'revision':null,'url':'/_next/static/css/16b0739b18e5a066.css'},{'revision':null,'url':'/_next/static/css/d22d53a8444a47d5.css'},{'revision':null,'url':'/_next/static/css/d7c16d1c77b3229b.css'},{'revision':null,'url':'/_next/static/css/dc5cdc32d421ef51.css'},{'revision':null,'url':'/_next/static/css/f28931baa800f19f.css'},{'revision':'b030616b10becd6a9d1c93f6a5deed7f','url':'/_next/static/media/49e51380911abed7-s.p.woff2'},{'revision':'6173918d63fc1a11cbfa6225cded29e3','url':'/config/Satus-R3f.json'},{'revision':'7acaee8001995cd8d7496ccae00f23a9','url':'/swe-worker-ab00d3c7d2d59769.js'}],skipWaiting:!0,clientsClaim:!0,navigationPreload:!0,runtimeCaching:eQ}).addEventListeners()}(); \ No newline at end of file diff --git a/public/swe-worker-ab00d3c7d2d59769.js b/public/swe-worker-ab00d3c7d2d59769.js new file mode 100644 index 00000000..c5671bed --- /dev/null +++ b/public/swe-worker-ab00d3c7d2d59769.js @@ -0,0 +1 @@ +self.onmessage=async e=>{switch(e.data.type){case"__START_URL_CACHE__":{let t=e.data.url,a=await fetch(t);if(!a.redirected)return(await caches.open("start-url")).put(t,a);return Promise.resolve()}case"__FRONTEND_NAV_CACHE__":{let t=e.data.url,a=await caches.open("pages");if(await a.match(t,{ignoreSearch:!0}))return;let r=await fetch(t);if(!r.ok)return;return a.put(t,r.clone()),Promise.resolve()}default:return Promise.resolve()}}; \ No newline at end of file diff --git a/public/swe-worker-development.js b/public/swe-worker-development.js deleted file mode 100644 index 0a5bd310..00000000 --- a/public/swe-worker-development.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - * ATTENTION: An "eval-source-map" devtool has been used. - * This devtool is neither made for production nor for readable output files. - * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. - * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) - * or disable the default devtool with "devtool: false". - * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). - */ -/******/ (function() { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/sw-entry-worker.js": -/*!********************************************************************************************************************************************************************************************************!*\ - !*** ./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/sw-entry-worker.js ***! - \********************************************************************************************************************************************************************************************************/ -/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { - -eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\nself.onmessage = async (ev)=>{\n switch(ev.data.type){\n case \"__START_URL_CACHE__\":\n {\n const url = ev.data.url;\n const response = await fetch(url);\n if (!response.redirected) {\n const startUrlCache = await caches.open(\"start-url\");\n return startUrlCache.put(url, response);\n }\n return Promise.resolve();\n }\n case \"__FRONTEND_NAV_CACHE__\":\n {\n const url = ev.data.url;\n const pagesCache = await caches.open(\"pages\");\n const isPageCached = !!await pagesCache.match(url, {\n ignoreSearch: true\n });\n if (isPageCached) {\n return;\n }\n const page = await fetch(url);\n if (!page.ok) {\n return;\n }\n pagesCache.put(url, page.clone());\n return Promise.resolve();\n }\n default:\n return Promise.resolve();\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvLnBucG0vQHNlcndpc3QrbmV4dEA5LjAuMl9uZXh0QDE0LjIuM19AYmFiZWwrY29yZUA3LjI0LjVfcmVhY3QtZG9tQDE4LjMuMV9yZWFjdEAxOC4zLjFfX3JlYWN0QDE4LjMuX2UybmttZXRlcnBxbGxnc2g0NHdmeGs3azJxL25vZGVfbW9kdWxlcy9Ac2Vyd2lzdC9uZXh0L2Rpc3Qvc3ctZW50cnktd29ya2VyLmpzIiwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvLnBucG0vQHNlcndpc3QrbmV4dEA5LjAuMl9uZXh0QDE0LjIuM19AYmFiZWwrY29yZUA3LjI0LjVfcmVhY3QtZG9tQDE4LjMuMV9yZWFjdEAxOC4zLjFfX3JlYWN0QDE4LjMuX2UybmttZXRlcnBxbGxnc2g0NHdmeGs3azJxL25vZGVfbW9kdWxlcy9Ac2Vyd2lzdC9uZXh0L2Rpc3Qvc3ctZW50cnktd29ya2VyLmpzPzI1OGMiXSwic291cmNlc0NvbnRlbnQiOlsic2VsZi5vbm1lc3NhZ2UgPSBhc3luYyAoZXYpPT57XG4gICAgc3dpdGNoKGV2LmRhdGEudHlwZSl7XG4gICAgICAgIGNhc2UgXCJfX1NUQVJUX1VSTF9DQUNIRV9fXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gZXYuZGF0YS51cmw7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVkaXJlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFVybENhY2hlID0gYXdhaXQgY2FjaGVzLm9wZW4oXCJzdGFydC11cmxcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydFVybENhY2hlLnB1dCh1cmwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwiX19GUk9OVEVORF9OQVZfQ0FDSEVfX1wiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGV2LmRhdGEudXJsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VzQ2FjaGUgPSBhd2FpdCBjYWNoZXMub3BlbihcInBhZ2VzXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUGFnZUNhY2hlZCA9ICEhYXdhaXQgcGFnZXNDYWNoZS5tYXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlU2VhcmNoOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzUGFnZUNhY2hlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgICAgICAgICAgICAgIGlmICghcGFnZS5vaykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhZ2VzQ2FjaGUucHV0KHVybCwgcGFnZS5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/sw-entry-worker.js\n")); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The require scope -/******/ var __webpack_require__ = {}; -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/make namespace object */ -/******/ !function() { -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/trusted types policy */ -/******/ !function() { -/******/ var policy; -/******/ __webpack_require__.tt = function() { -/******/ // Create Trusted Type policy if Trusted Types are available and the policy doesn't exist yet. -/******/ if (policy === undefined) { -/******/ policy = { -/******/ createScript: function(script) { return script; } -/******/ }; -/******/ if (typeof trustedTypes !== "undefined" && trustedTypes.createPolicy) { -/******/ policy = trustedTypes.createPolicy("nextjs#bundler", policy); -/******/ } -/******/ } -/******/ return policy; -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/trusted types script */ -/******/ !function() { -/******/ __webpack_require__.ts = function(script) { return __webpack_require__.tt().createScript(script); }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/react refresh */ -/******/ !function() { -/******/ if (__webpack_require__.i) { -/******/ __webpack_require__.i.push(function(options) { -/******/ var originalFactory = options.factory; -/******/ options.factory = function(moduleObject, moduleExports, webpackRequire) { -/******/ var hasRefresh = typeof self !== "undefined" && !!self.$RefreshInterceptModuleExecution$; -/******/ var cleanup = hasRefresh ? self.$RefreshInterceptModuleExecution$(moduleObject.id) : function() {}; -/******/ try { -/******/ originalFactory.call(this, moduleObject, moduleExports, webpackRequire); -/******/ } finally { -/******/ cleanup(); -/******/ } -/******/ } -/******/ }) -/******/ } -/******/ }(); -/******/ -/******/ /* webpack/runtime/compat */ -/******/ -/******/ -/******/ // noop fns to prevent runtime errors during initialization -/******/ if (typeof self !== "undefined") { -/******/ self.$RefreshReg$ = function () {}; -/******/ self.$RefreshSig$ = function () { -/******/ return function (type) { -/******/ return type; -/******/ }; -/******/ }; -/******/ } -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module can't be inlined because the eval-source-map devtool is used. -/******/ var __webpack_exports__ = {}; -/******/ __webpack_modules__["./node_modules/.pnpm/@serwist+next@9.0.2_next@14.2.3_@babel+core@7.24.5_react-dom@18.3.1_react@18.3.1__react@18.3._e2nkmeterpqllgsh44wfxk7k2q/node_modules/@serwist/next/dist/sw-entry-worker.js"](0, __webpack_exports__, __webpack_require__); -/******/ -/******/ })() -; \ No newline at end of file diff --git a/todo.md b/todo.md deleted file mode 100644 index e69de29b..00000000