From 65e682f35d1a644b4d29f06c899cb6a906b85def Mon Sep 17 00:00:00 2001 From: angelespejo Date: Sat, 4 Jan 2025 20:49:34 +0100 Subject: [PATCH] :green_heart: ci(all): Up documentation --- .dovenv/main.js | 197 +- .dovenv/readmes.js | 202 - .dovenv/schema.js | 66 - .dovenv/templates/partials/examples.md | 3 - .dovenv/templates/partials/footer.md | 33 - .dovenv/templates/partials/header.md | 9 - .dovenv/templates/partials/intro.md | 27 - .dovenv/templates/partials/social.md | 7 - .dovenv/templates/templates/index.md | 7 - .dovenv/templates/templates/readme-ws.md | 23 - .eslintrc.yaml | 439 -- .github/workflows/release.yml | 14 +- .github/workflows/update-repo-info.yml | 63 - .pigeonposse.yml | 38 +- CHANGELOG.md | 6 + README.md | 421 +- docs/dev-dist/registerSW.js | 3 +- docs/dev-dist/sw.js | 180 +- docs/dev-dist/workbox-86c9b217.js | 7411 ++++++++++------------ docs/guide/action/index.md | 90 + docs/guide/api.md | 0 docs/guide/core/api.md | 524 ++ docs/guide/core/index.md | 38 + docs/guide/{ => core}/options.md | 2 + docs/guide/{ => core}/usage.md | 97 +- docs/guide/index.md | 55 + docs/index.md | 15 +- docs/public/banner.png | Bin 0 -> 287728 bytes docs/public/logo.png | Bin 0 -> 4076 bytes eslint.config.js | 4 +- package.json | 40 +- pnpm-lock.yaml | 6325 +++++------------- 32 files changed, 5911 insertions(+), 10428 deletions(-) delete mode 100644 .dovenv/readmes.js delete mode 100644 .dovenv/schema.js delete mode 100644 .dovenv/templates/partials/examples.md delete mode 100644 .dovenv/templates/partials/footer.md delete mode 100644 .dovenv/templates/partials/header.md delete mode 100644 .dovenv/templates/partials/intro.md delete mode 100644 .dovenv/templates/partials/social.md delete mode 100644 .dovenv/templates/templates/index.md delete mode 100644 .dovenv/templates/templates/readme-ws.md delete mode 100644 .eslintrc.yaml delete mode 100644 .github/workflows/update-repo-info.yml create mode 100644 docs/guide/action/index.md delete mode 100644 docs/guide/api.md create mode 100644 docs/guide/core/api.md create mode 100644 docs/guide/core/index.md rename docs/guide/{ => core}/options.md (94%) rename docs/guide/{ => core}/usage.md (60%) create mode 100644 docs/public/banner.png create mode 100644 docs/public/logo.png diff --git a/.dovenv/main.js b/.dovenv/main.js index 619e96c..6d1d252 100644 --- a/.dovenv/main.js +++ b/.dovenv/main.js @@ -1,31 +1,167 @@ -import { defineConfig } from '@dovenv/core' -import { config as bandaTheme } from '@dovenv/theme-banda' +import { defineConfig } from '@dovenv/core' import { - asciiFont, - getCurrentDir, - getObjectFromJSONFile, + geMDTocString, joinPath, -} from '@dovenv/utils' + writeFile, +} from '@dovenv/core/utils' +import pigeonposseTheme, { + getWorkspaceConfig, + partial, + template, +} from '@dovenv/theme-pigeonposse' -const workspaceDir = joinPath( getCurrentDir( import.meta.url ), '..' ) -const pkgPath = joinPath( workspaceDir, 'package.json' ) -const pkg = await getObjectFromJSONFile( pkgPath ) +const core = await getWorkspaceConfig( { + metaURL : import.meta.url, + path : '../', + core : { + metaURL : import.meta.url, + path : '../', + }, +} ) -export default defineConfig( +const sidebar = [ { - name : 'BINARIUM DEV UTILS', - desc : 'Workspace tools for BINARIUM', - const : { - workspaceDir, - pkg, - mark : `\n${asciiFont( `pigeonposse\n-------\n${pkg.extra.id}`, 'ANSI Shadow' )}\nAuthor: ${pkg.author.name}\n`, - }, + text : 'Introduction', + items : [ + { + text : `What is ${core.pkg.name.toUpperCase()}?`, + link : '/guide/', + }, + ], + }, + { + text : 'Reference', + items : [ + { + text : `📚 Library / cli`, + items : [ + { + text : `🏁 Get started`, + link : '/guide/core/', + }, + { + text : `📈 Usage`, + link : '/guide/core/usage.md', + }, + { + text : `⚙️ Options`, + link : '/guide/core/options.md', + }, + { + text : `📖 Api`, + link : '/guide/core/api.md', + }, + ], + }, + { + text : '🤖 Github Action', + link : '/guide/action/', + }, + ], }, - bandaTheme( { - // TODO: make documentation page +] + +export default defineConfig( + pigeonposseTheme( { + core, docs : { - in : 'docs', - out : 'build/docs', + input : 'docs', + output : 'build', + vitepress : { + ignoreDeadLinks : true, + themeConfig : { outline: { level: [ 2, 3 ] } }, + vite : { build: { chunkSizeWarningLimit: 1000 } }, + }, + navLinks : [ + { + icon : 'githubactions', + link : core.pkg.extra.githubactionUrl, + }, + ], + sidebar : { + '/guide/' : sidebar, + '/todo/' : sidebar, + '/contributors' : sidebar, + }, + autoSidebar : { + intro : false, + reference : false, + }, + }, + convert : { + api : { + type : 'custom', + fn : async ( { run, config } ) => { + + const wsDir = config.const.workspaceDir + const name = config.const.pkg.productName + + const content = await run.ts2md( { + input : [ 'src/main.ts' ], + opts : { + tsconfigPath : joinPath( wsDir, 'tsconfig.json' ), + packageJsonPath : joinPath( wsDir, 'package.json' ), + typedoc : { logLevel: 'Error' }, + typedocMarkdown : { + hidePageHeader : true, + hidePageTitle : true, + }, + }, + } ) + + const apiContent = content[0].content + .replaceAll( '](index.md#', '](#' ) // this is because typedoc adds index.md# to the links + + await writeFile( joinPath( wsDir, 'docs/guide/core/api.md' ), `# \`${name}\` - API documentation\n\n` + apiContent ) + + }, + }, + }, + templates : { + readme : { + input : template.readmePkg, + const : { + libPkg : core.pkg, + desc : core.pkg.description, + title : core.pkg.extra.productName, + }, + partial : { + installation : { input: partial.installation }, + footer : { input: partial.footer }, + precontent : { input: '' }, + content : { input : `## 🌟 Features + +- ⚡ **Fast**: Optimized for quick execution and minimal overhead. +- 🚀 **Easy to Use**: Simple setup with minimal configuration required. +- 🛠️ **Advanced Configuration**: Customize to fit your project's exact needs. +- 🌍 **Available for**: + - 🟢 **Node.js** + - 🦕 **Deno** + - 🍞 **Bun** +- 🌐 **Supports Multiple Environments**: + - 📦 **JavaScript Library**: Integrates seamlessly into any project. + - 💻 **Command Line Interface (CLI)**: Works across Node.js, Deno, and Bun environments. + - 🤖 **GitHub Action**: Easily incorporate it into CI/CD pipelines with GitHub Actions support. + +## More +- [Documentation]({{const.libPkg.homepage}}) +- [GitHub Action]({{const.libPkg.extra.githubactionUrl}}) + +` }, + }, + hook : { + afterPartials : async data => { + + data.const.toc = `## Index\n\n` + await geMDTocString( { + input : data.content, + removeH1 : true, + } ) + `\n- [Documentation]({{const.libPkg.homepage}})` + return data + + }, + }, + output : joinPath( core.workspaceDir, 'README.md' ), + }, }, repo : { commit : { scopes : [ { value: 'core' }, @@ -33,24 +169,7 @@ export default defineConfig( { value: 'all' }, ] } }, lint : { - staged : { '*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,json}': 'eslint' }, - eslint : { flags: [ '--fix' ] }, + staged : { '*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,json}': 'dovenv lint eslint --fix' }, }, - // 'repo': { - // '' - // }, - workspace : { check : { pkg : { schema : async ( { - v, path, data, - } ) => { - - if ( !data ) throw new Error( `No data in ${path}` ) - if ( 'private' in data ) return - return v.object( { - name : v.string(), - version : v.string(), - description : v.string(), - } ) - - } } } }, } ), ) diff --git a/.dovenv/readmes.js b/.dovenv/readmes.js deleted file mode 100644 index 9b32ccc..0000000 --- a/.dovenv/readmes.js +++ /dev/null @@ -1,202 +0,0 @@ -import { Typescript2Markdown } from '@dovenv/convert' -import { defineConfig } from '@dovenv/core' -import { - getCurrentDir, - getMD, - getObjectFromJSONFile, - joinPath, - replacePlaceholders, - color, - geMDTocString, - writeFileContent, - existsFile, - resolvePath, - incrementMdHeaders, - line, -} from '@dovenv/utils' - -import { - markSchema, - pkgSchema, - validateSchema, -} from './schema.js' - -/** - * @typedef {object} BuildCoreReadmeOptions - * @property {import('@dovenv/core').Config} config - dovenv configuration - * @property {string} [id] - package id - * @property {string[]} [templatePath] - Path to the template file - * @property {string[]} [docsPath] - Path to the content file - * @property {string} [title] - Title for the README - * @property {string[] | false } [input] - Path to the input file - */ - -/** - * Builds the core README file. - * @param {BuildCoreReadmeOptions} options - Options for building the core README. - */ -const buildCoreReadme = async ( { - config, - id = undefined, - templatePath = [ 'readme.md' ], - outputPath = [ 'README.md' ], - docsPath = [ 'docs', 'index.md' ], - title, - input = [ 'src', 'main.ts' ], -} ) => { - - try { - - if ( !config.const.pkg ) throw 'Must exist [pkg] const in dovenv configuration' - if ( !config.const.mark ) throw 'Must exist [mark] const in dovenv config.\nThis must be a text, for example a watermark, a trademark, or a simple text about the project.' - - await validateSchema( pkgSchema, config.const.pkg, 'pkg' ) - await validateSchema( markSchema, config.const.mark, 'mark' ) - - const projectPath = id ? joinPath( 'packages', id ) : '.' - const currentDir = getCurrentDir( import.meta.url ) - const partialsDir = joinPath( currentDir, 'partials' ) - const readmeTemplatePath = joinPath( currentDir, 'templates', ...templatePath ) - const readmePath = joinPath( projectPath, outputPath ) - const projectPackage = joinPath( projectPath, 'package.json' ) - const contentPath = joinPath( projectPath, ...docsPath ) - const tsconfigPath = joinPath( projectPath, 'tsconfig.json' ) - const socialPath = joinPath( partialsDir, 'social.md' ) - const footerPath = joinPath( partialsDir, 'footer.md' ) - const headerPath = joinPath( partialsDir, 'header.md' ) - const data = await getObjectFromJSONFile( projectPackage ) - console.log( line( { - title : color.cyan( `Build README [${id || 'workspace'}]` ), - lineChar : ' ', - } ) ) - console.log( line( { - title : '', - lineChar : color.cyan.dim( '⎯' ), - } ) ) - console.debug( { - config, - id, - templatePath, - docsPath, - title, - input, - } ) - - let api = '' - - if ( input ) { - - const ts2md = new Typescript2Markdown( { - input : [ joinPath( projectPath, ...input ) ], - opts : { - tsconfigPath : tsconfigPath, - packageJsonPath : projectPackage, - typedocMarkdown : { - hidePageHeader : true, - hidePageTitle : true, - }, - }, - } ) - - const { content } = ( await ts2md.run() )[0] - - api = `## Api documentation\n\n` + await incrementMdHeaders( content ) - - } - - const params = { - pkg : config.const.pkg, - desc : data.description, - name : data.name, - title : title || data.name, - mark : config.const.mark, - } - - params.social = await replacePlaceholders( { - content : await getMD( socialPath ), - params, - } ) - - params.header = await replacePlaceholders( { - content : await getMD( headerPath ), - params, - } ) - - params.footer = await replacePlaceholders( { - content : await getMD( footerPath ), - params, - } ) - - const readmeTemplate = await getMD( readmeTemplatePath ) - const readmeContentPre1 = await replacePlaceholders( { - content : readmeTemplate, - params : { - content : await existsFile( contentPath ) - ? ( await incrementMdHeaders( await getMD( resolvePath( contentPath ) ) ) ) - : '', - api : api, - }, - } ) - - const readmeContentPre2 = await replacePlaceholders( { - content : readmeContentPre1, - params, - } ) - - const readmeContent = await replacePlaceholders( { - content : readmeContentPre2, - params : { toc : await geMDTocString( { - input : readmeContentPre2, - title : 'Table of contents', - removeH1 : true, - maxHeadingLevel : 3, - } ) }, - } ) - - await writeFileContent( - readmePath, - '\n\n' + readmeContent + '\n\n', - ) - - console.log() - console.log( color.green( `[${id || 'workspace'}] Successfully created!! ✨✨` ) ) - console.log( line( { - title : '', - lineChar : color.cyan.dim( '⎯' ), - } ) ) - console.log() - - } - catch ( e ) { - - console.error( color.red( e ) ) - - } - -} - -export default defineConfig( { custom : { readmes : { - desc : 'Create package readmes simultaneously', - fn : async ( { config } ) => { - - /** @type {Array} */ - const data = [ - { - title : 'Binarium', - input : false, - templatePath : [ 'readme-ws.md' ], - docsPath : [ 'docs', 'usage.md' ], - }, - ] - - for ( const item of data ) { - - await buildCoreReadme( { - config, - ...item, - } ) - - } - - }, -} } } ) diff --git a/.dovenv/schema.js b/.dovenv/schema.js deleted file mode 100644 index 713b861..0000000 --- a/.dovenv/schema.js +++ /dev/null @@ -1,66 +0,0 @@ -import { - validate as z, - formatValidationError, - schema2type, - serializeValidation, -} from '@dovenv/utils' - -export const pkgSchema = z.object( { - name : z.string(), - description : z.string(), - homepage : z.string(), - funding : z.object( { url: z.string().url() } ), - repository : z.object( { url: z.string().url() } ), - bugs : z.object( { url: z.string().url() } ), - license : z.string(), - extra : z.object( { - productName : z.string(), - libraryUrl : z.string().url(), - licenseUrl : z.string().url(), - libraryId : z.string(), - docsUrl : z.string().url(), - collective : z.object( { - id : z.string(), - name : z.string(), - funding : z.string().url(), - about : z.string().url(), - url : z.string().url(), - email : z.string().email(), - gh : z.string().url(), - // socialUser : z.object( { - // twitter : z.string(), - // instagram : z.string(), - // medium : z.string(), - // } ), - social : z.object( { - twitter : z.string().url(), - instagram : z.string().url(), - medium : z.string().url(), - } ), - } ), - } ), -} ) - -export const markSchema = z.string() -export const projectSchema = z.object( { - name : z.string(), - description : z.string(), -} ) -export const validateSchema = async ( schema, data, title ) => { - - const result = schema.safeParse( data ) - if ( !result.success ) { - - const errorMessage = formatValidationError( result.error ) - - const content = ( await schema2type( { - schema : serializeValidation( schema ), - required : true, - noUnknownObject : true, - } ) ) - - throw `Error in dovenv configuration: [${title}] const invalid schema.\n\n[${title}] Schema must have: ${content}\n\n${errorMessage}` - - } - -} diff --git a/.dovenv/templates/partials/examples.md b/.dovenv/templates/partials/examples.md deleted file mode 100644 index cf3f1b5..0000000 --- a/.dovenv/templates/partials/examples.md +++ /dev/null @@ -1,3 +0,0 @@ -## 📝 Examples - -- [View examples]({{pkg.repository.url}}/tree/main/examples) diff --git a/.dovenv/templates/partials/footer.md b/.dovenv/templates/partials/footer.md deleted file mode 100644 index 0982b8d..0000000 --- a/.dovenv/templates/partials/footer.md +++ /dev/null @@ -1,33 +0,0 @@ -## 👨‍💻 Development - -__{{pkg.extra.productName}}__ is an open-source project and its development is open to anyone who wants to participate. - -[![Issues](https://img.shields.io/badge/Issues-grey?style=for-the-badge)]({{pkg.repository.url}}/issues) -[![Pull requests](https://img.shields.io/badge/Pulls-grey?style=for-the-badge)]({{pkg.repository.url}}/pulls) -[![Read more](https://img.shields.io/badge/Read%20more-grey?style=for-the-badge)]({{pkg.homepage}}) - -## ☕ Donate - -Help us to develop more interesting things. - -[![Donate](https://img.shields.io/badge/Donate-grey?style=for-the-badge)]({{pkg.funding.url}}) - -## 📜 License - -This software is licensed with __[{{pkg.license}}]({{pkg.extra.licenseUrl}})__. - -[![Read more](https://img.shields.io/badge/Read-more-grey?style=for-the-badge)]({{pkg.extra.licenseUrl}}) - -## 🐦 About us - -*PigeonPosse* is a ✨ __code development collective__ ✨ focused on creating practical and interesting tools that help developers and users enjoy a more agile and comfortable experience. Our projects cover various programming sectors and we do not have a thematic limitation in terms of projects. - -[![More](https://img.shields.io/badge/Read-more-grey?style=for-the-badge)]({{pkg.extra.collective.gh}}) - -*** - -{{social}} - - diff --git a/.dovenv/templates/partials/header.md b/.dovenv/templates/partials/header.md deleted file mode 100644 index 253fd70..0000000 --- a/.dovenv/templates/partials/header.md +++ /dev/null @@ -1,9 +0,0 @@ -{{desc}} - -## 🤔 What is it `{{pkg.extra.id}}`? - -The construction of the binary allows compilation on `arm64` and `x64` architecture. - -> If you compile on an `x64` system it will not create the binaries for `arm`, but if you compile on `arm` it will create the binaries for both architectures. - - diff --git a/.dovenv/templates/partials/intro.md b/.dovenv/templates/partials/intro.md deleted file mode 100644 index f757e3f..0000000 --- a/.dovenv/templates/partials/intro.md +++ /dev/null @@ -1,27 +0,0 @@ -## 🌟 Features - -- ⚡ **Fast**: Optimized for quick execution and minimal overhead. -- 🚀 **Easy to Use**: Simple setup with minimal configuration required. -- 🛠️ **Advanced Configuration**: Customize to fit your project's exact needs. -- 🌍 **Available for**: - - 🟢 **Node.js** - - 🦕 **Deno** - - 🍞 **Bun** -- 🌐 **Supports Multiple Environments**: - - 📦 **JavaScript Library**: Integrates seamlessly into any project. - - 💻 **Command Line Interface (CLI)**: Works across Node.js, Deno, and Bun environments. - - 🤖 **GitHub Action**: Easily incorporate it into CI/CD pipelines with GitHub Actions support. - -## 🔑 Installation - -```bash -npm install {{pkg.extra.id}} -# or -pnpm add {{pkg.extra.id}} -# or -yarn add {{pkg.extra.id}} -# or -deno install {{pkg.extra.id}} -# or -bun add {{pkg.extra.id}} -``` diff --git a/.dovenv/templates/partials/social.md b/.dovenv/templates/partials/social.md deleted file mode 100644 index aeb0fe1..0000000 --- a/.dovenv/templates/partials/social.md +++ /dev/null @@ -1,7 +0,0 @@ -[![Web](https://img.shields.io/badge/Web-grey?style=for-the-badge&logoColor=white)]({{pkg.extra.collective.url}}) -[![About Us](https://img.shields.io/badge/About%20Us-grey?style=for-the-badge&logoColor=white)]({{pkg.extra.collective.about}}) -[![Donate](https://img.shields.io/badge/Donate-pink?style=for-the-badge&logoColor=white)]({{pkg.extra.collective.funding}}) -[![Github](https://img.shields.io/badge/Github-black?style=for-the-badge&logo=github&logoColor=white)]({{pkg.extra.collective.gh}}) -[![Twitter](https://img.shields.io/badge/Twitter-black?style=for-the-badge&logo=twitter&logoColor=white)]({{pkg.extra.collective.social.twitter}}) -[![Instagram](https://img.shields.io/badge/Instagram-black?style=for-the-badge&logo=instagram&logoColor=white)]({{pkg.extra.collective.social.instagram}}) -[![Medium](https://img.shields.io/badge/Medium-black?style=for-the-badge&logo=medium&logoColor=white)]({{pkg.extra.collective.social.medium}}) diff --git a/.dovenv/templates/templates/index.md b/.dovenv/templates/templates/index.md deleted file mode 100644 index 5b382b8..0000000 --- a/.dovenv/templates/templates/index.md +++ /dev/null @@ -1,7 +0,0 @@ -# {{title}} - -{{header}} - -{{intro}} - -{{examples}} diff --git a/.dovenv/templates/templates/readme-ws.md b/.dovenv/templates/templates/readme-ws.md deleted file mode 100644 index d810d51..0000000 --- a/.dovenv/templates/templates/readme-ws.md +++ /dev/null @@ -1,23 +0,0 @@ -# {{title}} - -{{social}} - -[![License](https://img.shields.io/github/license/pigeonposse/{{name}}?color=green&style=for-the-badge&logoColor=white)]({{pkg.extra.licenseUrl}}) -[![Version](https://img.shields.io/npm/v/{{name}}?color=blue&style=for-the-badge&label=Version)](https://www.npmjs.com/package/{{name}}) - -{{header}} - -{{toc}} - -{{intro}} - -{{content}} - -{{examples}} - -{{api}} - -*** - -{{footer}} - diff --git a/.eslintrc.yaml b/.eslintrc.yaml deleted file mode 100644 index 042681c..0000000 --- a/.eslintrc.yaml +++ /dev/null @@ -1,439 +0,0 @@ -# ############################################################################# -# Eslint config. -# ############################################################################# -# -# @description ESLint is a tool for identifying and -# reporting on patterns found in ECMAScript/JavaScript code, -# with the goal of making code more consistent and avoiding bugs. -# -# @see https://eslint.org/ -# @see https://eslint.org/docs/latest/ -# -# ############################################################################# - ---- - -# ############################################################################# -# GENERAL. -# ############################################################################# - -root: true -env: - node: true - browser: true - es2022: true -parserOptions: - ecmaVersion: 2023 - sourceType: module - allowImportExportEverywhere: true -plugins: - - html - - align-import - - align-assignments - - promise - - jsonc - - yaml - - canonical -extends: - - eslint:recommended - - plugin:promise/recommended - - plugin:jsdoc/recommended - - plugin:import/recommended - -# ############################################################################# -# RULES. -# @see https://eslint.org/docs/latest/rules/ -# ############################################################################# -rules: - camelcase: warn - key-spacing: - - error - - multiLine: - beforeColon: true - afterColon: true - align: - beforeColon: true - afterColon: true - on: colon - switch-colon-spacing: - - error - - after: true - before: true - comma-dangle: - - error - - always-multiline - comma-spacing: - - error - - after: true - computed-property-spacing: - - error - - always - no-multiple-empty-lines: - - error - - max: 1 - maxEOF: 1 - maxBOF: 1 - padded-blocks: - - error - - always - one-var: - - error - - var: always - let: always - const: never - vars-on-top: warn - space-in-parens: - - error - - always - object-curly-newline: - - error - - multiline: true - minProperties: 2 - # consistent: true - # - ObjectPattern: - # multiline: true - # ObjectExpression: - # minProperties: 1 - # ImportDeclaration: - # multiline: true - # minProperties: 2 - object-property-newline: - - error - object-curly-spacing: - - error - - always - array-element-newline: - - error - # - multiline: true - - minItems: 3 - array-bracket-newline: - - error - # - multiline: true - - minItems: 3 - array-bracket-spacing: - - error - - always - linebreak-style: - - error - - unix - semi: - - error - - never - operator-linebreak: - - error - - before - arrow-parens: - - error - - as-needed - default-case-last: error - indent: - - error - - tab - - SwitchCase: 1 - default-case: error - eol-last: - - error - - always - no-prototype-builtins: off - no-inline-comments: off - space-infix-ops: error - no-multi-spaces: - - error - - exceptions: - ImportDeclaration: true - VariableDeclarator: true - AssignmentExpression: true - # IMPORT. - # ############################################################################# - import/no-unresolved: off - import/newline-after-import: - - error - # https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md - import/order: - - error - - groups: - - [ - "builtin", "external" - ] - - [ - "internal", "parent", "sibling", "index", "object", - ] - - [ - "type" - ] - pathGroups: [] - pathGroupsExcludedImportTypes: [] - alphabetize: - order: asc - caseInsensitive: true - newlines-between: "always" - warnOnUnassignedImports: true - # ALIGN. - # ############################################################################# - align-import/align-import: error - align-import/trim-import: error - align-assignments/align-assignments: - - error - - requiresOnly: false - canonical/import-specifier-newline: error - canonical/export-specifier-newline: error - -# ############################################################################# -# IGNORE FILES. -# -# @description Specifies which files and directories should be ignored by ESLint, -# helping to exclude specific files from linting. -# @see https://eslint.org/docs/user-guide/configuring/ignoring-code -# -# ############################################################################# -ignorePatterns: - # module folders - - 'vendor/' - - '**/vendor/*' - - '**/vendor/**' - - '**/node_modules/*' - # static folders - - '**/static/*' - - '**/public/*' - # dist folders - - 'dist/*' - - '**/dist/*' - - '**/build/*' - - '**/.svelte-kit/*' - # others - - '**/*.timestamp-*' - - '**/*.d.ts' - - 'packages/_config/*' - - '**/__temp__/*' - - '**/__cache__/*' - # md - - "**/LICENSE" - # project - - "docs/partials/**" - - "docs/index.md" - - '!.dev' - - '!.utils' - -# ############################################################################# -# CONFIG FOR SPECIF FILES. -# ############################################################################# - -overrides: - - # ########################################################################### - # JS & TS config. - # ########################################################################### - - files: - - '**/*.js' - - '**/*.mjs' - - '**/*.cjs' - - '**/*.jxs' - - '**/*.ts' - - '**/*.mts' - - '**/*.cts' - - '**/*.txs' - rules: - quotes: - - error - - single - - # ########################################################################### - # COMMON JS config. - # ########################################################################### - - files: - - '**/*.cjs' - env: - node: true - - # ########################################################################### - # JSDOC config. - # @see https://github.com/gajus/eslint-plugin-jsdoc - # ########################################################################### - - files: - - '**/*.js' - - '**/*.mjs' - - '**/*.cjs' - - '**/*.jxs' - - '**/*.ts' - - '**/*.mts' - - '**/*.cts' - - '**/*.txs' - rules: - # jsdoc/check-examples: - # - error # at the moment is not available in eslint8 - jsdoc/sort-tags: - - error - jsdoc/require-jsdoc: - - error - - require: {} - jsdoc/require-description: - - error - - descriptionStyle: body - jsdoc/require-hyphen-before-param-description: - - error - - always - - tags: - returns: always - jsdoc/check-indentation: - - error - jsdoc/check-line-alignment: - - error - - always - - tags: - - version - - description - - since - - param - - returns - - jsdoc/require-description-complete-sentence: - - error - - tags: - - param - - returns - - description - jsdoc/tag-lines: - - error - - never - - startLines: 1 - endLines: 0 - tags: - # see: - # count: 1 - # lines: always - example: - count: 1 - lines: always - version: - count: 1 - lines: always - author: - count: 1 - lines: always - jsdoc/require-example: - - error - # jsdoc/check-syntax: - # - error - - settings: - jsdoc: - tagNamePreference: - experimental: experimental - beta: beta - - # ########################################################################### - # TYPESCRIPT config. - # @see https://typescript-eslint.io - # ########################################################################### - - files: - - '**/*.ts' - plugins: - - '@typescript-eslint' - extends: - - eslint:recommended - - plugin:@typescript-eslint/eslint-recommended - - plugin:@typescript-eslint/recommended - parser: '@typescript-eslint/parser' - rules: - '@typescript-eslint/consistent-type-imports': - - error - - prefer: type-imports - disallowTypeAnnotations: false - '@typescript-eslint/no-unused-vars': - - error - - args: all - argsIgnorePattern: "^_" - caughtErrors: all - caughtErrorsIgnorePattern: "^_" - destructuredArrayIgnorePattern: "^_" - varsIgnorePattern: "^_" - ignoreRestSiblings: true - '@typescript-eslint/ban-ts-comment': off - - # ########################################################################### - # YAML config. - # @see https://www.npmjs.com/package/eslint-plugin-yaml - # ########################################################################### - - files: - - '**/*.yaml' - - '**/*.yml' - extends: - - plugin:yaml/recommended - - # ########################################################################### - # MARKDOWN config. - # @see https://github.com/paweldrozd/eslint-plugin-markdownlint - # @see https://github.com/DavidAnson/markdownlint - # @see https://github.com/DavidAnson/markdownlint/blob/main/schema/.markdownlint.yaml - # ########################################################################### - - files: - - '**/*.md' - parser: eslint-plugin-markdownlint/parser - extends: - - plugin:markdownlint/recommended - rules: - # Line length | MD013/line-length - markdownlint/md013: "off" - # Inline HTML | MD033/no-inline-html - markdownlint/md033: "off" - # Multiple headings with the same content | MD024/no-duplicate-heading/no-duplicate-header - markdownlint/md024: "off" - - # ########################################################################### - # JSON config. - # @see https://ota-meshi.github.io/eslint-plugin-jsonc/rules/ - # ########################################################################### - - files: - - '**/*.json' - - '**/*.json5' - - '**/*.jsonc' - parser: jsonc-eslint-parser - rules: - strict: error - jsonc/auto: off - jsonc/no-comments: off - jsonc/indent: - - error - - tab - jsonc/comma-style: - - error - - last - jsonc/array-bracket-newline: - - error - - always - jsonc/comma-dangle: - - error - - never - jsonc/key-spacing: - - error - - beforeColon: false - afterColon: true - mode: strict - jsonc/object-curly-newline: - - error - - multiline: true - minProperties: 1 - jsonc/quotes: - - error - - double - - avoidEscape: false - - # ########################################################################### - # PACKAGE JSON config. - # @see https://www.npmjs.com/package/eslint-plugin-package-json - # @see https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/tree/main/docs/rules - # ########################################################################### - - files: - - "package.json" - extends: - - "plugin:package-json/recommended" - parser: "jsonc-eslint-parser" - plugins: - - "package-json" - rules: - 'package-json/valid-repository-directory': off - package-json/sort-collections: - - error - - ["devDependencies", "dependencies", "peerDependencies", "config"] - -# ############################################################################# diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bfa0ad9..79c1b09 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -65,7 +65,7 @@ jobs: - name: 🧩 Install dependencies run: | - pnpm install --no-frozen-lockfile + pnpm install --no-frozen-lockfile --ignore-scripts ######################################################################### # BUILD @@ -103,6 +103,18 @@ jobs: echo "core_version=$core_version" >> $GITHUB_OUTPUT echo "core_major_version=$core_version_major" >> $GITHUB_OUTPUT + - name: 🌥 Deploy in cloudflare pages + uses: cloudflare/pages-action@v1 + if: ${{ steps.updated.outputs.core_version != '' }} + with: + apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} + accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} + gitHubToken: ${{ secrets.GITHUB_TOKEN }} + branch: main + projectName: "binarium" + directory: 'build/docs' + wranglerVersion: '3' + - name: Release binary if: ${{ steps.updated.outputs.core_version != '' }} uses: ncipollo/release-action@v1 diff --git a/.github/workflows/update-repo-info.yml b/.github/workflows/update-repo-info.yml deleted file mode 100644 index faf379d..0000000 --- a/.github/workflows/update-repo-info.yml +++ /dev/null @@ -1,63 +0,0 @@ -############################################################################### -# UPDATE REPO INFO -############################################################################### - -name: ✅ Update repo info - -############################################################################### -# ON -############################################################################### - -on: - workflow_dispatch: -env: - GITHUB_TOKEN: ${{ github.token }} - -############################################################################### -# JOBS -############################################################################### - -jobs: - build: - name: Update repo info - runs-on: ubuntu-latest - - ########################################################################### - # STEPS - ########################################################################### - - steps: - - ######################################################################### - # INIT REPO - ######################################################################### - - - name: 🛎 Checkout - uses: actions/checkout@v3 - - ######################################################################### - # UPDATE - ######################################################################### - - - name: Change GitHub data - run: | - repo_url=$(echo $(jq -r . ./package.json) | jq -r '.repository.url') - description=$(echo $(jq -r . ./package.json) | jq -r '.description') - homepage=$(echo $(jq -r . ./package.json) | jq -r '.homepage') - keywords=$(echo $(jq -r . ./package.json) | jq -r '.keywords | join(",")') - - if [[ -n $repo_url ]]; then - gh repo edit "$repo_url" -d "$description" - fi - - if [[ -n e ]]; then - gh repo edit "$repo_url" --add-topic "$keywords" - fi - - if [[ -n $homepage ]]; then - gh repo edit "$repo_url" --homepage "$homepage" - fi - env: - GH_TOKEN: ${{ env.GITHUB_TOKEN }} - -############################################################################### diff --git a/.pigeonposse.yml b/.pigeonposse.yml index da8a80e..f727002 100644 --- a/.pigeonposse.yml +++ b/.pigeonposse.yml @@ -1,23 +1,17 @@ -############################################################################### -# FOR PIGEONPOSSE USAGE -############################################################################### - +# Automatically generated by binarium. Please do not edit manually. web: - - - id: "binarium" - name: "binarium" - type: "library" - subtypes: - - Bin - - CLI - - Node - version: "{{package.version}}" - description: "{{package.description}}" - homepage: "{{package.homepage}}" - repo: "{{package.repository.url}}" - license: "{{package.extra.licenseUrl}}" - # logo: "https://raw.githubusercontent.com/pigeonposse/binarium/main/docs/public/logo.png" - # banner: "https://raw.githubusercontent.com/pigeonposse/binarium/main/docs/public/banner.png" - status: "active" - -############################################################################### + - id: binarium + name: Binarium + version: 2.0.1 + description: >- + Easy-to-use, zero-configuration tool to create executables of your Node, + Deno or Bun projects for all platforms and architectures. + homepage: https://github.com/pigeonposse/binarium + type: library + subtype: + - bin + - cli + - env + repo: https://github.com/pigeonposse/binarium + license: https://github.com/pigeonposse/binarium/blob/main/LICENSE + status: active diff --git a/CHANGELOG.md b/CHANGELOG.md index 694a367..a90a6a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # binarium +## 2.0.2 + +### Patch Changes + +- Up documentation + ## 2.0.1 ### Patch Changes diff --git a/README.md b/README.md index 4c14fb3..e489e89 100644 --- a/README.md +++ b/README.md @@ -3,50 +3,44 @@ [![Web](https://img.shields.io/badge/Web-grey?style=for-the-badge&logoColor=white)](https://pigeonposse.com) [![About Us](https://img.shields.io/badge/About%20Us-grey?style=for-the-badge&logoColor=white)](https://pigeonposse.com?popup=about) [![Donate](https://img.shields.io/badge/Donate-pink?style=for-the-badge&logoColor=white)](https://pigeonposse.com/?popup=donate) -[![Github](https://img.shields.io/badge/Github-black?style=for-the-badge&logo=github&logoColor=white)](https://github.com/pigeonposse) -[![Twitter](https://img.shields.io/badge/Twitter-black?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/pigeonposse_) -[![Instagram](https://img.shields.io/badge/Instagram-black?style=for-the-badge&logo=instagram&logoColor=white)](https://www.instagram.com/pigeon.posse/) -[![Medium](https://img.shields.io/badge/Medium-black?style=for-the-badge&logo=medium&logoColor=white)](https://medium.com/@pigeonposse) +[![Twitter](https://img.shields.io/badge/Twitter-black?style=for-the-badge&logoColor=white&logo=twitter)](https://twitter.com/pigeonposse_) +[![Instagram](https://img.shields.io/badge/Instagram-black?style=for-the-badge&logoColor=white&logo=instagram)](https://www.instagram.com/pigeon.posse/) +[![Medium](https://img.shields.io/badge/Medium-black?style=for-the-badge&logoColor=white&logo=medium)](https://medium.com/@pigeonposse) -[![License](https://img.shields.io/github/license/pigeonposse/binarium?color=green&style=for-the-badge&logoColor=white)](/LICENSE) -[![Version](https://img.shields.io/npm/v/binarium?color=blue&style=for-the-badge&label=Version)](https://www.npmjs.com/package/binarium) +[![BANNER](https://github.com/pigeonposse/binarium/blob/main/docs/public/banner.png?raw=true)](https://binarium.pigeonposse.com/) -Easy-to-use, zero-configuration tool to create executables of your `Node`, `Deno` or `Bun` projects for all platforms and architectures. +[![License](https://img.shields.io/github/license/pigeonposse/binarium?style=for-the-badge&color=green&logoColor=white)](/LICENSE) +[![Version](https://img.shields.io/npm/v/binarium?style=for-the-badge&color=blue&label=Version)](https://www.npmjs.com/package/binarium) -The construction of the binary allows compilation on `arm64` and `x64` architecture. - -> If you compile on an `x64` system it will not create the binaries for `arm`, but if you compile on `arm` it will create the binaries for both architectures. +Easy-to-use, zero-configuration tool to create executables of your Node, Deno or Bun projects for all platforms and architectures. ## Index - - - -- [🌟 Features](#-features) - [🔑 Installation](#-installation) -- [⚙️ Options](#-options) -- [📈 usage](#-usage) - - [📦 JS](#-js) - - [🟢 Node](#-node) - - [🦕 Deno](#-deno) - - [🍞 Bun](#-bun) - - [💻 CLI](#-cli) - - [🛠️ With config file - advanced configuration](#-with-config-file---advanced-configuration) - - [Node Example](#node-example) - - [Deno Example](#deno-example) - - [Bun Example](#bun-example) - - [🤖 Github Action](#-github-action) - - [Inputs](#inputs) - - [Examples](#examples) - - [Build only linux executables](#build-only-linux-executables) - - [Build for all platforms and archs and upload to releases](#build-for-all-platforms-and-archs-and-upload-to-releases) +- [🌟 Features](#-features) +- [More](#more) - [👨‍💻 Development](#-development) - [☕ Donate](#-donate) - [📜 License](#-license) - [🐦 About us](#-about-us) - - [Collaborators](#collaborators) - +- [Documentation](https://binarium.pigeonposse.com/) + + + +## 🔑 Installation + +```bash +npm install binarium +# or +pnpm install binarium +# or +yarn add binarium +# or +bun add binarium +# or +deno add binarium +``` ## 🌟 Features @@ -62,317 +56,17 @@ The construction of the binary allows compilation on `arm64` and `x64` architect - 💻 **Command Line Interface (CLI)**: Works across Node.js, Deno, and Bun environments. - 🤖 **GitHub Action**: Easily incorporate it into CI/CD pipelines with GitHub Actions support. -## 🔑 Installation - -```bash -# npm -npm install binarium -# pnpm -pnpm add binarium -# yarn -yarn add binarium -# bun -bun add binarium -# deno -deno install binarium -``` - -## ⚙️ Options - -All of these options are available with the `binarium` command by adding the suffix `--` and followed by an `=` or space and its value. - -For more info execute: - -```bash -binarium --help -``` - -```ts -type BuilderParams = { - /** - * The app server input file. - * - * The input can be provided without an extension. - * If the extension is omitted, the system will automatically look for the following extensions: `.ts`, `.js`, `.mjs`, `.mts`. - */ - input: string, - /** - * Binary name. - */ - name?: string, - /** - * Directory for the output build. - * - * @default './build' - */ - output?: string, - /** - * Build only binary for your current OS. - * - * @default false - */ - onlyOs?: boolean - /** - * The build type Result [all|bundle|bin|compress]. - * - * @default 'all' - */ - type?: 'all'|'bundle'|'bin'|'compress' - /** - * Config file path. - * - * @default undefined - */ - config?: string -} -``` - -## 📈 usage +## More +- [Documentation]({{const.libPkg.homepage}}) +- [GitHub Action](https://github.com/marketplace/actions/binarium-tool-to-create-executables-of-your-node-deno-or-bun-projects) -Below is a sample of the many ways to run `binarium`. -### 📦 JS -Quickly compile your JS project into executables for all platforms and architectures - -> Automatically detects the JS runtime you are working in. Only accepts `node`, `deno`, `bun` - -```js -import { build } from 'binarium' - -await build( { - input : 'src/cli.js', // JS or TS file. You can add it without the extension - name : 'app-name', // default is input filename -} ) -``` - -### 🟢 Node - -Quickly compile your `Node` project into executables for all platforms and architectures - -```js -import { buildNode } from 'binarium' - -await buildNode( { - input : 'src/cli', // JS or TS file. You can add it without the extension - name : 'app-name', // default is input filename -} ) -``` - -> This function works thanks to [ncc](https://github.com/vercel/ncc), [pkg](https://github.com/yao-pkg/pkg) and [esbuild](https://esbuild.github.io), which facilitate this process. - -Alternatively, if you are working in a node environment, you can do: - -```js -import { build } from 'binarium' - -await build( { - input : 'src/cli', // JS or TS file. You can add it without the extension - name : 'app-name', // default is input filename -} ) -``` - -### 🦕 Deno - -Build Deno executables (`deno compile` wrapper) - -```js -import { buildDeno } from 'binarium' - -await buildDeno( { - input : 'src/cli', // JS or TS file. You can add it without the extension - name : 'app-name', // default is input filename -} ) -``` - -### 🍞 Bun - -Build Bun executables (`bun build --compile` wrapper) - -```js -import { buildBun } from 'binarium' - -await buildBun( { - input : 'src/cli', // JS or TS file. You can add it without the extension - name : 'app-name', // default is input filename -} ) -``` - -### 💻 CLI - -Use it from Cli. - -```bash -binarium --input src/server.js --name app-name -``` - -```bash -binarium node --input src/node-server.js --name node-app-name -``` - -```bash -binarium deno --input src/deno-server.js --name deno-app-name -``` - -```bash -binarium bun --input src/bun-server.js --name bun-app-name -``` - -### 🛠️ With config file - advanced configuration - -For more advanced configuration you can use a configuration file. -Supported formats are: `.mjs, .js, .json, .yml, .yaml, .toml, .tml`. - -In the configuration file you can define your build options and configure advanced options of the build itself using the `nodeOptions`|`denoOptions`|`bunOptions` key. - -#### Node Example - -```bash -binarium node --config binarium.config.js -``` - -```js -// binarium.config.js -import { defineConfig } from 'binarium' - -export default defineConfig( { - name : 'my-app-name', - onlyOs : true, - nodeOptions : { esbuild: { tsconfig: './tsconfig.builder.json' } }, -} ) - -``` - -#### Deno Example - -```bash -binarium deno -c binarium.config.js -``` - -```js -// binarium.config.js -import { defineConfig } from 'binarium' - -export default defineConfig( { - name : 'my-app-name', - onlyOs : true, - denoOptions : { flags: [ '--allow-all', '--no-npm' ] }, -} ) - -``` - -#### Bun Example - -```bash -binarium bun -c binarium.config.js -``` - -```js -// binarium.config.js -import { defineConfig } from 'binarium' - -export default defineConfig( { - name : 'my-app-name', - onlyOs : true, - bunOptions : { flags: [ '--packages external' ] }, -} ) - -``` - -### 🤖 Github Action - -#### Inputs - -The action accepts the following inputs: - -- **build** (optional): Specifies the execution environment. Acceptable values are: `node`, `deno`, `bun`. The default is `node`. - -- **config** (optional): Path to the configuration file. The default is `./binarium.config.json`. -Make sure that the specified configuration file exists and is correctly configured. - -#### Examples - -Here is an example of how to set it up: - -##### Build only linux executables - -```yaml -name: Build Executable for linux - -on: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Run BINARIUM Action - uses: pigeonposse/binarium@v1 - with: - build: 'node' - config: '.dev/binarium.config.yml' -``` - -```yaml -# .dev/binarium.config.yml -name: my-app -onlyOs: true -input: src/app.ts -assets: - - from: src/assets/** - to: public - -``` - -##### Build for all platforms and archs and upload to releases - -```yaml -name: Build Executables and upload - -on: - workflow_dispatch: -jobs: - build: - runs-on: macos-14 # Because it's an arm64. SEE: https://github.com/actions/runner-images?tab=readme-ov-file#available-images - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Run BINARIUM Action - uses: pigeonposse/binarium@v1 - with: - build: 'node' - config: './binarium.config.yml' # Where is our config file - - name: Release binaries - uses: ncipollo/release-action@v1 - with: - tag: "Releases" - draft: false - prerelease: false - allowUpdates: true - artifacts: "build/compress/*" # Default build folder - omitBodyDuringUpdate: true -``` - -```yaml -# ./binarium.config.yml -name: my-app -input: src/app.ts - -``` +--- ## 👨‍💻 Development -**binarium** is an open-source project and its development is open to anyone who wants to participate. +__Binarium__ is an open-source project and its development is open to anyone who wants to participate. [![Issues](https://img.shields.io/badge/Issues-grey?style=for-the-badge)](https://github.com/pigeonposse/binarium/issues) [![Pull requests](https://img.shields.io/badge/Pulls-grey?style=for-the-badge)](https://github.com/pigeonposse/binarium/pulls) @@ -386,32 +80,51 @@ Help us to develop more interesting things. ## 📜 License -This software is licensed with **[GPL-3.0](/LICENSE)**. +This software is licensed with __[GPL-3.0](https://github.com/pigeonposse/binarium/blob/main/LICENSE)__. -[![Read more](https://img.shields.io/badge/Read-more-grey?style=for-the-badge)](/LICENSE) +[![Read more](https://img.shields.io/badge/Read-more-grey?style=for-the-badge)](https://github.com/pigeonposse/binarium/blob/main/LICENSE) ## 🐦 About us -*PigeonPosse* is a ✨ **code development collective** ✨ focused on creating practical and interesting tools that help developers and users enjoy a more agile and comfortable experience. Our projects cover various programming sectors and we do not have a thematic limitation in terms of projects. +*PigeonPosse* is a ✨ __code development collective__ ✨ focused on creating practical and interesting tools that help developers and users enjoy a more agile and comfortable experience. Our projects cover various programming sectors and we do not have a thematic limitation in terms of projects. [![More](https://img.shields.io/badge/Read-more-grey?style=for-the-badge)](https://github.com/pigeonposse) -### Collaborators - -| | Name | Role | GitHub | -| ---------------------------------------------------------------------------------- | ----------- | ------------ | ---------------------------------------------- | -| Angelo | Angelo | Author & Development | [@Angelo](https://github.com/angelespejo) | -| PigeonPosse | PigeonPosse | Collective | [@PigeonPosse](https://github.com/PigeonPosse) | - -
-

+--- [![Web](https://img.shields.io/badge/Web-grey?style=for-the-badge&logoColor=white)](https://pigeonposse.com) [![About Us](https://img.shields.io/badge/About%20Us-grey?style=for-the-badge&logoColor=white)](https://pigeonposse.com?popup=about) [![Donate](https://img.shields.io/badge/Donate-pink?style=for-the-badge&logoColor=white)](https://pigeonposse.com/?popup=donate) -[![Github](https://img.shields.io/badge/Github-black?style=for-the-badge&logo=github&logoColor=white)](https://github.com/pigeonposse) -[![Twitter](https://img.shields.io/badge/Twitter-black?style=for-the-badge&logo=twitter&logoColor=white)](https://twitter.com/pigeonposse_) -[![Instagram](https://img.shields.io/badge/Instagram-black?style=for-the-badge&logo=instagram&logoColor=white)](https://www.instagram.com/pigeon.posse/) -[![Medium](https://img.shields.io/badge/Medium-black?style=for-the-badge&logo=medium&logoColor=white)](https://medium.com/@pigeonposse) +[![Twitter](https://img.shields.io/badge/Twitter-black?style=for-the-badge&logoColor=white&logo=twitter)](https://twitter.com/pigeonposse_) +[![Instagram](https://img.shields.io/badge/Instagram-black?style=for-the-badge&logoColor=white&logo=instagram)](https://www.instagram.com/pigeon.posse/) +[![Medium](https://img.shields.io/badge/Medium-black?style=for-the-badge&logoColor=white&logo=medium)](https://medium.com/@pigeonposse) + + -

diff --git a/docs/dev-dist/registerSW.js b/docs/dev-dist/registerSW.js index 199bd16..1d5625f 100644 --- a/docs/dev-dist/registerSW.js +++ b/docs/dev-dist/registerSW.js @@ -1,2 +1 @@ -if ( 'serviceWorker' in navigator ) navigator.serviceWorker.register( '/dev-sw.js?dev-sw', { scope : '/', - type : 'classic' } ) +if('serviceWorker' in navigator) navigator.serviceWorker.register('/dev-sw.js?dev-sw', { scope: '/', type: 'classic' }) \ No newline at end of file diff --git a/docs/dev-dist/sw.js b/docs/dev-dist/sw.js index c3e7bd5..9ccece2 100644 --- a/docs/dev-dist/sw.js +++ b/docs/dev-dist/sw.js @@ -12,107 +12,81 @@ */ // If the loader is already loaded, just stop. -if ( !self.define ) { - - const registry = {} - - // Used for `eval` and `importScripts` where we can't get script URL by other means. - // In both cases, it's safe to use a global var because those functions are synchronous. - let nextDefineUri - - const singleRequire = ( uri, parentUri ) => { - - uri = new URL( uri + '.js', parentUri ).href - return registry[uri] || ( - - new Promise( resolve => { - - if ( 'document' in self ) { - - const script = document.createElement( 'script' ) - script.src = uri - script.onload = resolve - document.head.appendChild( script ) - - } - else { - - nextDefineUri = uri - importScripts( uri ) - resolve() - - } - - } ) - - .then( () => { - - const promise = registry[uri] - if ( !promise ) { - - throw new Error( `Module ${uri} didn’t register its module` ) - - } - return promise - - } ) - ) - - } - - self.define = ( depsNames, factory ) => { - - const uri = nextDefineUri || ( 'document' in self ? document.currentScript.src : '' ) || location.href - if ( registry[uri] ) { - - // Module is already loading or loaded. - return - - } - const exports = {} - const require = depUri => singleRequire( depUri, uri ) - const specialDeps = { - module : { uri }, - exports, - require, - } - registry[uri] = Promise.all( depsNames.map( - depName => specialDeps[depName] || require( depName ), - ) ).then( deps => { - - factory( ...deps ) - return exports - - } ) - - } - +if (!self.define) { + let registry = {}; + + // Used for `eval` and `importScripts` where we can't get script URL by other means. + // In both cases, it's safe to use a global var because those functions are synchronous. + let nextDefineUri; + + const singleRequire = (uri, parentUri) => { + uri = new URL(uri + ".js", parentUri).href; + return registry[uri] || ( + + new Promise(resolve => { + if ("document" in self) { + const script = document.createElement("script"); + script.src = uri; + script.onload = resolve; + document.head.appendChild(script); + } else { + nextDefineUri = uri; + importScripts(uri); + resolve(); + } + }) + + .then(() => { + let promise = registry[uri]; + if (!promise) { + throw new Error(`Module ${uri} didn’t register its module`); + } + return promise; + }) + ); + }; + + self.define = (depsNames, factory) => { + const uri = nextDefineUri || ("document" in self ? document.currentScript.src : "") || location.href; + if (registry[uri]) { + // Module is already loading or loaded. + return; + } + let exports = {}; + const require = depUri => singleRequire(depUri, uri); + const specialDeps = { + module: { uri }, + exports, + require + }; + registry[uri] = Promise.all(depsNames.map( + depName => specialDeps[depName] || require(depName) + )).then(deps => { + factory(...deps); + return exports; + }); + }; } -define( [ './workbox-86c9b217' ], workbox => { - - 'use strict' - - self.skipWaiting() - workbox.clientsClaim() - - /** - * The precacheAndRoute() method efficiently caches and responds to - * requests for URLs in the manifest. - * See https://goo.gl/S9QRab - */ - workbox.precacheAndRoute( [ - { - url : 'registerSW.js', - revision : '3ca0b8505b4bec776b69afdba2768812', - }, - { - url : 'index.html', - revision : '0.p77lbth8r28', - }, - ], {} ) - workbox.cleanupOutdatedCaches() - workbox.registerRoute( new workbox.NavigationRoute( workbox.createHandlerBoundToURL( 'index.html' ), { - allowlist : [ /^\/$/ ], - } ) ) - -} ) +define(['./workbox-86c9b217'], (function (workbox) { 'use strict'; + + self.skipWaiting(); + workbox.clientsClaim(); + + /** + * The precacheAndRoute() method efficiently caches and responds to + * requests for URLs in the manifest. + * See https://goo.gl/S9QRab + */ + workbox.precacheAndRoute([{ + "url": "registerSW.js", + "revision": "3ca0b8505b4bec776b69afdba2768812" + }, { + "url": "index.html", + "revision": "0.10fk85k80dg" + }], {}); + workbox.cleanupOutdatedCaches(); + workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { + allowlist: [/^\/$/] + })); + +})); diff --git a/docs/dev-dist/workbox-86c9b217.js b/docs/dev-dist/workbox-86c9b217.js index 79f70ce..238d10b 100644 --- a/docs/dev-dist/workbox-86c9b217.js +++ b/docs/dev-dist/workbox-86c9b217.js @@ -1,4242 +1,3391 @@ -define( [ 'exports' ], exports => { +define(['exports'], (function (exports) { 'use strict'; - 'use strict' + // @ts-ignore + try { + self['workbox:core:7.2.0'] && _(); + } catch (e) {} - // @ts-ignore - try { - - self['workbox:core:7.2.0'] && _() - - } - catch ( e ) {} - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Claim any currently available clients once the service worker - * becomes active. This is normally used in conjunction with `skipWaiting()`. - * @memberof workbox-core - */ - function clientsClaim() { - - self.addEventListener( 'activate', () => self.clients.claim() ) - - } - - /* + /* Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const logger = ( () => { - - // Don't overwrite this value if it's already set. - // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923 - if ( !( '__WB_DISABLE_DEV_LOGS' in globalThis ) ) { - - self.__WB_DISABLE_DEV_LOGS = false - - } - let inGroup = false - const methodToColorMap = { - debug : `#7f8c8d`, - log : `#2ecc71`, - warn : `#f39c12`, - error : `#c0392b`, - groupCollapsed : `#3498db`, - groupEnd : null, // No colored prefix on groupEnd - } - const print = function ( method, args ) { - - if ( self.__WB_DISABLE_DEV_LOGS ) { - - return - - } - if ( method === 'groupCollapsed' ) { - - // Safari doesn't print all console.groupCollapsed() arguments: - // https://bugs.webkit.org/show_bug.cgi?id=182754 - if ( /^((?!chrome|android).)*safari/i.test( navigator.userAgent ) ) { - - console[method]( ...args ) - return - - } - - } - const styles = [ - `background: ${methodToColorMap[method]}`, - `border-radius: 0.5em`, - `color: white`, - `font-weight: bold`, - `padding: 2px 0.5em`, - ] - // When in a group, the workbox prefix is not displayed. - const logPrefix = inGroup ? [] : [ '%cworkbox', styles.join( ';' ) ] - console[method]( ...logPrefix, ...args ) - if ( method === 'groupCollapsed' ) { - - inGroup = true - - } - if ( method === 'groupEnd' ) { - - inGroup = false - - } - - } - // eslint-disable-next-line @typescript-eslint/ban-types - const api = {} - const loggerMethods = Object.keys( methodToColorMap ) - for ( const key of loggerMethods ) { - - const method = key - api[method] = ( ...args ) => { - - print( method, args ) - - } - - } - return api - - } )() - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const messages = { - 'invalid-value' : ( { - paramName, - validValueDescription, - value, - } ) => { - - if ( !paramName || !validValueDescription ) { - - throw new Error( `Unexpected input to 'invalid-value' error.` ) - - } - return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify( value )}.` - - }, - 'not-an-array' : ( { - moduleName, - className, - funcName, - paramName, - } ) => { - - if ( !moduleName || !className || !funcName || !paramName ) { - - throw new Error( `Unexpected input to 'not-an-array' error.` ) - - } - return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.` - - }, - 'incorrect-type' : ( { - expectedType, - paramName, - moduleName, - className, - funcName, - } ) => { - - if ( !expectedType || !paramName || !moduleName || !funcName ) { - - throw new Error( `Unexpected input to 'incorrect-type' error.` ) - - } - const classNameStr = className ? `${className}.` : '' - return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.` - - }, - 'incorrect-class' : ( { - expectedClassName, - paramName, - moduleName, - className, - funcName, - isReturnValueProblem, - } ) => { - - if ( !expectedClassName || !moduleName || !funcName ) { - - throw new Error( `Unexpected input to 'incorrect-class' error.` ) - - } - const classNameStr = className ? `${className}.` : '' - if ( isReturnValueProblem ) { - - return `The return value from ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.` - - } - return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.` - - }, - 'missing-a-method' : ( { - expectedMethod, - paramName, - moduleName, - className, - funcName, - } ) => { - - if ( !expectedMethod || !paramName || !moduleName || !className || !funcName ) { - - throw new Error( `Unexpected input to 'missing-a-method' error.` ) - - } - return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.` - - }, - 'add-to-cache-list-unexpected-type' : ( { - entry, - } ) => { - - return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' 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.` - - }, - 'add-to-cache-list-conflicting-entries' : ( { - firstEntry, - secondEntry, - } ) => { - - if ( !firstEntry || !secondEntry ) { - - throw new Error( `Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.` ) - - } - return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${firstEntry} but different revision details. Workbox is ` + `unable to cache and version the asset correctly. Please remove one ` + `of the entries.` - - }, - 'plugin-error-request-will-fetch' : ( { - thrownErrorMessage, - } ) => { - - if ( !thrownErrorMessage ) { - - throw new Error( `Unexpected input to ` + `'plugin-error-request-will-fetch', error.` ) - - } - return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownErrorMessage}'.` - - }, - 'invalid-cache-name' : ( { - cacheNameId, - value, - } ) => { - - if ( !cacheNameId ) { - - throw new Error( `Expected a 'cacheNameId' for error 'invalid-cache-name'` ) - - } - return `You must provide a name containing at least one character for ` + `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify( value )}'` - - }, - 'unregister-route-but-not-found-with-method' : ( { - method, - } ) => { - - if ( !method ) { - - throw new Error( `Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.` ) - - } - return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.` - - }, - 'unregister-route-route-not-registered' : () => { - - return `The route you're trying to unregister was not previously ` + `registered.` - - }, - 'queue-replay-failed' : ( { - name, - } ) => { - - return `Replaying the background sync queue '${name}' failed.` - - }, - 'duplicate-queue-name' : ( { - name, - } ) => { - - return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.` - - }, - 'expired-test-without-max-age' : ( { - methodName, - paramName, - } ) => { - - return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.` - - }, - 'unsupported-route-type' : ( { - moduleName, - className, - funcName, - paramName, - } ) => { - - return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.` - - }, - 'not-array-of-class' : ( { - value, - expectedClass, - moduleName, - className, - funcName, - paramName, - } ) => { - - 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.` - - }, - 'max-entries-or-age-required' : ( { - moduleName, - className, - funcName, - } ) => { - - return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}` - - }, - 'statuses-or-headers-required' : ( { - moduleName, - className, - funcName, - } ) => { - - return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}` - - }, - 'invalid-string' : ( { - moduleName, - funcName, - paramName, - } ) => { - - if ( !paramName || !moduleName || !funcName ) { - - throw new Error( `Unexpected input to 'invalid-string' error.` ) - - } - 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.` - - }, - 'channel-name-required' : () => { - - return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.` - - }, - 'invalid-responses-are-same-args' : () => { - - return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.` - - }, - 'expire-custom-caches-only' : () => { - - return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.` - - }, - 'unit-must-be-bytes' : ( { - normalizedRangeHeader, - } ) => { - - if ( !normalizedRangeHeader ) { - - throw new Error( `Unexpected input to 'unit-must-be-bytes' error.` ) - - } - return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"` - - }, - 'single-range-only' : ( { - normalizedRangeHeader, - } ) => { - - if ( !normalizedRangeHeader ) { - - throw new Error( `Unexpected input to 'single-range-only' error.` ) - - } - return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"` - - }, - 'invalid-range-values' : ( { - normalizedRangeHeader, - } ) => { - - if ( !normalizedRangeHeader ) { - - throw new Error( `Unexpected input to 'invalid-range-values' error.` ) - - } - 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}"` - - }, - 'no-range-header' : () => { - - return `No Range header was found in the Request provided.` - - }, - 'range-not-satisfiable' : ( { - size, - start, - end, - } ) => { - - return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.` - - }, - 'attempt-to-cache-non-get-request' : ( { - url, - method, - } ) => { - - return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.` - - }, - 'cache-put-with-no-response' : ( { - url, - } ) => { - - return `There was an attempt to cache '${url}' but the response was not ` + `defined.` - - }, - 'no-response' : ( { - url, - error, - } ) => { - - let message = `The strategy could not generate a response for '${url}'.` - if ( error ) { - - message += ` The underlying error is ${error}.` - - } - return message - - }, - 'bad-precaching-response' : ( { - url, - status, - } ) => { - - return `The precaching request for '${url}' failed` + ( status ? ` with an HTTP status of ${status}.` : `.` ) - - }, - 'non-precached-url' : ( { - url, - } ) => { - - return `createHandlerBoundToURL('${url}') was called, but that URL is ` + `not precached. Please pass in a URL that is precached instead.` - - }, - 'add-to-cache-list-conflicting-integrities' : ( { - url, - } ) => { - - return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${url} with different integrity values. Please remove one of them.` - - }, - 'missing-precache-entry' : ( { - cacheName, - url, - } ) => { - - return `Unable to find a precached response in ${cacheName} for ${url}.` - - }, - 'cross-origin-copy-response' : ( { - origin, - } ) => { - - return `workbox-core.copyResponse() can only be used with same-origin ` + `responses. It was passed a response with origin ${origin}.` - - }, - 'opaque-streams-source' : ( { - type, - } ) => { - - const message = `One of the workbox-streams sources resulted in an ` + `'${type}' response.` - if ( type === 'opaqueredirect' ) { - - return `${message} Please do not use a navigation request that results ` + `in a redirect as a source.` - - } - return `${message} Please ensure your sources are CORS-enabled.` - - }, - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const generatorFunction = ( code, details = {} ) => { - - const message = messages[code] - if ( !message ) { - - throw new Error( `Unable to find message for code '${code}'.` ) - - } - return message( details ) - - } - const messageGenerator = generatorFunction - - /* - Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Workbox errors should be thrown with this class. - * This allows use to ensure the type easily in tests, - * helps developers identify errors from workbox - * easily and allows use to optimise error - * messages correctly. - * @private - */ - class WorkboxError extends Error { - - /** - * - * @param {string} errorCode The error code that - * identifies this particular error. - * @param {object=} details Any relevant arguments - * that will help developers identify issues should - * be added as a key on the context object. - */ - constructor( errorCode, details ) { - - const message = messageGenerator( errorCode, details ) - super( message ) - this.name = errorCode - this.details = details - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /* - * This method throws if the supplied value is not an array. - * The destructed values are required to produce a meaningful error for users. - * The destructed and restructured object is so it's clear what is - * needed. + /** + * Claim any currently available clients once the service worker + * becomes active. This is normally used in conjunction with `skipWaiting()`. + * + * @memberof workbox-core */ - const isArray = ( value, details ) => { - - if ( !Array.isArray( value ) ) { - - throw new WorkboxError( 'not-an-array', details ) - - } - - } - const hasMethod = ( object, expectedMethod, details ) => { - - const type = typeof object[expectedMethod] - if ( type !== 'function' ) { - - details['expectedMethod'] = expectedMethod - throw new WorkboxError( 'missing-a-method', details ) - - } - - } - const isType = ( object, expectedType, details ) => { - - if ( typeof object !== expectedType ) { - - details['expectedType'] = expectedType - throw new WorkboxError( 'incorrect-type', details ) - - } - - } - const isInstance = ( object, - // Need the general type to do the check later. - // eslint-disable-next-line @typescript-eslint/ban-types - expectedClass, details ) => { - - if ( !( object instanceof expectedClass ) ) { - - details['expectedClassName'] = expectedClass.name - throw new WorkboxError( 'incorrect-class', details ) - - } - - } - const isOneOf = ( value, validValues, details ) => { - - if ( !validValues.includes( value ) ) { - - details['validValueDescription'] = `Valid values are ${JSON.stringify( validValues )}.` - throw new WorkboxError( 'invalid-value', details ) - - } - - } - const isArrayOfClass = ( value, - // Need general type to do check later. - expectedClass, - // eslint-disable-line - details ) => { - - const error = new WorkboxError( 'not-array-of-class', details ) - if ( !Array.isArray( value ) ) { - - throw error - - } - for ( const item of value ) { - - if ( !( item instanceof expectedClass ) ) { - - throw error - - } - - } - - } - const finalAssertExports = { - hasMethod, - isArray, - isInstance, - isOneOf, - isType, - isArrayOfClass, - } - - // @ts-ignore - try { - - self['workbox:routing:7.2.0'] && _() - - } - catch ( e ) {} - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The default HTTP method, 'GET', used when there's no specific method - * configured for a route. - * @type {string} - * @private - */ - const defaultMethod = 'GET' - /** - * The list of valid HTTP methods associated with requests that could be routed. - * @type {Array} - * @private - */ - const validMethods = [ - 'DELETE', - 'GET', - 'HEAD', - 'PATCH', - 'POST', - 'PUT', - ] - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * @param {function()|Object} handler Either a function, or an object with a - * 'handle' method. - * @returns {object} An object with a handle method. - * @private - */ - const normalizeHandler = handler => { - - if ( handler && typeof handler === 'object' ) { - - { - - finalAssertExports.hasMethod( handler, 'handle', { - moduleName : 'workbox-routing', - className : 'Route', - funcName : 'constructor', - paramName : 'handler', - } ) - - } - return handler - - } - else { - - { - - finalAssertExports.isType( handler, 'function', { - moduleName : 'workbox-routing', - className : 'Route', - funcName : 'constructor', - paramName : 'handler', - } ) - - } - return { - handle : handler, - } - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A `Route` consists of a pair of callback functions, "match" and "handler". - * The "match" callback determine if a route should be used to "handle" a - * request by returning a non-falsy value if it can. The "handler" callback - * is called when there is a match and should return a Promise that resolves - * to a `Response`. - * @memberof workbox-routing - */ - class Route { - - /** - * Constructor for Route class. - * @param {workbox-routing~matchCallback} match - * A callback function that determines whether the route matches a given - * `fetch` event by returning a non-falsy value. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resolving to a Response. - * @param {string} [method] The HTTP method to match the Route - * against. - */ - constructor( match, handler, method = defaultMethod ) { - - { - - finalAssertExports.isType( match, 'function', { - moduleName : 'workbox-routing', - className : 'Route', - funcName : 'constructor', - paramName : 'match', - } ) - if ( method ) { - - finalAssertExports.isOneOf( method, validMethods, { - paramName : 'method', - } ) - - } - - } - // These values are referenced directly by Router so cannot be - // altered by minificaton. - this.handler = normalizeHandler( handler ) - this.match = match - this.method = method - - } - - /** - * - * @param {workbox-routing-handlerCallback} handler A callback - * function that returns a Promise resolving to a Response - */ - setCatchHandler( handler ) { - - this.catchHandler = normalizeHandler( handler ) - - } - - } - - /* - Copyright 2018 Google LLC + function clientsClaim() { + self.addEventListener('activate', () => self.clients.claim()); + } + /* + Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. - */ - /** - * RegExpRoute makes it easy to create a regular expression based - * {@link workbox-routing.Route}. - * - * For same-origin requests the RegExp only needs to match part of the URL. For - * requests against third-party servers, you must define a RegExp that matches - * the start of the URL. - * @memberof workbox-routing - * @augments workbox-routing.Route - */ - class RegExpRoute extends Route { - - /** - * If the regular expression contains - * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, - * the captured values will be passed to the - * {@link workbox-routing~handlerCallback} `params` - * argument. - * @param {RegExp} regExp The regular expression to match against URLs. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method] The HTTP method to match the Route - * against. - */ - constructor( regExp, handler, method ) { - - { - - finalAssertExports.isInstance( regExp, RegExp, { - moduleName : 'workbox-routing', - className : 'RegExpRoute', - funcName : 'constructor', - paramName : 'pattern', - } ) - - } - const match = ( { - url, - } ) => { - - const result = regExp.exec( url.href ) - // Return immediately if there's no match. - if ( !result ) { - - return - - } - // Require that the match start at the first character in the URL string - // if it's a cross-origin request. - // See https://github.com/GoogleChrome/workbox/issues/281 for the context - // behind this behavior. - if ( url.origin !== location.origin && result.index !== 0 ) { - - { - - logger.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.` ) - - } - return - - } - // If the route matches, but there aren't any capture groups defined, then - // this will return [], which is truthy and therefore sufficient to - // indicate a match. - // If there are capture groups, then it will return their values. - return result.slice( 1 ) - - } - super( match, handler, method ) - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const getFriendlyURL = url => { - - const urlObj = new URL( String( url ), location.href ) - // See https://github.com/GoogleChrome/workbox/issues/2323 - // We want to include everything, except for the origin if it's same-origin. - return urlObj.href.replace( new RegExp( `^${location.origin}` ), '' ) - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The Router can be used to process a `FetchEvent` using one or more - * {@link workbox-routing.Route}, responding with a `Response` if - * a matching route exists. - * - * If no route matches a given a request, the Router will use a "default" - * handler if one is defined. - * - * Should the matching Route throw an error, the Router will use a "catch" - * handler if one is defined to gracefully deal with issues and respond with a - * Request. - * - * If a request matches multiple routes, the **earliest** registered route will - * be used to respond to the request. - * @memberof workbox-routing - */ - class Router { - - /** - * Initializes a new Router. - */ - constructor() { - - this._routes = new Map() - this._defaultHandlerMap = new Map() - - } - - /** - * @returns {Map>} routes A `Map` of HTTP - * method name ('GET', etc.) to an array of all the corresponding `Route` - * instances that are registered. - */ - get routes() { - - return this._routes - - } - - /** - * Adds a fetch event listener to respond to events when a route matches - * the event's request. - */ - addFetchListener() { - - // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 - self.addEventListener( 'fetch', event => { - - const { - request, - } = event - const responsePromise = this.handleRequest( { - request, - event, - } ) - if ( responsePromise ) { - - event.respondWith( responsePromise ) - - } - - } ) - - } - - /** - * Adds a message event listener for URLs to cache from the window. - * This is useful to cache resources loaded on the page prior to when the - * service worker started controlling it. - * - * The format of the message data sent from the window should be as follows. - * Where the `urlsToCache` array may consist of URL strings or an array of - * URL string + `requestInit` object (the same as you'd pass to `fetch()`). - * - * ``` - * { - * type: 'CACHE_URLS', - * payload: { - * urlsToCache: [ - * './script1.js', - * './script2.js', - * ['./script3.js', {mode: 'no-cors'}], - * ], - * }, - * } - * ``` - */ - addCacheListener() { - - // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 - self.addEventListener( 'message', event => { - - // event.data is type 'any' - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - if ( event.data && event.data.type === 'CACHE_URLS' ) { - - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const { - payload, - } = event.data - { - - logger.debug( `Caching URLs from the window`, payload.urlsToCache ) - - } - const requestPromises = Promise.all( payload.urlsToCache.map( entry => { - - if ( typeof entry === 'string' ) { - - entry = [ entry ] - - } - const request = new Request( ...entry ) - return this.handleRequest( { - request, - event, - } ) - // TODO(philipwalton): TypeScript errors without this typecast for - // some reason (probably a bug). The real type here should work but - // doesn't: `Array | undefined>`. - - } ) ) // TypeScript - event.waitUntil( requestPromises ) - // If a MessageChannel was used, reply to the message on success. - if ( event.ports && event.ports[0] ) { - - void requestPromises.then( () => event.ports[0].postMessage( true ) ) - - } - - } - - } ) - - } - - /** - * Apply the routing rules to a FetchEvent object to get a Response from an - * appropriate Route's handler. - * @param {object} options - * @param {Request} options.request The request to handle. - * @param {ExtendableEvent} options.event The event that triggered the - * request. - * @returns {Promise|undefined} A promise is returned if a - * registered route can handle the request. If there is no matching - * route and there's no `defaultHandler`, `undefined` is returned. - */ - handleRequest( { - request, - event, - } ) { - - { - - finalAssertExports.isInstance( request, Request, { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'handleRequest', - paramName : 'options.request', - } ) - - } - const url = new URL( request.url, location.href ) - if ( !url.protocol.startsWith( 'http' ) ) { - - { - - logger.debug( `Workbox Router only supports URLs that start with 'http'.` ) - - } - return - - } - const sameOrigin = url.origin === location.origin - const { - params, - route, - } = this.findMatchingRoute( { - event, - request, - sameOrigin, - url, - } ) - let handler = route && route.handler - const debugMessages = [] - { - - if ( handler ) { - - debugMessages.push( [ `Found a route to handle this request:`, route ] ) - if ( params ) { - - debugMessages.push( [ `Passing the following params to the route's handler:`, params ] ) - - } - - } - - } - // If we don't have a handler because there was no matching route, then - // fall back to defaultHandler if that's defined. - const method = request.method - if ( !handler && this._defaultHandlerMap.has( method ) ) { - - { - - debugMessages.push( `Failed to find a matching route. Falling ` + `back to the default handler for ${method}.` ) - - } - handler = this._defaultHandlerMap.get( method ) - - } - if ( !handler ) { - - { - - // No handler so Workbox will do nothing. If logs is set of debug - // i.e. verbose, we should print out this information. - logger.debug( `No route found for: ${getFriendlyURL( url )}` ) - - } - return - - } - { - - // We have a handler, meaning Workbox is going to handle the route. - // print the routing details to the console. - logger.groupCollapsed( `Router is responding to: ${getFriendlyURL( url )}` ) - debugMessages.forEach( msg => { - - if ( Array.isArray( msg ) ) { - - logger.log( ...msg ) - - } - else { - - logger.log( msg ) - - } - - } ) - logger.groupEnd() - - } - // Wrap in try and catch in case the handle method throws a synchronous - // error. It should still callback to the catch handler. - let responsePromise - try { - - responsePromise = handler.handle( { - url, - request, - event, - params, - } ) - - } - catch ( err ) { - - responsePromise = Promise.reject( err ) - - } - // Get route's catch handler, if it exists - const catchHandler = route && route.catchHandler - if ( responsePromise instanceof Promise && ( this._catchHandler || catchHandler ) ) { - - responsePromise = responsePromise.catch( async err => { - - // If there's a route catch handler, process that first - if ( catchHandler ) { - - { - - // Still include URL here as it will be async from the console group - // and may not make sense without the URL - logger.groupCollapsed( `Error thrown when responding to: ` + ` ${getFriendlyURL( url )}. Falling back to route's Catch Handler.` ) - logger.error( `Error thrown by:`, route ) - logger.error( err ) - logger.groupEnd() - - } - try { - - return await catchHandler.handle( { - url, - request, - event, - params, - } ) - - } - catch ( catchErr ) { - - if ( catchErr instanceof Error ) { - - err = catchErr - - } - - } - - } - if ( this._catchHandler ) { - - { - - // Still include URL here as it will be async from the console group - // and may not make sense without the URL - logger.groupCollapsed( `Error thrown when responding to: ` + ` ${getFriendlyURL( url )}. Falling back to global Catch Handler.` ) - logger.error( `Error thrown by:`, route ) - logger.error( err ) - logger.groupEnd() - - } - return this._catchHandler.handle( { - url, - request, - event, - } ) - - } - throw err - - } ) - - } - return responsePromise - - } - - /** - * Checks a request and URL (and optionally an event) against the list of - * registered routes, and if there's a match, returns the corresponding - * route along with any params generated by the match. - * @param {object} options - * @param {URL} options.url - * @param {boolean} options.sameOrigin The result of comparing `url.origin` - * against the current origin. - * @param {Request} options.request The request to match. - * @param {Event} options.event The corresponding event. - * @returns {object} An object with `route` and `params` properties. - * They are populated if a matching route was found or `undefined` - * otherwise. - */ - findMatchingRoute( { - url, - sameOrigin, - request, - event, - } ) { - - const routes = this._routes.get( request.method ) || [] - for ( const route of routes ) { - - let params - // route.match returns type any, not possible to change right now. - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - const matchResult = route.match( { - url, - sameOrigin, - request, - event, - } ) - if ( matchResult ) { - - { - - // Warn developers that using an async matchCallback is almost always - // not the right thing to do. - if ( matchResult instanceof Promise ) { - - logger.warn( `While routing ${getFriendlyURL( url )}, an async ` + `matchCallback function was used. Please convert the ` + `following route to use a synchronous matchCallback function:`, route ) - - } - - } - // See https://github.com/GoogleChrome/workbox/issues/2079 - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - params = matchResult - if ( Array.isArray( params ) && params.length === 0 ) { - - // Instead of passing an empty array in as params, use undefined. - params = undefined - - } - else if ( matchResult.constructor === Object - - && Object.keys( matchResult ).length === 0 ) { - - // Instead of passing an empty object in as params, use undefined. - params = undefined - - } - else if ( typeof matchResult === 'boolean' ) { - - // For the boolean value true (rather than just something truth-y), - // don't set params. - // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353 - params = undefined - - } - // Return early if have a match. - return { - route, - params, - } - - } - - } - // If no match was found above, return and empty object. - return {} - - } - - /** - * Define a default `handler` that's called when no routes explicitly - * match the incoming request. - * - * Each HTTP method ('GET', 'POST', etc.) gets its own default handler. - * - * Without a default handler, unmatched requests will go against the - * network as if there were no service worker present. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {string} [method] The HTTP method to associate with this - * default handler. Each method has its own default. - */ - setDefaultHandler( handler, method = defaultMethod ) { - - this._defaultHandlerMap.set( method, normalizeHandler( handler ) ) - - } - - /** - * If a Route throws an error while handling a request, this `handler` - * will be called and given a chance to provide a response. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - */ - setCatchHandler( handler ) { - - this._catchHandler = normalizeHandler( handler ) - - } - - /** - * Registers a route with the router. - * @param {workbox-routing.Route} route The route to register. - */ - registerRoute( route ) { - - { - - finalAssertExports.isType( route, 'object', { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'registerRoute', - paramName : 'route', - } ) - finalAssertExports.hasMethod( route, 'match', { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'registerRoute', - paramName : 'route', - } ) - finalAssertExports.isType( route.handler, 'object', { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'registerRoute', - paramName : 'route', - } ) - finalAssertExports.hasMethod( route.handler, 'handle', { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'registerRoute', - paramName : 'route.handler', - } ) - finalAssertExports.isType( route.method, 'string', { - moduleName : 'workbox-routing', - className : 'Router', - funcName : 'registerRoute', - paramName : 'route.method', - } ) - - } - if ( !this._routes.has( route.method ) ) { - - this._routes.set( route.method, [] ) - - } - // Give precedence to all of the earlier routes by adding this additional - // route to the end of the array. - this._routes.get( route.method ).push( route ) - - } - - /** - * Unregisters a route with the router. - * @param {workbox-routing.Route} route The route to unregister. - */ - unregisterRoute( route ) { - - if ( !this._routes.has( route.method ) ) { - - throw new WorkboxError( 'unregister-route-but-not-found-with-method', { - method : route.method, - } ) - - } - const routeIndex = this._routes.get( route.method ).indexOf( route ) - if ( routeIndex > -1 ) { - - this._routes.get( route.method ).splice( routeIndex, 1 ) - - } - else { - - throw new WorkboxError( 'unregister-route-route-not-registered' ) - - } - - } - - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let defaultRouter - /** - * Creates a new, singleton Router instance if one does not exist. If one - * does already exist, that instance is returned. - * @private - * @returns {Router} - */ - const getOrCreateDefaultRouter = () => { - - if ( !defaultRouter ) { - - defaultRouter = new Router() - // The helpers that use the default Router assume these listeners exist. - defaultRouter.addFetchListener() - defaultRouter.addCacheListener() - - } - return defaultRouter - - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Easily register a RegExp, string, or function with a caching - * strategy to a singleton Router instance. - * - * This method will generate a Route for you if needed and - * call {@link workbox-routing.Router#registerRoute}. - * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture - * If the capture param is a `Route`, all other arguments will be ignored. - * @param {workbox-routing~handlerCallback} [handler] A callback - * function that returns a Promise resulting in a Response. This parameter - * is required if `capture` is not a `Route` object. - * @param {string} [method] The HTTP method to match the Route - * against. - * @returns {workbox-routing.Route} The generated `Route`. - * @memberof workbox-routing - */ - function registerRoute( capture, handler, method ) { - - let route - if ( typeof capture === 'string' ) { - - const captureUrl = new URL( capture, location.href ) - { - - if ( !( capture.startsWith( '/' ) || capture.startsWith( 'http' ) ) ) { - - throw new WorkboxError( 'invalid-string', { - moduleName : 'workbox-routing', - funcName : 'registerRoute', - paramName : 'capture', - } ) - - } - // We want to check if Express-style wildcards are in the pathname only. - // TODO: Remove this log message in v4. - const valueToCheck = capture.startsWith( 'http' ) ? captureUrl.pathname : capture - // See https://github.com/pillarjs/path-to-regexp#parameters - const wildcards = '[*:?+]' - if ( new RegExp( `${wildcards}` ).exec( valueToCheck ) ) { - - logger.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.` ) - - } - - } - const matchCallback = ( { - url, - } ) => { - - { - - if ( url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin ) { - - logger.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.` ) - - } - - } - return url.href === captureUrl.href - - } - // If `capture` is a string then `handler` and `method` must be present. - route = new Route( matchCallback, handler, method ) - - } - else if ( capture instanceof RegExp ) { - - // If `capture` is a `RegExp` then `handler` and `method` must be present. - route = new RegExpRoute( capture, handler, method ) - - } - else if ( typeof capture === 'function' ) { - - // If `capture` is a function then `handler` and `method` must be present. - route = new Route( capture, handler, method ) - - } - else if ( capture instanceof Route ) { - - route = capture - - } - else { - - throw new WorkboxError( 'unsupported-route-type', { - moduleName : 'workbox-routing', - funcName : 'registerRoute', - paramName : 'capture', - } ) - - } - const defaultRouter = getOrCreateDefaultRouter() - defaultRouter.registerRoute( route ) - return route - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - const _cacheNameDetails = { - googleAnalytics : 'googleAnalytics', - precache : 'precache-v2', - prefix : 'workbox', - runtime : 'runtime', - suffix : typeof registration !== 'undefined' ? registration.scope : '', - } - const _createCacheName = cacheName => { - - return [ - _cacheNameDetails.prefix, - cacheName, - _cacheNameDetails.suffix, - ].filter( value => value && value.length > 0 ).join( '-' ) - - } - const eachCacheNameDetail = fn => { - - for ( const key of Object.keys( _cacheNameDetails ) ) { - - fn( key ) - - } - - } - const cacheNames = { - updateDetails : details => { - - eachCacheNameDetail( key => { - - if ( typeof details[key] === 'string' ) { - - _cacheNameDetails[key] = details[key] - - } - - } ) - - }, - getGoogleAnalyticsName : userCacheName => { - - return userCacheName || _createCacheName( _cacheNameDetails.googleAnalytics ) - - }, - getPrecacheName : userCacheName => { - - return userCacheName || _createCacheName( _cacheNameDetails.precache ) - - }, - getPrefix : () => { - - return _cacheNameDetails.prefix - - }, - getRuntimeName : userCacheName => { - - return userCacheName || _createCacheName( _cacheNameDetails.runtime ) - - }, - getSuffix : () => { - - return _cacheNameDetails.suffix - - }, - } - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A utility method that makes it easier to use `event.waitUntil` with - * async functions and return the result. - * @param {ExtendableEvent} event - * @param {Function} asyncFn - * @returns {Function} - * @private - */ - function waitUntil( event, asyncFn ) { - - const returnPromise = asyncFn() - event.waitUntil( returnPromise ) - return returnPromise - - } - - // @ts-ignore - try { - - self['workbox:precaching:7.2.0'] && _() - - } - catch ( e ) {} - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Name of the search parameter used to store revision info. - const REVISION_SEARCH_PARAM = '__WB_REVISION__' - /** - * Converts a manifest entry into a versioned URL suitable for precaching. - * @param {object | string} entry - * @returns {string} A URL with versioning info. - * @private - * @memberof workbox-precaching - */ - function createCacheKey( entry ) { - - if ( !entry ) { - - throw new WorkboxError( 'add-to-cache-list-unexpected-type', { - entry, - } ) - - } - // If a precache manifest entry is a string, it's assumed to be a versioned - // URL, like '/app.abcd1234.js'. Return as-is. - if ( typeof entry === 'string' ) { - - const urlObject = new URL( entry, location.href ) - return { - cacheKey : urlObject.href, - url : urlObject.href, - } - - } - const { - revision, - url, - } = entry - if ( !url ) { - - throw new WorkboxError( 'add-to-cache-list-unexpected-type', { - entry, - } ) - - } - // If there's just a URL and no revision, then it's also assumed to be a - // versioned URL. - if ( !revision ) { - - const urlObject = new URL( url, location.href ) - return { - cacheKey : urlObject.href, - url : urlObject.href, - } - - } - // Otherwise, construct a properly versioned URL using the custom Workbox - // search parameter along with the revision info. - const cacheKeyURL = new URL( url, location.href ) - const originalURL = new URL( url, location.href ) - cacheKeyURL.searchParams.set( REVISION_SEARCH_PARAM, revision ) - return { - cacheKey : cacheKeyURL.href, - url : originalURL.href, - } - - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to determine the - * of assets that were updated (or not updated) during the install event. - * @private - */ - class PrecacheInstallReportPlugin { - - constructor() { - - this.updatedURLs = [] - this.notUpdatedURLs = [] - this.handlerWillStart = async ( { - request, - state, - } ) => { - - // TODO: `state` should never be undefined... - if ( state ) { - - state.originalRequest = request - - } - - } - this.cachedResponseWillBeUsed = async ( { - event, - state, - cachedResponse, - } ) => { - - if ( event.type === 'install' ) { - - if ( state && state.originalRequest && state.originalRequest instanceof Request ) { - - // TODO: `state` should never be undefined... - const url = state.originalRequest.url - if ( cachedResponse ) { - - this.notUpdatedURLs.push( url ) - - } - else { - - this.updatedURLs.push( url ) - - } - - } - - } - return cachedResponse - - } - - } - - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A plugin, designed to be used with PrecacheController, to translate URLs into - * the corresponding cache key, based on the current revision info. - * @private - */ - class PrecacheCacheKeyPlugin { - - constructor( { - precacheController, - } ) { - - this.cacheKeyWillBeUsed = async ( { - request, - params, - } ) => { - - // Params is type any, can't change right now. - /* eslint-disable */ - const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) || this._precacheController.getCacheKeyForURL(request.url); - /* eslint-enable */ - return cacheKey - ? new Request( cacheKey, { - headers : request.headers, - } ) - : request - - } - this._precacheController = precacheController - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * @param {string} groupTitle - * @param {Array} deletedURLs - * @private - */ - const logGroup = ( groupTitle, deletedURLs ) => { - - logger.groupCollapsed( groupTitle ) - for ( const url of deletedURLs ) { - - logger.log( url ) - - } - logger.groupEnd() - - } - /** - * @param {Array} deletedURLs - * @private - * @memberof workbox-precaching - */ - function printCleanupDetails( deletedURLs ) { - - const deletionCount = deletedURLs.length - if ( deletionCount > 0 ) { - - logger.groupCollapsed( `During precaching cleanup, ` + `${deletionCount} cached ` + `request${deletionCount === 1 ? ' was' : 's were'} deleted.` ) - logGroup( 'Deleted Cache Requests', deletedURLs ) - logger.groupEnd() - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * @param {string} groupTitle - * @param {Array} urls - * @private - */ - function _nestedGroup( groupTitle, urls ) { - - if ( urls.length === 0 ) { - - return - - } - logger.groupCollapsed( groupTitle ) - for ( const url of urls ) { - - logger.log( url ) - - } - logger.groupEnd() - - } - /** - * @param {Array} urlsToPrecache - * @param {Array} urlsAlreadyPrecached - * @private - * @memberof workbox-precaching - */ - function printInstallDetails( urlsToPrecache, urlsAlreadyPrecached ) { - - const precachedCount = urlsToPrecache.length - const alreadyPrecachedCount = urlsAlreadyPrecached.length - if ( precachedCount || alreadyPrecachedCount ) { - - let message = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.` - if ( alreadyPrecachedCount > 0 ) { - - message += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.` - - } - logger.groupCollapsed( message ) - _nestedGroup( `View newly precached URLs.`, urlsToPrecache ) - _nestedGroup( `View previously precached URLs.`, urlsAlreadyPrecached ) - logger.groupEnd() - - } - - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - let supportStatus - /** - * A utility function that determines whether the current browser supports - * constructing a new `Response` from a `response.body` stream. - * @returns {boolean} `true`, if the current browser can successfully - * construct a `Response` from a `response.body` stream, `false` otherwise. - * @private - */ - function canConstructResponseFromBodyStream() { - - if ( supportStatus === undefined ) { - - const testResponse = new Response( '' ) - if ( 'body' in testResponse ) { - - try { - - new Response( testResponse.body ) - supportStatus = true - - } - catch ( error ) { - - supportStatus = false - - } - - } - supportStatus = false - - } - return supportStatus - - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Allows developers to copy a response and modify its `headers`, `status`, - * or `statusText` values (the values settable via a - * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax} - * object in the constructor). - * To modify these values, pass a function as the second argument. That - * function will be invoked with a single object with the response properties - * `{headers, status, statusText}`. The return value of this function will - * be used as the `ResponseInit` for the new `Response`. To change the values - * either modify the passed parameter(s) and return it, or return a totally - * new object. - * - * This method is intentionally limited to same-origin responses, regardless of - * whether CORS was used or not. - * @param {Response} response - * @param {Function} modifier - * @memberof workbox-core - */ - async function copyResponse( response, modifier ) { - - let origin = null - // If response.url isn't set, assume it's cross-origin and keep origin null. - if ( response.url ) { - - const responseURL = new URL( response.url ) - origin = responseURL.origin - - } - if ( origin !== self.location.origin ) { - - throw new WorkboxError( 'cross-origin-copy-response', { - origin, - } ) - - } - const clonedResponse = response.clone() - // Create a fresh `ResponseInit` object by cloning the headers. - const responseInit = { - headers : new Headers( clonedResponse.headers ), - status : clonedResponse.status, - statusText : clonedResponse.statusText, - } - // Apply any user modifications. - const modifiedResponseInit = modifier ? modifier( responseInit ) : responseInit - // Create the new response from the body stream and `ResponseInit` - // modifications. Note: not all browsers support the Response.body stream, - // so fall back to reading the entire body into memory as a blob. - const body = canConstructResponseFromBodyStream() ? clonedResponse.body : await clonedResponse.blob() - return new Response( body, modifiedResponseInit ) - - } - - /* - Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * - * @param fullURL - * @param ignoreParams - */ - function stripParams( fullURL, ignoreParams ) { - - const strippedURL = new URL( fullURL ) - for ( const param of ignoreParams ) { - - strippedURL.searchParams.delete( param ) - - } - return strippedURL.href - - } - /** - * Matches an item in the cache, ignoring specific URL params. This is similar - * to the `ignoreSearch` option, but it allows you to ignore just specific - * params (while continuing to match on the others). - * @private - * @param {Cache} cache - * @param {Request} request - * @param {object} matchOptions - * @param {Array} ignoreParams - * @returns {Promise} - */ - async function cacheMatchIgnoreParams( cache, request, ignoreParams, matchOptions ) { - - const strippedRequestURL = stripParams( request.url, ignoreParams ) - // If the request doesn't include any ignored params, match as normal. - if ( request.url === strippedRequestURL ) { - - return cache.match( request, matchOptions ) - - } - // Otherwise, match by comparing keys - const keysOptions = Object.assign( Object.assign( {}, matchOptions ), { - ignoreSearch : true, - } ) - const cacheKeys = await cache.keys( request, keysOptions ) - for ( const cacheKey of cacheKeys ) { - - const strippedCacheKeyURL = stripParams( cacheKey.url, ignoreParams ) - if ( strippedRequestURL === strippedCacheKeyURL ) { - - return cache.match( cacheKey, matchOptions ) - - } - - } - return - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * The Deferred class composes Promises in a way that allows for them to be - * resolved or rejected from outside the constructor. In most cases promises - * should be used directly, but Deferreds can be necessary when the logic to - * resolve a promise must be separate. - * @private - */ - class Deferred { - - /** - * Creates a promise and exposes its resolve and reject functions as methods. - */ - constructor() { - - this.promise = new Promise( ( resolve, reject ) => { - - this.resolve = resolve - this.reject = reject - - } ) - - } - - } - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - // Callbacks to be executed whenever there's a quota error. - // Can't change Function type right now. - // eslint-disable-next-line @typescript-eslint/ban-types - const quotaErrorCallbacks = new Set() - - /* - Copyright 2018 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Runs all of the callback functions, one at a time sequentially, in the order - * in which they were registered. - * @memberof workbox-core - * @private - */ - async function executeQuotaErrorCallbacks() { - - { - - logger.log( `About to run ${quotaErrorCallbacks.size} ` + `callbacks to clean up caches.` ) - - } - for ( const callback of quotaErrorCallbacks ) { - - await callback() - { - - logger.log( callback, 'is complete.' ) - - } - - } - { - - logger.log( 'Finished running callbacks.' ) - - } - - } - - /* - Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Returns a promise that resolves and the passed number of milliseconds. - * This utility is an async/await-friendly version of `setTimeout`. - * @param {number} ms - * @returns {Promise} - * @private - */ - function timeout( ms ) { - - return new Promise( resolve => setTimeout( resolve, ms ) ) - - } - - // @ts-ignore - try { - - self['workbox:strategies:7.2.0'] && _() - - } - catch ( e ) {} - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * - * @param input - */ - function toRequest( input ) { - - return typeof input === 'string' ? new Request( input ) : input - - } - /** - * A class created every time a Strategy instance instance calls - * {@link workbox-strategies.Strategy~handle} or - * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and - * cache actions around plugin callbacks and keeps track of when the strategy - * is "done" (i.e. all added `event.waitUntil()` promises have resolved). - * @memberof workbox-strategies - */ - class StrategyHandler { - - /** - * Creates a new instance associated with the passed strategy and event - * that's handling the request. - * - * The constructor also initializes the state that will be passed to each of - * the plugins handling this request. - * @param {workbox-strategies.Strategy} strategy - * @param {object} options - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] The return value from the - * {@link workbox-routing~matchCallback} (if applicable). - */ - constructor( strategy, options ) { - - this._cacheKeys = {} - /** - * The request the strategy is performing (passed to the strategy's - * `handle()` or `handleAll()` method). - * @name request - * @instance - * @type {Request} - * @memberof workbox-strategies.StrategyHandler - */ - /** - * The event associated with this request. - * @name event - * @instance - * @type {ExtendableEvent} - * @memberof workbox-strategies.StrategyHandler - */ - /** - * A `URL` instance of `request.url` (if passed to the strategy's - * `handle()` or `handleAll()` method). - * Note: the `url` param will be present if the strategy was invoked - * from a workbox `Route` object. - * @name url - * @instance - * @type {URL|undefined} - * @memberof workbox-strategies.StrategyHandler - */ - /** - * A `param` value (if passed to the strategy's - * `handle()` or `handleAll()` method). - * Note: the `param` param will be present if the strategy was invoked - * from a workbox `Route` object and the - * {@link workbox-routing~matchCallback} returned - * a truthy value (it will be that value). - * @name params - * @instance - * @type {*|undefined} - * @memberof workbox-strategies.StrategyHandler - */ - { - - finalAssertExports.isInstance( options.event, ExtendableEvent, { - moduleName : 'workbox-strategies', - className : 'StrategyHandler', - funcName : 'constructor', - paramName : 'options.event', - } ) - - } - Object.assign( this, options ) - this.event = options.event - this._strategy = strategy - this._handlerDeferred = new Deferred() - this._extendLifetimePromises = [] - // Copy the plugins list (since it's mutable on the strategy), - // so any mutations don't affect this handler instance. - this._plugins = [ ...strategy.plugins ] - this._pluginStateMap = new Map() - for ( const plugin of this._plugins ) { - - this._pluginStateMap.set( plugin, {} ) - - } - this.event.waitUntil( this._handlerDeferred.promise ) - - } - - /** - * Fetches a given request (and invokes any applicable plugin callback - * methods) using the `fetchOptions` (for non-navigation requests) and - * `plugins` defined on the `Strategy` object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - `requestWillFetch()` - * - `fetchDidSucceed()` - * - `fetchDidFail()` - * @param {Request|string} input The URL or request to fetch. - * @returns {Promise} - */ - async fetch( input ) { - - const { - event, - } = this - let request = toRequest( input ) - if ( request.mode === 'navigate' && event instanceof FetchEvent && event.preloadResponse ) { - - const possiblePreloadResponse = await event.preloadResponse - if ( possiblePreloadResponse ) { - - { - - logger.log( `Using a preloaded navigation response for ` + `'${getFriendlyURL( request.url )}'` ) - - } - return possiblePreloadResponse - - } - - } - // If there is a fetchDidFail plugin, we need to save a clone of the - // original request before it's either modified by a requestWillFetch - // plugin or before the original request's body is consumed via fetch(). - const originalRequest = this.hasCallback( 'fetchDidFail' ) ? request.clone() : null - try { - - for ( const cb of this.iterateCallbacks( 'requestWillFetch' ) ) { - - request = await cb( { - request : request.clone(), - event, - } ) - - } - - } - catch ( err ) { - - if ( err instanceof Error ) { - - throw new WorkboxError( 'plugin-error-request-will-fetch', { - thrownErrorMessage : err.message, - } ) - - } - - } - // The request can be altered by plugins with `requestWillFetch` making - // the original request (most likely from a `fetch` event) different - // from the Request we make. Pass both to `fetchDidFail` to aid debugging. - const pluginFilteredRequest = request.clone() - try { - - let fetchResponse - // See https://github.com/GoogleChrome/workbox/issues/1796 - fetchResponse = await fetch( request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions ) - if ( 'development' !== 'production' ) { - - logger.debug( `Network request for ` + `'${getFriendlyURL( request.url )}' returned a response with ` + `status '${fetchResponse.status}'.` ) - - } - for ( const callback of this.iterateCallbacks( 'fetchDidSucceed' ) ) { - - fetchResponse = await callback( { - event, - request : pluginFilteredRequest, - response : fetchResponse, - } ) - - } - return fetchResponse - - } - catch ( error ) { - - { - - logger.log( `Network request for ` + `'${getFriendlyURL( request.url )}' threw an error.`, error ) - - } - // `originalRequest` will only exist if a `fetchDidFail` callback - // is being used (see above). - if ( originalRequest ) { - - await this.runCallbacks( 'fetchDidFail', { - error : error, - event, - originalRequest : originalRequest.clone(), - request : pluginFilteredRequest.clone(), - } ) - - } - throw error - - } - - } - - /** - * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on - * the response generated by `this.fetch()`. - * - * The call to `this.cachePut()` automatically invokes `this.waitUntil()`, - * so you do not have to manually call `waitUntil()` on the event. - * @param {Request|string} input The request or URL to fetch and cache. - * @returns {Promise} - */ - async fetchAndCachePut( input ) { - - const response = await this.fetch( input ) - const responseClone = response.clone() - void this.waitUntil( this.cachePut( input, responseClone ) ) - return response - - } - - /** - * Matches a request from the cache (and invokes any applicable plugin - * callback methods) using the `cacheName`, `matchOptions`, and `plugins` - * defined on the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cachedResponseWillBeUsed() - * @param {Request|string} key The Request or URL to use as the cache key. - * @returns {Promise} A matching response, if found. - */ - async cacheMatch( key ) { - - const request = toRequest( key ) - let cachedResponse - const { - cacheName, - matchOptions, - } = this._strategy - const effectiveRequest = await this.getCacheKey( request, 'read' ) - const multiMatchOptions = Object.assign( Object.assign( {}, matchOptions ), { - cacheName, - } ) - cachedResponse = await caches.match( effectiveRequest, multiMatchOptions ) - { - - if ( cachedResponse ) { - - logger.debug( `Found a cached response in '${cacheName}'.` ) - - } - else { - - logger.debug( `No cached response found in '${cacheName}'.` ) - - } - - } - for ( const callback of this.iterateCallbacks( 'cachedResponseWillBeUsed' ) ) { - - cachedResponse = ( await callback( { - cacheName, - matchOptions, - cachedResponse, - request : effectiveRequest, - event : this.event, - } ) ) || undefined - - } - return cachedResponse - - } - - /** - * Puts a request/response pair in the cache (and invokes any applicable - * plugin callback methods) using the `cacheName` and `plugins` defined on - * the strategy object. - * - * The following plugin lifecycle methods are invoked when using this method: - * - cacheKeyWillBeUsed() - * - cacheWillUpdate() - * - cacheDidUpdate() - * @param {Request|string} key The request or URL to use as the cache key. - * @param {Response} response The response to cache. - * @returns {Promise} `false` if a cacheWillUpdate caused the response - * not be cached, and `true` otherwise. - */ - async cachePut( key, response ) { - - const request = toRequest( key ) - // Run in the next task to avoid blocking other cache reads. - // https://github.com/w3c/ServiceWorker/issues/1397 - await timeout( 0 ) - const effectiveRequest = await this.getCacheKey( request, 'write' ) - { - - if ( effectiveRequest.method && effectiveRequest.method !== 'GET' ) { - - throw new WorkboxError( 'attempt-to-cache-non-get-request', { - url : getFriendlyURL( effectiveRequest.url ), - method : effectiveRequest.method, - } ) - - } - // See https://github.com/GoogleChrome/workbox/issues/2818 - const vary = response.headers.get( 'Vary' ) - if ( vary ) { - - logger.debug( `The response for ${getFriendlyURL( 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.` ) - - } - - } - if ( !response ) { - - { - - logger.error( `Cannot cache non-existent response for ` + `'${getFriendlyURL( effectiveRequest.url )}'.` ) - - } - throw new WorkboxError( 'cache-put-with-no-response', { - url : getFriendlyURL( effectiveRequest.url ), - } ) - - } - const responseToCache = await this._ensureResponseSafeToCache( response ) - if ( !responseToCache ) { - - { - - logger.debug( `Response '${getFriendlyURL( effectiveRequest.url )}' ` + `will not be cached.`, responseToCache ) - - } - return false - - } - const { - cacheName, - matchOptions, - } = this._strategy - const cache = await self.caches.open( cacheName ) - const hasCacheUpdateCallback = this.hasCallback( 'cacheDidUpdate' ) - const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( - // TODO(philipwalton): the `__WB_REVISION__` param is a precaching - // feature. Consider into ways to only add this behavior if using - // precaching. - cache, effectiveRequest.clone(), [ '__WB_REVISION__' ], matchOptions ) : null - { - - logger.debug( `Updating the '${cacheName}' cache with a new Response ` + `for ${getFriendlyURL( effectiveRequest.url )}.` ) - - } - try { - - await cache.put( effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache ) - - } - catch ( error ) { - - if ( error instanceof Error ) { - - // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError - if ( error.name === 'QuotaExceededError' ) { - - await executeQuotaErrorCallbacks() - - } - throw error - - } - - } - for ( const callback of this.iterateCallbacks( 'cacheDidUpdate' ) ) { - - await callback( { - cacheName, - oldResponse, - newResponse : responseToCache.clone(), - request : effectiveRequest, - event : this.event, - } ) - - } - return true - - } - - /** - * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and - * executes any of those callbacks found in sequence. The final `Request` - * object returned by the last plugin is treated as the cache key for cache - * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have - * been registered, the passed request is returned unmodified - * @param {Request} request - * @param {string} mode - * @returns {Promise} - */ - async getCacheKey( request, mode ) { - - const key = `${request.url} | ${mode}` - if ( !this._cacheKeys[key] ) { - - let effectiveRequest = request - for ( const callback of this.iterateCallbacks( 'cacheKeyWillBeUsed' ) ) { - - effectiveRequest = toRequest( await callback( { - mode, - request : effectiveRequest, - event : this.event, - // params has a type any can't change right now. - params: this.params // eslint-disable-line - } ) ) - - } - this._cacheKeys[key] = effectiveRequest - - } - return this._cacheKeys[key] - - } - - /** - * Returns true if the strategy has at least one plugin with the given - * callback. - * @param {string} name The name of the callback to check for. - * @returns {boolean} - */ - hasCallback( name ) { - - for ( const plugin of this._strategy.plugins ) { - - if ( name in plugin ) { - - return true - - } - - } - return false - - } - - /** - * Runs all plugin callbacks matching the given name, in order, passing the - * given param object (merged ith the current plugin state) as the only - * argument. - * - * Note: since this method runs all plugins, it's not suitable for cases - * where the return value of a callback needs to be applied prior to calling - * the next callback. See - * {@link workbox-strategies.StrategyHandler#iterateCallbacks} - * below for how to handle that case. - * @param {string} name The name of the callback to run within each plugin. - * @param {object} param The object to pass as the first (and only) param - * when executing each callback. This object will be merged with the - * current plugin state prior to callback execution. - */ - async runCallbacks( name, param ) { - - for ( const callback of this.iterateCallbacks( name ) ) { - - // TODO(philipwalton): not sure why `any` is needed. It seems like - // this should work with `as WorkboxPluginCallbackParam[C]`. - await callback( param ) - - } - - } - - /** - * Accepts a callback and returns an iterable of matching plugin callbacks, - * where each callback is wrapped with the current handler state (i.e. when - * you call each callback, whatever object parameter you pass it will - * be merged with the plugin's current state). - * @param {string} name The name fo the callback to run - * @returns {Array} - */ - *iterateCallbacks( name ) { - - for ( const plugin of this._strategy.plugins ) { - - if ( typeof plugin[name] === 'function' ) { - - const state = this._pluginStateMap.get( plugin ) - const statefulCallback = param => { - - const statefulParam = Object.assign( Object.assign( {}, param ), { - state, - } ) - // TODO(philipwalton): not sure why `any` is needed. It seems like - // this should work with `as WorkboxPluginCallbackParam[C]`. - return plugin[name]( statefulParam ) - - } - yield statefulCallback - - } - - } - - } - - /** - * Adds a promise to the - * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises} - * of the event event associated with the request being handled (usually a - * `FetchEvent`). - * - * Note: you can await - * {@link workbox-strategies.StrategyHandler~doneWaiting} - * to know when all added promises have settled. - * @param {Promise} promise A promise to add to the extend lifetime promises - * of the event that triggered the request. - */ - waitUntil( promise ) { - - this._extendLifetimePromises.push( promise ) - return promise - - } - - /** - * Returns a promise that resolves once all promises passed to - * {@link workbox-strategies.StrategyHandler~waitUntil} - * have settled. - * - * Note: any work done after `doneWaiting()` settles should be manually - * passed to an event's `waitUntil()` method (not this handler's - * `waitUntil()` method), otherwise the service worker thread my be killed - * prior to your work completing. - */ - async doneWaiting() { - - let promise - while ( promise = this._extendLifetimePromises.shift() ) { - - await promise - - } - - } - - /** - * Stops running the strategy and immediately resolves any pending - * `waitUntil()` promises. - */ - destroy() { - - this._handlerDeferred.resolve( null ) - - } - - /** - * This method will call cacheWillUpdate on the available plugins (or use - * status === 200) to determine if the Response is safe and valid to cache. - * @param {Request} options.request - * @param {Response} options.response - * @param response - * @returns {Promise} - * @private - */ - async _ensureResponseSafeToCache( response ) { - - let responseToCache = response, - pluginsUsed = false - for ( const callback of this.iterateCallbacks( 'cacheWillUpdate' ) ) { - - responseToCache = ( await callback( { - request : this.request, - response : responseToCache, - event : this.event, - } ) ) || undefined - pluginsUsed = true - if ( !responseToCache ) { - - break - - } - - } - if ( !pluginsUsed ) { - - if ( responseToCache && responseToCache.status !== 200 ) { - - responseToCache = undefined - - } - { - - if ( responseToCache ) { - - if ( responseToCache.status !== 200 ) { - - if ( responseToCache.status === 0 ) { - - logger.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.` ) - - } - else { - - logger.debug( `The response for '${this.request.url}' ` + `returned a status code of '${response.status}' and won't ` + `be cached as a result.` ) - - } - - } - - } - - } - - } - return responseToCache - - } - - } - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * An abstract base class that all other strategy classes must extend from: - * @memberof workbox-strategies - */ - class Strategy { - - /** - * Creates a new instance of the strategy and sets all documented option - * properties as public instance properties. - * - * Note: if a custom strategy class extends the base Strategy class and does - * not need more than these properties, it does not need to define its own - * constructor. - * @param {object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * to use in conjunction with this caching strategy. - * @param {object} [options.fetchOptions] Values passed along to the - * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) - * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) - * `fetch()` requests made by this strategy. - * @param {object} [options.matchOptions] The - * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - */ - constructor( options = {} ) { - - /** - * Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @type {string} - */ - this.cacheName = cacheNames.getRuntimeName( options.cacheName ) - /** - * The list - * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} - * used by this strategy. - * @type {Array} - */ - this.plugins = options.plugins || [] - /** - * Values passed along to the - * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters} - * of all fetch() requests made by this strategy. - * @type {object} - */ - this.fetchOptions = options.fetchOptions - /** - * The - * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - * @type {object} - */ - this.matchOptions = options.matchOptions - - } - - /** - * Perform a request strategy and returns a `Promise` that will resolve with - * a `Response`, invoking all relevant plugin callbacks. - * - * When a strategy instance is registered with a Workbox - * {@link workbox-routing.Route}, this method is automatically - * called when the route matches. - * - * Alternatively, this method can be used in a standalone `FetchEvent` - * listener by passing it to `event.respondWith()`. - * @param {FetchEvent | object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - */ - handle( options ) { - - const [ responseDone ] = this.handleAll( options ) - return responseDone - - } - - /** - * Similar to {@link workbox-strategies.Strategy~handle}, but - * instead of just returning a `Promise` that resolves to a `Response` it - * it will return an tuple of `[response, done]` promises, where the former - * (`response`) is equivalent to what `handle()` returns, and the latter is a - * Promise that will resolve once any promises that were added to - * `event.waitUntil()` as part of performing the strategy have completed. - * - * You can await the `done` promise to ensure any extra work performed by - * the strategy (usually caching responses) completes successfully. - * @param {FetchEvent | object} options A `FetchEvent` or an object with the - * properties listed below. - * @param {Request|string} options.request A request to run this strategy for. - * @param {ExtendableEvent} options.event The event associated with the - * request. - * @param {URL} [options.url] - * @param {*} [options.params] - * @returns {Array} A tuple of [response, done] - * promises that can be used to determine when the response resolves as - * well as when the handler has completed all its work. - */ - handleAll( options ) { - - // Allow for flexible options to be passed. - if ( options instanceof FetchEvent ) { - - options = { - event : options, - request : options.request, - } - - } - const event = options.event - const request = typeof options.request === 'string' ? new Request( options.request ) : options.request - const params = 'params' in options ? options.params : undefined - const handler = new StrategyHandler( this, { - event, - request, - params, - } ) - const responseDone = this._getResponse( handler, request, event ) - const handlerDone = this._awaitComplete( responseDone, handler, request, event ) - // Return an array of promises, suitable for use with Promise.all(). - return [ responseDone, handlerDone ] - - } - - async _getResponse( handler, request, event ) { - - await handler.runCallbacks( 'handlerWillStart', { - event, - request, - } ) - let response = undefined - try { - - response = await this._handle( request, handler ) - // The "official" Strategy subclasses all throw this error automatically, - // but in case a third-party Strategy doesn't, ensure that we have a - // consistent failure when there's no response or an error response. - if ( !response || response.type === 'error' ) { - - throw new WorkboxError( 'no-response', { - url : request.url, - } ) - - } - - } - catch ( error ) { - - if ( error instanceof Error ) { - - for ( const callback of handler.iterateCallbacks( 'handlerDidError' ) ) { - - response = await callback( { - error, - event, - request, - } ) - if ( response ) { - - break - - } - - } - - } - if ( !response ) { - - throw error - - } - else { - - logger.log( `While responding to '${getFriendlyURL( request.url )}', ` + `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` + `a handlerDidError plugin.` ) - - } - - } - for ( const callback of handler.iterateCallbacks( 'handlerWillRespond' ) ) { - - response = await callback( { - event, - request, - response, - } ) - - } - return response - - } - - async _awaitComplete( responseDone, handler, request, event ) { - - let response, - error - try { - - response = await responseDone - - } - catch ( error ) { - // Ignore errors, as response errors should be caught via the `response` - // promise above. The `done` promise will only throw for errors in - // promises passed to `handler.waitUntil()`. - } - try { - - await handler.runCallbacks( 'handlerDidRespond', { - event, - request, - response, - } ) - await handler.doneWaiting() - - } - catch ( waitUntilError ) { - - if ( waitUntilError instanceof Error ) { - - error = waitUntilError - - } - - } - await handler.runCallbacks( 'handlerDidComplete', { - event, - request, - response, - error : error, - } ) - handler.destroy() - if ( error ) { - - throw error - - } - - } - - } - /** - * Classes extending the `Strategy` based class should implement this method, - * and leverage the {@link workbox-strategies.StrategyHandler} - * arg to perform all fetching and cache logic, which will ensure all relevant - * cache, cache options, fetch options and plugins are used (per the current - * strategy instance). - * @name _handle - * @instance - * @abstract - * @function - * @param {Request} request - * @param {workbox-strategies.StrategyHandler} handler - * @returns {Promise} - * @memberof workbox-strategies.Strategy - */ - - /* - Copyright 2020 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * A {@link workbox-strategies.Strategy} implementation - * specifically designed to work with - * {@link workbox-precaching.PrecacheController} - * to both cache and fetch precached assets. - * - * Note: an instance of this class is created automatically when creating a - * `PrecacheController`; it's generally not necessary to create this yourself. - * @augments workbox-strategies.Strategy - * @memberof workbox-precaching - */ - class PrecacheStrategy extends Strategy { - - /** - * - * @param {object} [options] - * @param {string} [options.cacheName] Cache name to store and retrieve - * requests. Defaults to the cache names provided by - * {@link workbox-core.cacheNames}. - * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins} - * to use in conjunction with this caching strategy. - * @param {object} [options.fetchOptions] Values passed along to the - * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init} - * of all fetch() requests made by this strategy. - * @param {object} [options.matchOptions] The - * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions} - * for any `cache.match()` or `cache.put()` calls made by this strategy. - * @param {boolean} [options.fallbackToNetwork] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor( options = {} ) { - - options.cacheName = cacheNames.getPrecacheName( options.cacheName ) - super( options ) - this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true - // Redirected responses cannot be used to satisfy a navigation request, so - // any redirected response must be "copied" rather than cloned, so the new - // response doesn't contain the `redirected` flag. See: - // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1 - this.plugins.push( PrecacheStrategy.copyRedirectedCacheableResponsesPlugin ) - - } - - /** - * @private - * @param {Request|string} request A request to run this strategy for. - * @param {workbox-strategies.StrategyHandler} handler The event that - * triggered the request. - * @returns {Promise} - */ - async _handle( request, handler ) { - - const response = await handler.cacheMatch( request ) - if ( response ) { - - return response - - } - // If this is an `install` event for an entry that isn't already cached, - // then populate the cache. - if ( handler.event && handler.event.type === 'install' ) { - - return await this._handleInstall( request, handler ) - - } - // Getting here means something went wrong. An entry that should have been - // precached wasn't found in the cache. - return await this._handleFetch( request, handler ) - - } - - async _handleFetch( request, handler ) { - - let response - const params = handler.params || {} - // Fall back to the network if we're configured to do so. - if ( this._fallbackToNetwork ) { - - { - - logger.warn( `The precached response for ` + `${getFriendlyURL( request.url )} in ${this.cacheName} was not ` + `found. Falling back to the network.` ) - - } - const integrityInManifest = params.integrity - const integrityInRequest = request.integrity - const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest - // Do not add integrity if the original request is no-cors - // See https://github.com/GoogleChrome/workbox/issues/3096 - response = await handler.fetch( new Request( request, { - integrity : request.mode !== 'no-cors' ? integrityInRequest || integrityInManifest : undefined, - } ) ) - // It's only "safe" to repair the cache if we're using SRI to guarantee - // that the response matches the precache manifest's expectations, - // and there's either a) no integrity property in the incoming request - // or b) there is an integrity, and it matches the precache manifest. - // See https://github.com/GoogleChrome/workbox/issues/2858 - // Also if the original request users no-cors we don't use integrity. - // See https://github.com/GoogleChrome/workbox/issues/3096 - if ( integrityInManifest && noIntegrityConflict && request.mode !== 'no-cors' ) { - - this._useDefaultCacheabilityPluginIfNeeded() - const wasCached = await handler.cachePut( request, response.clone() ) - { - - if ( wasCached ) { - - logger.log( `A response for ${getFriendlyURL( request.url )} ` + `was used to "repair" the precache.` ) - - } - - } - - } - - } - else { - - // This shouldn't normally happen, but there are edge cases: - // https://github.com/GoogleChrome/workbox/issues/1441 - throw new WorkboxError( 'missing-precache-entry', { - cacheName : this.cacheName, - url : request.url, - } ) - - } - { - - const cacheKey = params.cacheKey || ( await handler.getCacheKey( request, 'read' ) ) - // Workbox is going to handle the route. - // print the routing details to the console. - logger.groupCollapsed( `Precaching is responding to: ` + getFriendlyURL( request.url ) ) - logger.log( `Serving the precached url: ${getFriendlyURL( cacheKey instanceof Request ? cacheKey.url : cacheKey )}` ) - logger.groupCollapsed( `View request details here.` ) - logger.log( request ) - logger.groupEnd() - logger.groupCollapsed( `View response details here.` ) - logger.log( response ) - logger.groupEnd() - logger.groupEnd() - - } - return response - - } - - async _handleInstall( request, handler ) { - - this._useDefaultCacheabilityPluginIfNeeded() - const response = await handler.fetch( request ) - // Make sure we defer cachePut() until after we know the response - // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737 - const wasCached = await handler.cachePut( request, response.clone() ) - if ( !wasCached ) { - - // Throwing here will lead to the `install` handler failing, which - // we want to do if *any* of the responses aren't safe to cache. - throw new WorkboxError( 'bad-precaching-response', { - url : request.url, - status : response.status, - } ) - - } - return response - - } - - /** - * This method is complex, as there a number of things to account for: - * - * The `plugins` array can be set at construction, and/or it might be added to - * to at any time before the strategy is used. - * - * At the time the strategy is used (i.e. during an `install` event), there - * needs to be at least one plugin that implements `cacheWillUpdate` in the - * array, other than `copyRedirectedCacheableResponsesPlugin`. - * - * - If this method is called and there are no suitable `cacheWillUpdate` - * plugins, we need to add `defaultPrecacheCacheabilityPlugin`. - * - * - If this method is called and there is exactly one `cacheWillUpdate`, then - * we don't have to do anything (this might be a previously added - * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin). - * - * - If this method is called and there is more than one `cacheWillUpdate`, - * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so, - * we need to remove it. (This situation is unlikely, but it could happen if - * the strategy is used multiple times, the first without a `cacheWillUpdate`, - * and then later on after manually adding a custom `cacheWillUpdate`.) - * - * See https://github.com/GoogleChrome/workbox/issues/2737 for more context. - * @private - */ - _useDefaultCacheabilityPluginIfNeeded() { - - let defaultPluginIndex = null, - cacheWillUpdatePluginCount = 0 - for ( const [ index, plugin ] of this.plugins.entries() ) { - - // Ignore the copy redirected plugin when determining what to do. - if ( plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin ) { - - continue - - } - // Save the default plugin's index, in case it needs to be removed. - if ( plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin ) { - - defaultPluginIndex = index - - } - if ( plugin.cacheWillUpdate ) { - - cacheWillUpdatePluginCount++ - - } - - } - if ( cacheWillUpdatePluginCount === 0 ) { - - this.plugins.push( PrecacheStrategy.defaultPrecacheCacheabilityPlugin ) - - } - else if ( cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null ) { - - // Only remove the default plugin; multiple custom plugins are allowed. - this.plugins.splice( defaultPluginIndex, 1 ) - - } - // Nothing needs to be done if cacheWillUpdatePluginCount is 1 - - } - - } - PrecacheStrategy.defaultPrecacheCacheabilityPlugin = { - async cacheWillUpdate( { - response, - } ) { - - if ( !response || response.status >= 400 ) { - - return null - - } - return response - - }, - } - PrecacheStrategy.copyRedirectedCacheableResponsesPlugin = { - async cacheWillUpdate( { - response, - } ) { - - return response.redirected ? await copyResponse( response ) : response - - }, - } - - /* - Copyright 2019 Google LLC - - Use of this source code is governed by an MIT-style - license that can be found in the LICENSE file or at - https://opensource.org/licenses/MIT. - */ - /** - * Performs efficient precaching of assets. - * @memberof workbox-precaching - */ - class PrecacheController { - - /** - * Create a new PrecacheController. - * @param {object} [options] - * @param {string} [options.cacheName] The cache to use for precaching. - * @param {string} [options.plugins] Plugins to use when precaching as well - * as responding to fetch events for precached assets. - * @param {boolean} [options.fallbackToNetwork] Whether to attempt to - * get the response from the network if there's a precache miss. - */ - constructor( { - cacheName, - plugins = [], - fallbackToNetwork = true, - } = {} ) { - - this._urlsToCacheKeys = new Map() - this._urlsToCacheModes = new Map() - this._cacheKeysToIntegrities = new Map() - this._strategy = new PrecacheStrategy( { - cacheName : cacheNames.getPrecacheName( cacheName ), - plugins : [ - ...plugins, - new PrecacheCacheKeyPlugin( { - precacheController : this, - } ), - ], - fallbackToNetwork, - } ) - // Bind the install and activate methods to the instance. - this.install = this.install.bind( this ) - this.activate = this.activate.bind( this ) - - } - - /** - * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and - * used to cache assets and respond to fetch events. - */ - get strategy() { - - return this._strategy - - } - - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * @param {Array} [entries] Array of entries to precache. - */ - precache( entries ) { - - this.addToCacheList( entries ) - if ( !this._installAndActiveListenersAdded ) { - - self.addEventListener( 'install', this.install ) - self.addEventListener( 'activate', this.activate ) - this._installAndActiveListenersAdded = true - - } - - } - - /** - * This method will add items to the precache list, removing duplicates - * and ensuring the information is valid. - * @param {Array} entries - * Array of entries to precache. - */ - addToCacheList( entries ) { - - { - - finalAssertExports.isArray( entries, { - moduleName : 'workbox-precaching', - className : 'PrecacheController', - funcName : 'addToCacheList', - paramName : 'entries', - } ) - - } - const urlsToWarnAbout = [] - for ( const entry of entries ) { - - // See https://github.com/GoogleChrome/workbox/issues/2259 - if ( typeof entry === 'string' ) { - - urlsToWarnAbout.push( entry ) - - } - else if ( entry && entry.revision === undefined ) { - - urlsToWarnAbout.push( entry.url ) - - } - const { - cacheKey, - url, - } = createCacheKey( entry ) - const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default' - if ( this._urlsToCacheKeys.has( url ) && this._urlsToCacheKeys.get( url ) !== cacheKey ) { - - throw new WorkboxError( 'add-to-cache-list-conflicting-entries', { - firstEntry : this._urlsToCacheKeys.get( url ), - secondEntry : cacheKey, - } ) - - } - if ( typeof entry !== 'string' && entry.integrity ) { - - if ( this._cacheKeysToIntegrities.has( cacheKey ) && this._cacheKeysToIntegrities.get( cacheKey ) !== entry.integrity ) { - - throw new WorkboxError( 'add-to-cache-list-conflicting-integrities', { - url, - } ) - - } - this._cacheKeysToIntegrities.set( cacheKey, entry.integrity ) - - } - this._urlsToCacheKeys.set( url, cacheKey ) - this._urlsToCacheModes.set( url, cacheMode ) - if ( urlsToWarnAbout.length > 0 ) { - - const warningMessage = `Workbox is precaching URLs without revision ` + `info: ${urlsToWarnAbout.join( ', ' )}\nThis is generally NOT safe. ` + `Learn more at https://bit.ly/wb-precache` - { - - logger.warn( warningMessage ) - - } - - } - - } - - } - - /** - * Precaches new and updated assets. Call this method from the service worker - * install event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * @param {ExtendableEvent} event - * @returns {Promise} - */ - install( event ) { - - // waitUntil returns Promise - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return waitUntil( event, async () => { - - const installReportPlugin = new PrecacheInstallReportPlugin() - this.strategy.plugins.push( installReportPlugin ) - // Cache entries one at a time. - // See https://github.com/GoogleChrome/workbox/issues/2528 - for ( const [ url, cacheKey ] of this._urlsToCacheKeys ) { - - const integrity = this._cacheKeysToIntegrities.get( cacheKey ) - const cacheMode = this._urlsToCacheModes.get( url ) - const request = new Request( url, { - integrity, - cache : cacheMode, - credentials : 'same-origin', - } ) - await Promise.all( this.strategy.handleAll( { - params : { - cacheKey, - }, - request, - event, - } ) ) - - } - const { - updatedURLs, - notUpdatedURLs, - } = installReportPlugin - { - - printInstallDetails( updatedURLs, notUpdatedURLs ) - - } - return { - updatedURLs, - notUpdatedURLs, - } - - } ) - - } - - /** - * Deletes assets that are no longer present in the current precache manifest. - * Call this method from the service worker activate event. - * - * Note: this method calls `event.waitUntil()` for you, so you do not need - * to call it yourself in your event handlers. - * @param {ExtendableEvent} event - * @returns {Promise} - */ - activate( event ) { - - // waitUntil returns Promise - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return waitUntil( event, async () => { - - const cache = await self.caches.open( this.strategy.cacheName ) - const currentlyCachedRequests = await cache.keys() - const expectedCacheKeys = new Set( this._urlsToCacheKeys.values() ) - const deletedURLs = [] - for ( const request of currentlyCachedRequests ) { - - if ( !expectedCacheKeys.has( request.url ) ) { - - await cache.delete( request ) - deletedURLs.push( request.url ) - - } - - } - { - - printCleanupDetails( deletedURLs ) - - } - return { - deletedURLs, - } - - } ) - - } - - /** - * Returns a mapping of a precached URL to the corresponding cache key, taking - * into account the revision information for the URL. - * @returns {Map} A URL to cache key mapping. - */ - getURLsToCacheKeys() { - - return this._urlsToCacheKeys - - } - - /** - * Returns a list of all the URLs that have been precached by the current - * service worker. - * @returns {Array} The precached URLs. - */ - getCachedURLs() { - - return [ ...this._urlsToCacheKeys.keys() ] - - } - - /** - * Returns the cache key used for storing a given URL. If that URL is - * unversioned, like `/index.html', then the cache key will be the original - * URL with a search parameter appended to it. - * @param {string} url A URL whose cache key you want to look up. - * @returns {string} The versioned URL that corresponds to a cache key - * for the original URL, or undefined if that URL isn't precached. - */ - getCacheKeyForURL( url ) { - - const urlObject = new URL( url, location.href ) - return this._urlsToCacheKeys.get( urlObject.href ) - - } - - /** - * @param {string} url A cache key whose SRI you want to look up. - * @param cacheKey - * @returns {string} The subresource integrity associated with the cache key, - * or undefined if it's not set. - */ - getIntegrityForCacheKey( cacheKey ) { - - return this._cacheKeysToIntegrities.get( cacheKey ) - - } - - /** - * This acts as a drop-in replacement for - * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match) - * with the following differences: - * - * - It knows what the name of the precache is, and only checks in that cache. - * - It allows you to pass in an "original" URL without versioning parameters, - * and it will automatically look up the correct cache key for the currently - * active revision of that URL. - * - * E.g., `matchPrecache('index.html')` will find the correct precached - * response for the currently active service worker, even if the actual cache - * key is `'/index.html?__WB_REVISION__=1234abcd'`. - * @param {string|Request} request The key (without revisioning parameters) - * to look up in the precache. - * @returns {Promise} - */ - async matchPrecache( request ) { - - const url = request instanceof Request ? request.url : request - const cacheKey = this.getCacheKeyForURL( url ) - if ( cacheKey ) { - - const cache = await self.caches.open( this.strategy.cacheName ) - return cache.match( cacheKey ) - - } - return undefined - - } - - /** - * Returns a function that looks up `url` in the precache (taking into - * account revision information), and returns the corresponding `Response`. - * @param {string} url The precached URL which will be used to lookup the - * `Response`. - * @returns {workbox-routing~handlerCallback} - */ - createHandlerBoundToURL( url ) { - - const cacheKey = this.getCacheKeyForURL( url ) - if ( !cacheKey ) { - - throw new WorkboxError( 'non-precached-url', { - url, - } ) - - } - return options => { - - options.request = new Request( url ) - options.params = Object.assign( { - cacheKey, - }, options.params ) - return this.strategy.handle( options ) - - } - - } - - } - - /* - Copyright 2019 Google LLC + */ + const logger = (() => { + // Don't overwrite this value if it's already set. + // See https://github.com/GoogleChrome/workbox/pull/2284#issuecomment-560470923 + if (!('__WB_DISABLE_DEV_LOGS' in globalThis)) { + self.__WB_DISABLE_DEV_LOGS = false; + } + let inGroup = false; + const methodToColorMap = { + debug: `#7f8c8d`, + log: `#2ecc71`, + warn: `#f39c12`, + error: `#c0392b`, + groupCollapsed: `#3498db`, + groupEnd: null // No colored prefix on groupEnd + }; + const print = function (method, args) { + if (self.__WB_DISABLE_DEV_LOGS) { + return; + } + if (method === 'groupCollapsed') { + // Safari doesn't print all console.groupCollapsed() arguments: + // https://bugs.webkit.org/show_bug.cgi?id=182754 + if (/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { + console[method](...args); + return; + } + } + const styles = [`background: ${methodToColorMap[method]}`, `border-radius: 0.5em`, `color: white`, `font-weight: bold`, `padding: 2px 0.5em`]; + // When in a group, the workbox prefix is not displayed. + const logPrefix = inGroup ? [] : ['%cworkbox', styles.join(';')]; + console[method](...logPrefix, ...args); + if (method === 'groupCollapsed') { + inGroup = true; + } + if (method === 'groupEnd') { + inGroup = false; + } + }; + // eslint-disable-next-line @typescript-eslint/ban-types + const api = {}; + const loggerMethods = Object.keys(methodToColorMap); + for (const key of loggerMethods) { + const method = key; + api[method] = (...args) => { + print(method, args); + }; + } + return api; + })(); + + /* + Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - let precacheController - /** - * @returns {PrecacheController} - * @private - */ - const getOrCreatePrecacheController = () => { - - if ( !precacheController ) { - - precacheController = new PrecacheController() - - } - return precacheController + const messages = { + 'invalid-value': ({ + paramName, + validValueDescription, + value + }) => { + if (!paramName || !validValueDescription) { + throw new Error(`Unexpected input to 'invalid-value' error.`); + } + return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`; + }, + 'not-an-array': ({ + moduleName, + className, + funcName, + paramName + }) => { + if (!moduleName || !className || !funcName || !paramName) { + throw new Error(`Unexpected input to 'not-an-array' error.`); + } + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`; + }, + 'incorrect-type': ({ + expectedType, + paramName, + moduleName, + className, + funcName + }) => { + if (!expectedType || !paramName || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'incorrect-type' error.`); + } + const classNameStr = className ? `${className}.` : ''; + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.`; + }, + 'incorrect-class': ({ + expectedClassName, + paramName, + moduleName, + className, + funcName, + isReturnValueProblem + }) => { + if (!expectedClassName || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'incorrect-class' error.`); + } + const classNameStr = className ? `${className}.` : ''; + if (isReturnValueProblem) { + return `The return value from ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`; + } + return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`; + }, + 'missing-a-method': ({ + expectedMethod, + paramName, + moduleName, + className, + funcName + }) => { + if (!expectedMethod || !paramName || !moduleName || !className || !funcName) { + throw new Error(`Unexpected input to 'missing-a-method' error.`); + } + return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`; + }, + 'add-to-cache-list-unexpected-type': ({ + entry + }) => { + return `An unexpected entry was passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' 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.`; + }, + 'add-to-cache-list-conflicting-entries': ({ + firstEntry, + secondEntry + }) => { + if (!firstEntry || !secondEntry) { + throw new Error(`Unexpected input to ` + `'add-to-cache-list-duplicate-entries' error.`); + } + return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${firstEntry} but different revision details. Workbox is ` + `unable to cache and version the asset correctly. Please remove one ` + `of the entries.`; + }, + 'plugin-error-request-will-fetch': ({ + thrownErrorMessage + }) => { + if (!thrownErrorMessage) { + throw new Error(`Unexpected input to ` + `'plugin-error-request-will-fetch', error.`); + } + return `An error was thrown by a plugins 'requestWillFetch()' method. ` + `The thrown error message was: '${thrownErrorMessage}'.`; + }, + 'invalid-cache-name': ({ + cacheNameId, + value + }) => { + if (!cacheNameId) { + throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`); + } + return `You must provide a name containing at least one character for ` + `setCacheDetails({${cacheNameId}: '...'}). Received a value of ` + `'${JSON.stringify(value)}'`; + }, + 'unregister-route-but-not-found-with-method': ({ + method + }) => { + if (!method) { + throw new Error(`Unexpected input to ` + `'unregister-route-but-not-found-with-method' error.`); + } + return `The route you're trying to unregister was not previously ` + `registered for the method type '${method}'.`; + }, + 'unregister-route-route-not-registered': () => { + return `The route you're trying to unregister was not previously ` + `registered.`; + }, + 'queue-replay-failed': ({ + name + }) => { + return `Replaying the background sync queue '${name}' failed.`; + }, + 'duplicate-queue-name': ({ + name + }) => { + return `The Queue name '${name}' is already being used. ` + `All instances of backgroundSync.Queue must be given unique names.`; + }, + 'expired-test-without-max-age': ({ + methodName, + paramName + }) => { + return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`; + }, + 'unsupported-route-type': ({ + moduleName, + className, + funcName, + paramName + }) => { + return `The supplied '${paramName}' parameter was an unsupported type. ` + `Please check the docs for ${moduleName}.${className}.${funcName} for ` + `valid input types.`; + }, + 'not-array-of-class': ({ + value, + expectedClass, + moduleName, + className, + funcName, + paramName + }) => { + 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.`; + }, + 'max-entries-or-age-required': ({ + moduleName, + className, + funcName + }) => { + return `You must define either config.maxEntries or config.maxAgeSeconds` + `in ${moduleName}.${className}.${funcName}`; + }, + 'statuses-or-headers-required': ({ + moduleName, + className, + funcName + }) => { + return `You must define either config.statuses or config.headers` + `in ${moduleName}.${className}.${funcName}`; + }, + 'invalid-string': ({ + moduleName, + funcName, + paramName + }) => { + if (!paramName || !moduleName || !funcName) { + throw new Error(`Unexpected input to 'invalid-string' error.`); + } + 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.`; + }, + 'channel-name-required': () => { + return `You must provide a channelName to construct a ` + `BroadcastCacheUpdate instance.`; + }, + 'invalid-responses-are-same-args': () => { + return `The arguments passed into responsesAreSame() appear to be ` + `invalid. Please ensure valid Responses are used.`; + }, + 'expire-custom-caches-only': () => { + return `You must provide a 'cacheName' property when using the ` + `expiration plugin with a runtime caching strategy.`; + }, + 'unit-must-be-bytes': ({ + normalizedRangeHeader + }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`); + } + return `The 'unit' portion of the Range header must be set to 'bytes'. ` + `The Range header provided was "${normalizedRangeHeader}"`; + }, + 'single-range-only': ({ + normalizedRangeHeader + }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'single-range-only' error.`); + } + return `Multiple ranges are not supported. Please use a single start ` + `value, and optional end value. The Range header provided was ` + `"${normalizedRangeHeader}"`; + }, + 'invalid-range-values': ({ + normalizedRangeHeader + }) => { + if (!normalizedRangeHeader) { + throw new Error(`Unexpected input to 'invalid-range-values' error.`); + } + 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}"`; + }, + 'no-range-header': () => { + return `No Range header was found in the Request provided.`; + }, + 'range-not-satisfiable': ({ + size, + start, + end + }) => { + return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`; + }, + 'attempt-to-cache-non-get-request': ({ + url, + method + }) => { + return `Unable to cache '${url}' because it is a '${method}' request and ` + `only 'GET' requests can be cached.`; + }, + 'cache-put-with-no-response': ({ + url + }) => { + return `There was an attempt to cache '${url}' but the response was not ` + `defined.`; + }, + 'no-response': ({ + url, + error + }) => { + let message = `The strategy could not generate a response for '${url}'.`; + if (error) { + message += ` The underlying error is ${error}.`; + } + return message; + }, + 'bad-precaching-response': ({ + url, + status + }) => { + return `The precaching request for '${url}' failed` + (status ? ` with an HTTP status of ${status}.` : `.`); + }, + 'non-precached-url': ({ + url + }) => { + return `createHandlerBoundToURL('${url}') was called, but that URL is ` + `not precached. Please pass in a URL that is precached instead.`; + }, + 'add-to-cache-list-conflicting-integrities': ({ + url + }) => { + return `Two of the entries passed to ` + `'workbox-precaching.PrecacheController.addToCacheList()' had the URL ` + `${url} with different integrity values. Please remove one of them.`; + }, + 'missing-precache-entry': ({ + cacheName, + url + }) => { + return `Unable to find a precached response in ${cacheName} for ${url}.`; + }, + 'cross-origin-copy-response': ({ + origin + }) => { + return `workbox-core.copyResponse() can only be used with same-origin ` + `responses. It was passed a response with origin ${origin}.`; + }, + 'opaque-streams-source': ({ + type + }) => { + const message = `One of the workbox-streams sources resulted in an ` + `'${type}' response.`; + if (type === 'opaqueredirect') { + return `${message} Please do not use a navigation request that results ` + `in a redirect as a source.`; + } + return `${message} Please ensure your sources are CORS-enabled.`; + } + }; + + /* + Copyright 2018 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + const generatorFunction = (code, details = {}) => { + const message = messages[code]; + if (!message) { + throw new Error(`Unable to find message for code '${code}'.`); + } + return message(details); + }; + const messageGenerator = generatorFunction; + + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Workbox errors should be thrown with this class. + * This allows use to ensure the type easily in tests, + * helps developers identify errors from workbox + * easily and allows use to optimise error + * messages correctly. + * + * @private + */ + class WorkboxError extends Error { + /** + * + * @param {string} errorCode The error code that + * identifies this particular error. + * @param {Object=} details Any relevant arguments + * that will help developers identify issues should + * be added as a key on the context object. + */ + constructor(errorCode, details) { + const message = messageGenerator(errorCode, details); + super(message); + this.name = errorCode; + this.details = details; + } + } + + /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Removes any URL search parameters that should be ignored. - * @param {URL} urlObject The original URL. - * @param {Array} ignoreURLParametersMatching RegExps to test against - * each search parameter name. Matches mean that the search parameter should be - * ignored. - * @returns {URL} The URL with any ignored search parameters removed. - * @private - * @memberof workbox-precaching - */ - function removeIgnoredSearchParams( urlObject, ignoreURLParametersMatching = [] ) { + /* + * This method throws if the supplied value is not an array. + * The destructed values are required to produce a meaningful error for users. + * The destructed and restructured object is so it's clear what is + * needed. + */ + const isArray = (value, details) => { + if (!Array.isArray(value)) { + throw new WorkboxError('not-an-array', details); + } + }; + const hasMethod = (object, expectedMethod, details) => { + const type = typeof object[expectedMethod]; + if (type !== 'function') { + details['expectedMethod'] = expectedMethod; + throw new WorkboxError('missing-a-method', details); + } + }; + const isType = (object, expectedType, details) => { + if (typeof object !== expectedType) { + details['expectedType'] = expectedType; + throw new WorkboxError('incorrect-type', details); + } + }; + const isInstance = (object, + // Need the general type to do the check later. + // eslint-disable-next-line @typescript-eslint/ban-types + expectedClass, details) => { + if (!(object instanceof expectedClass)) { + details['expectedClassName'] = expectedClass.name; + throw new WorkboxError('incorrect-class', details); + } + }; + const isOneOf = (value, validValues, details) => { + if (!validValues.includes(value)) { + details['validValueDescription'] = `Valid values are ${JSON.stringify(validValues)}.`; + throw new WorkboxError('invalid-value', details); + } + }; + const isArrayOfClass = (value, + // Need general type to do check later. + expectedClass, + // eslint-disable-line + details) => { + const error = new WorkboxError('not-array-of-class', details); + if (!Array.isArray(value)) { + throw error; + } + for (const item of value) { + if (!(item instanceof expectedClass)) { + throw error; + } + } + }; + const finalAssertExports = { + hasMethod, + isArray, + isInstance, + isOneOf, + isType, + isArrayOfClass + }; + + // @ts-ignore + try { + self['workbox:routing:7.2.0'] && _(); + } catch (e) {} + + /* + Copyright 2018 Google LLC - // Convert the iterable into an array at the start of the loop to make sure - // deletion doesn't mess up iteration. - for ( const paramName of [ ...urlObject.searchParams.keys() ] ) { + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * The default HTTP method, 'GET', used when there's no specific method + * configured for a route. + * + * @type {string} + * + * @private + */ + const defaultMethod = 'GET'; + /** + * The list of valid HTTP methods associated with requests that could be routed. + * + * @type {Array} + * + * @private + */ + const validMethods = ['DELETE', 'GET', 'HEAD', 'PATCH', 'POST', 'PUT']; - if ( ignoreURLParametersMatching.some( regExp => regExp.test( paramName ) ) ) { + /* + Copyright 2018 Google LLC - urlObject.searchParams.delete( paramName ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * @param {function()|Object} handler Either a function, or an object with a + * 'handle' method. + * @return {Object} An object with a handle method. + * + * @private + */ + const normalizeHandler = handler => { + if (handler && typeof handler === 'object') { + { + finalAssertExports.hasMethod(handler, 'handle', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'handler' + }); + } + return handler; + } else { + { + finalAssertExports.isType(handler, 'function', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'handler' + }); + } + return { + handle: handler + }; + } + }; + + /* + Copyright 2018 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * A `Route` consists of a pair of callback functions, "match" and "handler". + * The "match" callback determine if a route should be used to "handle" a + * request by returning a non-falsy value if it can. The "handler" callback + * is called when there is a match and should return a Promise that resolves + * to a `Response`. + * + * @memberof workbox-routing + */ + class Route { + /** + * Constructor for Route class. + * + * @param {workbox-routing~matchCallback} match + * A callback function that determines whether the route matches a given + * `fetch` event by returning a non-falsy value. + * @param {workbox-routing~handlerCallback} handler A callback + * function that returns a Promise resolving to a Response. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + */ + constructor(match, handler, method = defaultMethod) { + { + finalAssertExports.isType(match, 'function', { + moduleName: 'workbox-routing', + className: 'Route', + funcName: 'constructor', + paramName: 'match' + }); + if (method) { + finalAssertExports.isOneOf(method, validMethods, { + paramName: 'method' + }); + } + } + // These values are referenced directly by Router so cannot be + // altered by minificaton. + this.handler = normalizeHandler(handler); + this.match = match; + this.method = method; + } + /** + * + * @param {workbox-routing-handlerCallback} handler A callback + * function that returns a Promise resolving to a Response + */ + setCatchHandler(handler) { + this.catchHandler = normalizeHandler(handler); + } + } + + /* + Copyright 2018 Google LLC - } - return urlObject + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * RegExpRoute makes it easy to create a regular expression based + * {@link workbox-routing.Route}. + * + * For same-origin requests the RegExp only needs to match part of the URL. For + * requests against third-party servers, you must define a RegExp that matches + * the start of the URL. + * + * @memberof workbox-routing + * @extends workbox-routing.Route + */ + class RegExpRoute extends Route { + /** + * If the regular expression contains + * [capture groups]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references}, + * the captured values will be passed to the + * {@link workbox-routing~handlerCallback} `params` + * argument. + * + * @param {RegExp} regExp The regular expression to match against URLs. + * @param {workbox-routing~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + */ + constructor(regExp, handler, method) { + { + finalAssertExports.isInstance(regExp, RegExp, { + moduleName: 'workbox-routing', + className: 'RegExpRoute', + funcName: 'constructor', + paramName: 'pattern' + }); + } + const match = ({ + url + }) => { + const result = regExp.exec(url.href); + // Return immediately if there's no match. + if (!result) { + return; + } + // Require that the match start at the first character in the URL string + // if it's a cross-origin request. + // See https://github.com/GoogleChrome/workbox/issues/281 for the context + // behind this behavior. + if (url.origin !== location.origin && result.index !== 0) { + { + logger.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.`); + } + return; + } + // If the route matches, but there aren't any capture groups defined, then + // this will return [], which is truthy and therefore sufficient to + // indicate a match. + // If there are capture groups, then it will return their values. + return result.slice(1); + }; + super(match, handler, method); + } + } + + /* + Copyright 2018 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + const getFriendlyURL = url => { + const urlObj = new URL(String(url), location.href); + // See https://github.com/GoogleChrome/workbox/issues/2323 + // We want to include everything, except for the origin if it's same-origin. + return urlObj.href.replace(new RegExp(`^${location.origin}`), ''); + }; + + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * The Router can be used to process a `FetchEvent` using one or more + * {@link workbox-routing.Route}, responding with a `Response` if + * a matching route exists. + * + * If no route matches a given a request, the Router will use a "default" + * handler if one is defined. + * + * Should the matching Route throw an error, the Router will use a "catch" + * handler if one is defined to gracefully deal with issues and respond with a + * Request. + * + * If a request matches multiple routes, the **earliest** registered route will + * be used to respond to the request. + * + * @memberof workbox-routing + */ + class Router { + /** + * Initializes a new Router. + */ + constructor() { + this._routes = new Map(); + this._defaultHandlerMap = new Map(); + } + /** + * @return {Map>} routes A `Map` of HTTP + * method name ('GET', etc.) to an array of all the corresponding `Route` + * instances that are registered. + */ + get routes() { + return this._routes; + } + /** + * Adds a fetch event listener to respond to events when a route matches + * the event's request. + */ + addFetchListener() { + // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 + self.addEventListener('fetch', event => { + const { + request + } = event; + const responsePromise = this.handleRequest({ + request, + event + }); + if (responsePromise) { + event.respondWith(responsePromise); + } + }); + } + /** + * Adds a message event listener for URLs to cache from the window. + * This is useful to cache resources loaded on the page prior to when the + * service worker started controlling it. + * + * The format of the message data sent from the window should be as follows. + * Where the `urlsToCache` array may consist of URL strings or an array of + * URL string + `requestInit` object (the same as you'd pass to `fetch()`). + * + * ``` + * { + * type: 'CACHE_URLS', + * payload: { + * urlsToCache: [ + * './script1.js', + * './script2.js', + * ['./script3.js', {mode: 'no-cors'}], + * ], + * }, + * } + * ``` + */ + addCacheListener() { + // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 + self.addEventListener('message', event => { + // event.data is type 'any' + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + if (event.data && event.data.type === 'CACHE_URLS') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const { + payload + } = event.data; + { + logger.debug(`Caching URLs from the window`, payload.urlsToCache); + } + const requestPromises = Promise.all(payload.urlsToCache.map(entry => { + if (typeof entry === 'string') { + entry = [entry]; + } + const request = new Request(...entry); + return this.handleRequest({ + request, + event + }); + // TODO(philipwalton): TypeScript errors without this typecast for + // some reason (probably a bug). The real type here should work but + // doesn't: `Array | undefined>`. + })); // TypeScript + event.waitUntil(requestPromises); + // If a MessageChannel was used, reply to the message on success. + if (event.ports && event.ports[0]) { + void requestPromises.then(() => event.ports[0].postMessage(true)); + } + } + }); + } + /** + * Apply the routing rules to a FetchEvent object to get a Response from an + * appropriate Route's handler. + * + * @param {Object} options + * @param {Request} options.request The request to handle. + * @param {ExtendableEvent} options.event The event that triggered the + * request. + * @return {Promise|undefined} A promise is returned if a + * registered route can handle the request. If there is no matching + * route and there's no `defaultHandler`, `undefined` is returned. + */ + handleRequest({ + request, + event + }) { + { + finalAssertExports.isInstance(request, Request, { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'handleRequest', + paramName: 'options.request' + }); + } + const url = new URL(request.url, location.href); + if (!url.protocol.startsWith('http')) { + { + logger.debug(`Workbox Router only supports URLs that start with 'http'.`); + } + return; + } + const sameOrigin = url.origin === location.origin; + const { + params, + route + } = this.findMatchingRoute({ + event, + request, + sameOrigin, + url + }); + let handler = route && route.handler; + const debugMessages = []; + { + if (handler) { + debugMessages.push([`Found a route to handle this request:`, route]); + if (params) { + debugMessages.push([`Passing the following params to the route's handler:`, params]); + } + } + } + // If we don't have a handler because there was no matching route, then + // fall back to defaultHandler if that's defined. + const method = request.method; + if (!handler && this._defaultHandlerMap.has(method)) { + { + debugMessages.push(`Failed to find a matching route. Falling ` + `back to the default handler for ${method}.`); + } + handler = this._defaultHandlerMap.get(method); + } + if (!handler) { + { + // No handler so Workbox will do nothing. If logs is set of debug + // i.e. verbose, we should print out this information. + logger.debug(`No route found for: ${getFriendlyURL(url)}`); + } + return; + } + { + // We have a handler, meaning Workbox is going to handle the route. + // print the routing details to the console. + logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`); + debugMessages.forEach(msg => { + if (Array.isArray(msg)) { + logger.log(...msg); + } else { + logger.log(msg); + } + }); + logger.groupEnd(); + } + // Wrap in try and catch in case the handle method throws a synchronous + // error. It should still callback to the catch handler. + let responsePromise; + try { + responsePromise = handler.handle({ + url, + request, + event, + params + }); + } catch (err) { + responsePromise = Promise.reject(err); + } + // Get route's catch handler, if it exists + const catchHandler = route && route.catchHandler; + if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) { + responsePromise = responsePromise.catch(async err => { + // If there's a route catch handler, process that first + if (catchHandler) { + { + // Still include URL here as it will be async from the console group + // and may not make sense without the URL + logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`); + logger.error(`Error thrown by:`, route); + logger.error(err); + logger.groupEnd(); + } + try { + return await catchHandler.handle({ + url, + request, + event, + params + }); + } catch (catchErr) { + if (catchErr instanceof Error) { + err = catchErr; + } + } + } + if (this._catchHandler) { + { + // Still include URL here as it will be async from the console group + // and may not make sense without the URL + logger.groupCollapsed(`Error thrown when responding to: ` + ` ${getFriendlyURL(url)}. Falling back to global Catch Handler.`); + logger.error(`Error thrown by:`, route); + logger.error(err); + logger.groupEnd(); + } + return this._catchHandler.handle({ + url, + request, + event + }); + } + throw err; + }); + } + return responsePromise; + } + /** + * Checks a request and URL (and optionally an event) against the list of + * registered routes, and if there's a match, returns the corresponding + * route along with any params generated by the match. + * + * @param {Object} options + * @param {URL} options.url + * @param {boolean} options.sameOrigin The result of comparing `url.origin` + * against the current origin. + * @param {Request} options.request The request to match. + * @param {Event} options.event The corresponding event. + * @return {Object} An object with `route` and `params` properties. + * They are populated if a matching route was found or `undefined` + * otherwise. + */ + findMatchingRoute({ + url, + sameOrigin, + request, + event + }) { + const routes = this._routes.get(request.method) || []; + for (const route of routes) { + let params; + // route.match returns type any, not possible to change right now. + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const matchResult = route.match({ + url, + sameOrigin, + request, + event + }); + if (matchResult) { + { + // Warn developers that using an async matchCallback is almost always + // not the right thing to do. + if (matchResult instanceof Promise) { + logger.warn(`While routing ${getFriendlyURL(url)}, an async ` + `matchCallback function was used. Please convert the ` + `following route to use a synchronous matchCallback function:`, route); + } + } + // See https://github.com/GoogleChrome/workbox/issues/2079 + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + params = matchResult; + if (Array.isArray(params) && params.length === 0) { + // Instead of passing an empty array in as params, use undefined. + params = undefined; + } else if (matchResult.constructor === Object && + // eslint-disable-line + Object.keys(matchResult).length === 0) { + // Instead of passing an empty object in as params, use undefined. + params = undefined; + } else if (typeof matchResult === 'boolean') { + // For the boolean value true (rather than just something truth-y), + // don't set params. + // See https://github.com/GoogleChrome/workbox/pull/2134#issuecomment-513924353 + params = undefined; + } + // Return early if have a match. + return { + route, + params + }; + } + } + // If no match was found above, return and empty object. + return {}; + } + /** + * Define a default `handler` that's called when no routes explicitly + * match the incoming request. + * + * Each HTTP method ('GET', 'POST', etc.) gets its own default handler. + * + * Without a default handler, unmatched requests will go against the + * network as if there were no service worker present. + * + * @param {workbox-routing~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {string} [method='GET'] The HTTP method to associate with this + * default handler. Each method has its own default. + */ + setDefaultHandler(handler, method = defaultMethod) { + this._defaultHandlerMap.set(method, normalizeHandler(handler)); + } + /** + * If a Route throws an error while handling a request, this `handler` + * will be called and given a chance to provide a response. + * + * @param {workbox-routing~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + */ + setCatchHandler(handler) { + this._catchHandler = normalizeHandler(handler); + } + /** + * Registers a route with the router. + * + * @param {workbox-routing.Route} route The route to register. + */ + registerRoute(route) { + { + finalAssertExports.isType(route, 'object', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + finalAssertExports.hasMethod(route, 'match', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + finalAssertExports.isType(route.handler, 'object', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route' + }); + finalAssertExports.hasMethod(route.handler, 'handle', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route.handler' + }); + finalAssertExports.isType(route.method, 'string', { + moduleName: 'workbox-routing', + className: 'Router', + funcName: 'registerRoute', + paramName: 'route.method' + }); + } + if (!this._routes.has(route.method)) { + this._routes.set(route.method, []); + } + // Give precedence to all of the earlier routes by adding this additional + // route to the end of the array. + this._routes.get(route.method).push(route); + } + /** + * Unregisters a route with the router. + * + * @param {workbox-routing.Route} route The route to unregister. + */ + unregisterRoute(route) { + if (!this._routes.has(route.method)) { + throw new WorkboxError('unregister-route-but-not-found-with-method', { + method: route.method + }); + } + const routeIndex = this._routes.get(route.method).indexOf(route); + if (routeIndex > -1) { + this._routes.get(route.method).splice(routeIndex, 1); + } else { + throw new WorkboxError('unregister-route-route-not-registered'); + } + } + } + + /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Generator function that yields possible variations on the original URL to - * check, one at a time. - * @param {string} url - * @param {object} options - * @param options.ignoreURLParametersMatching - * @param options.directoryIndex - * @param options.cleanURLs - * @param options.urlManipulation - * @private - * @memberof workbox-precaching - */ - function* generateURLVariations( url, { - ignoreURLParametersMatching = [ /^utm_/, /^fbclid$/ ], - directoryIndex = 'index.html', - cleanURLs = true, - urlManipulation, - } = {} ) { - - const urlObject = new URL( url, location.href ) - urlObject.hash = '' - yield urlObject.href - const urlWithoutIgnoredParams = removeIgnoredSearchParams( urlObject, ignoreURLParametersMatching ) - yield urlWithoutIgnoredParams.href - if ( directoryIndex && urlWithoutIgnoredParams.pathname.endsWith( '/' ) ) { - - const directoryURL = new URL( urlWithoutIgnoredParams.href ) - directoryURL.pathname += directoryIndex - yield directoryURL.href - - } - if ( cleanURLs ) { - - const cleanURL = new URL( urlWithoutIgnoredParams.href ) - cleanURL.pathname += '.html' - yield cleanURL.href - - } - if ( urlManipulation ) { - - const additionalURLs = urlManipulation( { - url : urlObject, - } ) - for ( const urlToAttempt of additionalURLs ) { - - yield urlToAttempt.href - - } - - } + let defaultRouter; + /** + * Creates a new, singleton Router instance if one does not exist. If one + * does already exist, that instance is returned. + * + * @private + * @return {Router} + */ + const getOrCreateDefaultRouter = () => { + if (!defaultRouter) { + defaultRouter = new Router(); + // The helpers that use the default Router assume these listeners exist. + defaultRouter.addFetchListener(); + defaultRouter.addCacheListener(); + } + return defaultRouter; + }; + + /* + Copyright 2019 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Easily register a RegExp, string, or function with a caching + * strategy to a singleton Router instance. + * + * This method will generate a Route for you if needed and + * call {@link workbox-routing.Router#registerRoute}. + * + * @param {RegExp|string|workbox-routing.Route~matchCallback|workbox-routing.Route} capture + * If the capture param is a `Route`, all other arguments will be ignored. + * @param {workbox-routing~handlerCallback} [handler] A callback + * function that returns a Promise resulting in a Response. This parameter + * is required if `capture` is not a `Route` object. + * @param {string} [method='GET'] The HTTP method to match the Route + * against. + * @return {workbox-routing.Route} The generated `Route`. + * + * @memberof workbox-routing + */ + function registerRoute(capture, handler, method) { + let route; + if (typeof capture === 'string') { + const captureUrl = new URL(capture, location.href); + { + if (!(capture.startsWith('/') || capture.startsWith('http'))) { + throw new WorkboxError('invalid-string', { + moduleName: 'workbox-routing', + funcName: 'registerRoute', + paramName: 'capture' + }); + } + // We want to check if Express-style wildcards are in the pathname only. + // TODO: Remove this log message in v4. + const valueToCheck = capture.startsWith('http') ? captureUrl.pathname : capture; + // See https://github.com/pillarjs/path-to-regexp#parameters + const wildcards = '[*:?+]'; + if (new RegExp(`${wildcards}`).exec(valueToCheck)) { + logger.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.`); + } + } + const matchCallback = ({ + url + }) => { + { + if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) { + logger.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.`); + } + } + return url.href === captureUrl.href; + }; + // If `capture` is a string then `handler` and `method` must be present. + route = new Route(matchCallback, handler, method); + } else if (capture instanceof RegExp) { + // If `capture` is a `RegExp` then `handler` and `method` must be present. + route = new RegExpRoute(capture, handler, method); + } else if (typeof capture === 'function') { + // If `capture` is a function then `handler` and `method` must be present. + route = new Route(capture, handler, method); + } else if (capture instanceof Route) { + route = capture; + } else { + throw new WorkboxError('unsupported-route-type', { + moduleName: 'workbox-routing', + funcName: 'registerRoute', + paramName: 'capture' + }); + } + const defaultRouter = getOrCreateDefaultRouter(); + defaultRouter.registerRoute(route); + return route; + } + + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + const _cacheNameDetails = { + googleAnalytics: 'googleAnalytics', + precache: 'precache-v2', + prefix: 'workbox', + runtime: 'runtime', + suffix: typeof registration !== 'undefined' ? registration.scope : '' + }; + const _createCacheName = cacheName => { + return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter(value => value && value.length > 0).join('-'); + }; + const eachCacheNameDetail = fn => { + for (const key of Object.keys(_cacheNameDetails)) { + fn(key); + } + }; + const cacheNames = { + updateDetails: details => { + eachCacheNameDetail(key => { + if (typeof details[key] === 'string') { + _cacheNameDetails[key] = details[key]; + } + }); + }, + getGoogleAnalyticsName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics); + }, + getPrecacheName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.precache); + }, + getPrefix: () => { + return _cacheNameDetails.prefix; + }, + getRuntimeName: userCacheName => { + return userCacheName || _createCacheName(_cacheNameDetails.runtime); + }, + getSuffix: () => { + return _cacheNameDetails.suffix; + } + }; + + /* Copyright 2020 Google LLC - Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * A subclass of {@link workbox-routing.Route} that takes a - * {@link workbox-precaching.PrecacheController} - * instance and uses it to match incoming requests and handle fetching - * responses from the precache. - * @memberof workbox-precaching - * @augments workbox-routing.Route - */ - class PrecacheRoute extends Route { - - /** - * @param {PrecacheController} precacheController A `PrecacheController` - * instance used to both match requests and respond to fetch events. - * @param {object} [options] Options to control how requests are matched - * against the list of precached URLs. - * @param {string} [options.directoryIndex] The `directoryIndex` will - * check cache entries for a URLs ending with '/' to see if there is a hit when - * appending the `directoryIndex` value. - * @param {Array} [options.ignoreURLParametersMatching] An - * array of regex's to remove search params when looking for a cache match. - * @param {boolean} [options.cleanURLs] The `cleanURLs` option will - * check the cache for the URL with a `.html` added to the end of the end. - * @param {workbox-precaching~urlManipulation} [options.urlManipulation] - * This is a function that should take a URL and return an array of - * alternative URLs that should be checked for precache matches. - */ - constructor( precacheController, options ) { - - const match = ( { - request, - } ) => { - - const urlsToCacheKeys = precacheController.getURLsToCacheKeys() - for ( const possibleURL of generateURLVariations( request.url, options ) ) { - - const cacheKey = urlsToCacheKeys.get( possibleURL ) - if ( cacheKey ) { - - const integrity = precacheController.getIntegrityForCacheKey( cacheKey ) - return { - cacheKey, - integrity, - } - - } - - } - { - - logger.debug( `Precaching did not find a match for ` + getFriendlyURL( request.url ) ) - - } - return - - } - super( match, precacheController.strategy ) - - } + /** + * A utility method that makes it easier to use `event.waitUntil` with + * async functions and return the result. + * + * @param {ExtendableEvent} event + * @param {Function} asyncFn + * @return {Function} + * @private + */ + function waitUntil(event, asyncFn) { + const returnPromise = asyncFn(); + event.waitUntil(returnPromise); + return returnPromise; + } + + // @ts-ignore + try { + self['workbox:precaching:7.2.0'] && _(); + } catch (e) {} + + /* + Copyright 2018 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + // Name of the search parameter used to store revision info. + const REVISION_SEARCH_PARAM = '__WB_REVISION__'; + /** + * Converts a manifest entry into a versioned URL suitable for precaching. + * + * @param {Object|string} entry + * @return {string} A URL with versioning info. + * + * @private + * @memberof workbox-precaching + */ + function createCacheKey(entry) { + if (!entry) { + throw new WorkboxError('add-to-cache-list-unexpected-type', { + entry + }); + } + // If a precache manifest entry is a string, it's assumed to be a versioned + // URL, like '/app.abcd1234.js'. Return as-is. + if (typeof entry === 'string') { + const urlObject = new URL(entry, location.href); + return { + cacheKey: urlObject.href, + url: urlObject.href + }; + } + const { + revision, + url + } = entry; + if (!url) { + throw new WorkboxError('add-to-cache-list-unexpected-type', { + entry + }); + } + // If there's just a URL and no revision, then it's also assumed to be a + // versioned URL. + if (!revision) { + const urlObject = new URL(url, location.href); + return { + cacheKey: urlObject.href, + url: urlObject.href + }; + } + // Otherwise, construct a properly versioned URL using the custom Workbox + // search parameter along with the revision info. + const cacheKeyURL = new URL(url, location.href); + const originalURL = new URL(url, location.href); + cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision); + return { + cacheKey: cacheKeyURL.href, + url: originalURL.href + }; + } + + /* + Copyright 2020 Google LLC - /* - Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Add a `fetch` listener to the service worker that will - * respond to - * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} - * with precached assets. - * - * Requests for assets that aren't precached, the `FetchEvent` will not be - * responded to, allowing the event to fall through to other `fetch` event - * listeners. - * @param {object} [options] See the {@link workbox-precaching.PrecacheRoute} - * options. - * @memberof workbox-precaching - */ - function addRoute( options ) { + /** + * A plugin, designed to be used with PrecacheController, to determine the + * of assets that were updated (or not updated) during the install event. + * + * @private + */ + class PrecacheInstallReportPlugin { + constructor() { + this.updatedURLs = []; + this.notUpdatedURLs = []; + this.handlerWillStart = async ({ + request, + state + }) => { + // TODO: `state` should never be undefined... + if (state) { + state.originalRequest = request; + } + }; + this.cachedResponseWillBeUsed = async ({ + event, + state, + cachedResponse + }) => { + if (event.type === 'install') { + if (state && state.originalRequest && state.originalRequest instanceof Request) { + // TODO: `state` should never be undefined... + const url = state.originalRequest.url; + if (cachedResponse) { + this.notUpdatedURLs.push(url); + } else { + this.updatedURLs.push(url); + } + } + } + return cachedResponse; + }; + } + } + + /* + Copyright 2020 Google LLC - const precacheController = getOrCreatePrecacheController() - const precacheRoute = new PrecacheRoute( precacheController, options ) - registerRoute( precacheRoute ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * A plugin, designed to be used with PrecacheController, to translate URLs into + * the corresponding cache key, based on the current revision info. + * + * @private + */ + class PrecacheCacheKeyPlugin { + constructor({ + precacheController + }) { + this.cacheKeyWillBeUsed = async ({ + request, + params + }) => { + // Params is type any, can't change right now. + /* eslint-disable */ + const cacheKey = (params === null || params === void 0 ? void 0 : params.cacheKey) || this._precacheController.getCacheKeyForURL(request.url); + /* eslint-enable */ + return cacheKey ? new Request(cacheKey, { + headers: request.headers + }) : request; + }; + this._precacheController = precacheController; + } + } + + /* + Copyright 2018 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * @param {string} groupTitle + * @param {Array} deletedURLs + * + * @private + */ + const logGroup = (groupTitle, deletedURLs) => { + logger.groupCollapsed(groupTitle); + for (const url of deletedURLs) { + logger.log(url); + } + logger.groupEnd(); + }; + /** + * @param {Array} deletedURLs + * + * @private + * @memberof workbox-precaching + */ + function printCleanupDetails(deletedURLs) { + const deletionCount = deletedURLs.length; + if (deletionCount > 0) { + logger.groupCollapsed(`During precaching cleanup, ` + `${deletionCount} cached ` + `request${deletionCount === 1 ? ' was' : 's were'} deleted.`); + logGroup('Deleted Cache Requests', deletedURLs); + logger.groupEnd(); + } + } + + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * @param {string} groupTitle + * @param {Array} urls + * + * @private + */ + function _nestedGroup(groupTitle, urls) { + if (urls.length === 0) { + return; + } + logger.groupCollapsed(groupTitle); + for (const url of urls) { + logger.log(url); + } + logger.groupEnd(); + } + /** + * @param {Array} urlsToPrecache + * @param {Array} urlsAlreadyPrecached + * + * @private + * @memberof workbox-precaching + */ + function printInstallDetails(urlsToPrecache, urlsAlreadyPrecached) { + const precachedCount = urlsToPrecache.length; + const alreadyPrecachedCount = urlsAlreadyPrecached.length; + if (precachedCount || alreadyPrecachedCount) { + let message = `Precaching ${precachedCount} file${precachedCount === 1 ? '' : 's'}.`; + if (alreadyPrecachedCount > 0) { + message += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? ' is' : 's are'} already cached.`; + } + logger.groupCollapsed(message); + _nestedGroup(`View newly precached URLs.`, urlsToPrecache); + _nestedGroup(`View previously precached URLs.`, urlsAlreadyPrecached); + logger.groupEnd(); + } + } + + /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Adds items to the precache list, removing any duplicates and - * stores the files in the - * {@link workbox-core.cacheNames|"precache cache"} when the service - * worker installs. - * - * This method can be called multiple times. - * - * Please note: This method **will not** serve any of the cached files for you. - * It only precaches files. To respond to a network request you call - * {@link workbox-precaching.addRoute}. - * - * If you have a single array of files to precache, you can just call - * {@link workbox-precaching.precacheAndRoute}. - * @param {Array} [entries] Array of entries to precache. - * @memberof workbox-precaching - */ - function precache( entries ) { - - const precacheController = getOrCreatePrecacheController() - precacheController.precache( entries ) - - } - - /* + let supportStatus; + /** + * A utility function that determines whether the current browser supports + * constructing a new `Response` from a `response.body` stream. + * + * @return {boolean} `true`, if the current browser can successfully + * construct a `Response` from a `response.body` stream, `false` otherwise. + * + * @private + */ + function canConstructResponseFromBodyStream() { + if (supportStatus === undefined) { + const testResponse = new Response(''); + if ('body' in testResponse) { + try { + new Response(testResponse.body); + supportStatus = true; + } catch (error) { + supportStatus = false; + } + } + supportStatus = false; + } + return supportStatus; + } + + /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * This method will add entries to the precache list and add a route to - * respond to fetch events. - * - * This is a convenience method that will call - * {@link workbox-precaching.precache} and - * {@link workbox-precaching.addRoute} in a single call. - * @param {Array} entries Array of entries to precache. - * @param {object} [options] See the - * {@link workbox-precaching.PrecacheRoute} options. - * @memberof workbox-precaching - */ - function precacheAndRoute( entries, options ) { - - precache( entries ) - addRoute( options ) - - } - - /* + /** + * Allows developers to copy a response and modify its `headers`, `status`, + * or `statusText` values (the values settable via a + * [`ResponseInit`]{@link https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax} + * object in the constructor). + * To modify these values, pass a function as the second argument. That + * function will be invoked with a single object with the response properties + * `{headers, status, statusText}`. The return value of this function will + * be used as the `ResponseInit` for the new `Response`. To change the values + * either modify the passed parameter(s) and return it, or return a totally + * new object. + * + * This method is intentionally limited to same-origin responses, regardless of + * whether CORS was used or not. + * + * @param {Response} response + * @param {Function} modifier + * @memberof workbox-core + */ + async function copyResponse(response, modifier) { + let origin = null; + // If response.url isn't set, assume it's cross-origin and keep origin null. + if (response.url) { + const responseURL = new URL(response.url); + origin = responseURL.origin; + } + if (origin !== self.location.origin) { + throw new WorkboxError('cross-origin-copy-response', { + origin + }); + } + const clonedResponse = response.clone(); + // Create a fresh `ResponseInit` object by cloning the headers. + const responseInit = { + headers: new Headers(clonedResponse.headers), + status: clonedResponse.status, + statusText: clonedResponse.statusText + }; + // Apply any user modifications. + const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit; + // Create the new response from the body stream and `ResponseInit` + // modifications. Note: not all browsers support the Response.body stream, + // so fall back to reading the entire body into memory as a blob. + const body = canConstructResponseFromBodyStream() ? clonedResponse.body : await clonedResponse.blob(); + return new Response(body, modifiedResponseInit); + } + + /* + Copyright 2020 Google LLC + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + function stripParams(fullURL, ignoreParams) { + const strippedURL = new URL(fullURL); + for (const param of ignoreParams) { + strippedURL.searchParams.delete(param); + } + return strippedURL.href; + } + /** + * Matches an item in the cache, ignoring specific URL params. This is similar + * to the `ignoreSearch` option, but it allows you to ignore just specific + * params (while continuing to match on the others). + * + * @private + * @param {Cache} cache + * @param {Request} request + * @param {Object} matchOptions + * @param {Array} ignoreParams + * @return {Promise} + */ + async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) { + const strippedRequestURL = stripParams(request.url, ignoreParams); + // If the request doesn't include any ignored params, match as normal. + if (request.url === strippedRequestURL) { + return cache.match(request, matchOptions); + } + // Otherwise, match by comparing keys + const keysOptions = Object.assign(Object.assign({}, matchOptions), { + ignoreSearch: true + }); + const cacheKeys = await cache.keys(request, keysOptions); + for (const cacheKey of cacheKeys) { + const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams); + if (strippedRequestURL === strippedCacheKeyURL) { + return cache.match(cacheKey, matchOptions); + } + } + return; + } + + /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - const SUBSTRING_TO_FIND = '-precache-' - /** - * Cleans up incompatible precaches that were created by older versions of - * Workbox, by a service worker registered under the current scope. - * - * This is meant to be called as part of the `activate` event. - * - * This should be safe to use as long as you don't include `substringToFind` - * (defaulting to `-precache-`) in your non-precache cache names. - * @param {string} currentPrecacheName The cache name currently in use for - * precaching. This cache won't be deleted. - * @param {string} [substringToFind] Cache names which include this - * substring will be deleted (excluding `currentPrecacheName`). - * @returns {Array} A list of all the cache names that were deleted. - * @private - * @memberof workbox-precaching - */ - const deleteOutdatedCaches = async ( currentPrecacheName, substringToFind = SUBSTRING_TO_FIND ) => { - - const cacheNames = await self.caches.keys() - const cacheNamesToDelete = cacheNames.filter( cacheName => { - - return cacheName.includes( substringToFind ) && cacheName.includes( self.registration.scope ) && cacheName !== currentPrecacheName + /** + * The Deferred class composes Promises in a way that allows for them to be + * resolved or rejected from outside the constructor. In most cases promises + * should be used directly, but Deferreds can be necessary when the logic to + * resolve a promise must be separate. + * + * @private + */ + class Deferred { + /** + * Creates a promise and exposes its resolve and reject functions as methods. + */ + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + } + } + + /* + Copyright 2018 Google LLC - } ) - await Promise.all( cacheNamesToDelete.map( cacheName => self.caches.delete( cacheName ) ) ) - return cacheNamesToDelete + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + // Callbacks to be executed whenever there's a quota error. + // Can't change Function type right now. + // eslint-disable-next-line @typescript-eslint/ban-types + const quotaErrorCallbacks = new Set(); - } + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Runs all of the callback functions, one at a time sequentially, in the order + * in which they were registered. + * + * @memberof workbox-core + * @private + */ + async function executeQuotaErrorCallbacks() { + { + logger.log(`About to run ${quotaErrorCallbacks.size} ` + `callbacks to clean up caches.`); + } + for (const callback of quotaErrorCallbacks) { + await callback(); + { + logger.log(callback, 'is complete.'); + } + } + { + logger.log('Finished running callbacks.'); + } + } + + /* Copyright 2019 Google LLC - Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Adds an `activate` event listener which will clean up incompatible - * precaches that were created by older versions of Workbox. - * @memberof workbox-precaching - */ - function cleanupOutdatedCaches() { - - // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 - self.addEventListener( 'activate', event => { - - const cacheName = cacheNames.getPrecacheName() - event.waitUntil( deleteOutdatedCaches( cacheName ).then( cachesDeleted => { - - { + /** + * Returns a promise that resolves and the passed number of milliseconds. + * This utility is an async/await-friendly version of `setTimeout`. + * + * @param {number} ms + * @return {Promise} + * @private + */ + function timeout(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } - if ( cachesDeleted.length > 0 ) { + // @ts-ignore + try { + self['workbox:strategies:7.2.0'] && _(); + } catch (e) {} - logger.log( `The following out-of-date precaches were cleaned up ` + `automatically:`, cachesDeleted ) + /* + Copyright 2020 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + function toRequest(input) { + return typeof input === 'string' ? new Request(input) : input; + } + /** + * A class created every time a Strategy instance instance calls + * {@link workbox-strategies.Strategy~handle} or + * {@link workbox-strategies.Strategy~handleAll} that wraps all fetch and + * cache actions around plugin callbacks and keeps track of when the strategy + * is "done" (i.e. all added `event.waitUntil()` promises have resolved). + * + * @memberof workbox-strategies + */ + class StrategyHandler { + /** + * Creates a new instance associated with the passed strategy and event + * that's handling the request. + * + * The constructor also initializes the state that will be passed to each of + * the plugins handling this request. + * + * @param {workbox-strategies.Strategy} strategy + * @param {Object} options + * @param {Request|string} options.request A request to run this strategy for. + * @param {ExtendableEvent} options.event The event associated with the + * request. + * @param {URL} [options.url] + * @param {*} [options.params] The return value from the + * {@link workbox-routing~matchCallback} (if applicable). + */ + constructor(strategy, options) { + this._cacheKeys = {}; + /** + * The request the strategy is performing (passed to the strategy's + * `handle()` or `handleAll()` method). + * @name request + * @instance + * @type {Request} + * @memberof workbox-strategies.StrategyHandler + */ + /** + * The event associated with this request. + * @name event + * @instance + * @type {ExtendableEvent} + * @memberof workbox-strategies.StrategyHandler + */ + /** + * A `URL` instance of `request.url` (if passed to the strategy's + * `handle()` or `handleAll()` method). + * Note: the `url` param will be present if the strategy was invoked + * from a workbox `Route` object. + * @name url + * @instance + * @type {URL|undefined} + * @memberof workbox-strategies.StrategyHandler + */ + /** + * A `param` value (if passed to the strategy's + * `handle()` or `handleAll()` method). + * Note: the `param` param will be present if the strategy was invoked + * from a workbox `Route` object and the + * {@link workbox-routing~matchCallback} returned + * a truthy value (it will be that value). + * @name params + * @instance + * @type {*|undefined} + * @memberof workbox-strategies.StrategyHandler + */ + { + finalAssertExports.isInstance(options.event, ExtendableEvent, { + moduleName: 'workbox-strategies', + className: 'StrategyHandler', + funcName: 'constructor', + paramName: 'options.event' + }); + } + Object.assign(this, options); + this.event = options.event; + this._strategy = strategy; + this._handlerDeferred = new Deferred(); + this._extendLifetimePromises = []; + // Copy the plugins list (since it's mutable on the strategy), + // so any mutations don't affect this handler instance. + this._plugins = [...strategy.plugins]; + this._pluginStateMap = new Map(); + for (const plugin of this._plugins) { + this._pluginStateMap.set(plugin, {}); + } + this.event.waitUntil(this._handlerDeferred.promise); + } + /** + * Fetches a given request (and invokes any applicable plugin callback + * methods) using the `fetchOptions` (for non-navigation requests) and + * `plugins` defined on the `Strategy` object. + * + * The following plugin lifecycle methods are invoked when using this method: + * - `requestWillFetch()` + * - `fetchDidSucceed()` + * - `fetchDidFail()` + * + * @param {Request|string} input The URL or request to fetch. + * @return {Promise} + */ + async fetch(input) { + const { + event + } = this; + let request = toRequest(input); + if (request.mode === 'navigate' && event instanceof FetchEvent && event.preloadResponse) { + const possiblePreloadResponse = await event.preloadResponse; + if (possiblePreloadResponse) { + { + logger.log(`Using a preloaded navigation response for ` + `'${getFriendlyURL(request.url)}'`); + } + return possiblePreloadResponse; + } + } + // If there is a fetchDidFail plugin, we need to save a clone of the + // original request before it's either modified by a requestWillFetch + // plugin or before the original request's body is consumed via fetch(). + const originalRequest = this.hasCallback('fetchDidFail') ? request.clone() : null; + try { + for (const cb of this.iterateCallbacks('requestWillFetch')) { + request = await cb({ + request: request.clone(), + event + }); + } + } catch (err) { + if (err instanceof Error) { + throw new WorkboxError('plugin-error-request-will-fetch', { + thrownErrorMessage: err.message + }); + } + } + // The request can be altered by plugins with `requestWillFetch` making + // the original request (most likely from a `fetch` event) different + // from the Request we make. Pass both to `fetchDidFail` to aid debugging. + const pluginFilteredRequest = request.clone(); + try { + let fetchResponse; + // See https://github.com/GoogleChrome/workbox/issues/1796 + fetchResponse = await fetch(request, request.mode === 'navigate' ? undefined : this._strategy.fetchOptions); + if ("development" !== 'production') { + logger.debug(`Network request for ` + `'${getFriendlyURL(request.url)}' returned a response with ` + `status '${fetchResponse.status}'.`); + } + for (const callback of this.iterateCallbacks('fetchDidSucceed')) { + fetchResponse = await callback({ + event, + request: pluginFilteredRequest, + response: fetchResponse + }); + } + return fetchResponse; + } catch (error) { + { + logger.log(`Network request for ` + `'${getFriendlyURL(request.url)}' threw an error.`, error); + } + // `originalRequest` will only exist if a `fetchDidFail` callback + // is being used (see above). + if (originalRequest) { + await this.runCallbacks('fetchDidFail', { + error: error, + event, + originalRequest: originalRequest.clone(), + request: pluginFilteredRequest.clone() + }); + } + throw error; + } + } + /** + * Calls `this.fetch()` and (in the background) runs `this.cachePut()` on + * the response generated by `this.fetch()`. + * + * The call to `this.cachePut()` automatically invokes `this.waitUntil()`, + * so you do not have to manually call `waitUntil()` on the event. + * + * @param {Request|string} input The request or URL to fetch and cache. + * @return {Promise} + */ + async fetchAndCachePut(input) { + const response = await this.fetch(input); + const responseClone = response.clone(); + void this.waitUntil(this.cachePut(input, responseClone)); + return response; + } + /** + * Matches a request from the cache (and invokes any applicable plugin + * callback methods) using the `cacheName`, `matchOptions`, and `plugins` + * defined on the strategy object. + * + * The following plugin lifecycle methods are invoked when using this method: + * - cacheKeyWillBeUsed() + * - cachedResponseWillBeUsed() + * + * @param {Request|string} key The Request or URL to use as the cache key. + * @return {Promise} A matching response, if found. + */ + async cacheMatch(key) { + const request = toRequest(key); + let cachedResponse; + const { + cacheName, + matchOptions + } = this._strategy; + const effectiveRequest = await this.getCacheKey(request, 'read'); + const multiMatchOptions = Object.assign(Object.assign({}, matchOptions), { + cacheName + }); + cachedResponse = await caches.match(effectiveRequest, multiMatchOptions); + { + if (cachedResponse) { + logger.debug(`Found a cached response in '${cacheName}'.`); + } else { + logger.debug(`No cached response found in '${cacheName}'.`); + } + } + for (const callback of this.iterateCallbacks('cachedResponseWillBeUsed')) { + cachedResponse = (await callback({ + cacheName, + matchOptions, + cachedResponse, + request: effectiveRequest, + event: this.event + })) || undefined; + } + return cachedResponse; + } + /** + * Puts a request/response pair in the cache (and invokes any applicable + * plugin callback methods) using the `cacheName` and `plugins` defined on + * the strategy object. + * + * The following plugin lifecycle methods are invoked when using this method: + * - cacheKeyWillBeUsed() + * - cacheWillUpdate() + * - cacheDidUpdate() + * + * @param {Request|string} key The request or URL to use as the cache key. + * @param {Response} response The response to cache. + * @return {Promise} `false` if a cacheWillUpdate caused the response + * not be cached, and `true` otherwise. + */ + async cachePut(key, response) { + const request = toRequest(key); + // Run in the next task to avoid blocking other cache reads. + // https://github.com/w3c/ServiceWorker/issues/1397 + await timeout(0); + const effectiveRequest = await this.getCacheKey(request, 'write'); + { + if (effectiveRequest.method && effectiveRequest.method !== 'GET') { + throw new WorkboxError('attempt-to-cache-non-get-request', { + url: getFriendlyURL(effectiveRequest.url), + method: effectiveRequest.method + }); + } + // See https://github.com/GoogleChrome/workbox/issues/2818 + const vary = response.headers.get('Vary'); + if (vary) { + logger.debug(`The response for ${getFriendlyURL(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.`); + } + } + if (!response) { + { + logger.error(`Cannot cache non-existent response for ` + `'${getFriendlyURL(effectiveRequest.url)}'.`); + } + throw new WorkboxError('cache-put-with-no-response', { + url: getFriendlyURL(effectiveRequest.url) + }); + } + const responseToCache = await this._ensureResponseSafeToCache(response); + if (!responseToCache) { + { + logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' ` + `will not be cached.`, responseToCache); + } + return false; + } + const { + cacheName, + matchOptions + } = this._strategy; + const cache = await self.caches.open(cacheName); + const hasCacheUpdateCallback = this.hasCallback('cacheDidUpdate'); + const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams( + // TODO(philipwalton): the `__WB_REVISION__` param is a precaching + // feature. Consider into ways to only add this behavior if using + // precaching. + cache, effectiveRequest.clone(), ['__WB_REVISION__'], matchOptions) : null; + { + logger.debug(`Updating the '${cacheName}' cache with a new Response ` + `for ${getFriendlyURL(effectiveRequest.url)}.`); + } + try { + await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache); + } catch (error) { + if (error instanceof Error) { + // See https://developer.mozilla.org/en-US/docs/Web/API/DOMException#exception-QuotaExceededError + if (error.name === 'QuotaExceededError') { + await executeQuotaErrorCallbacks(); + } + throw error; + } + } + for (const callback of this.iterateCallbacks('cacheDidUpdate')) { + await callback({ + cacheName, + oldResponse, + newResponse: responseToCache.clone(), + request: effectiveRequest, + event: this.event + }); + } + return true; + } + /** + * Checks the list of plugins for the `cacheKeyWillBeUsed` callback, and + * executes any of those callbacks found in sequence. The final `Request` + * object returned by the last plugin is treated as the cache key for cache + * reads and/or writes. If no `cacheKeyWillBeUsed` plugin callbacks have + * been registered, the passed request is returned unmodified + * + * @param {Request} request + * @param {string} mode + * @return {Promise} + */ + async getCacheKey(request, mode) { + const key = `${request.url} | ${mode}`; + if (!this._cacheKeys[key]) { + let effectiveRequest = request; + for (const callback of this.iterateCallbacks('cacheKeyWillBeUsed')) { + effectiveRequest = toRequest(await callback({ + mode, + request: effectiveRequest, + event: this.event, + // params has a type any can't change right now. + params: this.params // eslint-disable-line + })); + } + this._cacheKeys[key] = effectiveRequest; + } + return this._cacheKeys[key]; + } + /** + * Returns true if the strategy has at least one plugin with the given + * callback. + * + * @param {string} name The name of the callback to check for. + * @return {boolean} + */ + hasCallback(name) { + for (const plugin of this._strategy.plugins) { + if (name in plugin) { + return true; + } + } + return false; + } + /** + * Runs all plugin callbacks matching the given name, in order, passing the + * given param object (merged ith the current plugin state) as the only + * argument. + * + * Note: since this method runs all plugins, it's not suitable for cases + * where the return value of a callback needs to be applied prior to calling + * the next callback. See + * {@link workbox-strategies.StrategyHandler#iterateCallbacks} + * below for how to handle that case. + * + * @param {string} name The name of the callback to run within each plugin. + * @param {Object} param The object to pass as the first (and only) param + * when executing each callback. This object will be merged with the + * current plugin state prior to callback execution. + */ + async runCallbacks(name, param) { + for (const callback of this.iterateCallbacks(name)) { + // TODO(philipwalton): not sure why `any` is needed. It seems like + // this should work with `as WorkboxPluginCallbackParam[C]`. + await callback(param); + } + } + /** + * Accepts a callback and returns an iterable of matching plugin callbacks, + * where each callback is wrapped with the current handler state (i.e. when + * you call each callback, whatever object parameter you pass it will + * be merged with the plugin's current state). + * + * @param {string} name The name fo the callback to run + * @return {Array} + */ + *iterateCallbacks(name) { + for (const plugin of this._strategy.plugins) { + if (typeof plugin[name] === 'function') { + const state = this._pluginStateMap.get(plugin); + const statefulCallback = param => { + const statefulParam = Object.assign(Object.assign({}, param), { + state + }); + // TODO(philipwalton): not sure why `any` is needed. It seems like + // this should work with `as WorkboxPluginCallbackParam[C]`. + return plugin[name](statefulParam); + }; + yield statefulCallback; + } + } + } + /** + * Adds a promise to the + * [extend lifetime promises]{@link https://w3c.github.io/ServiceWorker/#extendableevent-extend-lifetime-promises} + * of the event event associated with the request being handled (usually a + * `FetchEvent`). + * + * Note: you can await + * {@link workbox-strategies.StrategyHandler~doneWaiting} + * to know when all added promises have settled. + * + * @param {Promise} promise A promise to add to the extend lifetime promises + * of the event that triggered the request. + */ + waitUntil(promise) { + this._extendLifetimePromises.push(promise); + return promise; + } + /** + * Returns a promise that resolves once all promises passed to + * {@link workbox-strategies.StrategyHandler~waitUntil} + * have settled. + * + * Note: any work done after `doneWaiting()` settles should be manually + * passed to an event's `waitUntil()` method (not this handler's + * `waitUntil()` method), otherwise the service worker thread my be killed + * prior to your work completing. + */ + async doneWaiting() { + let promise; + while (promise = this._extendLifetimePromises.shift()) { + await promise; + } + } + /** + * Stops running the strategy and immediately resolves any pending + * `waitUntil()` promises. + */ + destroy() { + this._handlerDeferred.resolve(null); + } + /** + * This method will call cacheWillUpdate on the available plugins (or use + * status === 200) to determine if the Response is safe and valid to cache. + * + * @param {Request} options.request + * @param {Response} options.response + * @return {Promise} + * + * @private + */ + async _ensureResponseSafeToCache(response) { + let responseToCache = response; + let pluginsUsed = false; + for (const callback of this.iterateCallbacks('cacheWillUpdate')) { + responseToCache = (await callback({ + request: this.request, + response: responseToCache, + event: this.event + })) || undefined; + pluginsUsed = true; + if (!responseToCache) { + break; + } + } + if (!pluginsUsed) { + if (responseToCache && responseToCache.status !== 200) { + responseToCache = undefined; + } + { + if (responseToCache) { + if (responseToCache.status !== 200) { + if (responseToCache.status === 0) { + logger.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.`); + } else { + logger.debug(`The response for '${this.request.url}' ` + `returned a status code of '${response.status}' and won't ` + `be cached as a result.`); + } + } + } + } + } + return responseToCache; + } + } + + /* + Copyright 2020 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * An abstract base class that all other strategy classes must extend from: + * + * @memberof workbox-strategies + */ + class Strategy { + /** + * Creates a new instance of the strategy and sets all documented option + * properties as public instance properties. + * + * Note: if a custom strategy class extends the base Strategy class and does + * not need more than these properties, it does not need to define its own + * constructor. + * + * @param {Object} [options] + * @param {string} [options.cacheName] Cache name to store and retrieve + * requests. Defaults to the cache names provided by + * {@link workbox-core.cacheNames}. + * @param {Array} [options.plugins] [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * to use in conjunction with this caching strategy. + * @param {Object} [options.fetchOptions] Values passed along to the + * [`init`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters) + * of [non-navigation](https://github.com/GoogleChrome/workbox/issues/1796) + * `fetch()` requests made by this strategy. + * @param {Object} [options.matchOptions] The + * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} + * for any `cache.match()` or `cache.put()` calls made by this strategy. + */ + constructor(options = {}) { + /** + * Cache name to store and retrieve + * requests. Defaults to the cache names provided by + * {@link workbox-core.cacheNames}. + * + * @type {string} + */ + this.cacheName = cacheNames.getRuntimeName(options.cacheName); + /** + * The list + * [Plugins]{@link https://developers.google.com/web/tools/workbox/guides/using-plugins} + * used by this strategy. + * + * @type {Array} + */ + this.plugins = options.plugins || []; + /** + * Values passed along to the + * [`init`]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters} + * of all fetch() requests made by this strategy. + * + * @type {Object} + */ + this.fetchOptions = options.fetchOptions; + /** + * The + * [`CacheQueryOptions`]{@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions} + * for any `cache.match()` or `cache.put()` calls made by this strategy. + * + * @type {Object} + */ + this.matchOptions = options.matchOptions; + } + /** + * Perform a request strategy and returns a `Promise` that will resolve with + * a `Response`, invoking all relevant plugin callbacks. + * + * When a strategy instance is registered with a Workbox + * {@link workbox-routing.Route}, this method is automatically + * called when the route matches. + * + * Alternatively, this method can be used in a standalone `FetchEvent` + * listener by passing it to `event.respondWith()`. + * + * @param {FetchEvent|Object} options A `FetchEvent` or an object with the + * properties listed below. + * @param {Request|string} options.request A request to run this strategy for. + * @param {ExtendableEvent} options.event The event associated with the + * request. + * @param {URL} [options.url] + * @param {*} [options.params] + */ + handle(options) { + const [responseDone] = this.handleAll(options); + return responseDone; + } + /** + * Similar to {@link workbox-strategies.Strategy~handle}, but + * instead of just returning a `Promise` that resolves to a `Response` it + * it will return an tuple of `[response, done]` promises, where the former + * (`response`) is equivalent to what `handle()` returns, and the latter is a + * Promise that will resolve once any promises that were added to + * `event.waitUntil()` as part of performing the strategy have completed. + * + * You can await the `done` promise to ensure any extra work performed by + * the strategy (usually caching responses) completes successfully. + * + * @param {FetchEvent|Object} options A `FetchEvent` or an object with the + * properties listed below. + * @param {Request|string} options.request A request to run this strategy for. + * @param {ExtendableEvent} options.event The event associated with the + * request. + * @param {URL} [options.url] + * @param {*} [options.params] + * @return {Array} A tuple of [response, done] + * promises that can be used to determine when the response resolves as + * well as when the handler has completed all its work. + */ + handleAll(options) { + // Allow for flexible options to be passed. + if (options instanceof FetchEvent) { + options = { + event: options, + request: options.request + }; + } + const event = options.event; + const request = typeof options.request === 'string' ? new Request(options.request) : options.request; + const params = 'params' in options ? options.params : undefined; + const handler = new StrategyHandler(this, { + event, + request, + params + }); + const responseDone = this._getResponse(handler, request, event); + const handlerDone = this._awaitComplete(responseDone, handler, request, event); + // Return an array of promises, suitable for use with Promise.all(). + return [responseDone, handlerDone]; + } + async _getResponse(handler, request, event) { + await handler.runCallbacks('handlerWillStart', { + event, + request + }); + let response = undefined; + try { + response = await this._handle(request, handler); + // The "official" Strategy subclasses all throw this error automatically, + // but in case a third-party Strategy doesn't, ensure that we have a + // consistent failure when there's no response or an error response. + if (!response || response.type === 'error') { + throw new WorkboxError('no-response', { + url: request.url + }); + } + } catch (error) { + if (error instanceof Error) { + for (const callback of handler.iterateCallbacks('handlerDidError')) { + response = await callback({ + error, + event, + request + }); + if (response) { + break; + } + } + } + if (!response) { + throw error; + } else { + logger.log(`While responding to '${getFriendlyURL(request.url)}', ` + `an ${error instanceof Error ? error.toString() : ''} error occurred. Using a fallback response provided by ` + `a handlerDidError plugin.`); + } + } + for (const callback of handler.iterateCallbacks('handlerWillRespond')) { + response = await callback({ + event, + request, + response + }); + } + return response; + } + async _awaitComplete(responseDone, handler, request, event) { + let response; + let error; + try { + response = await responseDone; + } catch (error) { + // Ignore errors, as response errors should be caught via the `response` + // promise above. The `done` promise will only throw for errors in + // promises passed to `handler.waitUntil()`. + } + try { + await handler.runCallbacks('handlerDidRespond', { + event, + request, + response + }); + await handler.doneWaiting(); + } catch (waitUntilError) { + if (waitUntilError instanceof Error) { + error = waitUntilError; + } + } + await handler.runCallbacks('handlerDidComplete', { + event, + request, + response, + error: error + }); + handler.destroy(); + if (error) { + throw error; + } + } + } + /** + * Classes extending the `Strategy` based class should implement this method, + * and leverage the {@link workbox-strategies.StrategyHandler} + * arg to perform all fetching and cache logic, which will ensure all relevant + * cache, cache options, fetch options and plugins are used (per the current + * strategy instance). + * + * @name _handle + * @instance + * @abstract + * @function + * @param {Request} request + * @param {workbox-strategies.StrategyHandler} handler + * @return {Promise} + * + * @memberof workbox-strategies.Strategy + */ - } ) ) + /* + Copyright 2020 Google LLC - } ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * A {@link workbox-strategies.Strategy} implementation + * specifically designed to work with + * {@link workbox-precaching.PrecacheController} + * to both cache and fetch precached assets. + * + * Note: an instance of this class is created automatically when creating a + * `PrecacheController`; it's generally not necessary to create this yourself. + * + * @extends workbox-strategies.Strategy + * @memberof workbox-precaching + */ + class PrecacheStrategy extends Strategy { + /** + * + * @param {Object} [options] + * @param {string} [options.cacheName] Cache name to store and retrieve + * requests. Defaults to the cache names provided by + * {@link workbox-core.cacheNames}. + * @param {Array} [options.plugins] {@link https://developers.google.com/web/tools/workbox/guides/using-plugins|Plugins} + * to use in conjunction with this caching strategy. + * @param {Object} [options.fetchOptions] Values passed along to the + * {@link https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters|init} + * of all fetch() requests made by this strategy. + * @param {Object} [options.matchOptions] The + * {@link https://w3c.github.io/ServiceWorker/#dictdef-cachequeryoptions|CacheQueryOptions} + * for any `cache.match()` or `cache.put()` calls made by this strategy. + * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to + * get the response from the network if there's a precache miss. + */ + constructor(options = {}) { + options.cacheName = cacheNames.getPrecacheName(options.cacheName); + super(options); + this._fallbackToNetwork = options.fallbackToNetwork === false ? false : true; + // Redirected responses cannot be used to satisfy a navigation request, so + // any redirected response must be "copied" rather than cloned, so the new + // response doesn't contain the `redirected` flag. See: + // https://bugs.chromium.org/p/chromium/issues/detail?id=669363&desc=2#c1 + this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin); + } + /** + * @private + * @param {Request|string} request A request to run this strategy for. + * @param {workbox-strategies.StrategyHandler} handler The event that + * triggered the request. + * @return {Promise} + */ + async _handle(request, handler) { + const response = await handler.cacheMatch(request); + if (response) { + return response; + } + // If this is an `install` event for an entry that isn't already cached, + // then populate the cache. + if (handler.event && handler.event.type === 'install') { + return await this._handleInstall(request, handler); + } + // Getting here means something went wrong. An entry that should have been + // precached wasn't found in the cache. + return await this._handleFetch(request, handler); + } + async _handleFetch(request, handler) { + let response; + const params = handler.params || {}; + // Fall back to the network if we're configured to do so. + if (this._fallbackToNetwork) { + { + logger.warn(`The precached response for ` + `${getFriendlyURL(request.url)} in ${this.cacheName} was not ` + `found. Falling back to the network.`); + } + const integrityInManifest = params.integrity; + const integrityInRequest = request.integrity; + const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest; + // Do not add integrity if the original request is no-cors + // See https://github.com/GoogleChrome/workbox/issues/3096 + response = await handler.fetch(new Request(request, { + integrity: request.mode !== 'no-cors' ? integrityInRequest || integrityInManifest : undefined + })); + // It's only "safe" to repair the cache if we're using SRI to guarantee + // that the response matches the precache manifest's expectations, + // and there's either a) no integrity property in the incoming request + // or b) there is an integrity, and it matches the precache manifest. + // See https://github.com/GoogleChrome/workbox/issues/2858 + // Also if the original request users no-cors we don't use integrity. + // See https://github.com/GoogleChrome/workbox/issues/3096 + if (integrityInManifest && noIntegrityConflict && request.mode !== 'no-cors') { + this._useDefaultCacheabilityPluginIfNeeded(); + const wasCached = await handler.cachePut(request, response.clone()); + { + if (wasCached) { + logger.log(`A response for ${getFriendlyURL(request.url)} ` + `was used to "repair" the precache.`); + } + } + } + } else { + // This shouldn't normally happen, but there are edge cases: + // https://github.com/GoogleChrome/workbox/issues/1441 + throw new WorkboxError('missing-precache-entry', { + cacheName: this.cacheName, + url: request.url + }); + } + { + const cacheKey = params.cacheKey || (await handler.getCacheKey(request, 'read')); + // Workbox is going to handle the route. + // print the routing details to the console. + logger.groupCollapsed(`Precaching is responding to: ` + getFriendlyURL(request.url)); + logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`); + logger.groupCollapsed(`View request details here.`); + logger.log(request); + logger.groupEnd(); + logger.groupCollapsed(`View response details here.`); + logger.log(response); + logger.groupEnd(); + logger.groupEnd(); + } + return response; + } + async _handleInstall(request, handler) { + this._useDefaultCacheabilityPluginIfNeeded(); + const response = await handler.fetch(request); + // Make sure we defer cachePut() until after we know the response + // should be cached; see https://github.com/GoogleChrome/workbox/issues/2737 + const wasCached = await handler.cachePut(request, response.clone()); + if (!wasCached) { + // Throwing here will lead to the `install` handler failing, which + // we want to do if *any* of the responses aren't safe to cache. + throw new WorkboxError('bad-precaching-response', { + url: request.url, + status: response.status + }); + } + return response; + } + /** + * This method is complex, as there a number of things to account for: + * + * The `plugins` array can be set at construction, and/or it might be added to + * to at any time before the strategy is used. + * + * At the time the strategy is used (i.e. during an `install` event), there + * needs to be at least one plugin that implements `cacheWillUpdate` in the + * array, other than `copyRedirectedCacheableResponsesPlugin`. + * + * - If this method is called and there are no suitable `cacheWillUpdate` + * plugins, we need to add `defaultPrecacheCacheabilityPlugin`. + * + * - If this method is called and there is exactly one `cacheWillUpdate`, then + * we don't have to do anything (this might be a previously added + * `defaultPrecacheCacheabilityPlugin`, or it might be a custom plugin). + * + * - If this method is called and there is more than one `cacheWillUpdate`, + * then we need to check if one is `defaultPrecacheCacheabilityPlugin`. If so, + * we need to remove it. (This situation is unlikely, but it could happen if + * the strategy is used multiple times, the first without a `cacheWillUpdate`, + * and then later on after manually adding a custom `cacheWillUpdate`.) + * + * See https://github.com/GoogleChrome/workbox/issues/2737 for more context. + * + * @private + */ + _useDefaultCacheabilityPluginIfNeeded() { + let defaultPluginIndex = null; + let cacheWillUpdatePluginCount = 0; + for (const [index, plugin] of this.plugins.entries()) { + // Ignore the copy redirected plugin when determining what to do. + if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) { + continue; + } + // Save the default plugin's index, in case it needs to be removed. + if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) { + defaultPluginIndex = index; + } + if (plugin.cacheWillUpdate) { + cacheWillUpdatePluginCount++; + } + } + if (cacheWillUpdatePluginCount === 0) { + this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin); + } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) { + // Only remove the default plugin; multiple custom plugins are allowed. + this.plugins.splice(defaultPluginIndex, 1); + } + // Nothing needs to be done if cacheWillUpdatePluginCount is 1 + } + } + PrecacheStrategy.defaultPrecacheCacheabilityPlugin = { + async cacheWillUpdate({ + response + }) { + if (!response || response.status >= 400) { + return null; + } + return response; + } + }; + PrecacheStrategy.copyRedirectedCacheableResponsesPlugin = { + async cacheWillUpdate({ + response + }) { + return response.redirected ? await copyResponse(response) : response; + } + }; + + /* + Copyright 2019 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Performs efficient precaching of assets. + * + * @memberof workbox-precaching + */ + class PrecacheController { + /** + * Create a new PrecacheController. + * + * @param {Object} [options] + * @param {string} [options.cacheName] The cache to use for precaching. + * @param {string} [options.plugins] Plugins to use when precaching as well + * as responding to fetch events for precached assets. + * @param {boolean} [options.fallbackToNetwork=true] Whether to attempt to + * get the response from the network if there's a precache miss. + */ + constructor({ + cacheName, + plugins = [], + fallbackToNetwork = true + } = {}) { + this._urlsToCacheKeys = new Map(); + this._urlsToCacheModes = new Map(); + this._cacheKeysToIntegrities = new Map(); + this._strategy = new PrecacheStrategy({ + cacheName: cacheNames.getPrecacheName(cacheName), + plugins: [...plugins, new PrecacheCacheKeyPlugin({ + precacheController: this + })], + fallbackToNetwork + }); + // Bind the install and activate methods to the instance. + this.install = this.install.bind(this); + this.activate = this.activate.bind(this); + } + /** + * @type {workbox-precaching.PrecacheStrategy} The strategy created by this controller and + * used to cache assets and respond to fetch events. + */ + get strategy() { + return this._strategy; + } + /** + * Adds items to the precache list, removing any duplicates and + * stores the files in the + * {@link workbox-core.cacheNames|"precache cache"} when the service + * worker installs. + * + * This method can be called multiple times. + * + * @param {Array} [entries=[]] Array of entries to precache. + */ + precache(entries) { + this.addToCacheList(entries); + if (!this._installAndActiveListenersAdded) { + self.addEventListener('install', this.install); + self.addEventListener('activate', this.activate); + this._installAndActiveListenersAdded = true; + } + } + /** + * This method will add items to the precache list, removing duplicates + * and ensuring the information is valid. + * + * @param {Array} entries + * Array of entries to precache. + */ + addToCacheList(entries) { + { + finalAssertExports.isArray(entries, { + moduleName: 'workbox-precaching', + className: 'PrecacheController', + funcName: 'addToCacheList', + paramName: 'entries' + }); + } + const urlsToWarnAbout = []; + for (const entry of entries) { + // See https://github.com/GoogleChrome/workbox/issues/2259 + if (typeof entry === 'string') { + urlsToWarnAbout.push(entry); + } else if (entry && entry.revision === undefined) { + urlsToWarnAbout.push(entry.url); + } + const { + cacheKey, + url + } = createCacheKey(entry); + const cacheMode = typeof entry !== 'string' && entry.revision ? 'reload' : 'default'; + if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) { + throw new WorkboxError('add-to-cache-list-conflicting-entries', { + firstEntry: this._urlsToCacheKeys.get(url), + secondEntry: cacheKey + }); + } + if (typeof entry !== 'string' && entry.integrity) { + if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) { + throw new WorkboxError('add-to-cache-list-conflicting-integrities', { + url + }); + } + this._cacheKeysToIntegrities.set(cacheKey, entry.integrity); + } + this._urlsToCacheKeys.set(url, cacheKey); + this._urlsToCacheModes.set(url, cacheMode); + if (urlsToWarnAbout.length > 0) { + const warningMessage = `Workbox is precaching URLs without revision ` + `info: ${urlsToWarnAbout.join(', ')}\nThis is generally NOT safe. ` + `Learn more at https://bit.ly/wb-precache`; + { + logger.warn(warningMessage); + } + } + } + } + /** + * Precaches new and updated assets. Call this method from the service worker + * install event. + * + * Note: this method calls `event.waitUntil()` for you, so you do not need + * to call it yourself in your event handlers. + * + * @param {ExtendableEvent} event + * @return {Promise} + */ + install(event) { + // waitUntil returns Promise + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return waitUntil(event, async () => { + const installReportPlugin = new PrecacheInstallReportPlugin(); + this.strategy.plugins.push(installReportPlugin); + // Cache entries one at a time. + // See https://github.com/GoogleChrome/workbox/issues/2528 + for (const [url, cacheKey] of this._urlsToCacheKeys) { + const integrity = this._cacheKeysToIntegrities.get(cacheKey); + const cacheMode = this._urlsToCacheModes.get(url); + const request = new Request(url, { + integrity, + cache: cacheMode, + credentials: 'same-origin' + }); + await Promise.all(this.strategy.handleAll({ + params: { + cacheKey + }, + request, + event + })); + } + const { + updatedURLs, + notUpdatedURLs + } = installReportPlugin; + { + printInstallDetails(updatedURLs, notUpdatedURLs); + } + return { + updatedURLs, + notUpdatedURLs + }; + }); + } + /** + * Deletes assets that are no longer present in the current precache manifest. + * Call this method from the service worker activate event. + * + * Note: this method calls `event.waitUntil()` for you, so you do not need + * to call it yourself in your event handlers. + * + * @param {ExtendableEvent} event + * @return {Promise} + */ + activate(event) { + // waitUntil returns Promise + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return waitUntil(event, async () => { + const cache = await self.caches.open(this.strategy.cacheName); + const currentlyCachedRequests = await cache.keys(); + const expectedCacheKeys = new Set(this._urlsToCacheKeys.values()); + const deletedURLs = []; + for (const request of currentlyCachedRequests) { + if (!expectedCacheKeys.has(request.url)) { + await cache.delete(request); + deletedURLs.push(request.url); + } + } + { + printCleanupDetails(deletedURLs); + } + return { + deletedURLs + }; + }); + } + /** + * Returns a mapping of a precached URL to the corresponding cache key, taking + * into account the revision information for the URL. + * + * @return {Map} A URL to cache key mapping. + */ + getURLsToCacheKeys() { + return this._urlsToCacheKeys; + } + /** + * Returns a list of all the URLs that have been precached by the current + * service worker. + * + * @return {Array} The precached URLs. + */ + getCachedURLs() { + return [...this._urlsToCacheKeys.keys()]; + } + /** + * Returns the cache key used for storing a given URL. If that URL is + * unversioned, like `/index.html', then the cache key will be the original + * URL with a search parameter appended to it. + * + * @param {string} url A URL whose cache key you want to look up. + * @return {string} The versioned URL that corresponds to a cache key + * for the original URL, or undefined if that URL isn't precached. + */ + getCacheKeyForURL(url) { + const urlObject = new URL(url, location.href); + return this._urlsToCacheKeys.get(urlObject.href); + } + /** + * @param {string} url A cache key whose SRI you want to look up. + * @return {string} The subresource integrity associated with the cache key, + * or undefined if it's not set. + */ + getIntegrityForCacheKey(cacheKey) { + return this._cacheKeysToIntegrities.get(cacheKey); + } + /** + * This acts as a drop-in replacement for + * [`cache.match()`](https://developer.mozilla.org/en-US/docs/Web/API/Cache/match) + * with the following differences: + * + * - It knows what the name of the precache is, and only checks in that cache. + * - It allows you to pass in an "original" URL without versioning parameters, + * and it will automatically look up the correct cache key for the currently + * active revision of that URL. + * + * E.g., `matchPrecache('index.html')` will find the correct precached + * response for the currently active service worker, even if the actual cache + * key is `'/index.html?__WB_REVISION__=1234abcd'`. + * + * @param {string|Request} request The key (without revisioning parameters) + * to look up in the precache. + * @return {Promise} + */ + async matchPrecache(request) { + const url = request instanceof Request ? request.url : request; + const cacheKey = this.getCacheKeyForURL(url); + if (cacheKey) { + const cache = await self.caches.open(this.strategy.cacheName); + return cache.match(cacheKey); + } + return undefined; + } + /** + * Returns a function that looks up `url` in the precache (taking into + * account revision information), and returns the corresponding `Response`. + * + * @param {string} url The precached URL which will be used to lookup the + * `Response`. + * @return {workbox-routing~handlerCallback} + */ + createHandlerBoundToURL(url) { + const cacheKey = this.getCacheKeyForURL(url); + if (!cacheKey) { + throw new WorkboxError('non-precached-url', { + url + }); + } + return options => { + options.request = new Request(url); + options.params = Object.assign({ + cacheKey + }, options.params); + return this.strategy.handle(options); + }; + } + } + + /* + Copyright 2019 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + let precacheController; + /** + * @return {PrecacheController} + * @private + */ + const getOrCreatePrecacheController = () => { + if (!precacheController) { + precacheController = new PrecacheController(); + } + return precacheController; + }; + + /* Copyright 2018 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * NavigationRoute makes it easy to create a - * {@link workbox-routing.Route} that matches for browser - * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}. - * - * It will only match incoming Requests whose - * {@link https://fetch.spec.whatwg.org/#concept-request-mode|mode} - * is set to `navigate`. - * - * You can optionally only apply this route to a subset of navigation requests - * by using one or both of the `denylist` and `allowlist` parameters. - * @memberof workbox-routing - * @augments workbox-routing.Route - */ - class NavigationRoute extends Route { - - /** - * If both `denylist` and `allowlist` are provided, the `denylist` will - * take precedence and the request will not match this route. - * - * The regular expressions in `allowlist` and `denylist` - * are matched against the concatenated - * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname} - * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search} - * portions of the requested URL. - * - * Note*: These RegExps may be evaluated against every destination URL during - * a navigation. Avoid using - * [complex RegExps](https://github.com/GoogleChrome/workbox/issues/3077), - * or else your users may see delays when navigating your site. - * @param {workbox-routing~handlerCallback} handler A callback - * function that returns a Promise resulting in a Response. - * @param {object} options - * @param {Array} [options.denylist] If any of these patterns match, - * the route will not handle the request (even if a allowlist RegExp matches). - * @param {Array} [options.allowlist] If any of these patterns - * match the URL's pathname and search parameter, the route will handle the - * request (assuming the denylist doesn't match). - */ - constructor( handler, { - allowlist = [ /./ ], - denylist = [], - } = {} ) { - - { - - finalAssertExports.isArrayOfClass( allowlist, RegExp, { - moduleName : 'workbox-routing', - className : 'NavigationRoute', - funcName : 'constructor', - paramName : 'options.allowlist', - } ) - finalAssertExports.isArrayOfClass( denylist, RegExp, { - moduleName : 'workbox-routing', - className : 'NavigationRoute', - funcName : 'constructor', - paramName : 'options.denylist', - } ) - - } - super( options => this._match( options ), handler ) - this._allowlist = allowlist - this._denylist = denylist - - } - - /** - * Routes match handler. - * @param {object} options - * @param {URL} options.url - * @param {Request} options.request - * @returns {boolean} - * @private - */ - _match( { - url, - request, - } ) { - - if ( request && request.mode !== 'navigate' ) { - - return false - - } - const pathnameAndSearch = url.pathname + url.search - for ( const regExp of this._denylist ) { - - if ( regExp.test( pathnameAndSearch ) ) { - - { - - logger.log( `The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL matches this denylist pattern: ` + `${regExp.toString()}` ) - - } - return false - - } - - } - if ( this._allowlist.some( regExp => regExp.test( pathnameAndSearch ) ) ) { - - { + /** + * Removes any URL search parameters that should be ignored. + * + * @param {URL} urlObject The original URL. + * @param {Array} ignoreURLParametersMatching RegExps to test against + * each search parameter name. Matches mean that the search parameter should be + * ignored. + * @return {URL} The URL with any ignored search parameters removed. + * + * @private + * @memberof workbox-precaching + */ + function removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching = []) { + // Convert the iterable into an array at the start of the loop to make sure + // deletion doesn't mess up iteration. + for (const paramName of [...urlObject.searchParams.keys()]) { + if (ignoreURLParametersMatching.some(regExp => regExp.test(paramName))) { + urlObject.searchParams.delete(paramName); + } + } + return urlObject; + } + + /* + Copyright 2019 Google LLC - logger.debug( `The navigation route ${pathnameAndSearch} ` + `is being used.` ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Generator function that yields possible variations on the original URL to + * check, one at a time. + * + * @param {string} url + * @param {Object} options + * + * @private + * @memberof workbox-precaching + */ + function* generateURLVariations(url, { + ignoreURLParametersMatching = [/^utm_/, /^fbclid$/], + directoryIndex = 'index.html', + cleanURLs = true, + urlManipulation + } = {}) { + const urlObject = new URL(url, location.href); + urlObject.hash = ''; + yield urlObject.href; + const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching); + yield urlWithoutIgnoredParams.href; + if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith('/')) { + const directoryURL = new URL(urlWithoutIgnoredParams.href); + directoryURL.pathname += directoryIndex; + yield directoryURL.href; + } + if (cleanURLs) { + const cleanURL = new URL(urlWithoutIgnoredParams.href); + cleanURL.pathname += '.html'; + yield cleanURL.href; + } + if (urlManipulation) { + const additionalURLs = urlManipulation({ + url: urlObject + }); + for (const urlToAttempt of additionalURLs) { + yield urlToAttempt.href; + } + } + } + + /* + Copyright 2020 Google LLC - } - return true + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * A subclass of {@link workbox-routing.Route} that takes a + * {@link workbox-precaching.PrecacheController} + * instance and uses it to match incoming requests and handle fetching + * responses from the precache. + * + * @memberof workbox-precaching + * @extends workbox-routing.Route + */ + class PrecacheRoute extends Route { + /** + * @param {PrecacheController} precacheController A `PrecacheController` + * instance used to both match requests and respond to fetch events. + * @param {Object} [options] Options to control how requests are matched + * against the list of precached URLs. + * @param {string} [options.directoryIndex=index.html] The `directoryIndex` will + * check cache entries for a URLs ending with '/' to see if there is a hit when + * appending the `directoryIndex` value. + * @param {Array} [options.ignoreURLParametersMatching=[/^utm_/, /^fbclid$/]] An + * array of regex's to remove search params when looking for a cache match. + * @param {boolean} [options.cleanURLs=true] The `cleanURLs` option will + * check the cache for the URL with a `.html` added to the end of the end. + * @param {workbox-precaching~urlManipulation} [options.urlManipulation] + * This is a function that should take a URL and return an array of + * alternative URLs that should be checked for precache matches. + */ + constructor(precacheController, options) { + const match = ({ + request + }) => { + const urlsToCacheKeys = precacheController.getURLsToCacheKeys(); + for (const possibleURL of generateURLVariations(request.url, options)) { + const cacheKey = urlsToCacheKeys.get(possibleURL); + if (cacheKey) { + const integrity = precacheController.getIntegrityForCacheKey(cacheKey); + return { + cacheKey, + integrity + }; + } + } + { + logger.debug(`Precaching did not find a match for ` + getFriendlyURL(request.url)); + } + return; + }; + super(match, precacheController.strategy); + } + } + + /* + Copyright 2019 Google LLC + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Add a `fetch` listener to the service worker that will + * respond to + * [network requests]{@link https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers#Custom_responses_to_requests} + * with precached assets. + * + * Requests for assets that aren't precached, the `FetchEvent` will not be + * responded to, allowing the event to fall through to other `fetch` event + * listeners. + * + * @param {Object} [options] See the {@link workbox-precaching.PrecacheRoute} + * options. + * + * @memberof workbox-precaching + */ + function addRoute(options) { + const precacheController = getOrCreatePrecacheController(); + const precacheRoute = new PrecacheRoute(precacheController, options); + registerRoute(precacheRoute); + } - } - { + /* + Copyright 2019 Google LLC - logger.log( `The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL being navigated to doesn't ` + `match the allowlist.` ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Adds items to the precache list, removing any duplicates and + * stores the files in the + * {@link workbox-core.cacheNames|"precache cache"} when the service + * worker installs. + * + * This method can be called multiple times. + * + * Please note: This method **will not** serve any of the cached files for you. + * It only precaches files. To respond to a network request you call + * {@link workbox-precaching.addRoute}. + * + * If you have a single array of files to precache, you can just call + * {@link workbox-precaching.precacheAndRoute}. + * + * @param {Array} [entries=[]] Array of entries to precache. + * + * @memberof workbox-precaching + */ + function precache(entries) { + const precacheController = getOrCreatePrecacheController(); + precacheController.precache(entries); + } - } - return false + /* + Copyright 2019 Google LLC - } + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * This method will add entries to the precache list and add a route to + * respond to fetch events. + * + * This is a convenience method that will call + * {@link workbox-precaching.precache} and + * {@link workbox-precaching.addRoute} in a single call. + * + * @param {Array} entries Array of entries to precache. + * @param {Object} [options] See the + * {@link workbox-precaching.PrecacheRoute} options. + * + * @memberof workbox-precaching + */ + function precacheAndRoute(entries, options) { + precache(entries); + addRoute(options); + } - } + /* + Copyright 2018 Google LLC - /* + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + const SUBSTRING_TO_FIND = '-precache-'; + /** + * Cleans up incompatible precaches that were created by older versions of + * Workbox, by a service worker registered under the current scope. + * + * This is meant to be called as part of the `activate` event. + * + * This should be safe to use as long as you don't include `substringToFind` + * (defaulting to `-precache-`) in your non-precache cache names. + * + * @param {string} currentPrecacheName The cache name currently in use for + * precaching. This cache won't be deleted. + * @param {string} [substringToFind='-precache-'] Cache names which include this + * substring will be deleted (excluding `currentPrecacheName`). + * @return {Array} A list of all the cache names that were deleted. + * + * @private + * @memberof workbox-precaching + */ + const deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND) => { + const cacheNames = await self.caches.keys(); + const cacheNamesToDelete = cacheNames.filter(cacheName => { + return cacheName.includes(substringToFind) && cacheName.includes(self.registration.scope) && cacheName !== currentPrecacheName; + }); + await Promise.all(cacheNamesToDelete.map(cacheName => self.caches.delete(cacheName))); + return cacheNamesToDelete; + }; + + /* Copyright 2019 Google LLC Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. */ - /** - * Helper function that calls - * {@link PrecacheController#createHandlerBoundToURL} on the default - * {@link PrecacheController} instance. - * - * If you are creating your own {@link PrecacheController}, then call the - * {@link PrecacheController#createHandlerBoundToURL} on that instance, - * instead of using this function. - * @param {string} url The precached URL which will be used to lookup the - * `Response`. - * @param {boolean} [fallbackToNetwork] Whether to attempt to get the - * response from the network if there's a precache miss. - * @returns {workbox-routing~handlerCallback} - * @memberof workbox-precaching - */ - function createHandlerBoundToURL( url ) { - - const precacheController = getOrCreatePrecacheController() - return precacheController.createHandlerBoundToURL( url ) - - } + /** + * Adds an `activate` event listener which will clean up incompatible + * precaches that were created by older versions of Workbox. + * + * @memberof workbox-precaching + */ + function cleanupOutdatedCaches() { + // See https://github.com/Microsoft/TypeScript/issues/28357#issuecomment-436484705 + self.addEventListener('activate', event => { + const cacheName = cacheNames.getPrecacheName(); + event.waitUntil(deleteOutdatedCaches(cacheName).then(cachesDeleted => { + { + if (cachesDeleted.length > 0) { + logger.log(`The following out-of-date precaches were cleaned up ` + `automatically:`, cachesDeleted); + } + } + })); + }); + } + + /* + Copyright 2018 Google LLC - exports.NavigationRoute = NavigationRoute - exports.cleanupOutdatedCaches = cleanupOutdatedCaches - exports.clientsClaim = clientsClaim - exports.createHandlerBoundToURL = createHandlerBoundToURL - exports.precacheAndRoute = precacheAndRoute - exports.registerRoute = registerRoute + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * NavigationRoute makes it easy to create a + * {@link workbox-routing.Route} that matches for browser + * [navigation requests]{@link https://developers.google.com/web/fundamentals/primers/service-workers/high-performance-loading#first_what_are_navigation_requests}. + * + * It will only match incoming Requests whose + * {@link https://fetch.spec.whatwg.org/#concept-request-mode|mode} + * is set to `navigate`. + * + * You can optionally only apply this route to a subset of navigation requests + * by using one or both of the `denylist` and `allowlist` parameters. + * + * @memberof workbox-routing + * @extends workbox-routing.Route + */ + class NavigationRoute extends Route { + /** + * If both `denylist` and `allowlist` are provided, the `denylist` will + * take precedence and the request will not match this route. + * + * The regular expressions in `allowlist` and `denylist` + * are matched against the concatenated + * [`pathname`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/pathname} + * and [`search`]{@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search} + * portions of the requested URL. + * + * *Note*: These RegExps may be evaluated against every destination URL during + * a navigation. Avoid using + * [complex RegExps](https://github.com/GoogleChrome/workbox/issues/3077), + * or else your users may see delays when navigating your site. + * + * @param {workbox-routing~handlerCallback} handler A callback + * function that returns a Promise resulting in a Response. + * @param {Object} options + * @param {Array} [options.denylist] If any of these patterns match, + * the route will not handle the request (even if a allowlist RegExp matches). + * @param {Array} [options.allowlist=[/./]] If any of these patterns + * match the URL's pathname and search parameter, the route will handle the + * request (assuming the denylist doesn't match). + */ + constructor(handler, { + allowlist = [/./], + denylist = [] + } = {}) { + { + finalAssertExports.isArrayOfClass(allowlist, RegExp, { + moduleName: 'workbox-routing', + className: 'NavigationRoute', + funcName: 'constructor', + paramName: 'options.allowlist' + }); + finalAssertExports.isArrayOfClass(denylist, RegExp, { + moduleName: 'workbox-routing', + className: 'NavigationRoute', + funcName: 'constructor', + paramName: 'options.denylist' + }); + } + super(options => this._match(options), handler); + this._allowlist = allowlist; + this._denylist = denylist; + } + /** + * Routes match handler. + * + * @param {Object} options + * @param {URL} options.url + * @param {Request} options.request + * @return {boolean} + * + * @private + */ + _match({ + url, + request + }) { + if (request && request.mode !== 'navigate') { + return false; + } + const pathnameAndSearch = url.pathname + url.search; + for (const regExp of this._denylist) { + if (regExp.test(pathnameAndSearch)) { + { + logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL matches this denylist pattern: ` + `${regExp.toString()}`); + } + return false; + } + } + if (this._allowlist.some(regExp => regExp.test(pathnameAndSearch))) { + { + logger.debug(`The navigation route ${pathnameAndSearch} ` + `is being used.`); + } + return true; + } + { + logger.log(`The navigation route ${pathnameAndSearch} is not ` + `being used, since the URL being navigated to doesn't ` + `match the allowlist.`); + } + return false; + } + } + + /* + Copyright 2019 Google LLC -} ) + Use of this source code is governed by an MIT-style + license that can be found in the LICENSE file or at + https://opensource.org/licenses/MIT. + */ + /** + * Helper function that calls + * {@link PrecacheController#createHandlerBoundToURL} on the default + * {@link PrecacheController} instance. + * + * If you are creating your own {@link PrecacheController}, then call the + * {@link PrecacheController#createHandlerBoundToURL} on that instance, + * instead of using this function. + * + * @param {string} url The precached URL which will be used to lookup the + * `Response`. + * @param {boolean} [fallbackToNetwork=true] Whether to attempt to get the + * response from the network if there's a precache miss. + * @return {workbox-routing~handlerCallback} + * + * @memberof workbox-precaching + */ + function createHandlerBoundToURL(url) { + const precacheController = getOrCreatePrecacheController(); + return precacheController.createHandlerBoundToURL(url); + } + + exports.NavigationRoute = NavigationRoute; + exports.cleanupOutdatedCaches = cleanupOutdatedCaches; + exports.clientsClaim = clientsClaim; + exports.createHandlerBoundToURL = createHandlerBoundToURL; + exports.precacheAndRoute = precacheAndRoute; + exports.registerRoute = registerRoute; + +})); diff --git a/docs/guide/action/index.md b/docs/guide/action/index.md new file mode 100644 index 0000000..01c9e96 --- /dev/null +++ b/docs/guide/action/index.md @@ -0,0 +1,90 @@ +# Github Action 🤖 + +## Inputs + +The action accepts the following inputs: + +- **build** (optional): Specifies the execution environment. Acceptable values are: `node`, `deno`, `bun`. The default is `node`. + +- **config** (optional): Path to the configuration file. The default is `./binarium.config.json`. +Make sure that the specified configuration file exists and is correctly configured. + +## Examples + +Here is an example of how to set it up: + +### Build only linux executables + +```yaml +name: Build Executable for linux + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 20 + - name: Run BINARIUM Action + uses: pigeonposse/binarium@v1 + with: + build: 'node' + config: '.dev/binarium.config.yml' +``` + +```yaml +# .dev/binarium.config.yml +name: my-app +onlyOs: true +input: src/app.ts +assets: + - from: src/assets/** + to: public + +``` + +### Build for all platforms and archs and upload to releases + +```yaml +name: Build Executables and upload + +on: + workflow_dispatch: +jobs: + build: + runs-on: macos-14 # Because it's an arm64. SEE: https://github.com/actions/runner-images?tab=readme-ov-file#available-images + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 20 + - name: Run BINARIUM Action + uses: pigeonposse/binarium@v1 + with: + build: 'node' + config: './binarium.config.yml' # Where is our config file + - name: Release binaries + uses: ncipollo/release-action@v1 + with: + tag: "Releases" + draft: false + prerelease: false + allowUpdates: true + artifacts: "build/compress/*" # Default build folder + omitBodyDuringUpdate: true +``` + +```yaml +# ./binarium.config.yml +name: my-app +input: src/app.ts + +``` diff --git a/docs/guide/api.md b/docs/guide/api.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/guide/core/api.md b/docs/guide/core/api.md new file mode 100644 index 0000000..8ae245c --- /dev/null +++ b/docs/guide/core/api.md @@ -0,0 +1,524 @@ +# `undefined` - API documentation + +## Functions + +### build() + +```ts +function build(params: BuilderParams): Promise +``` + +Package your cli application for different platforms and architectures. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `params` | [`BuilderParams`](#builderparams) | The parameters for creating the binaries. | + +#### Returns + +`Promise`\<`undefined`\> + +- A promise that resolves when the binary creation process is complete. + +#### Example + +```ts +import { build } from 'binarium' + +build({ + input: 'examples/app', + // name: 'my-app-name', + // output: resolve('build'), + // type: 'all', +}) +``` + +*** + +### buildAuto() + +```ts +function buildAuto(params: BuilderParams): Promise +``` + +Package your cli application for different platforms and architectures. +Autodectect runtime (node, deno, bun). + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `params` | [`BuilderParams`](#builderparams) | The parameters for creating the binaries. | + +#### Returns + +`Promise`\<`undefined`\> + +- A promise that resolves when the binary creation process is complete. + +#### Example + +```ts +import { buildAuto } from 'binarium' + +buildAuto({ + input: 'examples/app', + // name: 'my-app-name', + // output: resolve('build'), + // type: 'all', +}) +``` + +*** + +### buildBun() + +```ts +function buildBun(params: BuilderParams): Promise +``` + +Package your Bun cli application for different platforms and architectures. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `params` | [`BuilderParams`](#builderparams) | The parameters for creating the binaries. | + +#### Returns + +`Promise`\<`undefined`\> + +- A promise that resolves when the binary creation process is complete. + +#### Example + +```ts +import { buildBun } from 'binarium' + +buildBun({ + input: 'examples/app', + // name: 'my-app-name', + // output: resolve('build'), + // type: 'all', +}) +``` + +*** + +### buildDeno() + +```ts +function buildDeno(params: BuilderParams): Promise +``` + +Package your Deno cli application for different platforms and architectures. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `params` | [`BuilderParams`](#builderparams) | The parameters for creating the binaries. | + +#### Returns + +`Promise`\<`undefined`\> + +- A promise that resolves when the binary creation process is complete. + +#### Example + +```ts +import { buildDeno } from 'binarium' + +buildDeno({ + input: 'examples/app', + // name: 'my-app-name', + // output: resolve('build'), + // type: 'all', +}) +``` + +*** + +### buildNode() + +```ts +function buildNode(params: BuilderParams): Promise +``` + +Package your Node.js cli application for different platforms and architectures. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `params` | [`BuilderParams`](#builderparams) | The parameters for creating the binaries. | + +#### Returns + +`Promise`\<`undefined`\> + +- A promise that resolves when the binary creation process is complete. + +#### Example + +```ts +import { buildNode } from 'binarium' + +buildNode({ + input: 'examples/app', + // name: 'my-app-name', + // output: resolve('build'), + // type: 'all', +}) +``` + +*** + +### defineConfig() + +```ts +function defineConfig(config: { + assets: { + from: string; + to: string; + }[]; + bunOptions: { + flags: string[]; + }; + config: string; + denoOptions: { + flags: string[]; + }; + input: string; + name: string; + nodeOptions: { + esbuild: false | {}; + ncc: false | { + assetBuilds: boolean; + cache: string | false; + externals: string[]; + filterAssetBase: string; + license: string; + minify: boolean; + sourceMap: boolean; + sourceMapBasePrefix: string; + sourceMapRegister: boolean; + target: string; + v8cache: boolean; + watch: boolean; + }; + pkg: { + assets: string | string[]; + compress: "Gzip" | "Brotli"; + flags: string[]; + ignore: string[]; + input: string; + name: string; + output: string; + scripts: string | string[]; + targets: string[]; + }; + }; + onlyOs: boolean; + output: string; + type: "bin" | "all" | "bundle" | "compress"; + }): { + assets: { + from: string; + to: string; + }[]; + bunOptions: { + flags: string[]; + }; + config: string; + denoOptions: { + flags: string[]; + }; + input: string; + name: string; + nodeOptions: { + esbuild: false | {}; + ncc: false | { + assetBuilds: boolean; + cache: string | false; + externals: string[]; + filterAssetBase: string; + license: string; + minify: boolean; + sourceMap: boolean; + sourceMapBasePrefix: string; + sourceMapRegister: boolean; + target: string; + v8cache: boolean; + watch: boolean; + }; + pkg: { + assets: string | string[]; + compress: "Gzip" | "Brotli"; + flags: string[]; + ignore: string[]; + input: string; + name: string; + output: string; + scripts: string | string[]; + targets: string[]; + }; + }; + onlyOs: boolean; + output: string; + type: "bin" | "all" | "bundle" | "compress"; +} +``` + +Define the configuration for the binary builder. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `config` | `object` | The configuration object. | +| `config.assets`? | \{ `from`: `string`; `to`: `string`; \}[] | **`Experimental`** Assets for you app. **Example** `{ * from: 'src/assets', * to: 'assets' * }` | +| `config.bunOptions`? | `object` | Custom `bun` build configuration. Override options for Bun executable build. | +| `config.bunOptions.flags` | `string`[] | Custom flags for `bun build --compile` cmd. For help, run: `bun build --help`. **See** https://bun.sh/docs/bundler **Example** `[ '--minify' ]` | +| `config.config`? | `string` | Config file path. Files supported: .mjs, .js, .json, .yml, .yaml, .toml, .tml. **Default** `undefined` | +| `config.denoOptions`? | `object` | Custom `deno` build configuration. Override options for deno executable build. | +| `config.denoOptions.flags` | `string`[] | Custom flags for `deno compile` cmd. For help, run: `deno compile --help`. **See** https://docs.deno.com/go/compile **Example** `[ '--allow-all', '--no-prompt' ]` | +| `config.input`? | `string` | The app input file. The input can be provided without an extension. If the extension is omitted, the system will automatically look for the following extensions: `.ts`, `.js`, `.mjs`, `.mts`. | +| `config.name`? | `string` | Binary name. | +| `config.nodeOptions`? | `object` | **`Experimental`** Custom `node` build configuration. Override build options for different build steps. Use this for advanced use cases. | +| `config.nodeOptions.esbuild`? | `false` \| \{\} | **`Experimental`** ESBUILD configuration. **See** https://esbuild.github.io/api/#build | +| `config.nodeOptions.ncc`? | `false` \| \{ `assetBuilds`: `boolean`; `cache`: `string` \| `false`; `externals`: `string`[]; `filterAssetBase`: `string`; `license`: `string`; `minify`: `boolean`; `sourceMap`: `boolean`; `sourceMapBasePrefix`: `string`; `sourceMapRegister`: `boolean`; `target`: `string`; `v8cache`: `boolean`; `watch`: `boolean`; \} | **`Experimental`** NCC configuration. **See** https://github.com/vercel/ncc?tab=readme-ov-file#programmatically-from-nodejs | +| `config.nodeOptions.pkg`? | `object` | **`Experimental`** PKG configuration. **See** https://www.npmjs.com/package/@yao-pkg/pkg | +| `config.nodeOptions.pkg.assets`? | `string` \| `string`[] | Assets is a glob or list of globs. Files specified as assets will be packaged into executable as raw content without modifications. Javascript files may also be specified as assets. Their sources will not be stripped as it improves execution performance of the files and simplifies debugging. Relative to input. Default input: build/cjs. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#assets | +| `config.nodeOptions.pkg.compress`? | `"Gzip"` \| `"Brotli"` | Pass --compress Brotli or --compress GZip to pkg to compress further the content of the files store in the exectable. This option can reduce the size of the embedded file system by up to 60%. The startup time of the application might be reduced slightly. | +| `config.nodeOptions.pkg.flags`? | `string`[] | Custom flags for the pkg command. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#usage | +| `config.nodeOptions.pkg.ignore`? | `string`[] | Ignore is a list of globs. Files matching the paths specified as ignore will be excluded from the final executable. This is useful when you want to exclude some files from the final executable, like tests, documentation or build files that could have been included by a dependency. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#ignore-files | +| `config.nodeOptions.pkg.input`? | `string` | Input of the js code. | +| `config.nodeOptions.pkg.name`? | `string` | Binary name. This overrirides the default name. | +| `config.nodeOptions.pkg.output`? | `string` | Output for the binaries. This overrirides the default output path. | +| `config.nodeOptions.pkg.scripts`? | `string` \| `string`[] | Scripts is a glob or list of globs. Files specified as scripts will be compiled using v8::ScriptCompiler and placed into executable without sources. They must conform to the JS standards of those Node.js versions you target. Relative to input. Default input: build/cjs. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#scripts | +| `config.nodeOptions.pkg.targets`? | `string`[] | Targets of your binary. Must be a list of strings in the following format: \{nodeRange\}-\{platform\}-[arch]. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#targets **Example** `[ 'node18-macos-x64', 'node14-linux-arm64']` | +| `config.onlyOs`? | `boolean` | Build only binary for your current OS. **Default** `false` | +| `config.output`? | `string` | Directory for the output build. **Default** `'./build'` | +| `config.type`? | `"bin"` \| `"all"` \| `"bundle"` \| `"compress"` | The build type Result [all|bundle|bin|compress]. **Default** `'all'` | + +#### Returns + +```ts +{ + assets: { + from: string; + to: string; + }[]; + bunOptions: { + flags: string[]; + }; + config: string; + denoOptions: { + flags: string[]; + }; + input: string; + name: string; + nodeOptions: { + esbuild: false | {}; + ncc: false | { + assetBuilds: boolean; + cache: string | false; + externals: string[]; + filterAssetBase: string; + license: string; + minify: boolean; + sourceMap: boolean; + sourceMapBasePrefix: string; + sourceMapRegister: boolean; + target: string; + v8cache: boolean; + watch: boolean; + }; + pkg: { + assets: string | string[]; + compress: "Gzip" | "Brotli"; + flags: string[]; + ignore: string[]; + input: string; + name: string; + output: string; + scripts: string | string[]; + targets: string[]; + }; + }; + onlyOs: boolean; + output: string; + type: "bin" | "all" | "bundle" | "compress"; +} +``` + +- The configuration object. + +| Name | Type | Description | +| ------ | ------ | ------ | +| `assets`? | \{ `from`: `string`; `to`: `string`; \}[] | **`Experimental`** Assets for you app. **Example** `{ * from: 'src/assets', * to: 'assets' * }` | +| `bunOptions`? | \{ `flags`: `string`[]; \} | Custom `bun` build configuration. Override options for Bun executable build. | +| `bunOptions.flags` | `string`[] | Custom flags for `bun build --compile` cmd. For help, run: `bun build --help`. **See** https://bun.sh/docs/bundler **Example** `[ '--minify' ]` | +| `config`? | `string` | Config file path. Files supported: .mjs, .js, .json, .yml, .yaml, .toml, .tml. **Default** `undefined` | +| `denoOptions`? | \{ `flags`: `string`[]; \} | Custom `deno` build configuration. Override options for deno executable build. | +| `denoOptions.flags` | `string`[] | Custom flags for `deno compile` cmd. For help, run: `deno compile --help`. **See** https://docs.deno.com/go/compile **Example** `[ '--allow-all', '--no-prompt' ]` | +| `input`? | `string` | The app input file. The input can be provided without an extension. If the extension is omitted, the system will automatically look for the following extensions: `.ts`, `.js`, `.mjs`, `.mts`. | +| `name`? | `string` | Binary name. | +| `nodeOptions`? | \{ `esbuild`: `false` \| \{\}; `ncc`: `false` \| \{ `assetBuilds`: `boolean`; `cache`: `string` \| `false`; `externals`: `string`[]; `filterAssetBase`: `string`; `license`: `string`; `minify`: `boolean`; `sourceMap`: `boolean`; `sourceMapBasePrefix`: `string`; `sourceMapRegister`: `boolean`; `target`: `string`; `v8cache`: `boolean`; `watch`: `boolean`; \}; `pkg`: \{ `assets`: `string` \| `string`[]; `compress`: `"Gzip"` \| `"Brotli"`; `flags`: `string`[]; `ignore`: `string`[]; `input`: `string`; `name`: `string`; `output`: `string`; `scripts`: `string` \| `string`[]; `targets`: `string`[]; \}; \} | **`Experimental`** Custom `node` build configuration. Override build options for different build steps. Use this for advanced use cases. | +| `nodeOptions.esbuild`? | `false` \| \{\} | **`Experimental`** ESBUILD configuration. **See** https://esbuild.github.io/api/#build | +| `nodeOptions.ncc`? | `false` \| \{ `assetBuilds`: `boolean`; `cache`: `string` \| `false`; `externals`: `string`[]; `filterAssetBase`: `string`; `license`: `string`; `minify`: `boolean`; `sourceMap`: `boolean`; `sourceMapBasePrefix`: `string`; `sourceMapRegister`: `boolean`; `target`: `string`; `v8cache`: `boolean`; `watch`: `boolean`; \} | **`Experimental`** NCC configuration. **See** https://github.com/vercel/ncc?tab=readme-ov-file#programmatically-from-nodejs | +| `nodeOptions.pkg`? | \{ `assets`: `string` \| `string`[]; `compress`: `"Gzip"` \| `"Brotli"`; `flags`: `string`[]; `ignore`: `string`[]; `input`: `string`; `name`: `string`; `output`: `string`; `scripts`: `string` \| `string`[]; `targets`: `string`[]; \} | **`Experimental`** PKG configuration. **See** https://www.npmjs.com/package/@yao-pkg/pkg | +| `nodeOptions.pkg.assets`? | `string` \| `string`[] | Assets is a glob or list of globs. Files specified as assets will be packaged into executable as raw content without modifications. Javascript files may also be specified as assets. Their sources will not be stripped as it improves execution performance of the files and simplifies debugging. Relative to input. Default input: build/cjs. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#assets | +| `nodeOptions.pkg.compress`? | `"Gzip"` \| `"Brotli"` | Pass --compress Brotli or --compress GZip to pkg to compress further the content of the files store in the exectable. This option can reduce the size of the embedded file system by up to 60%. The startup time of the application might be reduced slightly. | +| `nodeOptions.pkg.flags`? | `string`[] | Custom flags for the pkg command. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#usage | +| `nodeOptions.pkg.ignore`? | `string`[] | Ignore is a list of globs. Files matching the paths specified as ignore will be excluded from the final executable. This is useful when you want to exclude some files from the final executable, like tests, documentation or build files that could have been included by a dependency. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#ignore-files | +| `nodeOptions.pkg.input`? | `string` | Input of the js code. | +| `nodeOptions.pkg.name`? | `string` | Binary name. This overrirides the default name. | +| `nodeOptions.pkg.output`? | `string` | Output for the binaries. This overrirides the default output path. | +| `nodeOptions.pkg.scripts`? | `string` \| `string`[] | Scripts is a glob or list of globs. Files specified as scripts will be compiled using v8::ScriptCompiler and placed into executable without sources. They must conform to the JS standards of those Node.js versions you target. Relative to input. Default input: build/cjs. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#scripts | +| `nodeOptions.pkg.targets`? | `string`[] | Targets of your binary. Must be a list of strings in the following format: \{nodeRange\}-\{platform\}-[arch]. **See** https://github.com/yao-pkg/pkg?tab=readme-ov-file#targets **Example** `[ 'node18-macos-x64', 'node14-linux-arm64']` | +| `onlyOs`? | `boolean` | Build only binary for your current OS. **Default** `false` | +| `output`? | `string` | Directory for the output build. **Default** `'./build'` | +| `type`? | `"bin"` \| `"all"` \| `"bundle"` \| `"compress"` | The build type Result [all|bundle|bin|compress]. **Default** `'all'` | + +#### Example + +```ts +import { defineConfig } from 'binarium' + +export default defineConfig({ + name: 'my-app-name', + onlyOs: true, + nodeOptions: { + esbuild: { + tsconfig: './tsconfig.custom.json' + } + } +}) +``` + +## Type Aliases + +### BuilderContructorParams + +```ts +type BuilderContructorParams: GetDataParams & { + data: Awaited>; +}; +``` + +#### Type declaration + +| Name | Type | +| ------ | ------ | +| `data` | `Awaited`\<`ReturnType`\<*typeof* `getData`\>\> | + +*** + +### BuilderErrors + +```ts +type BuilderErrors: typeof CONSTS.ERROR_ID[keyof typeof CONSTS.ERROR_ID]; +``` + +*** + +### BuilderParams + +```ts +type BuilderParams: { + config: string; + input: string; + name: string; + onlyOs: boolean; + output: string; + type: typeof CONSTS.BUILDER_TYPE[keyof typeof CONSTS.BUILDER_TYPE]; +}; +``` + +#### Type declaration + +| Name | Type | Description | +| ------ | ------ | ------ | +| `config`? | `string` | Config file path. Files supported: .mjs, .js, .json, .yml, .yaml, .toml, .tml. **Default** `undefined` | +| `input` | `string` | The app input file. The input can be provided without an extension. If the extension is omitted, the system will automatically look for the following extensions: `.ts`, `.js`, `.mjs`, `.mts`. | +| `name`? | `string` | Binary name. | +| `onlyOs`? | `boolean` | Build only binary for your current OS. **Default** `false` | +| `output`? | `string` | Directory for the output build. **Default** `'./build'` | +| `type`? | *typeof* `CONSTS.BUILDER_TYPE`\[keyof *typeof* `CONSTS.BUILDER_TYPE`\] | The build type Result [all|bundle|bin|compress]. **Default** `'all'` | + +*** + +### Cmd + +```ts +type Cmd: typeof CONSTS.CMD[keyof typeof CONSTS.CMD]; +``` + +*** + +### ConfigParams + +```ts +type ConfigParams: Prettify & Config & { + assets: { + from: string; + to: string; + }[]; +}>; +``` + +*** + +### GetDataParams + +```ts +type GetDataParams: BuilderParams & { + catchError: typeof catchError; + consts: typeof CONSTS; + Error: typeof BuildError; + log: ReturnType; +}; +``` + +#### Type declaration + +| Name | Type | +| ------ | ------ | +| `catchError` | *typeof* `catchError` | +| `consts` | *typeof* `CONSTS` | +| `Error` | *typeof* `BuildError` | +| `log` | `ReturnType`\<*typeof* `getLog`\> | + +## Variables + +### BINARIUM\_CONSTS + +```ts +const BINARIUM_CONSTS: { + debug: boolean; + desc: string; + docsURL: string; + icon: string; + name: string; + onHelp: () => void; + onVersion: () => void; +}; +``` + +#### Type declaration + +| Name | Type | +| ------ | ------ | +| `debug`? | `boolean` | +| `desc`? | `string` | +| `docsURL`? | `string` | +| `icon`? | `string` | +| `name`? | `string` | +| `onHelp`? | () => `void` | +| `onVersion`? | () => `void` | diff --git a/docs/guide/core/index.md b/docs/guide/core/index.md new file mode 100644 index 0000000..50ac6f6 --- /dev/null +++ b/docs/guide/core/index.md @@ -0,0 +1,38 @@ +# Binarium + +Easy-to-use, zero-configuration tool to create executables of your `Node`, `Deno` or `Bun` projects for all platforms and architectures. + +The construction of the binary allows compilation on `arm64` and `x64` architecture. + +> If you compile on an `x64` system it will not create the binaries for `arm`, but if you compile on `arm` it will create the binaries for both architectures. + +## 🔑 Installation + +::: code-group + +```bash [npm] +npm install binarium +``` + +```bash [pnpm] +pnpm install binarium +``` + +```bash [yarn] +yarn add binarium +``` + +```bash [bun] +bun add binarium +``` + +```bash [deno] +deno add binarium +``` + +::: + +## More + +- [Usage](./usage) +- [API Documentation](./api) diff --git a/docs/guide/options.md b/docs/guide/core/options.md similarity index 94% rename from docs/guide/options.md rename to docs/guide/core/options.md index 2e25577..dc166b8 100644 --- a/docs/guide/options.md +++ b/docs/guide/core/options.md @@ -47,3 +47,5 @@ type BuilderParams = { config?: string } ``` + +- [More details](/guide/core/api#builderparams) diff --git a/docs/guide/usage.md b/docs/guide/core/usage.md similarity index 60% rename from docs/guide/usage.md rename to docs/guide/core/usage.md index bb0fa69..ae3af5d 100644 --- a/docs/guide/usage.md +++ b/docs/guide/core/usage.md @@ -96,7 +96,7 @@ Supported formats are: `.mjs, .js, .json, .yml, .yaml, .toml, .tml`. In the configuration file you can define your build options and configure advanced options of the build itself using the `nodeOptions`|`denoOptions`|`bunOptions` key. -## Node Example +### Node Example ```bash binarium node --config binarium.config.js @@ -114,7 +114,7 @@ export default defineConfig( { ``` -## Deno Example +### Deno Example ```bash binarium deno -c binarium.config.js @@ -132,7 +132,7 @@ export default defineConfig( { ``` -## Bun Example +### Bun Example ```bash binarium bun -c binarium.config.js @@ -149,94 +149,3 @@ export default defineConfig( { } ) ``` - -## 🤖 Github Action - -## Inputs - -The action accepts the following inputs: - -- **build** (optional): Specifies the execution environment. Acceptable values are: `node`, `deno`, `bun`. The default is `node`. - -- **config** (optional): Path to the configuration file. The default is `./binarium.config.json`. -Make sure that the specified configuration file exists and is correctly configured. - -## Examples - -Here is an example of how to set it up: - -### Build only linux executables - -```yaml -name: Build Executable for linux - -on: - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Run BINARIUM Action - uses: pigeonposse/binarium@v1 - with: - build: 'node' - config: '.dev/binarium.config.yml' -``` - -```yaml -# .dev/binarium.config.yml -name: my-app -onlyOs: true -input: src/app.ts -assets: - - from: src/assets/** - to: public - -``` - -### Build for all platforms and archs and upload to releases - -```yaml -name: Build Executables and upload - -on: - workflow_dispatch: -jobs: - build: - runs-on: macos-14 # Because it's an arm64. SEE: https://github.com/actions/runner-images?tab=readme-ov-file#available-images - steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Run BINARIUM Action - uses: pigeonposse/binarium@v1 - with: - build: 'node' - config: './binarium.config.yml' # Where is our config file - - name: Release binaries - uses: ncipollo/release-action@v1 - with: - tag: "Releases" - draft: false - prerelease: false - allowUpdates: true - artifacts: "build/compress/*" # Default build folder - omitBodyDuringUpdate: true -``` - -```yaml -# ./binarium.config.yml -name: my-app -input: src/app.ts - -``` diff --git a/docs/guide/index.md b/docs/guide/index.md index e69de29..cf1b2c7 100644 --- a/docs/guide/index.md +++ b/docs/guide/index.md @@ -0,0 +1,55 @@ +# What is `binarium`? + +![banner](/banner.png) + +Easy-to-use, zero-configuration tool to create executables of your `Node`, `Deno` or `Bun` projects for all platforms and architectures. + +## 🔑 Installation + +::: code-group + +```bash [npm] +npm install binarium +``` + +```bash [pnpm] +pnpm install binarium +``` + +```bash [yarn] +yarn add binarium +``` + +```bash [bun] +bun add binarium +``` + +```bash [deno] +deno add binarium +``` + +::: + +## 🌟 Features + +- ⚡ **Fast**: Optimized for quick execution and minimal overhead. +- 🚀 **Easy to Use**: Simple setup with minimal configuration required. +- 🛠️ **Advanced Configuration**: Customize to fit your project's exact needs. +- 🌍 **Available for**: + - 🟢 **Node.js** + - 🦕 **Deno** + - 🍞 **Bun** +- 🌐 **Supports Multiple Environments**: + - 📦 **JavaScript Library**: Integrates seamlessly into any project. + - 💻 **Command Line Interface (CLI)**: Works across Node.js, Deno, and Bun environments. + - 🤖 **GitHub Action**: Easily incorporate it into CI/CD pipelines with GitHub Actions support. + +## 📚 Library / CLI + +- [Docs](./core/index.md) +- [NPM](https://www.npmjs.com/package/binarium) + +## 🤖 GitHub Action + +- [Docs](./action/index.md) +- [MarketPlace](https://github.com/marketplace/actions/binarium-tool-to-create-executables-of-your-node-deno-or-bun-projects) diff --git a/docs/index.md b/docs/index.md index 0904fbc..e7c9d4c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,6 +5,9 @@ hero: name: "BINARIUM" text: "zero-config tool to create executables." tagline: Easy-to-use, zero-configuration tool to create executables of your Node, Deno or Bun projects for all platforms and architectures. + image: + src: /logo.png + alt: binarium actions: - theme: brand text: Get started @@ -19,10 +22,18 @@ features: icon: 👋 details: build your binary now link: guide/ - - title: Library + - title: documentation icon: 📚 + details: Read the documentation. + link: guide/core + - title: GitHub Action + icon: 🤖 + details: build your binary using a GitHub Action + link: guide/action + - title: Api documentation + icon: 📖 details: Api documentation. - link: guide/api + link: guide/core/api --- diff --git a/docs/public/banner.png b/docs/public/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..ee43c5a94d2e2b5d9e49ffaac04910f20934031a GIT binary patch literal 287728 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 z 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
Wm0-h%K0v z;PbI>kJUAon=Uag$XB#+=FWzU)6=(zZRgoqJy6l>_|U`aTKIw3H&@Dk(h+CXNIbLC z;%vf{(i#`c968O?fQHgHiM*=Iu(fd9(7CNVvQInanyid>_5 z7mgPL_7x>orOK21JxSabHW+0}3!ZUxb5hh?$^%CAGlt8{cfsQ$(xcuZneUeM)WCxV=Wi6Y`OkHhR?pUvNdE#f3Q-(=GRGB1(1W(rvbC zfn2*X>;|7hCN5rA!AgP6vDz7(1hRXP4Y0RQu+9Vegy9KmJu;!P=nE7q`s5U08sa+{7#~ggePOVM( z=xE%t&L8=A2Z!8nE1_!l$RC{hV-3vwDbeG)%S|dut+#XeY;sQnaBH5Si*XTDycTHt ztds9y*JR%%D@*uWXBeJ~#j51U1YY}gukOp#)<<$Fo^&#gR!WeItO*_i-6(CFPNlYn zQz{)iMU>?d*~SCEA$|oP^8@84X}hKvWEA{Jzf_PhHoU|lED(GGLkXHT}`DI3wC-ZgK)aJi64U zjw|b#G=<03QQ{tB{Su5oxYGI&U5Ycm-Rem51@98}``>FBl!K(KBW>1B%?tjEh>bG9F8ON&|#Te0rrSiD2@K zzhJC-FK!_PPc@U=9p@9b%$|5?EjU zG>eH0q2IJRc|Z`MlS?Lr)x-}Zdcde;F*eGw^kg*Ad7v^9>0zw&KCE+Bj4X0-F4gpv z#P5;vnSN&1leX(IXB~nY9`nXW*bFl!)Y+hF0X*VV&<-IfM;ED*4$5fkRnNG(**GfF zmW*xcra~s93Qepa(ddiKbH$O)q$A;kvGMo+`(HAV4fntx%Yj&4zZ53NXDs*xIIF;` zZ3q+y1oPp^+5P+@szWz3E+$UfPW$nbG5wI`b>*MhAjWT|X$@rQ76=3sn{SGe zQ(Ff#QMHJ4?Lz%t3W4B)vDe|uw>zM07QwSg#$17xNPk;;#&DmUg{+J#In;g~A}31` zS?Ay`mvf5F9#&ZoPWY|#&F74x#~2#~Uk?dR|8T5tqhHruY9tT{1n0qe&h8Gm+&nnW zwl=2WBlT|kW%R}eWzthID9Db}1bsI^{Ur)S!S6sd7sW@83i9``+ifTH-eXwBEMGJ2Xj-D zpR{hR%0Cu@KzFU&@s_s*Y0d?H%-Rv0nYII%XQtR`louvVKBan*4n9x;RCWu3Ss!Qk;#!c$!jRPb%>#nI1w@B-wz?gO)bO zx|3KMtnDG23p{2YSXW@Zz_tpXuYpqCI|bP61w{X)6>=IiK<>v#oC!*o1WQk;-IOay zCU=NZNBtP>^v1UkO=iE>e#Js;zB*!+X)f7KvJ}!jMX7#dh2nFzpl2e24M$--Wmj9C z!raOke~z<;!!5!7aXv88UY>K~8i8?SE})(Y$DcAP3=*X*n#>Ze3d-GNW=xPC!&RG$ zl9N@H-Ola6(TJ@~H1|sJu;?gJoi!+$X`J|gUK&7D3`-|idYEIp_fMi13;C7ATrQ&t zgM+iDI&xqfPJy3Q>)6Oal^q3r!|SguP^OUsDAn3}rqd}Ik8m{Ktv1O1?RJd1FrW#V z>ZuC4#Oy~PZY{ea-xAVvL)}yiaa++J&ok;9et{d;-e%c##p${~?3$OL2(j+}j^ybO@&3(-7OIe^IMh z_s#tZfGbS#F6Nt1H^M!}*g&n}*PwYPh(I6^2n5f83s%UTc+AxVJ}9%yW>3!Ef*uUq z>io3b8{8j`W27FeWAK5L<+l7~tDP_eJs83}B*?(rbi9|r_`Oh$T-`fl6gf}K68|rL zU=J9TF%s~@uD*6#F(szcM~#QDS{Y-XrPeJ|mQ-F*pTei4{^g(lzs4h`di-#YB#a)4 zSPssRtlK0_qfW>b=IxRisshbWD!~0#^Dfu@mDYMCv>WiiH9Sk1O3~=V;>+Zlt6GdQ6sDsu>XQ5N40A z%<;os)>L?JdMihFhh`r$YwoHy-cc^2UJ@OfF_K7lVZl+7y zWlq7Gj&h|D-cH*XL<4G!zet?+U@5gSB@}vu&N~PeL6QL^O(n=3HAojPoa;gQpfB0L zMi^d`&lx9FzI$e;u zh^M8HUD_Rt`Oe_QDoCo#ldbF+IMRce#oZ)+8Koo{EE3e`qq}%>fFx%q;LLMkHyFna zEcY_ZOV^e65R@w2^4h^3^FF|kJE<1SNo$W*Cb^y_pyH2T*%I^u^YDOHVe2@&uRv*+ zc#1kU_KXrY`(Be=R>z^|cM)VG1bjr+*F|Zn>pBs~r41YtK?T+1Qwnu2$PT|EY|Ob+ z>RviR_9T&fdIx4UKJgS8KF287V&|wMz4(9r?O*G;G>i@gERehTb(TeV$(VI|s;?u&&lx5UGBu#)%KaPkE+2osjBzrLvI?TB$$D zjH?&+q=|7x58BI7W?i)Kad^(H0D=rYC!Fs1?BSase|fmZnjp2SvrqAY6bQ1z&;K!D z%zZvXsEDHy&^Y0*4q*AHx2>8zYNRWt0kz+E?W@}~O2>!KT?3GlZ^=fg!BvFJpr%>% zJE@|l94HSb(zGp~A@b-wnY`DaK)H{DMS=gNcC{}$?w9Z80!Q|H<`tOIkB^1hVQ-nH zArYnTqbF{bZZ>~S2Fa8ij}307iQg5zhAP!pM`GlkSo~S?w&Xoj5ol*@ZE1EDfr_r; zJW`6sUg-v?ySPE|W5d#MuQ(O`ThI3)D7lWhh?z;<${+ca!C8tjZH{Lc^l|Pb>giGk z<;p{wu9#F-EO6+rj|>=pTW`^;dU(LYmIgf7Xe#`YPm~-DZN>O4;z##EBf?*~44i<`$KrPKTM(dWNp?EKW(>FBcaq6Z|sYGPJYlYjna(6 zF0+jjd8#|_dm0{!N`53h`#d>wLdtUz^c(&uX(efPzM6LHQoP~066JQ1$)jd$2!f?E zQ5p(-YLG#tgPXYy1Z2T0lurpI^__OUks##4()DS$x<7x?PFz1qJ!D#ey`gS+==Du_ z2-5iSZk&3U&sqXz!4`boNTl#q>3k)@lBvEgVTnC zdX@wT1+nfXN&z2NWePmvn)g^0{dJgGr&9;pC4N=wYBo+<-f$Zkm8m5I5LRta%qsWK zaGmG4l0a&uTq@ZmzF)aCBH3=pG(TASOGV#2`E*jLA0kL+P2w?4P&VhsToC;*P_}M? zKp+qZ1W$%U^$Ko>)+&3!fZ#kxQwszo;5#iMY`=W<)cJD%KY?H_p0tw6e!h*CsRV@z zsj@LfAUFveV}nUUeKUaz9h0IMebr%EwC^%}#jsT-BSOpBf@w&lPr$qlRY-j?zg#4K z@5T*X5JZRMU=X;feoRWhN&yDs(V+BxFk=h&Va{NN_rZM}nzC~?AM>Ip?L`h+x!a6G zlEW!hp^*H6i|aN1hMQon>G2(j^pVhUNe9jCujVee9S7P<0m2%#TWa@Osm=e-{q1vE zd@js_AHozqB@_OShWeqgNk@yOvnh>NK*0-Rmi>WoH891ITvF+Nz?h7jqCTYP`zA?L zEyVTkfIBjDmG8%hS1|A2-H{99WUIWt*2Gx*k^~!Q^PHb`?bm}i!d}uu@fGComA^d$T<1_*!HP`!?QaZ<`R0z z%PV@fsY(~z0ilX^F*&M?bW->?KT*dJ&1+L%v#_2aqYk5qLfYA{84cAuS93t$9omrD z(YCbajT<-0Ga14gumYE=O@fW`3z>=jRc65qB_$ae4`3BnqSh9zh6==+Bs-jKc6KnA zlJpzn*Oh@_(CNM%m2mmW;B~#1ek>)M#i=r;CdwwaUz(=dDK_@oy%?svP+4O`P9eCa z9|wwCVCdRsb2XDsdayNJOF{(gVTc_`@1`!(*Zgb_A@8M8X5WC>N|e5I%uFSyBF`|Rl%d)CP$4m%5ArmxHRevl0 zn@tkpW^O^ggVs%i@7J3_+ipcRrS>`ozB@}O4g3{E7rR90!AP-4(&s{<7OB|boQka| zWY92f*f64X3Z`4CgZr)H>mUhI)XL{I*ujL&&fizH%q?zLqZA%vcE<>ABE8lIhIumb zi%R!$zQoln8cLK~x|3m)X}Hc}1t3*1l?ly?J^5L4R_$wLk4ZAw@CR!{@g;l>GSNnp zyI5%|`7>`!42Z30{*5DxGaen}hqd%*4P@=Gsg!QYx(Ox85n6a)))O15`#OB}6xl)1 zUEScl5)ajR0jbl(tP4!| z@n5AATJ~FGeYFmitdLD5;;RJot|2L$IZRdB(HuXZfjz4YIlXrzojWhHt7MoggL*UdcXL`KDT(B|9CP z7zxG?CCt21Bm^JL#Xaww$dvL~92~j5ZPlD*bcLcTpz@Ec>-@#3%^jEa7xiNf9#MqP zkS2lvDQF-4z$`{ohGLVf>o&hC3C0@|RPyE)q6FBDRD=qh(I{Wo7}y2yom|tnES`TU z{7dw_OO&Yl38Hc$uXfLrV$wHGL1m=TD!3y1UQn*Ui@h(ME{t*I*JD>Ym-x80*o${) zI_A4Y^p|k!K)oM--bsH|Qfh9e2e!M-wJ)|YAeNhEsP|)O)^VJo+UjCAsP>}l5}RvW zWd)~M z?7&(55QqXAim)tjAx_JVsK~LK_QLSCxem*pT&}q5I4Djqtl&d|d-A;$(VUVYwe-p0 z7GPXS?iJH1$*$ehExSa*572U|>cx&)Iqe%$_KZ4z|q7u{H{;_UXMn0BPpoyVNAefGn7OoGNl~l2B z8h9k`GBym~GjSH)-pwQ!*}R=~hzpifS0E4wJ_0|h2@srs{7U~w#c^+$jCbPrVg3Qy zX7iiE`N$NV%s)V0DHUQG^cYL{Ph#_etOhrHH`d)tGu&xGNBRdY)@JwU{LLA#nHjX& zOb+uRK2PHFnSHyHKp?mX$M@HUqor%Qn&%!saYE~RjW4Lb2xnL@1Ohbt_fZWlBZu(G z?pE7``+xuGU$~FqJhHAiovEdg^^s#>GCu7Uz^lm2mBpJ0?z^H&c@OM3lIc^ z++~tAz(4&TwvKwc*UMxhA}!t~6ZLkl#-u^4q?T3dVNX|;iB!F_ zvJlF*t_?n^cUd3aq)~clANOtYugs-UDq-ZV%TTb%CCssxL~WvQn;1`pbOd}Fr6lX< z4Ym7{)P;^o{XMh!ffsg3kXq$w)>+%61G~p?i*9mB+BbJ zP_+`_5?`n&k}>on41wm3574~NVB?)oN`Vc=u_7F82LwlX6bU6D7%b)z^^QeEmVzGK zgso-L$W+jZ;?WIlZQiXuwxZP&hSUWk#HBNyI+3R6GtpC0&Nkm>33O%JEwgKSwxrs+GzRP{2?1cblCa&%`()6NqQ&W}`_p z#yN5}M=Ab^^eG)4n3Arn1#0SxLbiA@R?S=O@!if|qQEJD@+qAW0rMwmpyS8q%*sqZ zqb2X@#q_O}0Z~t-|jZ#yH-vzZG&D1~(<0b2vH5Gg)yo8qi6P$v_#hnSx!ey(liT`}) z+Rwvq;bChCSIZoSQkihuCqR3`=xc!NW+J|BfmX?#4UeU6zZmpZr{i$GayK?@p zAXrukVOv}4v^2|nlYHsLD-SjT0S7IQ$J>yzk*6k&NhOmz8w7$6gmJ+^U$dslE>|EB z`~vLBuo<<$0k|GNu-Pne&`T8mKLh1&9DRG=aeHi;M;IgUufJ-ar;D##0!J*cj4wYAl@r#gW)*pv243)i>V{ymVnB1AaW$!EPu z)#RfEain$^!@#@n@QXc4;mK3^lvt!^?$Pr~;eckDDj$S^J*g`yKMUovX|iU;IDRm6 z7q>=t+(orU-hv53f>#zMRSx9r`~T@JcCVMV>7!s+$|nOxh~tYx*ET6`(v8Gymp&=E zQ%7p`@=(YnolKP4u&Yx%W!B<26%ZMbk726F-sWJaJm5!~DLv3ci9IRGq9~A>TZqa? zEd7)rlXMLk?p3z%A||9r$%tYFrM>#1QQ)Yl(JThanmx6JcBNU3z4|z$w(}#QFJmWM z6ZLkNfpPa5~H-3A9HAG4rdV^y`adfF^XsU0~i zXXr0luJ60Xj954pMZw)=2MM${Z@vQnoZKph9kA3YMw@_m}%} zg^fb=yz)-@tr|@td8XGae63P9%Ex#FHwjztVU0s-)^qL#|3n0*egy~jCxU;e zjPg!yUGahPv zW50G#9JQ>dZodLvo?y|nE&XbzPmXIKgT_kaGE3FSHr zZ4~1ASamVDgO4~aHD7<2>}0~3Ehm#ZDBou96?2a zch(C4niLf`jw?eaq|z&=qf|uyy_wNsrI09w5#HzicC(r=tF-sEfkNbXO*|-V0^hCd z&-CM~d@(B|Nhj%z2TB|E=!#Kcnz0%pduN=Qd8Z`|hKoUC{SbDyjD4%5w(H9_GO4ti zUStez+M+$d_db}m>!1987>_I-9zqe&X#9?hOqrWql6+@kAuUfgmwsOpS-c` zM9gAFEh|3KFR?p}+BP%EEAO2AO!<_OC{(R$geMi*YhO$$5zJVq*~DJh*VbBcmAv3e zOtp^_;OH}?XOSpYblK2qHD;gO;fKb#h}{VF7PeypG&`uAu)QoLf|qhLav?Y-En%Ef zj9JZdSA$*{tD7OV;urn9mXNy_aJ2o+($_`2YrRMA!@pvF+*v! zmbXL9CZ#Uzz|%4%T7uuRD7!ANYUc7}$YMP(@G5*$Wn!g-WP?-ME{dUI!F=ah?lQh! zDITg!6?1FMhG#NKoiRmc>;vH+-*>8rdA@{t=$ry`h~e?5#Ful z)n(lUAS8n1Ncg(1{#b6$FiK>Y{pfZvJlvSP@IbQxYehj{m)|gCG_`Y0bJ90*?6}XV->0Y+bA;ziI+Y6#aDMhE|alWfW+?+i{&2I4pa|y&>;fa6ntmTUpPbN(>GuI-)Ja!l&qQdKz>}##rzd? zfFbAUyMRX;%Re_M`H@Xr^sZIGs92|#T@GsD$gPrGqfO3~uqRIyMF*(xWq0lwpT1(V zv=bQs@~`KonR$}TMy_jiK^XF0A>9y{r;!RLs|4U6U$F^shC!v4v&Mc?%$A;9dd3yg zHl|2xk1e_NVsI?nQ}*zsvz5ZKAVf^MTsVnG|7Pnvyhk`D^X8*+rYK)U?wk5RX^!t; zQ3y-x;p9O&7if%@N? zlNIgR>MJ-GV$n3@r|9KOA_~H<<1cx`%54~;^r(iXytV85zFLfX)DgHC_() z&wWvHL3BSV0Xu?EMAONra`bqL@r3W(!b$9~KWRnhf$SsluFj5UcKDP021tl#b zcSt8Kk4YzdSD`9L8>AOF*q)|jzq(|WM24<~TNe}k%XzXcviz2@Nt(w&Zq>M3+K`^* zlY~4C!?URi^z7iqQCVEd4*lV14;Hq$p=mBMi`jbrbS#OlDd9HHGsQsjB}JXH2Dw=9b^%ZaAnxnLg0hFejL z4cFk3;nd7TwkLwm!SQ35pcnS0IH&sj$<`b2Yybb*d)KAebsS4fU>^UheuJKvaJ0u` zzyD)RgsaUc~5i#`m(vG&? zDF)~I<5M(N*8%EL9NJ;n&(pDGni~ccJ-uZrjC;Pz9mbcPTH5*b=S_7sC#s#(d;UCo z!g?ge2L!q9+f`4=1LhW>a^_>&MLJL(&Yv=Zt_h;o=t8r(Kf^9qK+v+T+E@-h*=|E7 z@b1$yY78Tp1@!t4DAoa(I7a#+BebtVbY%1F7kh4iX#J{G9WZCGmGx8=r=c0ojAEIr z^afh6rvcY`5{8^#@TqME?{eXpneoQQnV|1w#E_xqSlmX`xR<7V#xr}yVQ z1I5FR9i5F0`4SbnvG04aEYV%u9-u!UiV!?NG!L)|I^X=ANW7n$v)WhH_9-HlWIZqE zda=p>dg}@J0qx&$bkvIxe=S7ZZ5)zIxkENL)f!iRVvU2orimW)UMx$}MI=%1%x?+W zj7+^(6HivP)~QwDz~ol&9i1|c`0CU9Aa9O(BGvsY%9Ag(#a0gni;nEI>mtop0;A?) z-1S??f>2f|EH}=w+x$7@Y`6{pvJC+RC^K;PBdZR6WxeBxb<))=vW47qaf=aL)@yVd zUqRkfQDr%qct8le^2Uj=-S(xwFRU(dZx#d15%)VTy~&(w@xcKQ8AN74=)C%F{}WZktW z90m(!)v-=nU7G9C6AvM%K3E>7=6%0crQo$6Qp#b2Kp?mu=o^TzsyAkWArJ@z$6*bS zm0AaU>&}7R{kW#c-*<56M$T`C^*>I*XnuaZg1!_gupySihKHiv0W*+0KV-zB)0xxo zpg)nhva6UEw_m!aj0C5;d5sh!=Sb{txUQt!-wV$f>=MJ;~e< z*0I_*b($?4JW>VEofpSxR9jo&n*Kj!xE-NoZ+~id_zh@0`6GK@fbdt>p1yAwD+GMD zK=Wb_*uq?}&xh6w;SIesZaD(R#LG4Z#VwLRw1O+>T}5ci(cREa6DMPCK7x7JhTdno z?WEz=T2TnRFV}Vhd`iAo6f&-RPNi?K-3+KVN3#6wlLjtBM#e^4(ePh)XZrQ|kj(ki z6~=p^ys#6+xD88ip7a9K-0ic+V{MRgtS*jZ%2$*{hpU zkb5iSFCxH~<%Q(jN7;PYohn1=gV#?z#?FBYV|?dpl-htg)|&)!e-a;K>t_2;=-_4U zgcl$WH(^P_X}-jsl+&RUbSva1o_0&k84ZJ9F!FciQge^kx5FmJWZ5g2z4NO5AUzwQ zA|>%2I#>+cuAx?MQ2N@5XrhZx7v@e`TwKhlr~Gy08ur?eNcNpmmbK){av91y0y%6D z2tEdK{ww$<1X>1ZSAn1vf#zr_+YJptn{$F$X_|wF$9Rtj9)}~xDg{(e*96lspbLIl z`-t`Ql{jha3+`*s^f_Na6_q~;`%ZEj5NqzwMZk*oP{V>}g4lWJ-)Y$7l9)43O8&}HjBo$$Z5PDR$7Y@hpoJhL z0^9U8NtCSjNISmSU)Mw=wE6fD@>gIVigy`&`Aid--1%d(S>Zjm@N{oo^+FKL!bm8} zr>O&GI5H>4u*idgUxV{13wUYTok72J-qw43@0;D(bw`X}L0or>ozi7Ce;AN_`$xkX zX``6XRS(ST0sr~G{_7FtU|Wl-GKU8UU)j`I3+xWxWKj$3ZHe0{CpsXjjfQD^ygsy( zMrE+a%8!0hY_1`J+CkGTK)c)JU1NC6k8m;m%hOBKfI16@Z3v5&72+BJl$YdB{FQV$ zSeCz5D!jcdJ%~SV_xHQtjW)H6v;SR2cBo~{?Yq|#CJL}C*#eoxppnR+=AQ5J^tc0+9&PH>j7mgQ$z00h#D^7*vCGgxUqaeq}-F~Wv5$p>5ia~0+aGey@d>Gik zCN?o`t&*gq3xD>%GPP$LVzn@zWLmmELTxNi7+kWqT(Py z2h1%xCV*&s1T8HW{G0vRwV6OL0&~Ow<{Vw5iXNaEj$l85fU+Nk{k5QTyM-TG@M#!0 z{(LU>cbOx9kFdd`p(8YRK~AOWHUS$ywl zLl{K*Gq9P;1k<{WLnVvd<1m2>h8Z7!N6iR+89rj+@$n%8;@OY}`ZX9cz@r{986=%G zzXsMRghlG#++y}Rg-mSKv}eO<-~rDCf~R4wb9OblgYjlq-z)qD_PABnK7l|WxD|5P z@Xa88K=kVZPctGXjzx@2B5~*V`Gl83bi#GHISouAd3~~C()l`iccuoOqAp+ZDd340 zeAW8Vd%2~~fN+xV2O%&Z?R)xu~=D(|$}FUAuQVLCdvwSQZ8 zPU}?rx+IbndXg3fpi^DocXo%fQ2R1tF~vMu+liHqTOdxRE-((r`5TUCrntXEq42q% zkamgrX2459I1025|74Q86K!o!pXL<*>R7aG*oe zxuwBjd8hL>lah9IwM6y9y7TblgI(@0ZRb*@)Cd90>`oztMf1DlGRr;h=kmR7W8Sl9 z(d?>E(mOaOTZ(ER!M#Rq*y3t9ZX!eP9+JFsXM*;2%dK~1E`m+k3{DjGy^mZoLlK2_Euid4xRmqx!ca>1Sjiyvg&v&d*-2B zqZdjxKq+<{g>I4^EXooC>6m0p5vtFSJ?SnGAD$UUVpY;Md)}a|2U23{0NOkFOz!4q zf0)-2s+z>XCI#aun3AlF^6?~)X-U^s!6U0=NMO|s{?x@rmd7)4DIj$ZB~U7CvT9IB zd39!m<7z zANN>Rjr*`o{mPwm{pRcMIOFZLJ3>ow2#a;GAPvAUf#ftSIGQ4HR(=Y8%t{CPOnlzX z*PNCr#uI!aK6dO+3DWRum?EecyShyv`St323ML#jKtu3ZZsAlt^lW;BoVg`bLZw{v z&$-yq<5V)LVWD+;PrPV{_KA8A&>Edvwmuj9^(T8(GxPBCZbNb4pn49d1tlpkT)JWx zg79QdWsCOIaJkUNv-=AN3r2Nj&qTp_*sJcQ9`SD6cfk9FlGv*2j`D!BPFu762hm{@ zs`V>)EPLB_s9-*5vXpS`r}36BQK1@z@|9&xuAs#?Em-jC!{S$HXI;4y^8)+T2XAza zQoCuP>n$^MSBk7VQ1w4~9NMG$sal8OKi_SmXwh2?9XZvd@A1)|EypsOdN!W)IElmp z9T_z7{Cuy@Es?b~ltXg?Gyf=ZwdX1VEqQZMf~SP@teTnoJ298k*VgRful(8F5ZuJq zk8%hNmH{Us+d2sY(quMCi}fXZIDh8|NE+>~4`_~uZ_w}YKn9womlAQYy*YV*J_ zSr9Xlvx`|z@{hjSkpT%M*D>uw!nCKQ``IUzg6m+$75qhQb?WfF)O>1h~z`$t)mb!TT4*O~2gp<;+MCAlatijvbY%KY4 zMHdF2)?TFZwQVUT_J3DBp}&-d#OI;R#!xrT;Ln~pZ&w|qkxZbs7?6sXl1sy=l2%Q{ z@$eHWMOjWNym34Jw>m6MbmiHiT1JCT^mfv~%ZmNv{#n07H02$J8?WGE8b9WZjr_8^ z6Tu;EOL0NW4nE(LN$L|OFuwY?A2#shj+O_49%WwIC&^Di4o@#w>UEmw$L#8cg)asz#dbRBX{w_P%{@~oUu<9= z9GTk>NYKl;dzVQgrWHBsMpF1{PiRw3fzT)kCb=yM1m^(RRHc3eUkvZ~DbujvPK3Pu z(ia7{AbSoVl0XXr>omhyoUrG3%Gmz#2EE=`>3R6`UQNuNt3%hs?#L~MCW23d@tO(? zp7MLkPDI)Gm(7#u>!q~T@Aum5@FoxlJ{uydBK%H+BXl$aX!q*kaVf)+-l$(lnAy%lOZ{B%?$nK}>sj~VjBeB- z{ZH?}n#F8F_5Z1ZMeQdIo7+S@1khi8r?c1R&CigT{kQI6{XKq8HaNuJRkNbWSqNP` zO9%O4ZjQU=Oat4b1+&)Ps4JeT~W{M z9Y>a*US_J`L7F={o43Dpm-yjqSLsh3l2!a{^*L#M9R&iXXt|2ba2Mjm?w;OTmfqs=RYuKVeZDiB*%&w%;J04T8@$pczpO1rR7Qe?Z zh9_{xwRcjfmXDVB4vGQ!eWoTS8AGX0E6+q|HhuVS2@4Mhe-R^ZgVSfihBIkFse&NZ zmUf8QA5zuNm%Iy#@9HDNH+0kt^%zdXUrCm{D8ePThtc9)m^v~nB=>A}C5nGDPFW7l zATWE@hl2Dvx2?(!H*?Ie?+?$l$)s0qoyfd;5ZqT_3b+f3 zahj9jmtda>tUI+}E*>=J3oeD7Z6Ns1fjZ;?)uxa`*-&#wl!-EAzYJmX%6cWpVf|M|cE%YO2XVfL@~ai1%1t!Ru6W*JKD2OdvLjmJ!P8C2H*#4C_Rr`vDP ziFI;uU9O=Ov{R<@jrl|*Bc+r2S`4hKwP7@2tn%m;-7$Qt9Y@6Nx zdJ~$Gjg}Jk!j9F`?p+GVjjschz+>1Fa2lm|Trr!X%J2XrqkoU$Rr9%ipShLE^#SVt zG9^HC0>yU+-vdvDQAq;;-9xsoh@@_`CWB2wB5-c*ky4QGq=wa(0;)$v7#)YX1=!?s zqc6HS?6kTbo_#HOxZ|HF5lGBeA zFK(J%EoT34R6L8SaM+zm@NA}tx*k2<7q$AD5i3jaZqw)YjSK*NmQWXF$Q4 zY0wJDMvc5nt)g0FjtNzoI-)aZw~ov`g6-9E@-%AIY7Z5Yd-{hQ+})ba>(C#kRR z!M)#RCaalhl+QYf$le33Kpbm=HH@265c76FKYJJ9Y&PTqc|<$b-vN;QR$;0)^>c=K zzJh3>30IAr2OX*qcUhp6_-F~^Jxdd5RP_0MgfiRboBb*0E%879`@hYiQKH?KojwR= zgHGB~$A`fPk>uQ3AQ1dGZkh&**>*9^-U_}>_XY%Qea{D+A8UwqmmegQRO{}tchTwID3A-VLa4g2ZeP2rTLo#8cf|1OkCTAP@)yvw#+M2Se8y zz^Y?Avo8dCLi`jbl6on<795{%#z{m~1IY?y)>+U~Nw@_?KqfTQ?NAD)ELAt+@jCRU zAUBr^x%XVa&arHi-b-;X*EcWrjOcAcD zA%c&HG<>=~qw>8hp>>ip12gr_;Y#KtNi!lW|3E~l(_h|p<|W3aLU&!K>Jh-jY%;7f z?5Cy1?UVkgosOwU2-k#b6fQ5vi}fC3PeN3tuXNY-Ol!5#6n>o;`kS*lBZP_^UW&*$aY@o8tP+#9PuSSvCT4OY2p1G)z3rb?N9{Ou zJ4~gH;PYlkkUD7~M8{{JG8BSKJMPMxM}8rH@oW$X7Bj&s68Qn(%@jqH2z!?l(rczb zAP@+C8&9+4R8KX^y9;Id`0Ei;+kbPtKN)U2J+~DeAF58!hkKjT6Z%WH%Ar~Lvh(=w z8@bP{Of(RLf4eAXZo%s;r4#={Atx0#5|xV8QgT(@NHw^ z0T`%KX$1nUV+%@VA;RJpuB(gHEH(M_*q!YTZ&qYf3LcDbLX>_w3m1s8-ni3UX>2~| zDc>gT#sQ+Ai`Yb9ijs-c(^!hedP@u#=Atp)puJ(?_Q5}f&<#iC`V4O8sfZg%5LZsm zkpK8;*Uee7aC{$(ufu>F>tiv|zv^p|^C@KWJ>kxRE|L8cK%A{F2C!_oyHeCr{cIu! zVZ3A>-jMKL|Lgysn4B2~oM*|{2W>7tj+99`It**Zr58rmRKaf65$Apl!%vER;EFt% zr!4-Mc_{Cnm3ej>BgAq)!D-W4=60wF0n%N8opVAV&GuJVYXcZ7O9#vjo3zI^As4Tz zwA`B?ZuewFe6+6-bgH?~$mlb&8(728hdlzoAH5HwJy5DL^P$Qv1jPG(r}Kykw)A(M zLIt*ySD-VzeR7z~baz@Z3j&>GGY4G;1B^eJXnc>rZEAw-eCmwBZEn zvDeHPD`(WY5UX27kY{OaURU@aoH(bU9L$~ZiRh9muJ?1-r^q%$sF;$2(XfPimIm$8 z8s5q0xo}=^Q%y9xY3Bp4-Tk~B*Ze$T3tSwzE=_%qPH>=-6`#o4UEsTO^AFl8bx9uyLL1@#CmV~5=-R2@P zqHr||4?OWN7NfsEQ~959xbXFhbS*CSPEr5a1vIZ&xkkrWk86LeuCvg?Z7?BC?<7(m z^6Lx?mQ$kqJHqSaW+6wc^fl0I#PLcd6HrQTQ_<{!ij=Ey^?IJ-03hZ!{6~PTWm%JU-LQwfj}TQ8xvXfZx0SEcrpNP?jVy78**m3 zMnIoyw+qgL#!3H^QYPBRBkgm9aEbE*WKnRc%BGG5YAufgp(i3Sm2bzW!_y!VuGu=h z8!h<4onb*amQ)nzACr0pd(vt74n7Es$?piw1;JRUs+3UthFn|Y!Zc8jr&$E&^hCHS zP0VY}4F9>{q)AAubOxW2Ni#8nrD!ou8q1DRIUpy!RdP~{r*D8y$%+_-8{CKXcU6bi zzhDyJKOIcF2`1ll?O4hkD~`XCdp1RVm;Q>vs+}li_c)R-A>QRcRp!7#b4^oD6ltI* z3G#M5Qg($`5bf?$j0BZ5t9*vw`qaRLiEJt*cA!g$v9t0Lahx zRAc4_{%qz3Lu8`&lLkwh@IHZOwq=DdH-akP54JXEqg#%M_?kO~v zlMaxyh9I7&-RNt>H)cQMPfI+S@<}dT@7{&{dP>=E+L>ulq7yY~5=55MLEW0^hO;Lj z+!9kyoDeSY$PfdqljXl+JVKU%FAhYY%)tkodH5ON>4hfz>xtaC97q5K_Sgk@yVVI zV7bZk``!GAm@x|kg6ASw`=g^&fj|(g;XhCt>eKcBUkuTQ2n540#$jJJkF7@2I#nO- zt>`A&4g3Zr+{fvxO9eK{;+{8p$m@%R^%Kx_S})+ZAYKS06PNZ9)KC?pa;HZ(o+|yd zIQzUp&QP<};D@U1Zvvo9_^@!)=>?KwJv@Wj%m>%-P%b!yYG?|2XDaeh<11uM8Zi))W@2OqMJep784Abm_M>*Q(t{Uxj!yL1_IM!to zd2nMoi2h7j^pCG=WHMO;4fulQ{A1o2PP7T*MMpb4`wB~D2B4YpJC84L^|8Rlj;}EV z{)&Cs{^l5MKpQm{m&RkVSG}S#qo`;5Pj#Y&>4iRkWVfqb=kZ8y=R{rosN)h{um?=?0M{<68iKT%= z>tvSo#4_PFn>il{>bhGj7%fG9d9{iuznawN>-_w~lCSBD8s@ah4TbdUqpA4SC6Z2s zU!S5l26w1A94h8U{WVw-S(h|*zIgU;Rjrpm&Y7iFyiL0e@Y0Dm-|c-h`;(K({2Q5} z91f~lce+Twx4>VzAjcssNo(-CeatJHT5!Q(WfF0|@i9QABt+rJ znuoptr86=eSw~rL&ZCy~qy~tEvjJ@Ty43a$%X`LQLra0HgnIi)*|mM?G<=HD8878S z8UR(V>)t2Svi!^RG)}AX$_~6$ui6|Hp4l4p-H4+Dath@U5)mRtc1+aGAW9&en&eF} zwxK$a;h-jbpiTPw%!cIN)8q>Gv#yq>x4h&O%J!6VUb*D4^GNEl_s=-c#=9aO=$-On1v>-Lr zk+&JyF*fY^D+Qf|dsp*Q4J-n6m;G*8Q}7V#P@-|-^IB>Pu0VEY>5Pks*oR#QJ#CGs z^E;z1Uaa55C&f+s6iTgk@GB5C{ZG%5t_BS@144bxj4Hs z;G^?-maWJ>H92t_T94)ZHf#gd_{cG7%&miO-fZNov-cK&&_sN#R6@DqCEe3D$7E)$ z#*!^(+ks+$xc&M<%X2+i9N5psl^xzWCPVl&L`wwJ}w zzG_uVqe+Mn& z==;uet6cvrLobPjRl|Rt$Y|o{e54#|Yc3ugx-bv4Z}TDXX+H9*@$^fPskN(PH*T&E zcs5M)zw1uOJuWrA2K z`t=6NmmK^A_3&O`S#KE)t*);ycmfd~NR&920N(Kh6`wamKe48qNUY>j%C`6P>#06)S0jiGJvMjAy5cd8bFo z&51sqLtE83jpS*DRHtnK{IU#Iw^2|F{xYtaRa!E+vQ^Gn=$j{`8|U(E1zgjjdKua< z8J;Q3PHdO@FmKN)KmYLpTUiCN#G&Tey6V?!UDf0OQT zCd?~zRZh!!ZJ_ACZP~+-sN7NKKuH|o*cYn8rkb^tk{UT|P%pLdibqH7EKk{)oQ|P> z&#kcp!}#eFqVL3J(P$Nam%iWYrQYu~v7UXh$I>@L#VqOu1bhoO|+kXu|O zP|1RpMW`J)))o-gb1oRpNRS+X;H&X*mZX4Xen4T$xG~P>cK|~=-%^23@E;Z24nvD% z&JvPNR7Q%yBcDPXazPp9Ec|B~$sR}zayIns$4b;MoBi%S&9Pf&Ea_*nbAS4I&j8XsVH@w~>y*ouqG}^*nV4p5>6K3ySp+!L_alEgBqR zuv;{|U6zHk!FDtUQCFO6VuQ*zZnSNFDyZY|k=&hXMj-29fa~h(0_5dRoo9KcY0u5v z>7@;4L)W!5R*99avP-IzoCjSpFAk}w3I2;r4&YAx5e)~|S)(*SR!mUUGw zB-HIe9p?8LYorOLMz>n3uY1u%0d7FvN2av6^4yYt7Qp~q&`SrQ8^VjVuaE`H`hhMx z(fcjeI_)0H2lGuA1Kd;>^x9nb{`!)=>TNdCf$-&6mHc4YCoWa$tIk#{qbaCv6@V3W z^+UDrh^Cj)kL~2Nr+DV~oW9r9@XuLTTB(xhofyP3+6MvGX?P9@Bm%SBUuL>3%cK=nVm$vFC z%o_RGq$7G?xH`eMJF~MHU$y8y$tA$7hc}($TU)+#NEW6`nSdF!KV%+g(~tG18h#Cn z2l3118sGHN1(mjajoTBs)SU7x9#Rn)%%4yhT`D z9kj80jwe^#bmOObo`{|9?AI6H3b0)2<%6X>>ez5+39M_RByq(En>)9CXj#p*)^Dv* zkn@kgqyW)e+P_)RG85l(Y!_~D?=6Wy&<=@aCKy0263j`^^)u)1!76sw*P^^&!z@Gi z{;d&Ltb8p3lKDddlxAOP`+1FO>H)ziXzai#&4M)4xuBk2&qu$R%hgrt%Gb{7Cb$uE zyHoqQe#=kO!4E0~wH9r-(uqy&{t&;1Gx|d2&B8MQJO7oc{|0>PKVxj0BD#ot9X zxT{Dfr(s<+*8x2lk%8yOSHIwX%#OL8_6;iJa`7(g`$F%YifYL5k=UrKRdtk%=g9W7N>Yh_s!ro@SA8#9~da>$~B$E0JSCImP`mf90YPQeBoTX~r%jt;HSJ znZ2{@PW=Fqc;+nF(h=iuWT5U?t7b_ z2;$PYgoe!cQ#n3!o(HRrVKPST`O31-z7(u_^6D_M()CjiITGEx@+ZEte5D&e#RkIk zxLEp}Uj5#3P;zT${c2Atcra0uI2@9XhZ80qROFt@hf~HCKYE2k-R9P><~~{GKTO`N z0~$2zsbH>{k?XD`9rBni^cs6XMaDtS+ zKwJFz0C3eMC;0+F3^8&M2m}I|3{*h!ed_PD!&Biwut*+SWA}V8z%z@+)**iYVU?J zw4h6rG?U?XceD>+cWt*d;t=8SkvKSASpSBHkX(N$-tWz%&Z&MriC9S>_#mM7Wcylt z#0Segd&+>eB=VxQnTNoZ|8rkqS(?28hI#zZFKAeIk>kY@2&SOgt5RG1O$WZN`lXZ$ z5?(I~{OAAokKO{SOC}f$w;6}d4gti^sCouyec{7!+^ZkSn{UWVm3>z?pA8coUoUT@ z-7xD|yDflq{Pk`-DV2>YSm7R9a`cMeCGTq~tyOjP&?oGsi1!PCB?Gxjr-J1nFRQc$ zt>2)u;VTc6Z5MMT1-|-AOEV{2@sK_0NHO{w$SBJ=b4Wo{HDhz`-jaFjPry5_(iY+N z9nUrZ@X}kizg>o_I(sH|A@L)c)v;m~vc^Pj?fv<5;L>7UV&~^Kx0R2uC$*C`c?457 z_5|?ez46VO^^G(8ckJvR6=i*xyuN1qJ_BED{u8}oyDGcdKEL0!&YEnoQSA0Fkjm_B zj$fsn!{NBAej)Mb2eNq89C>#N7%!c#E|}h`qXRsv<=J^-0{M1YGigRE@iN6&6T9L= z`DR4)w&zCkJYG@9%;&eMebw7WY3Rg)qo8P*IhPKRjjWmd>dJY6RdDj7=V=+;vxMQ$o+i2&70 zth9Bx_|jTatpMSFOo1lyFdbl*Qj%=G5_$-?k}{gIT1^59(O@}Prb-!3$<-~=nNp~f zp$rN_gq#g?S$Xeu38{d!TEl{LcvGYhU=%OyD@E0~p5I`vxJ(NDra5Go~764f>Yn{X*o;mej0W;|HR$_!2k`v9)Wj0=ufP=7-3!b zo_11W#FToZ4c0)fMHF$!ZXWAP68OLW+uxoXAi6G|Rg(Y}u{r6LYAwUI+ti?SmdyP@ zt9tDjM-;bBqEDH0SXm&W4j4?Ft08YfR8_2n3%2FA7z9@vZaalgiQz z$EOT$CXk?1M>cgI`JSH-SM9A6cWC7TyQTs^h?Vx&U>loiS>Dp3R|3y61bHxn4zEaM z>VJViP)4K=U~|u0ZNb$xXz@uy(-R-$ZAQx}^PS-FIH}L-oQ=dxJo&I;KJ1B>0-e|f zXi!SOb7ndvtnXE*S|>uO#T+w~15ybD0)asAI}o0huYosLk|zCp0K_Lr(x{h0_Fe+P zb-2ja>X%S8a$gFbQzt<0b`ZVi2POi!tbPK4AjESI8;GY*a`K{%P~5~a_G-6OQz`d_ z%}Jqn(qN4Z4Fk(I`D%DM*Uz={_;;bp1z%>kj}KYhy-8!v$8GV<7Egeq99YmPCr3H3 zc{aFWn|o$Z{&WDdd&kf0_N1E;;+v&~(bbGA^yZX-KElOEGjnOHx?v2-gOeVac=TaU$h(O68eqS=Wr$9OF)Ch~wROBd_8Vjae zU9CvylXrTsm-%{EBX4QiiP<|_N}Ya$Q*hj(G&GaIo;&^N)YOhU?G!Y zbuJ7!lT3CmrM8i*eNxp#T1sB!GZ}9tV7rVp=;*i&3)0s+e~5NAyh+WJd41jT`a!al zJ8?yRuZ8Z^s41&X6reKI!tZ2P8XIHVFubCt8~p4olo2CgNmZob$7q@6L zc%EFeM!KuZj<--R>Q!g1i*a@65h|o91WL3#vAU+CFh&0GDP=2Xm%0Z_Ldz2>;<(^c z?#q8o+(>)?91Go0q!)Z-7Xf{f4R!aQs&;{36ePfd;31G{OJI;#!eqP(1cD#NuT6o* zXhOC#0>Ll9X`On`irj})>({QflG#G=(P$6eAZQ2Hs)!TcgwLQ+nl+a9n0xyvWnh99 z-=Z;kGhQI~={+Fxe(DD069*e*XVIa-8+X&#!&rqyG=@TnW8?U#mP(1kZgIn*e$NLI z-v?l6G{50S3QF0^;4TginPe3EI$W;JL~))8bJq5=<=Ko?!bD6tOACD(`1PZOJz_bT z!Asj%rrO1jZ;5)BDAhho+#jKVPFg#6>nY%7Co`U1d71)W|wgYyq6(8=OFe=3v|aQxp5~d>CPXXfScZx=F4E zi57>1WIWXCa7A;eN7sAW^2k~+Qe&|(yGj@XMu~-Y8w;?Vh61oEjXYp(J0c0TTdL0J z9&}=)H{ic)m<7wIyAt0}5OLbu8l2w*d0FkdUh9NbSnueJ)FTEEk)|DxXUrp832%GY z?t+;YfN|{8pqG3Q=WL=GTYXZZi*JiUO~wzkzCl%HPIwBsKRlXrJrPHB{V0_fAO33d zv-jR?v9apnu9)wZ{=ph$x(}fds|oQ7%nK@C9(v{Foazeq^xv~ z1?h;lrx;dG6`JI%#Sb(_c>oXX;;x;~h3Gz;$<`FJ)R!haMXjj_o9fj2Pn_sSB zP+Oc+`IaT9zkciN$S#-|2AnGcz2e`Am4PeIjupSwwCq|tQ5<{{+MIU~l|4B~U<5ub zU`+{j+vu60VtuJF>)k<(2U zCB2*^<*Df)!wDTK!wH3nXboDwcm2Xn1-86~%SE(NccUQZLAY3wd*W(d@0JhRVM@O3 ztagdOzy1lEo`OI4`#>({%;42OMlesLS4tEkNwj<-U~NXAaakrF}s^8B!3D515c-4jthzhmgcVlOV*ju>8HT< z2~%H*R9$o&5bdTW=+r)VvyoTMrf)I(2IVy@>!SZ!Y$&pcIMwMsv_@WtdV?5sdebU= zH17Fr=$7m7xO!pz*qrptsO`Y;MHdKQ=c2?>LpCOE8=@R7=M?25nQvN7fOI%IbG{k? z03ZNKL_t)UH=H*3_JOb|YuUs%6uL`CEi`vidS<3s->c3Q*9yXJc}nD(l%fBh;ADR?|m!B#3TPFbgiO1#}+ zp$+KAE203wKt8{g0a}RW>I0s3JmS!9mD29GW6!ns$kc#0i zRl&v2)z=t!%mXWMY_JhtbhFa7;2v0E_7HJQQ!wLDqhQcv%y5EpS+=6*yn=(&4;L^C zA0T??idnVJ#ec?_(vJmqTTVoZHr8!x)xfs{CNrK|)y4;~sF&yw!k$k$YP+*PCq^`p zYJNe>rgqgW_x?F)jB0AXm~EzT{+VuqaGRtWvwTEm?u`46JaGn$Z^3{u>=qJ``KmV} z7cUwG>zwhaE2sZ8Y0j8VSy5l;Djn)rT*^i~ZE8vT$=NDe_}c!7Q)8B`sNr?EXp{VP zEb%J%w7EE%9dvH9s?SZJ1k4@}i&W}3L`RlS+s*5$m7-gcaEuH)01@^)&75n|38QOB zdfU59nTNxtg|?IFJW`l=K4*>%3YY$zIQMl z3_5sOTh8W~(p_NAPjs^rc;rIprNHTW5T4h;kA3o*fhUajqb=0oI8e2 zAV@~aOLnCGN}_r2*USGiRs(!le5v4w$I3!R zZgFD}cPO^x3PL?nEGb2~cpPfQO)d{M)kg$|Z%e?e(-Hz#3O~ICXl08o)H^u+e8@e?oq5=U)JR9UFQXmjK8)8u-5C{aH zjIVbL=QxGh=M(GDSPCn6ul8)|TS17G1mB0t2jFkbna3d!YrD`Q2u9EkARSI4&wXSK!XsCcL(}ETHKTo_R)cHZuW`UrJ&9i~w6%`wn9sgTY+HHEX)|8>uzbj8LGGe|6$%_f}a9}jt$K_twKOa zfq?gyg6Y;HyAK-FCyaNS-G7Y1-EKE`Vo?#Pfd75Vx**k+hKWO=6M;J0PaB-yP9lgK zVPXh;er7VceKvN1z!*EfnGcrpLhyB!Q>>wfN|KoaptO@<{0dDKx^2J}@nevcMQ}Nu zAykcRvf#h|^PjojI5Ug^D$yp=C_%uab1yp+kjxcbD##67t4Q6?0gR$>-D7}g6JtGg z+^Zf}s0GLx`CjNoj&1Gg-kmJwAA6)F3F4^Ad=mAj9TzU%Ii9790RVr3m)m^nA~G58 znjIXQZ?1t`tqg?xK7d@a`HlJ|b=t=2K*mBvLve-*17@f$-qdA#M9ReJWesJk6fPEZ zNXM@GMSH9kH4u{Nq*IwQuA~fe6R_&xeyd=OU3;V#30lq*c3X-~aa;xtS+=6` zXr#(#Ke;{cFphXOWa;K!RFlA8KL^hpXZJGOzD!5!vUUnvn&$ub_rHl}!}-A3-yEx_ zAV;Jh0Wt+O3*}RSbO=5T+2Jk_d^fsdLeoQU=^rP6sAoQCS<3D1o)1&-HA^1w0X=_p z;ihC%mhrj0l%linl#qMJWA`-1J?H@i5i}tc>@9c7pS45Ej>j`Pg3leuUqKUs5G>?& zenQaRD0qNDPEh!PN)U`BF!>4t4>YT6P(ydGA^dyQaQD?hRQYr7{HghjVu<2S z@VfwvQql%FY&eR9JC%^T2?PRxKp+tOJPsJx-H#)l4T4WZyYr~EI{&B`6d1r$crZQ` z=DeY&?9V>}6PyefA1QC6BEXb}bAoW9MMi%A>>+j5$stVUr!qZOy+4#v0 z&_FrYT{3|t2cnsOPi28l*_V-mo!FxaDW3PzrIasW#wFxPt254e)t2VnvlXV74)d+> zDM7l$^s@ZPJP26S%$wacO=aCttzWG#RgUuL2)dFoO5t_yC4027^t%jn3B@Y^Vq&F< zqpgwRV-~92wq3EyQ_{%W0APtDShs9U9Kk)HjXezvZK`v_wqSZZ+zJB<#Y0>}EO+De z9x`_qGFJPP_g*&&0=#`!2@O)?R2#j03Qf=#5T+4lVr7Xtj0q`Y5ivcd-A~^<+E?*8 zz7+;<6a8)_Im(enhUDEQW#4-Zr4oRC+hdq&b0)@hOW}O&Ug7>dZEo#Lvl6A)fs%>NxAo4~q#eyUju#gi2Vl45kI8Nb zjnYT~lGjrgui4L{{vn}l*e@228Mt)!>A)At^O)7qGKrn!-!Lqwp8=g=9SkekZrx^g zq{K>;xf5lKQa`srLF|hZ#FBQ2g)y{QrDa6z<^0H1sv75_eR(w%HFxYo@jzER8zw-< z3IQ7RK_Cdbhg61ODmET`p#=~;2iNFv1poSm?hTsNdX0RX9etj2Gt`D1FFVVVM5XXE@%*f?&@tH>&U`^{~$e)azE$!z5 zw4lpr5X}|t9VyclU`_h~8DCQ&=f{KK3Y=Se=Ja-i)Rr=t2mIsj|0I{zT2&+?&X>W- zl#qGp44$Q2;#;)+c;V5ErC`7>q3YRi+|w#$Dw_4a&pGCAr;}>YK61Ks_3cB|qxKRr zt(u-6QhFj?y{8Pdzx@hZ3+vrJg44ee`Pfv(swaCow}ZSQcQ^Co1M}EFT9BLd95Z&849_ zF5*+l9P%8=eD%BW^bK>~%<&tT)D&9+)E;OJml$Aj$v`oD-#}6DxR}j`JWp{%fT%OH zG^fPEo=@zW19JQ14B(F=CMuEh4Tq09qyNS>%J99>EK z#G7e?dXkU75+14^W25%G`Id&P)FW$^jus9Lsa7D_ve~8@NitCxj)1FB_YM3`aXIZy zJbC7>oyluC$vP4Yh7^rvYN;nn>@E zshjV}K*6fDf^IcPAMC*^td8Sxj$D=DrnWz_+ppQ26^xVGUz#v)hr)oH51I74k?8^M zi2PcEoH?~jQF8N%=LpL1PWDszh`o!EJ;&*wYZ0_xKO)tEeF7bc-``^T~;R;M78a|keiJap`@&}*&mX)@!Bt`&v1o{PU ztwVL!(qc8RS{1`ZGDj8SPVs3FpKHN)VW>xI^Aymtr4!J*b9w0S{F2u&5WA`#+{-N^ z$Rei+k{T0y2tcQ z4S9~^-jzd)&WHVVaE-Lx9w6FBm^-N?=Oo*Uk0IEZfmtR>9c||hkUy?o3kJpHo(@xz z8Ue+P^FX;&KZ0K8X{<(Q=;CD?G42!;F0w~rN0Z#W(bgp)?-1G8cfr4pg0C^1C~*9a zpyMmt#BaE=3zAizgp<0r(JP{Q4|^o~8W>oo3w4%^L6li7US)C19T6dqc+O_Ml)DS+}JagEwHs;@p1AQLOV)Hm$N(Dl0}o#>?F~agz0EVkaSbn`v2De5Yr_ zFC16oRD0!F^0QO`3j9j=%##L#>IA*&WMKW@RmUI=h*;$i&@(CB+Vh|9UVJLVmg7n& zfVmTLV_Kis%GEt&$cfZ@-q2zLb*?TrbNz!_sw(RrPTyAsU-XYNv~VQ%COHjbl|S70 zTnCzQx0P)!PYWit!ejfM%G8v1lV3OLn3sakXwl$^GCe12)u$b%Gs||@6ZXR`7*Oin zgPX)MrwIPM-Ntzpc3D#dic8GbX`<&fN12fJ;Of6UuD!K2zCwgk5BfTBm!5!js>csE zz43paW&-xxI3jo_Sdw-WtXg%FRrWMkdx&SZ@Ve^P>;5vr3Bjn3q?TM1%vYpXKdB%6 zD2-C!W-fE>2jFdDJZktCW5pH+wkjk@lg<>un&TAh9lBeiNl5lF8g!q%@Bzc zyc0mbX%Gi#6jX_O&`c4G{tlWUS2Ccrh`*fVTg(rSw0#P&wb^VbP zPjrci^~lLD%Y=8Fwwwd;1p(ku(HQ(dIcZ%U%dm=6fTK4`abT=B17|`|_ z|Fs#p^()v5lUEz5$=+2m% zQ_l`_-xbPG5U~{FEidF_QXG)9^CblOYe76Szh(BbA(SG)hdQE6S4%uDfh1HQ@xFdX z>agK^&&$4&M_4oQI`@)HCwWfnSysuRMirJ6dszm7I(3amM~CLJM7cVl7g*hM7-hRR zk$o?DgQQ6&XWaGN6*2k?24gi=2c1i~!m-*BK<{gj#+6+Escffjuh+y;;Nk-Ok{=Rk zBch3;cMwh7m{{43ALppbz|7C@9?@(+Z%b1e`)j*=U7jOziqpl$NLwmvVLK)br!@b7 z|8=}y75K!Xk$B0uvc73zAJNEn%jtd4ZsSLE^!d!)HvDj=rRzi|+mxogd5uLL+*{7j zkpv3p(eAT5&a3ykfkX9-X4NA)K^bO@Rmw_7LR+Oy#Sp|J>>s8rA z$FO>15xtcAbIbXY`{TBg{T(fz%b}j1IrR@O|0s!M<}5aVfn%w4C~vDb(|a0CKNgX0-1lF4z!8bao{Y= zo;Q5fB=FqB1|&zS-ZLBydNaUzYa;_|%+LH1%$nrn(6|f?U>Wu=F@Fy*@(eW#*#y+m}Se zvW=N!s%}z^z{GFSYa`vx#nF{kHrx=y1!-|-YVeMLRqK%Ux|(LS7$c^L4fmM!j%(_x zt16yk3~Twd9$&K2YC9k;p#??*bJ_}6fU&%z>^g)~E7~#goY)fyUav*JwHsFUD*lXr zwcaGemjV;pY~sip5U4!0MXgt~J5p48eu_WGeZUG^;t$?fTN?rUufNo~>Ma(!bFvBI z;->o#f0tzF#r@gnA|L*_E)m^>DP*n}&|xNQvRJK?QQ?7sfqyD{YAWs4)X1~Jtm{0k z7T+t1IYtkXEP`l}eJ?ooFlK;At?CfdW$@mJleQGs>{N0+ivQZ!r2IBB09!^M-yr{dhHVxG#z#}=dlNBhQ4fB#hvRE0sg6CnPSNjF{O2#vRKrja6 z(Yxz#R3P|z$f_&&Ss0z&?KTsqS|aY;Mv97G~C3Vs)cwK=5WxHW*=vZ0dgp=w;gB(h*xp$DxvUPqlsz&cMKVw(9$`|?f{S@xlj2y zwE}FTq@4Luc?AV~Xfwi`l9{(fhgU_$s0@Hk=C$^MGRa4Y`rHLKZ+U_}KHd~0R7ar~4SA0*{*@Duuxta&I2(zQHV~JcSe|}A{ZoO1W#S5?f%l*B)J!ByoWJ@?a%L6U z-I}UQ1dVBt3)R^pk;Xv26A?Soo`fSzFVoS&r<5cbOf9>xT_&})K zYJ9eX3TfcgIHwSO+lEAH`5w^P2E1FDTv}N5+zp94C^<~#k@hH^QzF^su!k7grj?Pz zA88<5E>qK@Fa+%xb<#xvr(cgb^eClXIq!}AO)p`uc>VRlytc`|Vc+Cv)3SFCtmD)c z2dExqW0?d;WaIA(Pxu(~4{NCepHgP;;J5Q97;#|af6|mupy14Dqkql)uiEK1&A-#j zsRLbLl}0IG8zcpGDQI?S5~@VvnxB1^CZC*Fe41KnC(&N`V2mmaETavT7gcD=ejVxq zl-G}Y#yfVz_l&Koq#*zC-~R2_X_Rn|ZynJC1OL}70gi9ewzaV@5wOeHx@btwo-J#w zKp+qZZbu@!xaok}C4G;3gRIZWG)%ZYla#8ctBar*QxX1fK-X z!~Vta217rly|@6JV8Z~d?-K#2a%xh9(~Kr#oubCa~5e2R1e?#lT7(H zp|78|5!sg~nEM^!33$0t=o}#rIM?@MezT1gqv6E$N(x<*7b9eUP$Y@hYo7u(ZYDdT zZ(!p}0noDh8Pd{YdN{pu%|;+YAzQj~BVu~f=q=XO7=XK9N2=mF<3v9S95{OtWjf+B z&ancxNzA{sImNLz%*v^VoEx~lY9E}d(K_Q$!;mR6eFbHJmx4dB^3 zJQvpM@7dP6f+yl3XAA;?Kp^;Nn4QKt#MUjAuus4iSZ)ELa5+0NieNtOGEWf9MnVx} z+E&{0XYev6CI!VMs(tV677sDb`c+(M5hXZ?;B2^NCh{noz9LSN;^nZR6K%&w5%?)| zLwlySZRGH_Ie$?4W`*PfwxFrA$0y;oD)RJm&#M$c9gsIA5@AK~Q=mSE_q==7%548v z#^k2}?IB~E*U5l*bANmH7?5zoXANZKxe=?j@y1PSI4=iyORMZS(!;MrLZJJAQhz)M zxj@0Nx*go3t11kL%JUzaUfM?Pu5fDMe zSUW#KP!Dac4fWHh+09HIvcv<;dB6gS73l57#RQ>;eWdL*dS13>ndNv_LX&xN zMb(%F=g=snT>U!}pfn4)URPqFsTvG1l7|7Qwp|FsJNa^B^DlVNH_wwtGYroLM@Rzal6~b+0Po zGWG^%(C^ec*j+*xR{>P-+d?cJAl1I6e4*6>9MWH?U`nSc4001BWNklmPS0wG*8F* zkPbwJeSzTn@Nymek6!o~xV86JCv+K`f&ffMCY2+Y1+(qk zJsWI_XKwZdM==o0K=92V%GmvI_w0CnXK=X)Ka8M`bGn9fIKcqyVM*b^FL36)WV-=E zqtuS-S@*!9ZVPhx77oh5nW!79I{)=lQ;1s;o*dlFcz77T#hnWcY2xtYb6Dt1xK4fk z7IdOGn=~>`+BD(my@=2u@+MhVkI#Gib#+*MG55$3X0PgkdqMoPvvKeCJB$u@S21+l z&|u6_&n!l#Wz!8H+QtjKJwgy?zW66d+mHq|NPI9^Qs7{U&jmST#pqrWxEn{; zv-Sh}I&?gnzRpXLj}dBe-s4EyXJ>XN2*sdO?tyC^gyn3R{i-dMcS*@!8R#Bo48UA2 zXw$v-H-9t)3ZgkH4E5hf&m>DDZJaUATLTnVquXw!Cm%NfTZKLI&%E@DbwIHN~p zRf7J8hG)Haxl9v=!9AIh^FDEGMOA%J#p7!@_A)tEF9nIzs<23Q#L^^s!Ai*wLJk`) zMc`I+U+$+Re`ey{(3S!DM-{;BPFn(kUaq7mYsOu;K#LXZOP=w{7w31aF7r_*7Q_X( z-KRL<9LV2uq-4*)FB`GqyOUYr>A{tXnA?)3V<<-k;#qmz4HGBSBnL=&X+zzpSEkpt zV{_HG)0LH}Ec}trxjE&~em+wu;pj2R5n$`!riT({eD5jyaReQ2!4Jp?K?hn(ReG&? zsP0dEZqW1AujCM}>}ATeQvvp*{V-i`KkVM3J!5{SA5hS$PUzQ^O>dp*{L{j2SLSo$ zL`*+-gdlhl&ggkh?#)RBr@i<&4wa0eK0n8HY-!zeg!M2>j!!XU#6}*0c+XnlvK3Gc z8w3J@Kp+qZ1eZcxt^*Z(4eW;MI3ea&!|GK}_Pi{pyG7Uc5%@K;?(O*P+H-AR!858F zeIpXuEBp0|l~s-mKNMn*__GL)C`J4hT!Tj+Hk@sY1A7MKB8jG>zt1Z#k?KwOFh?-RK&#eXeD6vV!M*gQLMIK27W z=7kCTb^CC*cyn>2yB>emhZO=g(lU7sh~2!GPT2q0a#$ZaZIWze8?eRD+1ut2Uu4jm zHn2ggMfDWmD-{T2P3C^7HkwYt;^PsnZWzNnWDqk&p@@cPsgHYE6$Y-x_WB)xo^ z^vX2~nf7-v+dEHN;ZyK8L|1ZK(bRysrdtwvq69TlmG!HspwUe!%XjKQ!sN-yN|6#l z)3?Q>9JUbT5i-3b3gtar*s976a`9HqC>8I3lTK{$f&;--PA-**WE&KOUCFFIv_48r z>>AGgtKGk0IpYtcPQ%gw@%fpE+Jd6tiWt#}Ij#1#$x>M%#(ksSYM6TF28MQ(M$-8b ze=5HW$;I^bG%w=Zz3wx>HD44=UiBhDRBI)eIYEcw=mWN&xeiz&o8sSfdh=-3Pk?OQ z6h&W1W!48BZ*s|wZqxo4*-szHDKTL-KN8&e>z)nu>Su2L#d~!qd7P>{2)eghLh%?x zxq)%M@*)&;-QTDuYFC4RLP{cFd{Jg+(eDF4jh8i{ki}xA&(Zi?8(x{$h`)Z=@P)9_z)3q$fj}S- z2m}H_6EHxImh&laX}VM(NK?dI-lR6mb^W-L zR)4haPL9Ud6^$TBo&}d6epp`Iwq<#OxfzB*Th|-n9EM05Hr8y&?#Ih{+`mW7{zt4_ zpIR*ir@&LB*=ACPLPZUC`GE&7Adz^vt!b`90$8v7l__Wq_hG^8XmvKolM8(UtXc;m zd+_L8R%?Kz)QI&!u9m8Ssmn2eyY`=k;wDTk=CUZQ%7mFgpWLhy*E`}z9@?~m>(~qD znB1W(k6-J{YJ8;BpkwdR1hXu1jlaDXT-92evj?+|YwdN@PQ^LW!p^5*X*5XG`BRW; z$JX-}HqV3;q~82&?-S9pn=08<+DpNyQN)2y7 zE5Cl5BMfHh8&2?ukI<2yaV!YF*GrxSP&VE5?K&g@EMy1exeSd7<&&jHIHyqdN|Jm4QB<k)*Og5>OH^DCn0)apv5C{YU!4rTd zg^u(49#It!Hl$M+e2`tT;CiHj8w$P}?r1?;Sx|-dU2E8Z^CMA;9ECwzck;Tv$0iq?mvN`8$8(Dao8k{Eu2eDb`gSaN5-l@_ZcH8{4fd*m-oVqROuMM1?&BE z)(l-umG?Gidr)u-s?M?m>u$9kdNy!uE_W?l7<*ss?HJUhuyE6Fx;6*|Qvv_@`#+DT zr=2$`3_1H>4A6^Ob#C2y$6s>}tp!kD8m-T$lr^3NHv&c%iios=_P)M!N1+@+j|(9? z!+=Fqy_n--Xr{1NThOG#Wa!r7Cm%u5NZ>>!ve&Ak)p6s?>l3v@muB&d165Ai8sYURM%wWT{s zYPc9SyZ)LyLZj5M*xN9TN8W6WJJ`lcvu21+98iQX9b5;F{Ebk{0te)QYHq=-sKfg) zRC|u+Bmvwh#Ih^*KcB_fvhGs}jv32g)suJwEl;{9^G4BC4}vM=8!;bF*MsH}EQKdJ zaF@s%G{nHBrRpipgn0&gX-jsEi0GkQF1-aKGZL^8XhrAaJhfMIrun=1Wizx}5+^r3 z=VXEuWD2lk_^KPpi^2$JpxkcJGcsiW_GsDPS$a0Z&M;QT>ZR8AYO>Qz*fZ2p z;p8x&zdGLd>mH)tXx`10_Z`EBtjGh;>Q&<_c*bMW!eAwd9Ah2;tnsi7>B@W}NjOQx zo9qRTB<=Wu*3YV(G|FcE&0@~%x?)OIAIYU;hk&9v zmQZN!0frLkyu9d}c{he!{nTxLXH3_8?u8esQf)&V2|{KzY6B(Z0*Q`^T2E0%H{k#J z_rHl}Lj}k6n zb+JIu0itV&r~JDXfcACU=z69oUIjP6=wgelhf{I;S?uTHVp7|Ef4gTYBd7;n=O)#b zLdWTvKp?mS;Yoww0;B_4bo%P+azHkhq`jH_0G89KJ~hh>-i6Q}glIU;Y8dX+lV`e? zyYd;YBe))N*dP!H1V4tV(&ttoOwJet0yGd)3f>pTN)re^AKuDLHn}|zR;4nIMCZ;y zGpVfZiY3h?5M*FZ8sxm85f~47z~*67E<;=F_m;$|yIiYXXh^gr6XInsT;gV{V)9IS zHkjLFrTSUSIc)d{_N1=|wt^O2T@hyO!qD-(tOXwdv@*y!4#WNvgm?0L4%14^MK3QT zN5N*|nhjg7N@3TEn1Y;M1_f2ehV>b8LBWIejKcBGQDyeLrp=I#>%1X}XR=sR!PIoHjkJE^XHHGLnBToYs!l1CeG;Nyx`qb7*TkN+gqlHLtvdcU!cg(3 z-7|g6x4kNLAaA|NnVoSmj_^VRi9k%3QOb@W_e6@H z@37v#VH{O+IdTe;9GfIf5?MW$3-3m^9ET*tY_=_`Zj?CS5>Xwns%yC%SEh4{q4vc2 z4OL>L(hXDPdy|p*7ZeaaCHt?|p4Mqii(!bIoYsp*jufK4M_M^>6ZMga5%2eRb_%%= ztQW>1Az=HYvVlGLU+BRx3eKxt@51pz_WA)#eVV`SuQ`N&OVsy77A95nqhllpgqnLm)CL0J9MT!;zGH zcE4OOms&F;!jW<%o_&Z+Zd55@7jkvev6>LlBsa#Rd%~Yugl_*x^Sc~@SrN-?m3TG? z1OmZNLD$wGVHgt#u7lHsT`}&Q{_bjv1ka3Ila!U)%U#U6BM=A#ccE7=a7mDJkDb$R zkV{%1_yXYBr${EfuqQMP{JrEBKI0rYkXrXp(uKxTnNyrDutQ(zFyD#Qo<9C`<8CL2 z?hv$a-XMn!zXR`#=0E8p^R{4*uk8qd!5x)<7A`&l6(q5R5|w5U2+l)NAgsEsoDV=V zNv)kdBP(WH&LcXex{+@u&2A&m9pTj`ny*?n-uWB==}|+~NLT}e0!SeEe)P|}1q0`k zkX<{@SuzAai)SwUR%3p)S%^!&#a{SRFdX(4>VEh=*y~oM3IQ&=C1v=Nb80VRl$c8J z8E{0Mvij8l|M>eqTW{UGWTH{?{xrHCy&t@&1>nyLU_Gm&8%{73fn_;^Wa`bXtcf{! zpEEVU3ziko`}f>-Q#Eg8|GROX2U_cDnHazpx9+%RI~pZLW{3fD2DPuAdaGTv^)Ap2 z;qWKGJ2KDMW^4m{D}0460PzqPwkos1*n#u#Bv2UUNP`o84S^nr{~F7CGC;pqQc6bf zl6{vdjL5#P(3J+lwE2A<+184%fZO_tmU|&Sv zh&@7MO4rFZx(PH^h^C6|h2mFOi6z%=IuaIab*ojoS&epfupuLpxk$KcwBxQ)K&5EC z`UhRvS{XA2X5(B^)s@kyj@|i|NJ+^gspGDibPS*%4PwjYS}^K?R52Boylk953A|6%NqCy?>_MwC z2nlV_dIym_U7*NJjJP=ciPu0yGpX-qTaY6oIu+H`UC%x8F=<|PMjmCFh%4T|F=0`sB*P&cx6j}QLD-g-LIZ*4Wbg@KmPr1zv$VZEeo55pNgy{ky%cF-Vd+d`)trc zuPG3uaV2Gb71E6bUjfsR3nE(B({CMkWXSQI@%+NB>k1Aw6TPIxaX~w#)SWwwU4FwZ zE@Y#AKyd^&V`48jBbf8Wc=(Xe`C*GkhF?Ivw4F|^o9m&3UC_@}9#~(&Q;Qdb zm#i!mc>3Mm&sU{P`L)(B8_Ni;^!EX0iyD5lvWg?+D4!t@9Hc*F|5mUfd7925SDZvp zKIVw?5Zuz}g;wk|ApR;`+!p2Ddv6&EwJ{}3`SCK0)UZ30d5@ng9Pl>Z2Cte&qG52!UnR)er ziS)?yGNFM?M9!gw?`iT|>L>f5w}fO?%vo_9nAM}NJ;sS=E(hR0u|vCfw(m=}wak3> zbq_8!2ra+!*1lJ@?FrarwIvAHz1CW+adY(++uFxA(fL$A{g|fE;NDFk@mPEf$lt(* zoq9!RPH4=AttKv>;q`-PUwwjnmt?oet%*KFd2`7dM5b0GWymMk3ZUS0q!8$KA6!Ab zP<-n-GuZcAUHG{-nh%f1U7w4>be%)tktq%8S({F%sGRC)z>gt`j>85y&;ML(64G5x zm3N~WXA+MVnq2JyY-*bQXaROtq>WQyWunhibd5nrchICsxi-|CfY-nK^dY147y*U- zSG&{3&qdFG{P+=eqx(%^ayCEl6XI*C`<{st0?|+>D1-~E9u`=sjRi1_6rJVGn4w!g zzRN{${RPt^fAVN^D&(AzBsfxoIL$4v|$?k%AMH#o-@>~{gfWgd?1mRg{0uEXkLlrCOdQ46n@v(IQ( z7JnQHFP805>=c#XsoiyY&ZR5rF=Sqv$kp6}TmyznUiN%6(~-hN%HVx+phJ~Kjwkpp zLFRKiTyrGPzoLt9j_i-~^tYZj__;UGmAN7NL<`IIR&MVQT|I|rhdy*`^IJ4ZV1=(^ ziS$kZ=X8zahKlud;LEmPBD7((*2_x{;{;y=GqpU;(m)`XiYLkP@iwNpWX6!IMV-nS z%yEnBrT^|?3(f&pc9Pb_@y_!%sHf@_4jU%+W_O~!x!^d?^8@(E1`kBC>-Tj<)o1rO z%0<-p7=*KwOdeAKT))ARSM2yfAUL~QcHNM0<*B9co1J-A${It1`wKG$JSv&PqLzVD z9pS8=1|J|=qboggF1r|}Bxe)@urHvS=Zjg5z4smXOQA>_#zxzsWIt6r`V$*#1krM= z?hs!aZ5gqSXNHWf1&D5ke}x%C3#dYe28h;rB@$#c;ExIQskO#4+V`1TWemOL%UCnh zsxm3r=+G=!`WWsV922)LBaACGn-RUc!h~0pCor*B{za`P(ync1!@i5&4aQSdaipf( z14Osuh=)OYfapYGwHvGyqV+~5z@ubN!o}k*?4(ay53}*21K4Fnvj#lDhJ`C)NPuWQ zT|grIPxO5c*Os<6IKmL3|Gb@rU0Sg;;NmdFp~1MVs1`51eQr^V@8VRg))CK-mAOJz zx2(j8hud+!@-KV59tdGqYy{Yyc$G9s)m#&hCi_TG%23F+Yt!MWpc)_=c!eEkoeBNB z!M|0z=;eNY)LG`PH82eL>8>2z4sbt-@YuC0a5UaH&~D+xNP0MbYYT8eNR3p+4CfLu z{JEjyC(7IO3Pz9~ponQlyVH!?qBTT;@iBLk{}EPh9*mbH-o87_9|_&eZomsh=zmd9 zhhxyYC8=~1dx{$tnz$f%R1pq3cq+S@#qJ@F1L(EC&L?MR3LhqUZZ&Jn^uhmp}=< zP~p9j1?L@m-DpP%QeB31o{PaeyRNH=uLveOc$Kctr) ziSL)0pN^FW6Q7pk9N-4aGf12n8}XXBi{XawA<;6|p5@m~6sL@#hVTjY!;~5`3|$zJ zs_Q|@;9&-)lL3GUV*E;uL5OP>%(G$QjqF3(NmgsigrOHm&EbWm;W&FZR!gDkjtALB zCwtjK#{vT$#ato)56Qf>b5wmhTn8+I`OOC~TKzU2EU?Ye5iMG!iMwbMTIyc8tu z(hBcbrRhjMqI=nzE`aYz&SBSy{oJQEVAEootn#}z*!-<=;%Yyk-?wiQ>;+#NA5LU~ z6HM`rRcuW$+i9w_zzs$<0MXZ66llY4b+UJTYuBrU$eCSxee6e4QPf01tn5r@|?3*2Q z-HRhjTXMRK+=gJ`jzstj^w1^c(4NBayvERVBuoZiJ4o`pStqU)$(}aGArj z&A#aeUVIA~{oyh31)q&)jxq@|Aov}SA$W?_cAP`TYWDPUG+|~jLT`q4&xY^D@%n`* zk#CdJ)^)RqlO;$X=mmVve9%H%Gtb{cFdx1JrE&$ojo4NAO8{T@M)#uKcLV^e^T#Jk z_wbLu|MLOGI0WsefBsT`>2(FA%$3deKK76S7v?gSsBEz!c zFKWgMkziNbO73sc06H^n668o3tZa1$SAG(a)!QomVUI8dp$pJ4C$pPzamPwGyc}CF zl}nwv*2aaU5a)nZ7axJ(2$G`vWt2`U_)!*>ejxGQ#N?Wow8_cO2VZI}iSmM=w+S`%s zu_shWdf^oaJ{Wot=LW%7f^S*~!R3iBt>ceG?2e0Z)smvwCmsCR=76n+zHouNd3p=8 z)`kzXHwC-tm{_RC0-0erY4R*cG+F{eje?KC&xYRy(a7rt&xSLA6VV$ZR}Yx>tzna){!+U$8Z7S$gOM-KC8Kbn zaK;&yMu?RTpwW&pye-En!-;5gY+j1j3rEw2gaL0DCR`eW@jv4Z{Vlo@W1E&EQxatB zt!9Dc87ll0e6~`pJk12nMTSZ2E)!$Z`8^wnD}~w_=d@l7cOA|X<&JsYJLEY^%bvhk1gU+!9Q$M{Ezh`KJ?aS^X6XPBHV+7Nsd( z=FL~wDoR~Do)#>j`LLBURe;?4qAcWH-PwG;#uQbL#s2PlW07|cy3l}xIn3=Dq_DW$ z$Lp?;NV0K_^8vWMeG6|`3yf?3J_L|YY5qLsHW}HJar{}9=+0tAzwl!)6%Ut-SxY`I%m*q=l5STX+xeRsj)lf zNtVERc{~28DZHj8;@A7FooKfUGvJGH4SVVUm<tGAO^6OlNJ;R1m6kq@#@6;tzR#Azv*c) zo9Ee#|k>CoU$epn^zDz<(GMA)+|385y;G#xpSq zf)}CT*o{FY{(ByRV11cvj?M#3?H-i^AX&-D`@_n~^@^%t>;`@@ zeIS{1Oyph*CmEycPWOo? zoF_iLj(kn%6rC-{6>}jMF=%Ex1;Xw_WOqsZlvL8i`Iw|u4n(L6d}M{+X&VX^sNDfaaH&6+bh;YTg(WF=r&W8nFur3MOI<4v z6cu+Fv5h?q$R>3yMPwGlt=siL!0x55oclZAx7f|)JMtbxC%CSgo!ZWzGNE>2<)bI> zI>UUSfY5R&bJwL^AyQDCkK{Y=TkP5yOac5+qkd?4{rap@%N!qN>DkQ?t2ujAo4 zp%>}s{N#|87{Mg6fb4I_Uj+qfk_i`GprVN$i;I6F!q+hpr6p(EBu%Pw`LpgkKPoNL zf#nj^Ug4XpqWEfy+B0|rT8?})Ztx3<7xpi0ESL3LdQNBEVx&Cly?1lmr5SKp+qZj$#&fyr2bh?D4Nv9}8xIScLuc zms(f-=g(?P*aU*J@ip}8Q}CSHc)is7z20sLCxXC715K?tN>M+h)dkJqL488#KsuFv zRR9mbV6KE`4BhzINZ;o`4jU{Aw6FC+PMtcL$d&N$mP4m;5Y*<~FfU6J%VRj<7170dUdzu37bR z)iR|*CZ55BXkdG2z1~1%l)Zvo4&wG&H^PA>dD3vaJ_drpR;|2CT894mInr(0mq^dU zK-e&5m>zd*f3oI$RG=%AhxVu@W66s0@o6$MC;J+h9C9z^MZ3)PVw#zx8tSiwk4x>u zgN5eEQ{_xsjmsACz0bPqb#^a$9dj>d`9Kr$=ITNmn}1ra07^k&*$9sxA8w?-k@bWz zgF#upT<<^SpNn_qo*k%K&AukGYZe*FweY(9UXp=S{rl?YlTUF~SDfx~<7uB}rcYc-@;#8bR(lByr*!+ZXppl{51$1ncIqzwJfBgNQ-}5r>O8?@~3%Rjv z_w=E)!Uu_W=h`~qqkRQFvSu7b+snDd5F@wzDJl=t9&0|D+yL0Jw=T>&DZc0SsKbq{ zGTOz_!B=@L)jF>Si2fHny@HEZ{lL7UcpDy%qa1VQLHWH?|Haa_KjDw z)nBH2gn;jF+;lFwbE*%PQp+Z8XpKt%#8K*2=LO>JF|Fp0Jk$Y~ZQF6V3 zPO*3CXc84d+WbJd+FxpbMv11-5V4jdse4{7t7U7*w90Xme^y&AV9c&|oPdMc=@~Ve zdFJXTw{^fx2Ht=#JMl!Luta(T)jdC@XdPBhR`v+q6|=5mHu8hdYE3_F(!17O{iGxJ zT1BNyKesYvjVxh-b?u!T+MOY$%!fV=1?lTeiKOptC$lnl8sfD$Xe1Kb9c3`{mbjTebmV38MBU(G<=GW><~i#oy~q zY_OIIyS|l}XR!j9DLQfiVMmPTktRh&E$re~8E%?yjB?NNV@V(F)=t-(TAP@)y0)apv7zD9&4s~{TUFudK2;oP^ zt<}OgZBB)oA~X`L8Sn$k>JcWE+@$%x*?ZT}`=0eaXg#xkd6kP2(xkO%k{Z!s-V_o= zXfZ4{KUG{!HIr;s+d+)VoX3d(*GtcGo=vW6S_bR0B zn6u|qQNM#&YZ=&q5u*X+U5N31CU1p(e{s9Ph~bXbc52#&SRh~NeK0X zOZ5Pf)kJ241m`bZSf!b$K*PD+%+S{;LS5xg9eB**ko;)as*aKEw27sjc4j>^_Q=6Y zW5o2kC!tY2!`>b06OtF>KnEcc>N^6b9QaW@^N1k0NTsVE_BmV9OsKLn;h6~5_WJ>) zHZgOAjEXKDcG<1k5YVij2Tz9MD!DWS;B{Rp%LR0HyYov#UyXpBYld?`KIJ1Uf1al{ zq825BUJF?!JBTEK5@k<9giGlAv*0`gy=Cf5t?{64DUu^)##ofuqYYhpw0SA>_(NJs z(2_m~|Km!2Ld*2nlk_P;Js#rul$ow}d25jX?hYAN)wu4X^#WZ{^33d*M!jYEXWTPp zND`0>c1`BbJyTEL>s-IL@P@4|bhX>lPC#&%;o!=p)=$7^Q8<37soztIR6jNLHp&rE zUAwCy*|5y_k)12n)y0&g`cE|Lqt!)M%lcVES^{qFI7%h2t|=Tyk)k}3B;00Y!!Bm3 zw+G0lvKj!)ECiMsh3XLYCx8UNkDaN-UJ)lpq8w0jw+M*dLaRepW}Z6tEOl7JN>-}6 zSfqk`iiJo`S{6IBow;FlI-NDbF~+RsT8eAhrhAp zEFFkHo7mX!vVfCP3yKd9_qY7`RFS+G3l;H zjLU{9at!5t0VeIo>pTD5$=HAi1!soA!u!GEeyf{|SHM9d;-q@PWle4_!o@Mr$cA?S zhb=Pp;I6xl8TT*+DqEfkj61;klsv2pTM(UtHpAY7nw}i@=VPkLPw4qqN-_HjRkStR zC|B^#f*6d;Lc71slO-A-ypUSdOwSk7406C6V>B+MQ*)6Gezx8socF3Lrn0(XtWQ3S zgK>Rq3g=?OQVpDQc^9<|&2fE|m#|l9$2b!;TJSobk7&9EamCn;)O=MpOWT*7$)FJhP7 zk;12vO0P41^W739m!-9|*bI@WsZ$wUkd7QCQI*xW>R^$+mkniR$(htNFKQv**JwnU zwZ=bs66=CV`3$kY!k8waspBZo5><(Wt}`ekY&pFJT`;?9${?4XoWCgfbC8dE+eoo0 zWpFNy(o``EPT4-r>J}W|4U6z>8OKC~K@$U}azfjN9!)LRZa9ne`^}|qa8kCHO2Z_E z=}RbIfO-aPZxBlyjgrXBuj0y3QJapvSocb@FzPRasO_;f<*aK=?WLXX4H}S&sZ{T1OnvqmJ23cG0;ccB@&YwgTk-TDq`dAxLtTD^6iL z;J^FZzu~26lwyaLb*%9gq=)of}652sg!mL>W9GTsn8>|Yg@(5yXM26Ngl81D&^ zBZ1ce1|yEE7#n7_I0{_2STgb3!F8#2B399efe>nTqHFDTVpG$OQLh&;&R{SY3^r6M370Vxy#6p4w+8b}UdGr!l-zPEr(`%1nsEp!xMfmQNHw4Y zM-7E&2O*3_U9~XEw#**79&%i@oi6&O8NW=nmuV{S6ZH^`Ej}v5 zNB%<#&_6ZsERDu7{03X$I_g|LCAI7`zQ4-6xr(_}DZ+sobm37<$tlOQ$K|{&)*+l! zzr&3hwGbAfP9Zk9W)}%OP0qrYZxRyNHnE88XOnOZeh`k7dg_>#!QhSgRHd7_p%OVi zR;iWzikTRQ@a&aS+YE=HTpuako|;?em8t$glB8z2iM|&?jpA7yNKu(u+yq?eYF`Fp zwbZ_jVrqKYuv8)Q@Drfqd`uS)kWW=4BZ^#bYH;=tHYdP6r)!CEZRKA5)+v^{zDV^G zyJu6)AyT6_Q)cp(WFMrad4|6z!~C{&>SbOHmTc1{N8gL)$vG$w@QYeK={e|tHKu0S zte=36vzA&FFj{c6=t$+gSIrx|CZCKrNMz7F?dv6{rl(i zhzDVKEO@dp7>o#p7#n7vda1K9*JguJ#EC|z!f62stgiXE*kFjF@%===_pSCQw(j~R5 z>ajI(^t|S|C2JknNA$>%gN=Akc5M)VP3x+V%N`ISc9RI!)*x-G4mdk@@y#3pt48vY zrJ}a>4<(`wtPM2?bW_4PH@qiUkTjKb{7RQelFraXy+x#AAP$2QvMQaF58iFh4RJu8 zoc;qtWH7|8tE?!|`Rl^9c?n!s*@16ri$H^x^VO}mX+$+E_prNeO&*x)x+kSaBa{*9<_^@ zzjns&F)8==bxLuG7&7DNQms(1`j)wTOJ&SVJMj zBW%V(>5!J06BeK!vxVNwWOUI82&;0=6DTKaSnp@b^e;O`laUn;&z61MW1WIa| z>E-hZ^+$Uwc2cyg+CN_3ZAvBnZYxUqEQQL`Z@Gg{a7LeCRbqg?{jskNx#p2qe^IDa zx8n=EU98}_e$ll|k_MNP+P5^}()Cek zmUsnN9j;Y$0yTTkF*>4SHZ2vt27eRE=Z{@$mQf3v56fEI+D_Fh>iFtX(*RF)RqCKk z*U{b7>->vn_;ryZw~Pa9avnj4LTdcTHrQ}y#Vor40qQ!mOf?6rR((~UNh(x&dS3rf z{s0~=T{O@ZT@;$r!~3^ktn43OS8y!b#H``1UCYalQ4s5OI^(~w2d9rTS@~41o1Em3 z&=7{6AA5~7_1LALk4=2LmaBU$2t?h#SqA9)!cv)aM(`;SBewakBR*UmU+78&=(u)! zeMMx!LNNqTwOF1;ql7mx4!>d?4w#&O5QD)u8CuyWt*kzr;PPTv)gn9)84L#FJ+K5J zAE!@YjDs+yxDK|Byhp9bhDhH}&7DSDPYMBx0(4tH9IV-7q+dkB!o=8!aZACz90~3( zSHk*}Qfr z0|)z8EZ;YxlWGPXa+flmEm`IyWZjiNJoGd-eldPD!#m577qL3%1t90%-Vdn|hqGk0 z2gwxeT6AbT2!_fFI+xw11FEo@5>ZZmS&|2e8KjR#!{W1_YRP%EZwS&qgik4zk5MOu z*8f%((y$9hAM~R{JizY$b^o>$*%-eSd3dpv2b|b1O!~DXg^zc^xo0?X#L8RlWM_y4+kS=4U<;9pADWRKBRzrf$x>M+X@$iS^5GibW!GZ}fs14khn;73d1Q zO@~a-V|YoMU}K+bTj#$8KqhJ-2+&Jk5P4rZI|%qfm(GpvgpFQr20iq&X- z+Pn}If2tYzENUbbT&%WJPZTB>)4vkLT;8g9x@cyG;C> zv4%(Z!v^Z?xeUe@+?ZA<(R8tH%u^&eKV!(d$b2H#@|l|86iqxP301Tqd!5I1bb{|( z*3wSfF1A-N7>t84XZu^09{JKX2ghEW^3i_tV~5?s+6@l*7znLY;sbcbrFReR9hg3X zMSeV}=5$F3li+ZxUT0tcfkSb4xHm9*_&A=Y;6LerkHZ?q*bk|eJo&MSoQksL9U%kw ztw6ipB=dPD#Q>Qkl{}r<7bEX)6D9k3ooX5SHn^T+w#%p+S(L=Tw+0mPU>V&-~Rnj3WS#A>Ba^9 z7BheyJcD)cjY*mvJ4PPlNlU02RM;UP+o&jg8~OaA{om$=f8*w^$jY+v2PQgd)mBtj z)t5)euBp9af=X2ioX4&-+jX;Do#ak2b zZo2^Ssb=1i+hSHxJhkbRa&2e$C{h3~-!iRj+>Ts)O|;K5%sH8Ros~V`jMWSuQh3eZ zh1`RYU7+>olzFs0-Ck^trgoXt@t{tvA zL3UPia1(fNq6>CmIa>u?r=vKKVpPG=~Zyot-;d@%2z@8DBI$yw}Fd(Ojic_Lq=1}ub ze)~6`7TM4M+-ti_pg2sKx}I;thMM{h!2kdt07*naRB^K6%cHo+&^O3lo{S!-Ft1(} zN}E=-&7Xh-ac>%bvnAm)yRR0IdlxgjtV+RzqBI63{te&qYPg;fk1)4Gjd;r*r zI~g0Uj-w(87z_sEZdjadDRoO0Y?inLh{}fdImR2pWzS|?gO7U0a|YuW=)8`P#Y6K7 zU4Cz7nAb%yvcX{v5S3CafyK*rFTU0p|7hz8YqLWu6xrZiUpvCJeai(;FfIkPSeYvP zpS2`3`7hlMXF-WgMl66dj11LveFLhF4>-$(X%O7{@T$8W4N<+XA81G5Se6hU9+u(f z*-D0^aRmlLmq0wS5o&s(=Md!;jUdJu$rF96o@OmX)J&ToKT5<>buctZlzT?R8I?g> zKxoI2hKOiVVI^t}KtYR41tlnqAT3P7I^C>Q(!@3OIJD_Ku-{E!^zNAP3`zkFOB1r4 z9(XleNtGkNF9dln>k1%i`9DrkXN}@K(S?^Th&ISxk)Sr{D!oS7KVtj|gP4xaRbW00 z1vnm`*AbqL`{6a(*2ufb_4fCvRjJ6OgUVeIG{H46II$Mr9M2w zQ?|HRZKdB4A~NrM&P=ZZ?Jbbh;54vnR#l`s;o3A}x`oafB8P*e zUNVpGUyy!qzo{wqo5=OH(a8%2Q;;VaApnch^`ZijRWh^8{q$V42QxjF2=wo6x%1uh zQ5baKLW_FOTHFcm9$#XW;E`n+uuTF znm7{yd=wR~<=B86$ucIn@AW5l;{(x!36S0*CSZzYbkMKHEoJ`q^h({* zn4TzmkKXy=7GabyF7!C){B0NwQzM^4`Wm|_5@u3<3lKgikj zn8B!q@N`cn;(nTf3$)>FNs|~agZl>2of6NXEIE?%GxIG6u(3mp*^CbX)o`>zr<*;Z zV3~IlXc9-+BYEU&W0bLhh=8!)c@~#h@oqhPc-(T{P-Yik+ghumF%R!+0nXn}7%u~{ z`YEha{mugnwHxfeJYfc6#EIao-?O`z|!M>B|Pc1@uX6Jm#^Fc^#rLjZhS zk}#j!#EbZ@*5h=ermptQQ#CL~AQX(o;=axSr;st~e80k%*H%CD<)pbqLkF7SR=vB^ z5q*09ox1+?62qK7Ruj<`$;bc(0)P$$^1h9n$1aIe+X$ch`fqeE^dYe?Bua%puX>1R zh|qIWGe9xOUY2e_wa{iz(1szvZ04$k3&1Qw+6(2!ME#l=>cR(mN28=P?V~D-1*r?f zF|+`s&Qvi%5e?F=*okk+@2lwgRose->g`^7p|iQI20&i&T&1i=pX%RUnABNKSB5n zR1Vsbc`CW6Wg!8c^D#v{_7O0qn(TmLb?Ya4PsrtjXbufQxk{cidlJTmee2j}%Yh0- znk81hFdmBPE!V}ASVTD@w3DnD=Rk`;oYr2cMtld96WK#)Uv!TGS=$f0YndR{w+N z)Zf4G3PQXh^T`Of_vq$=>{@?u^+;V%v{$sr`3uR@s^6#g>ip#X1r37&y+d?1k2yDQ zu3|J&6ke&`*z^cK&E3=EQ{5`$R9576C`VQ{SqlBpkT_L(heKhpgk{s*J){~6D7B0p zGQRtFeB((pN)_V_^D|bJy7`v-;>u=*w*s@Zi!LShEsgOS$VE0hLP<@glBr(? z;zJnGuV8vUw>Hi&9gTTd%`61Ha?dAlUzdt=c^DmgLqpUECHJr&DHX(NczH*gOz5AD z7EI1NO=9ax7}QrdSxaKTucOAULk$ZC9na{Sm9AvR$VZS0Glo5%CaCUV;~Ae%2|_3- zA(3T_M&Y^c(F^*{5MbTA4IC_l@3aHl(KIvSqLevmQ~2uu2%T?k9>lv@I7$zZT3}BH z08U_W$|`%KwY``i(M?P=LqT9-r4&1me_4K-tBsLW<2H zsq$4~RI~_zXt9m)R}^Jq*D9+)%5cR@ZEp?GheZk|1u>vW%{80 zp_Z@)^Dko$M#$R@Mb+$0sVy%xCJ#nrMsyvW#nofK>UkT1&jg`#ryPHjz5uNWPK?hS zH0oa<)dHmm-25wj(xJm(S8QArK1UE=7=VojGN#N{0hyP=D7!+nz&zY<1REExBK zr-Qy|yP0*3@!H548=AA|DD3JNVQWG~tF%842vCc=Y%0~2jzv&X3hN7DCT+}TO=pC5 ziJCL1uFSn)*QuuoN@z*4j(nkX>5W$~6o08IJovXF91A$O)!`hC7)?4jbJ?PnD-OiDtzjoBbl;EmixdpPO<3hb6{U`?W1^6#^ zJyXyImr#DEE~Tw$S3HU$KPeg(jc8Gsa$3SoDw=n|#uS;erHdnx$cyOdTwH5HqkO5g zwyC8H@KH2hT5I1n+?esOJ~FRNq}`=@Z=Hd_9Hos0Y|_0w>k{1+>+%uYn0dp+ScjU? z(Q#L5PRe~eboe{zt{`|KBSLJLcl`!!=5^Db@GeUC*<3~OD}BY9DVF?DS;Zct>TpC^ z%3pt-CWjzrY-k>-NCujjWJpn%-Y7>QVRkc_SRL&HE8)U`r9C+bM685g7HWo*q*kV* z#k{cgo@!Zv-8oLUcavY~X&tm)l}zJrUmS?#5uUfTm#(~TvNhCyA85ywx)SiA9B?f6 zx`3MZ*CV0)Sd(ttW<_G=F{O>Yaq?)uL zSztb%Q7CBEk}K;9PiR$jccg1m6B>TTY(T!b5Y%ecm*EQrtC1Mg*e))In;?Dd%A}@* z)5Ggwu^I&uFHoCfzZac6J8d8P&D21QWS1(u%GEE{`LO!;LCR67LaKC~mg~};h#Wh} z9}xa=*`;t0Ar)f77^K!A`doVyO}P8)DV-QFOs@eEJ*l^!>tXam!^92-ScSq`(>Rd! zB(yfWZ4Yg)_hd%6hGvvH3dm3XC{ahBEmmx$L%aqKTtpj&;z|8UO{yKr%sk3?laH@7 zcLNoX6kRQ>p@A21D~2#e?qR>`*otYF-z`~V?f3YLGvRvLcS*=RHPa|Du8SpRS8*P5 z#+v|O4!u&IF1v52h;YG1Z=*21BLryG-aU+v5E)B6x)=-wV=sgNtyFc~)7+(uw*XPG zAh_H=&gzhiby)ccc=|9H491Itc@&R?^>5Er`N3s@ep=`82VuR?I4eQ4<}XrD>GD6z zj|-#GL-8D)es~^xo^)(`E1%Nt`e`V7 z+j_LO9d*D&Iwv8*PS>MdN|`*^_VbjAutd0qhs|`&sOl)F^2mTBdL5eg_-eQ#@pqAW z$a!g}BIqxR5qv>N((|kEQyuD_Gq;GvAiX7Igpv}ty%J2lc%xZkR#6rH9}t%-x~AH8 zC2Y9G9N8IMlyFQ)nM^VwLjP(i)v=O^fYCYt{9^+s` z!paqZi{jn#7Pbx$6fUrnMXf$5cZQFsnAp4vqRLUV(ytXF(i))C7tijS;qH*tzPNf* z{n@cglE~3XC6x1>8_;k|#XTI^z_>Kbe!QiLr$ury7`x$Ax7Jk50w{yQU@(rrYPMl_ zmkXnd>f9Y&f!{TwAEfo(TbUL>=aY&!9$~YM(+!nIc)c~tsk$E4VUa@|7#VOTCkEp+ zz$Uzl;51`HL)JB?L^js29%^OK%#?*xQ^PkNR7H2+;rn81@OWRtEOxA^B$*2wcw#ZV z3UUQ51wSsQs~vOll7S2HKQZ^l&j|4?8W1nl$j_- ztu+8Jx(TPIgEn>47tVNd@UqBg09uoH@Guw-A1HfLicd+{oXJm;t(V?g1WFmLN`6$c zxbX2AR5$ZFg*R=FF`1k3d_puax=BrJYEeqfjOQ^KM=ek7IGWVPY{qjv3tF!6%;*=ehkx^HS|4HqLUMeq&2Oe|?TO}Cpz7Ua<-@}Q|8#D6TzE^=nin*73} zSVoRoJ<}Zx7pWHSO7=BXkP>ai!9ki3#_P$;1cz>oH(w&b`!^m9U`cZUhVy!JTu)o8 zw$uSey_}8!o#3fd&0u~m9&jMUdT}W+Un&;zVD==!yEm$$eC7spC{pAnMZ2uWkXAP8 zc;1)N<&B^cqGfi;<+!Bp5jQJiZE_qimuL-5T>2X%EcT!RrH0=l!MFCp_b#b zzl>PYv>yciDg`C-&%x}Xly@AZ&2$Q0Q!U~rqIBO)-d+aj8oqCK8IfS<4*v$pnC}$F9f}Cbudgo;(WPOJj3sfX9c& z(^{eWLp99hiWkKGH4Fyh1@LAonI!oG5MD0+p0}#^g0}QT?F|eDgHePK1+~su5X1$B zk7Aopmqg>PaBiZ^qQqzfPA|qIiNTmSXTugO1}Q0}cs%aY=-0>d<5NdAaC#*MgTY`h z7>s5}si;=&V0fuz`MAzt+zHxMoDXC#2=&SwnSNx$iQp}d!FUa@9P9AmL8yo5H$!2l zhg8X9kirI&th7bN7{GKbD5!HqSW9Nav^+uu#E1T`qk;CS0|574F#}jWwp0h+nnJ(` zxSARC3UaPbV7mQY%~yu$mG<}=ZsyR~0`w|D*jI3w71oBT)n0#=UuQ84-|?qGiYVl4 zC>(B^#3N*H00BBvr3^!TpG!EIST1Ng-rSqPD%d`bm+T?`aOb z;^P_R5|&+t2MvR9BpweVl`-4rU2qj+15NDoO3OF6 zO{+O5VaJICtIQzTOu1M^%Mw`zLI=lap~rdk{>!jb`m#F9j@4ymIi z*FZ-o8j2JeX&@$*5Li+GrEBp@63vG^64N?_fdS5@cupZj=A;ilnIq6KWFtb4)d>_# zYNe=Hn;Qw+vEvpE#Z^KrjxPawLIhd}6za=f|5Tbl=>hZqv?#wsG2uw($1?Vu@S$BE ze2kDwGE2X*@3ecRUKIwk4&*5qaU3iKuToOp@Y~1!OZjNG zay>ZJ>KW$aqG`k-`v}m-6i!1TM26Xa=N^T$}#7-HJpcRwut)vEMa*1k?%=QdSZb7h5$WBxD^4#7`_-62aiQB^x*KT^r1>Gx<}T+q*Bt3cv! z8TuCMx|P2x{;^|k?3Aq1{<&$Fv_gUQepP<&^&QyUW0n5z(ej1%$xT;Ho0ocII)2>u z(nc6}QLX`cs*2%}dI|NlXWnCd2+;u|_o`&6^8QU0Qu$MTg8En_F`==op9`r5jtq2I zE3u{#@6Fl@D-!erqry;za)KXnU7R>sK@Q!se$xXK1L{xq3)i+lcl&) z?GC$1g=yA^VRu9*B&?koY?p+_fkucb?|b`G5KH7~0ioITq{w^G7wvESq_I*TsOMu_ zWP?8BKa28~8&4HZ*<)X4qEpJr#4AK{%%?QyLG&6l0cM^ea4Hz|g0`w=2I7#0=tYJq zLy>C%jCo}whzCbvwv|a@Ra+n|9nE1lJvulAr(towzoCNfY9S6vs(Dcb5H6t7DK7}n zvKEQmwkkqRtduI}%4ldZ7T0d~%n3-P9?M{OjN#JRigmXo_Ao41SG!xB{#@)5p2vOr zr`U42aCzSPm^*Y`C~5&*2ag^jx)ILz$Ww)^-$Y+`L%TL9=#?+0jxfj_W#!v%uJCT* z6?KX$*DPhOrC8cqMTdh{3|av_i=|EzZ7Drd<3w1BWA{5}F+Co|nU`|)XkNoL9h1=- zdu1+r$Blj5RaXgBmz62#J*SEuAqi&4Ga57!K2=nVb0jHCkz0~#JnC`Y!ma&X=Ky@H( z#H~9Po;S8=_KAir~dirYaCHGe#0{eBKE)AE-z36CquNms8G zm)~q}$h`3_%x|?u1*<{bk2(9VR@D zb)EW5p^$2_tqNL4SJZ6x>9$4gZ80_^5By3k%A7d^cxh)2a> zI@tI?Gy$WQkmF-{&r-SG1-^W#N7)l5Va9}-qEkRg!x3h=_6c*>Rh48BA!yRWQqNf_ zgkkD?s@TMsGP}=eLU<&vG=&eCU3o6-i$iL)P(R7VZtmK8X1`t5P9qo+LvK~FYKm>D zJ<;+K(YpuOqbKEcGKvEsU7)?EU83xRQ>D4DY8o2#>ajRU~2 zYRO5V;*JVOf+COcrYc9kF1WVE#+~Yz2?jH^kNG+V}|0U~~sB z?Y;2AyQIt9&dG1?iy_7am>pED4f#2HoQedYdZ+967dsz;040?#E@&BI{^t>_ zW)JfbgfwB~dCQodvoE?n)g$aY3l1PXHh#TGhA()jXRY0J!=M*;g@yZz|Oi zvOJt3Iyd;mtWr-|DF6T<07*naRLRUO_9Wp?M~yZYnW-zeC0&-6|47h@U_?IRgPiH4 z{jSj6gZJG#O>$Ju>oH)@EYIn<*wl`rrbyM23HNqE8_1Qlp?Q5DtzM=mR;M$2>qr!r zb5}}C^Rf`R_{CQ7z-(cJBa4asQXk6Dq8KeWB^y(38>Q471vzh#=Hni>(5<7Qi|*qX z1&V$FUNDnI#fFQ{4pr5amWbqyV%>Tc4^U`1q}R7}r{vTMTCIueI9pUt5SS&eT>1IL z?4i3XIQ9Ztf(z!*Kh?iaw@^0>0jC#n_hvLDNBWW%M;!Il-m}*nEVxAjcY+JTkMzn^ zklkrBBdxM<`^A3homkd^$q6l$ZXsw5r%QT$Ba3<(Wpzq!|Eg5&xF!hFKF6WtCW0AG zq(G5TekG8)MN34EWJgMMFO!C&Lfv^xJ50gFkqy^?ec!_Bzrdai)WZZluwzAMKoH3= zzX8cUR1C%_Xng~SL$%mpR1F_(PJYHJ!qK#{? zm`b$@oQ0<0K#S($pFvF6hczZ|6z1W;h~Qq5%93(*4tslUb69#iJ%Uarc*3ObI+|D@ zU2$1XUL&SK@X_I&rXARLG5eXvZwOZB-V@f_@$%ytRuj7)U9*?u0T=0gCC^jM#CxCm`*d8?4&@KKSR4N}!oL!b!6t=AF=D0U+m6{&z={K-&B)>U# zd8lv3^C?6BK9Gi=ta}IfgIZ^*I z4d*3D_^Im_2O4QVmwG1c#EmaV1cJzkAz=Gw)~(0 zk@F+sJXCly+O!;-{x3eQl^K+`>@VAsC-G96yJaw}bGrH*yGM1Ax>v`+D34jpBY43V zqi!c+zE`a6mKH;)SBUazSy!Yp&ht=w63BIky=2?>ky|1&gPc7RD-^m?s&!73hdNmp zy`Ri43KAPBlIqOicacVvTzKtF$uhQGnih&+vB~Uw)M#q76%4TsNB|Z8%j` z==NXT&pS<|P|^k~5LTNpL9a6vSr#I4TKLrvOK@G0m!VN=>UjTsy@olRT{I3wSyO;k z@j;C%7?RngkdedN&PS9QQimV9L;I{7!=#-ml-b$ZDts4uw+EB+OoGV)K+)zbGYANwFlU$fMqaR zhMDhK3Y3M<9~nz!)6B z{x1%-Bwc4O4aUphgV>$Sx`3r*_2Gg2SaGPGHTGF5Bp5*cqlob9YN_EwYOIldDWwh@ zoiz~4YU4=EQ3oKXC3b7DCICqbSM}Hwq`gXPE($_w-w(}i1 z(&JHhD0jgKKBWvASQ^k!+*V!qv7rnXK5~WFkyP(pXCe9U5X#$YmF57O$qdhJR|ni> zt(zm%Tg67TuqVyz9ZEg4)LOb_rR9{E*T@Y^$K+G&I%ViGP_j)T*;F9PRf4{0MwAe8 zX6+V0S$BH!9h0e^dMNaLOa@!8^m&#tt@SG>)!~b~^6OnisA=kV>R!rmFI`2$jpG;P?N4dh#>_{Loh-6?IN8zv zRXhwYGI|}93{AW1p@m1gy%)uC5EW z^8>uSudw_UOWyJ*jhNY=#LP|{T_>bvxj~@Q9o@cj)lFTKiWHdIah|smmeRMo>_!&#P(oi|%^^n=SU9{E_TWcU##(&D3 zd5hul^^$*TOuFxdfMwaN;a7`bJdKjxKbQxG!C){L3B-)Y9z2bF z^e0Z!%Gd@`eGF#Y3vzp|U}~mKU#XCWrD#|>Ms0Kq)-Fvj)UDbj(jH&&qzx5m#bxc> z^b+>e8iOwa-E{)4o8ZvF*ppZuxh*O(9{>utVX=yFDdEB zkps^V#sbhz87y8nkPuYH-JyLIUvi8a|IGC7R~o<2P0;I$lLm*%I-D{nLS+?-$zU+@ za8ZdoY8dxo{68L^jlupG3{9CIr{!Oe*+sRFY9tpgsih`kG-}3OV4nXD&i_0+?vMD{ z0MH*cCIYr^i@c38hC*4>Y}-hKPrv#b`Y%mz0RYeGDL}~Q?0BMf>&mgy+p|{B2 zA;V~QkZUNq!G}j!#Y}r)E*6?yeb^ULD&tdB5=9L?AS0ih*c0s>XawBpf*fUDq8!5)8 zmr+_IXWp*edu7A3Dw{1S<)J3akBz;{_p~R{ucJ6dDZW5e>Lu9<eq(os7Y zFHApN1qur8qUPJV0)tPJ886 zQhjoTe%R;hnP0JGO9$!!s!dv-;Gu|E> z<^Y7IOUSvFT^k%8`?~l*jmZEy!Xfg^GhvfbqG;m^Eq-%R)sB#BuBYwRxf;84S#as# z(Nt)ms@P6V`qO@u`nZAg7B(<*I>Mo&aHw7CvI22E6XnT|U`@c+ACs4T*UkPoAYeou zbuZL%l_qd6X8Dt|ocno*Z-DQi-7nU`)BRFPsqAu;(7#$<<3G!U%~y+l+WS z6iLgmHNd*+T<@woHPE5y-tte_S~SJK-}&T6DsN+kCpH=SNbZ{+-0YZY_Zqw)?|9`T zz80lRZg35&}U)PO5^8Dwr0hy=HKHVDGpi6XOXeK^S z)ABqB0mxbu;v0i$TU3lzKDvn757iEAJ$NWqrjZfjWuu~^OZI$P$n)asK8;$+bOZfK z_pu#6S9{j_1*=P4m-S-1I9^FKLbJ&_?QR$t%Kk&|a<+tHjC^hdU0I3rUysa91)vqu zKdI`Uo`<+64;pgCqf6?wQQ3l*k~Wx*n%>dkPcj!AK z5FwWvr4X^j85kij@qPTa5^m{J?>9FRBwg`M36VuUbv933u%+6UId&B_7K(OcLVd+r z`XW@~aC%7;8tE;E?{#c&{Q~>RC3^$y4lkfo^GI21FWxC7MiWHGF{g7_NLu&Q$6zoR z3DgV<%V~Wpu%Zz?`%|Es+V)akZq3 zHZcvs$U|fc)P07WxNx)r%&Cz5(tvPVU`hvJQtYf*p)!*pbSHO>UybqJGX_sYtSiS% zxePssX0qB;$j#73g;X6*mBg;7$#~>`#Y(MA@|d**%IXp(f}y$Ol$mlQe|F0w9J;Ac z`|8FoUjT_f54~_N9=}tqM|8fH1=_tj!h%4Z+%}cp(IvAyWy~b*=ybAX zGj={*+o!~c%}bG%==PZ!wNx8;<>Jg~epA-;;9$m`8CacWFRa7nCt|yy7mRwiC^(>kQ`*i=11Zpmq&NPIWd)TspwQE7m*$CDDmW&0Us;)ZC& zXJ{W)dN?aJhxZp%X%ZQP?uD(xnJ_Ok%!h+J%WJUmGz$!Hsw9E3Ml1|l){?B<*c z^5zSNkZH&Jcf6}z`g~JLf2rbzvDEk81>wd)yT`5QyNQ*gUTT}rcj+Cvkk^;3?7uH! zeu!)N=aH+_^qh%wI!N|v6*km|hj;*de1=j7TxHdZSjarYZ8PrP{bo6Hj8IAl|JWuX ziz3$hjDVz~mp|}5+0$M4Bt0l6B{Wt3^3s=tXp=vRlq2zVk@G5CO4B<)l2H4Q{?Yrk zJr+!~r2w1l%bgN9#T9v)F-Qn_K5LhCL|D8HHFtTW38UfUOUi?Sj@gt}S`%_QTF%Bq z51ae1(1EVy!9tEYGvzvWI^JB;4dE-GrCC#yR_#2WN~e(|<5sN>0jM-;eJ+SQyLdh3xh<}fW{u^KSq<|-q1dH>Yd5V^+fC^}PG zm&7>@WfX5IUeKfEZYMVXt@Ck?&?t%7(jb@ch5fB!Fc=I5gTZ)fJVX~o>RTX?`!CaB z*bAUX!;lK?Ma+1YgpF+A35apEE_tO?8H}9}5GKZ9Fc=I5<0NdLOL;}KJ#{>1g8=GG z)&eau*3ZRX5$+KJwG(q&*w~2uS*2=A%Gn)Oyxlx?K&vVL= z=_!o^TAStntd24#%yYdJ2(;1r7OA!|N8GVvFBQrVbuaVh@j?owbWB5Pe!GAMtFg82 zZ%ZJMX7)1|JWLVKC;nzD<|Q{=n4ixhy0p6}qjGL%I74Hy5N`_1z8%-zL&l-#*qC~K z&)KOY`0B$$&@bCCRQv_&JDeFJ9d`|=9$N?dxD_362>0hC7F`)A5PB7Y&}-a!N(Hxo zn#`t?sHOCO2^ z?DhrW7#l&QRo^igo(CJ*wW;2C#e1HG^3NCoz>-tsY9cB*$md}Rl1&M2g{04tcd4Ak zw?zLuOV2_t5PLXkTOsVjmv=-+4~Fe6Z@2|PdGUGry}1soiCCJd7w6&>*z{BM-u2Tu zttLGq>icOE(G$5c{(Z4_6?VRh9gSLZ-8rCMB&b{&C}@{vFW%fUFN2Gy9dfK_n`cuz z5Y`sE9#^ArGA0>#V(2%?HgTfG^+rdXY6uUap`Vl1v!cWF+6;GPycMURi%?hdP#Y3N zH$V@^p_T>)gTY|DC-k}WDJAbR&A7f5?Ny=laZy#M65a_|lrK}rAAtx9KhQ(RW?bXp zj>ajPI|k#5u>5IgAC`xBHWYDdI$j2YQ3Ie}4<$HeGY&*!yf7ShTxN{>mIg)?MPtLR z&eP7PzT0UEKsZ3LKkOJ@<2jUpPd$vQp^zqo4%y4lelzN@Czlk%p?-^DFgBqOpV$LZ zs)x--9Tb;wf6ZKjZz12%J0SBZtUSekjcIEOjj93CzpKGQ+UiA>Z~UMIru0%6yTQ^C z0-O8~m3U48|oeCXNqf=jM%;@ty#Hnf72ksa!Ua;WWUfpL{J{w+UEDv+K@D-bk-U%$9}ndr-?B9H9<6iyCp?}RHRYL6>h^q<&v0gjX!$W z4omkNqET{bpHrksn{W)DlH4s!yG*vp=uX1CB*>G^dL5XHa;eV2zXsqrQs}Q&h63ec zm~&(%LcDD0=!TBx0vawiRIwY$F?B3l3@P&0&}2$Nz|KRL(rj)0673>^4}ISk4QfBP zP`i8Gbl$AcRj@FbcrS&t$Z?>%KzQ-!rZ?_Lqm*Xsi(Pz%#8T9Pnt?~Idpu^rOaB`$ z`5NjKAPJ&zRD8t=t^L&~Wmb}?RREPsH@?IwwBCnqp=ClicT|OBOn*<*vS;x@Y(;v( zY(r+x(vj2iaCN+M%`Hv=;JMTSY7#ovybXq+k{1%_vNTGQ7AB1d3ajZlwHGv?10B}# z;6XXnWzs14`ZB1LsKUwOml=(q-}Lw?7P?~C%bKoZ&(m&4q{!X!BF&~=oKIT5+V*_a znY}Y`@>_}!Z-~U}L>}8usLO$fR_+27HrPEvWSVanwB@&hF0Seg{mZ81M|o8UP}1au z_DFc}!ye#SQsh}04X{#c9m(Z&p~xewdbsqmhoHzU2vM?>1Bmic)A=wcFDPnuUJG~=-g&c^mD+SC&B$8&(^ z2sQoI>rBKlJj#cf`4Bfd@OgXX`mX1U{US0R&<24$%|HfQogJoY#>cq5x;UR=v5;KfuV@SEyT_4IG zJJ|j9y0}ob05nKq?gBiJ?hO6%6qNN548~;v2|0bS$-Ts8cfcdeRRqgGbQj9on&SnB zA0xWJXjsF>Coa}<4-DGE>p;EPre}8!191Q!eHUuDMRa>^fS6PVxj?Ogoc+AN(2npLc4jl&tf8`4N;*TgL?zOW$FwfnNAufn zVNXgwy06Wr+#1o6>jyA06*RnoTn&d9B6Ob|z&hf?E)?rmy7o<*)b>h~?<-1bWv`F7 zr-qD3KMu_UUvv*$8Coo}kjFn0oP*SMDZinItC*LIm+k-BA9*JxypON8h0D z-FTo^>Yvoiu^Ja0Gdl?8`0cToD{rZ^#TK?Fzd9YwK-W??c+i!u<@!%&Y1p*t`q$9F z2-ldD<|}N~a1tF&66JK-j^L;vq9fWl&d7&;Ma3ruQ3U7OX25Xe<=%@@YFA_fgTY`h z-Vp4J$zXKBY!zMvH327+-ZB_tQ6}d;bOP`$_CD~)&2R5ch0qn_FuF`(a5t z`eV*-h&(>-()9Pi#f3Q3JYMqekGg2ri()A9;Ko-HU?!A^H;wGX2^M4 zfTty`eD`dh*mAaEpy%n!|G*@p}=U(&F}5 zXnZ|6l9Ez99+4;>TgyckX?0Bc!DC~2Ns*jP7RSL z^2zSlsUz#8`*-&Uqzw}TW-pe`2%j>gi0mla4BdZ0?*Nuhr__@0UZ8(fL6K4I>>Ya^ zws^*gEvD&vI(ECa+MrWWib|peXoHAN(s*%eEso83*%qD(ze=H07Y%zx*X^&wNg7hZ zv$xHHx7B3#@Ck7Yi8#R?{oNHk8*jrGJMRbd6m03 zbkDgN6Ja(ZOw{|03a*xqgbi zI_Oez}8Khl`r$K z(1-l9+$aKraaCX?&n1{aMe>t;-AK|`7m%CgK?2rVsW@Hn&E5`Z_DsayBeNTHw{<#>AXt*r8H61-FY19@^lwaPp0YOL;wr)*N}e zWNiY{~ zf4{jPNQc`ov#oNNALYlF6m}d=S%r$LqRYU_O0K)0*N~>lYwhpv`2BZ|irfsXFLjLC zo6Od#%cAu+%SC=tQvh?GTnyStPx+llHPpCEdp{#JCGxdfnhpLV6uSiy`=uL%^`;az zJeBRMpeoz2pjNpv#yWr5gxc@jmo7p3$!5Y}c1Rc-(!3X1c@Ds838WnxZL@5veXipf zr=_U03MKG-wG)r}@1w#13}+-wN?$2KrGg=f_r?~4$TfNMKx(IRR;aZ-*1t7XSVj;^ zSC4Ct+@cCa(P|5oW}36Zo&0*h@#6K02>tf`*u>_ikLeKT`im~E4Y4XxQ>4xav^=@q z5`U1X`hw!UnF4Cov=^pOMdJ;u4IqD4rv%Z9Cdhj^Cp$jQtDnDg^FhM8N(>9~Xl_YH*`JIRsa)XsR(ZI<1<^LMX{Jsco!YU`Ph=zb!2c}!x zic~Dy>!HsAVyEKP$gN;vE``t%D6z7(G~|j+9|Jm01-Dc)7>^1Nnw=7;fww zz+hY$D?!bB%&<-@v%Bzk%tSycyQrmDi8^pAS#}8O4-sl&f+3OjVcXUKT2~4BVj*T_ zw3JHNrfd0M5gsZhY>gY$euXu)@CKHLR*@^KT7N5Kbo%DJRx^H#1rhA0_P8i&_A0&* zT2scXmam##W|Q8-(|e*qljzS4g9_cUQro4C(#~{WS|3hPLn+mnKcad+-KP}CrU^A2 zwWOZn!sx0h`Yi5wd#QU{)Wr;oKE?)xXKLBlfD}wrkyN3>O5QTcAEpgA&H{TmbX?cK zntE(P4NgqRU|bYBreVqc!}IfXFnn*ki?T59wj3308+_`@&DeZLxsX~XU7pvB5N8Nv zNLBh$yG_ce9{rfb&{O8w>V;HrKS!7`RtkpQ zv1_;POF`03Xuu-h@;tdOgrKRRYR9Uw8H|{!-60-x!59hcqfv~yt4a`!?VGheD?W(*C$a0FmJ!lVS29Zh-{gmpVGqfBs7KRKt zFF|xXA?;NnwdMCfST}R~GZgH6Rjd zQ+nDtGnkf?YbmUHROLFni^Knl4CPC2zU{$D3 z8NGTq+R<4f&|VWI*)Y=!9a2<`*-cbLc8Lw++za2&ZIO;2ZhLAYrF$R!W&|V{#irJy z{@yL}Vl=0829C)GUAS@*Y98KLxWF7|AlAIcRqZ@!{%Qe3xZ_y(t02poB6X(qxNfy8ilua2Eb`UXGeH%h`xXQ|i9jN(vI}ppw#CI^ys;&5;lPcb zv8dfKmW;q>?lZpHp z5p>Ggz+f;g0BvS?jf4%>-;M1J48|2P%uMk1a5S0121Pd9+V()_{dFWlLuyqLVPiL1UNzpQ z7r0E(Zo;c&ic@8)<{Ac(%%!hyd8+Ay&EX7TSf67nc1fQ1V{Xi28po&PaO9BB^OR&9 z(p?)J<*wiAQT=oI^G$sNKe%pnY!8Xi-gga5y>ZKfva65Lx?Ll=j#%nlQFH;p4ZG@y zDvDr&teYdGwi+jZwmzI010FLAh>ErQ;P-+?MR9nf*bJhKwqqZqq(4?`YZFv#=~A6S zIiGH(2DXPIU8-aA{q6f9CZDY1Vb~0c2ZFJ1W(HWr!mz@0^SmoZtvrze7uu6a&1cfN z_nyf*5kC?t*0D+Wm(=Jn^={&&INeTf5>lfmsY>HLtUf3snRuLH2z^||+zS>KwI1`7 z;mb}wwPRj7(!O;;c*H^AtF2H+UB^gPPf_5mbjzS})H*2@N?*}&S@`I79niHENZq?M zBf%N6on|wG6z@$Wk1QnuYVCEmsQUE^5#b~|#yeAnv&qNH+v*l?n4YCoem`dGi4$X{ zHVZAB<08VAy0Pj@ZXDUbU@)!=;R#&nJ^oCv69^{7GT?N7Z=Q&j~E&xQJ#G~TyNPS$*2I2u?$YqRl%p9eC>oGd_oLZ0%F4qh2hsp}5 z37HPU_ZA2zNi3Z_#|_&MZ1cVG=xJ}>P84YzY>=Rsst3g}(dFZgB{Soi{Ucg$p5J*; zll*#J<;nMzj>&kE#sey23kz@&L!$7uZ|rJb>_PvVx*%CwIG}4JSD8>wJlqnoTmE(I zNsiy?*+YF(oaM(aRv8Qbsxg*srA=H}e6U`_J}*~w405hOv21Dg(hub6RVWxpd+FmL zo=>U&^)G;moPBCSlFWvgobn7o$Dw64D~L!E(TFIu5a{IYk>tgR@cLO=EIo{P2h9{g zN}Sxk25!PCbS(|C(F3_R0z#~;O8%9Hw4BPE^}H+VHRWnl_}_h}p47dE2!$SLiTO{e zR!Nx6Ba>|eDQ|9Odh~!Hk4JpP#U00hM=E8OCi=)LX;k>Jp?}g8GR1*ShfDF6 z;%?r8?L(sG07VXP9U8c^5Md9|he54J0PJXcib6{fMk+iA)7#U&it(DSa=%9afL94+ z^$*cCQ&ZI2kH;$A?bfXS^))kX8$`>j*OFvQZJ8pCsuMh3N0HqkYoHaOPV@zZr+G$G zYU;H|yo}CJtD4t=AkEgWZUqnUHZJWot9*f6b4EGJ#HoVc%?WI-J-_p}f5TO1l+;Sw zJ^30&hwE6X)Ye6bZIPFSo(awr#P(3evEUS!8^PUm14L6boP%4h=- za->0&SCPN=0-ySLiZd9D7^Kbaa6{Z?UDL{i>-4b@+9K(@ohwK51TaPu&0w4j9@mVC zo?>7Ad4F&@mt@Rraj4B{KWO2{}YGZ>e}5_R!9TeOa8=n}x!87}I@ZPd^93UtJVS{N1l$OiZLJKKJmu_3jL zI_?_?{q;bB38lO|RjfMxHSBH2TRn67*8z%+fZg~~O= z5VyzueZa!SC;S88I$7_4=F_qotl1h=AgZZTWn-W#!^q~WL!Pj$Y#5b^8BUe6h#9gk z9F>BjIB*m)uq*+hVqJ0c1xn2fsO}LSmI}2f-#XUB=Xe$=0K8bHS!c#IAdb`<_6K;q zW}%k^PHWWL!Th?Pao0*`a-fYlXX)P56$1#AG*&&yrWzo(?{8{G>dDr!$pz(GQgxC$ zhaPr{)v2zo5<^=)wmM2%q-lR(LQLUwS9cenpS002Lj`$9v^f}AH>3EkC#J=4HScE` zIvuNwss#+`$b}}i@9ghtI_cb2m@(HR&u)Sc5QkSH!P19$BGM`&n@d$M6lL!FXY$Jf(^*R*X}?$M?e#q^6^J zp)Q4kj1A7vZv7uY=X;uy{bI*YnB5)~coInSm3bM9D%_0e2oZ-af z?V%Z6u6Fz`rn+5I!IW2=LmzEzIr=_w>D8%})^0~;5$dg~f}`ZU4{L6AbWf_b1;uLn z$UxNVC;Zq@Hl3~Ln`2fRo!Xryg@$Q*gzW*dK?L9EKN=Q&VSV`ZVk<}z{-H^^_n_zt z?=GPJ3PWEh_Av}UQo`r0Jv!$=LqnpJG`InjR*k}t_PLQcL)Dg0v4}^whwG(^)CF{ZPprth9ObtMXC#A+l~QPY92{vf0-2duoTRzA zxjVcm^>#AVC&t(MLdk(8wL2FNJDFA#5s6I?9}8$(U7NkuqxO+Y%X@KUgTbXZNrg7& zD#6OA28k%-A(&i0tV@2vUD_8@ofLq3PQc_X{`CH}<(UfX72v`zI%0sXLWITE=s{O! zc^PpzkDBw*EyXe?{ID>&;6*(EUC!{72ui$1pkg^HpV&&O%Nn4&>I;b;@${ECpwsF+ z+LvFjx|7mHRuQlKN5KyTc5)>a;i?vSukSEpgAtsyu($;Liz!cu<6`P{(2!K>>w-6S zniqO>;r1cWv-RZ&V{f zW4@rsITI}e)F5&WfV2xg8hL#5MP`bOn?1-Cxvek#LdGp;WJFe28%`M;#RF={gAtz> zb#J_FU2Pjp$}@z!)l!rSyOj$1T0jHGcj+l%RBZ7)-aG=Oc=KYnjc81=~fJC<{1Kg`pYzv*v|EMm4-ONJ6d_Wxl*g$IKSVi>SJSD*hdBxK3ENf zRw-Nh*L#Sjo;t)7-$?QT_d0JYJm-+GO6DvpF&O?O*uT)8KZwDhh(%J(6eWF>V&Yh z{eVpx9fm<@UI4ne#+^I&#fDQ|E6+y8eO!>2hU{=#pUzI1 z+-)i{>g@;Dx7wpiYwLR?`qoc$B8?J6UqIwK>-EOxO9q3%czI|6Wh8$-I1S|LMO}cvZeB?tQgTY{28+#O#t7Wjl)y(7uV4gh&uaQ^VelFxFez`Kdj*jZKgRS*Kc?m8jl0$zbGBn{y6k5h`G|^ zuTr6W7kPxML8PNX)L1 z7v9Bij^Cd>AU4$A5Z7E2;6JnrUN4C>4fpQD3RqP&wlS=u=nmbRax0|K=T~`}Wgo0p z-49w)A}cHX!{a_mWtq@!u$2w$ds$zkR>HoWAFBkywba$yzpjQdX~WW2W*g&5iFK%x zg6MS4hsIV16h-feH>0t%hF_yaUC+OQ9-vOyf-@_jYtjBg#GXe(<41q2qz0;IrfR#! zFDpg7W-n2Ck5XPhlXq%1|D7zMR?0Y$>B(q&{pp_ynvcGd)KBMb{i$R~%08$2xjy%= zqhQKBkj)OQ{KYdfKvHZ3U|sApnb&auT;lt-gGN14p^%v=eDSkGj&`yd>kB;5*pTk% znOfTqV~~bNiCl*k)UJ&?m=}H}DY|N+efPc|Vc46jiEcdx3DZ+7Hs9`EmuU9}yt5{H zefDGLrq_VY_3vQ`d}s9SF_(SXDJG&9OeA$g7p!ahA!g4LSBMOeZUZh6%19*0F3&e~ zCDUmeMp51*&?!2+AeSG!kk-%;zYI<^Hn@YDPkpI#xm{4;$#=`01hm5g1?tyQcd*lH z3u#%N=pFV%TsGw^@85D$>n>v)05=#KSV;rGk~2&%HgQjuq{-a3&2_c>p#SbeLK(Md z6}{#e({GhhCvOc={m?aqg3Inl*~Q7KSayw?nAK`64(#Tk#&RNBG@OV6r*kK4kN zKaEDJlb8H=rUSQ{7oC;wnYLg#qtJfspgvUIH|F(TQsM~Bw=3`@V?)H~gtf(Z&eIiV zDqGl2LDVJlBAE;rNw7wk!C)}10783<^-SGKwd08RU)^}02=};@M|Rg5V+7DF3Ndbr z8f63|9A7qqX@lAqCFiNh1RG^|p2Dw+REAGtR7h&)N4V0j&f4~yo(eTE?)Drk&A1-Q ztBqEDQqzKWfip6=?_i3SUD`_xV}~dwi1rr}YX?2q|KuL>we6#IYnEv3U7urnc(l87 zUn3dA0H1#Hwf$uSaal=+Ehyt6paj0d2qNZ3^XOI@3;w4+v_WlMh}?ev-w6 zrxvLY2LM1hrH{dyxjL-ZwddoCE%h^>pjBi4^+;i>ddHR z-W%HzEM#~yRF$$bN3u+t#7NGaf;2VpEY3CKftLuV@8o(spL++V+H!6@ekw%u@=9|e z6^BO6ZngwF7)C_^LGt8Rln}TjFG7d%`zn&5p$ij4HO%Q{`{wSt_@kT$??Zqa-tM%9 zAB8+emj|QsQ|miC4Q$|gA-4Bt{TA5;Z$);O9C|=4faDT<5U9FEEmguIVJcfaSb-?oi;A|#pL_>O0HCjagq&BsQ1zX0XyX6ouu^|v0x!M&UQPGT) z#x-*7+l)(QF97i_qe4i-aU&(kc+VP+$(UbXgKUHPw2N>=o7x?fezj|2y67z)?g|dApQrt}GjTOM21ZO#J`j|KfyOLF!`0FCeLPu4hpP>Zp5fzHl zA({$!kfiPT>#ecPkC@Rvx%c>;zwPT!h-^sZ>c^VjgkH5!c3^#AFc>cjE%!4?5n~fL znb_@dZ=`bCF9PhF?C3(EXh8<>w6+)!(=cngEJFE@5RjM$*UuS z@upab{P<|~u2|x#pfS{mtqu$ZgK=SqhnV9~ubRxP3yw>VaYL|h*MQf{U_S_}Po@U4 zG3YcQ9cfZR;uZIH!~>jLsE_)fx=rDCJUre96#)Uoh^e;*%?y!(yK;XN`zygjYVkh) z-ZnyS-Iiz@v+)sT|H>Vn= zlzM8H5FvDRe#3OLWfe!pHu#aP(HqMbT$SF93WBNkSpR;{(y#UvYAp$moJZBhyk{53 z25-7(=`3_|HAkF zpqBBX*zE!hfQ`$N7XxzUG zKQ6AdU|-;Xy}|<_^1#vPBP%}!`ca-sT)c3>)blQUkY-_JOVS^~eA`fW%KbC5rlEzj z*SZ?bRrr!B8@iMZ)$=kjU7r+vUNE?09j_+M&&rks{S!E zJQYgKi(85g0s!*|scKheYLk;e(cdI*>X9Jn?N3iHJY4_vBbLf*2UL8oWVf|cIE zynjmXuwI%d!TqI_5=MlBg~4@IL9ThH&BgXvJSK;EGxin>G{u|^!lkH8y~;FqF5dDo z=7+WR)_B7*&uWwL!*5g#fqn+bcijW0$J3Kdr}j#h2tledpQ54a454X+J2$i;y1~%E zit5g5V0ISVb~nJ>mBN`SJ)5GApwibWL@r7YH9e-_0#o!YAKXdP7SPO|;) z`^D)?`j7wWXFsR^_|EV8*6;Yv-}bwI_xF7Nzx;cC*Z2HWM>c*w!bxUEVlWtt7Xokb z3<5nUYE&mIA~O17Q8F6!_Z)~oJy*6U^!Dp{X$i$LBi8Y2x*IQM(-B4jhBLo0+0Irp z&)Id}oz-*(<7}K{Y}hhs=LB)i+se8&Yr_JB#)ZJU;F6B(Fz2LPoAug^tODRE8svV_?YRANU@%SseEP}PPO934CM}xiWiIA#z_FYX z2YAbe*>e|e4FPJpCKsIx{ZRl)%sIzh?umLDC5O~4r{N)_ltKu3NW=CxHKVZ8i#Sry z@K_&9h)+_S^lm|dFQ~;4=iq0|kdW5L;p$=Jyoe%ioKQbpL{2RqiRmp{qK_N!i=Y3( zfBBO?`-NZn;-{bdX2)VFzUAA#>0kQ(f9_xZH~!E+^F80K!_nM}TMe$u^KYUyqHiBr z8m_Ng=t$@}VufuUZtgzOLmPqkl$2v3aLgmy8!CmE=L!5iUw<~~|UD2>uXfMZ+Ic)DO%u(#NDv^OLCxG<^t9v73y7VbjP-N&G` z^la}-qg1S}V=bqEDrYMgit#tkkHMschnP%yRr?Jov?dwDOwpOX46&bI4qn6Rx2AT2 z8l}t>OGC`$REWjpTD^za?MAjP!>5$zg~$NHCC&#Gc2Z?m`3WIb386LO**iA(CMe{= zzx{o5d4nDc(B7h`a^EQ8N$>5fY9|-a!Kfb_nT@prlc6{w8|P4-C5p?fu~YmtfjvzP z=@poY3U_sl6Wr5vi2X)|AL%!JIxOt>%-|G>gR@Gr3hRwbq?CzUkl7OrQK4;om+Ca+ z%4;{RdN98sFfGjO$^Ex4R`czKwXNH-qXfvX%sp`JL8ZBa#t^k4mfKlJ;Lsh80mSIl49)RfKgfm)Pz=$iqM)ASn~rtSa$AOJ~3 zK~xx0a1Pp*km-=s2*C^O+u)cv{@Mwj8H`h)lLx$Z#608m(KQh!BahSbPcRsjaN8OW z+37Y4Z-d+9Yq z3@6ek1%T}?RYC!wQBupwIfO>ZkfC-l3<%Iiu(^eDjw(|R)6zTAC}}4(msjK9(`70I zI>XJf(z#rcMu|dGCxHO@EWB&#q+p*>pyI`RQN%`(J4;p)Y>dKl?lW!~gi-PbHBCLnV{rMngZjY3{ynSe~U)I`pz% zxMvQAFn6XH394(LSGp99l7pjB+EbD;6kFzFm-Xs7lNv;5l-5eAq7{)U0Opj~4>iGa ziEN-WN?yaZGgnm5DCJAY+_IHdWR0*R>{WRhrTyr>7o;}XXw=;c#NlZHQ|mA%%v~A) z$1BXjc(65t3RdZ&Jky42^?4JG(w0*34@DZKd8=EdwvLNe3QNLXVdV}ylE$jO5=WCg z)NePn3}$GQ>ah}sW*&QYEfp`W1C5eboh@X0xMZ=Zd&Zz){2+u0$3*q@rS!2$fZI#R zkRzq8EUvm6mgQN>8Z~W~Jm1q{>`8vTnqS&u18b$3s;kZ|gMN-f_s7h1y&QS;H_q4q z>GXG~!|0Xe9=#8ZlH5K5>C+b(mLl{l9oTgaO_J(1!Tf=u^0FxOKn0jSh8;%tSpa)% z+0AQ2GwV>eTVQ))+SK}!VJpJvc>oSjx89yc>75~`g+JfU2T<2lb2Au>JK`%}{(t_= zkNk!Iv>A5ZSO~WHu*q6=RVCn8cz@pS=PTCcc))24Vx1 zCe^+UL6|m0Hq=-kmHW%LcQvFUnbUfx#dfc>o!1yqXJ>7xp9z`NGA_50n5>67c2Pg3 zOGP$BoU_)S;iQu3Ur$xV(h(Z~k(M%Nolmi*I?ZK?W|_C2vl zVl(mYn;zk_KlSr}5|?M*+35p9Y=a| zQJW$gpzgAo#uP7!L^c$Gy}7VwR)@2i_Ca%kMC?)bM>c5q!3y<}4Q{PQsie2HXZbgf zo|dm3)*XHgRD+&-@gA@3C~ADAZx`91Lw0=^NdKp(C-QnB5kU?7(o6Mf-VW0i>NMqPlBk14ASdfq_+ujK~3z{)~3=8WY3C3 zJFqwa$Y*O&NI z9Zo`XA4Mn+6ql^ZKJq_BBt5J^JV#T}5ZTZL`y(5s77z6Hho!@H{mJ|LY4Qny*uKIm zdvHkUf>wYLXVz9l8a(;KuwGn@G^|<&mAkjPI*CN_0de*b*hkwlAv#4i*d&U|m=hFj z)vR2f16pTWYHgDvj0ORu4hnEp0H|k2+9c8(`^Tb8_v$s;!YzYxAj{*%A+w}0s`{6~LIk4`_D0S)yG=q#uR(H{3$Rp?08 z1mt1s=Tm8ey$V$2KC}HP=umN_FUd+3RU_?IW=VCxaZ2l_X7;)5RqY6$#aN^DO{>yZ zHc_A)p!6*3N^Xm2`_W6-poyN3eGoOE@9n58EB#g8g2I0uv(O@?DbQWPvM1Rq03DoG za)2#%wL_7j;~_`SK8=bR8}$Awgkf_ibVJQ~WV_Nj?1w#?`YdXTi@${QmFFX^lQQ3z z9%hflw4u8C22|*cLU+mE&JZ+C@+%}2~TuvPy zI2ng#%k&aQuXM)i;&R zfO~3X!J~q45$FxLm)Y(YKmUav`Xm4D^(_q!Klihr`@tXh;jeu8|Gh|i7$X4Q{}^W> z<>1d?v}sisuL>bR|Bv4=gTY|zhjyM|{R87Y0o76LT_Bb;x5s2*WYplgIUBY*i)pVt z->Y4SNj=9l@=~D8OV5$p8DGG_@pLJQAv#&QOrN&ZHEg(h5an^Z zMK16Om!eclT@v_bI?BIgnd$BIf~HJgC{G}p8KOK@!Q}9J$%xX|KIr;S=gy1`%!Uop zPU;r7TvwD}u4E6bF1T)FLxUf>(iui4H9r=pr+n5A>KBNHD4OyPcI|f#tp`=(Oikf4 zx~E2=GB6#}zLOzrmi*|ezw##iK9MNVDZA;}f8s}f`Y->*zjixIgT|+y{N|tjk-zlW zpZaiymM9uLh|rT_LIe z)gb@s2N@hWz%hzUe<&6I-wG#Mk#OVk0i1un; z=7cpu9g&Ic*H08Z<`iCsE^dtW#L~pSooYsh&ZoYo7*YEs-hzgPHPq4(Ej$<7Z$Z|EyQSEa&wehE1CR4I>;7o5mS zv2~ps+|qYJkI059zufu%`sT8Td05y@Vp4{pSJ9 z5#8YwNtaE^eK24Zsy6q?pZSx2@xS{Uf9uwd|LG^c`IrCFU;F?5;aC6opZa4LXb$5w z!5b`t!FY4%W7C{0--%x^`O70);-Xj`5s=sQC0bVptpVg0%wU{^27ml>UHEC0#TD-< zl@RcN9t}Q{e22kci~)T5$=CK5TqISnLDb31fJnHCT6e<>gwoaqB?ahz#)sP5MXHFI3Yg9i-4F zQHPX?1!tWlx6~`X52I0{)#<6*qpZkT+|J@<&J_A4Ur~asKZ)llc zc71lsGAiV~ylkZ+_A>DrNU zNV06oKH*-+`jw?rmL@nnUCTWbKb~D+dxI0v1exulD5&@xDX4||R+09??h=E7u#&4( zmwmNY-$ZfaoYu`ZZf%lwJwz{|<1Tr9WJX$Gn>+wvw=dxU%gGMB{6bqoBONi3J9g2> z5s6!RK?qo~L*wFR)qG4^kTW;9*5Rn=;2Z$}(CsNgcMZfHf8$W*&6KZ~u&DL24tVuK zT?6D<6F+SDL96bNIAW~3z&|IMj_{Rx`oPUL05gv?#-?+Ch#G1u$*7`7z_r& z>_H%zZ~FES50If7do*=e968Ge6QTO_ifZw$*h z0LR}jp-6&M3_|V^?|EiYN47a9iNi^W;QRLkz8i0Bw+l{V%PX-w*^2$ z7H&7!Gki)NQ4H)o9p}>crm)BZ!EeQQ1=oIerLfWiy)__Q+So8uo%<%$le=~(5igTg zx~DqZ8!augnPQVfOipSO)e{YKBH2P51JdKeOjIVHl3wYWWu-Fd?oz|FTtzagUX$wp z-sy&e+j@cZS=QWNtH4Q0xaP7$vGzuVM75zr#O?wSI@Ty6be|SQ#Yg5|jRr-4M^;ui z)cE`}sX~evF>Ll|D%`#Jq0$G*7uK^^CjIrt;h~gDJwRCvi_@wvbal~wek59=mS{7- z)oxcxO-Z|$<^n_q8Yxq)KRpD@<8k-z(PLbg6PG&?|TjCuo4H|#-$A9K0ew_J~UI@^Znq(MwBfb(MTmfMJw?L}d zQI1nP+!yjGdD>kN>kEnb?=w>1Bx)}Y;FHqnc-Q5~P(1gXsbc7hW& zFgil2KKcIjG306|k%%JtN)60KHk@m;S%O`Zm|&rxnzLS@+}uj&wG6Tuw^jZ*)-d9Q zlwqN(AO@K1@SOJoIR}x=dB9V)o3I2WH;XUQi<>J(?mQA9>U-#nOmvJfzjL}Z4TI0K@>uqiUg6$M4apnr`k_n%1IF`|-d6om+y#2Af< z8W%*PCIlfy5Cx(jf-3@7xWJ$oV1~sA!_5<6W|VD4!8u*`>8`Ho>e{=zy1V+E@8$Ol z=k%$ruCBel<^B4Gw9!Wj@1}YZs2qps|CGpJ0%ZpoH^`x6GsVv~l2@|DNjbM7EWM(#wD51pijIx)6~jmi zAR)H1jLN4pEl3vX)p5N(v^w%BnXX$Xr}93LA72WxGF%L*v86W?AmepOGX*)gs<}>og8pw1SorLHw%bNjG#RTO1$w z5HWRU!Ne(MuaHDe{4H&$EbLp-Esku9f2FC5sH};7R893R?8=OYBnIVAB|%4CDoPVx zJ0H#DPT)W7jLf{$VRbjfMy?!lD2Ic>g`|!c%`rsB0+fppi)B%69V?t-M`GrBs@~D; zSmv~_mfueEYL2E4!gSgT1vHxwoRMmqu!6Yf5YzbL3H@cw>b>f-O3IyjgCg~?%x_U+ zD-l9Z-&vi$S>-R%7SVp8k`eL^SpQ6yJ|)i-`Gd^Mh1xH9rn`imrte6MZK+l;HJ_BZ z7@}g%F}9JN663K$#Jj?hm!Ni_{% zj}z`fQe#qvE>0lP$?U<#BdbTo!5$49x;BTk}HXRMFr&@@Akw(z7PR$ z7gu=(&UDm*PpS0IQ@E1Uf^~UH3zRkyW;bCD*?Pjqw|8t-M9Dpwf2F(x8S`!D*Lk$M z%5%2v>wqvOS;l*Qk-YqAm?dCbA!GbXb?QziMfF)^O#_9$zJYs6a@R)_pHlpwd`kIf z9&mLEC>Z1!NFK^zr6(q0rGVh|Z>ba2On6AdHlcB@BBR6N~a!0U!p=`D|JG&L?w~BAZb?IW~%x zw;K_bRdtv`IrR+ z6l{Pg0%0Vbx+@x`=6!mW`L42nQ2?3-3h-|L004l+L^jI`PH;p9v0?$xBWsosCtE#0 z0xs-DN?EO;a`4Wp0?)ZyS;aFU<-eob z`2kcwlMD&1?MtTPq5#niAbvDZHVka9gA>Gsp!q{nBu9Z}(bed6L{O##lHv9@^pCJL zkZE7@(9`s8F^pw>fpraIR7RCFMu*njlF0MO5VhK?H*Tem9cAJ}%#c~*prh!48|ACL z+CjJ<1YDIZnGBbMf?rPrl`9c!3lTvq0Fo50r|%ast&0Qe-s4=Jd0-kuW8){uaj!cO zGz}a<^bJKM3?zkKpBpp}#V5ndc%L{fIv&9b(`U77-viNIL7ywGv<)%F-5VQf+&x}Y zzO1x<7uy7jXbTvrv`8MVu%LJ@ZGWQkO&Z2SZh%Ef9K6)2jt4C^#l9ODa#i$}*uyp76mF}pTIW@H+RX0i_MRhqySjhk(;!m(BNx$yX~pN_<5)$=RcY5acnAuZjNec+a0q}c`qu*m6}2i&C{ek z#@Hu5!JkYP{@8Dc$7fZYw`KW5r_ALK{4sL4*6t6h9@?N+bl15fw)R@GV*R9=+_X+( zQhJuSVRmVb*I>#p#*2OQj!$WZ5ztiAtY7bkg%L`;uv}hUBgH&ZzZTqQrt-M(S!iE zwHQf=I}*3tGRhbnL?97-NK<+bTwiZSV`Q`KmJ)GtoH|`NQIy+6{78>~l!btuMJnlD z;UQ0YorMlrF~|pY%Prtnih+5XxMgyJf>th`9|BFTw5JYtNFf*eNSYM&YdMF zE0WN<#w6*VC~JI#kO^7TA4J9c}#}VBAcA-GStLjT)yFR8d3{p=f0##lBmXsjyF^WEE3+LktkL3sQ>0 zg~DIoU?;iq$tKv%$km#CXqeSvPW&v`86NHC*|wE1ovI;Ql}r#*60vlu^h)}!+W(cM z5F|#U@5Ce<9TW9Rw2)_GK}OfTW<_0M?I~(axwL)igxp2zDexlNZ}k9iR}`}oWh&K# ziv>y=B~il0ls)n*L}5%>-`-^G+raEePMEA}YF|57CnuTgwPl8}Y(uPn3f-?ZU29)5 zUK%B3I!Q9cA)pmVxot*N*8m>bfQdo$Fr`~7mEhPP@rN;(WAMtSWCh|D;ZI(7(&eCO z(4nJ$1J1*i5bEF1b4dXJKv&?xf)@lsy@Co-`#uW+CW?V=Y-2O&Z3BzbM?<7_k{QVz z87G}$Hkg1J4-RLU2LPf)B{AfKWfp0t)snme0JToSgafl#hH*`~&%=cH+x51%WdKkO z3hX%-1hxRtJFLJE6R{4hmkZV|dU4s4MT+i~^Ko1PmfW*}MxD~cc2mPDru1`ZgP`GS1?V<1vh&h^z-Gq?9emR1%ArcK+ z)u)JKRoB&_BWnVfar|WoZ`$)V?;ioB+T`r z7QsjcLO3VdD4z&=Hvj-I5J1!51Be$504xZ=3=l8}n1iUNj7mt3qcTMmU87rK;idop z0F+p}m`-6(&OPSA(JeF@nL$I<0s255ajFRGkn+d4#&S>0Y$U1A*86O?x| zw>U{juJ1NJJmFz=izjv;r;=79x^Rbpg+ym#BS3h7rokVeZvX%Q06=U&I;WsHFh(}n zv5oa=T3b{fNG=i1r;u(TLy$s+1ONcKfEwLXl>^XW&nt=<+H00xq&ms{JhyJm_*Z*+ zswwAmOrn3=+*fL(uIO_CRKz6ktX}l%2e-(V#@IC?<#`%b6FG``>5EztE)m0B!V?mV zGE{9b^AVTL3f2Xjr!2BTnEBxvikhi34z8h&>ueZ#)QCPK9y)21BxDV@(c%W3^C|I% zqO>ttQx}w^DBMkjJ9Jl@`+)sep{h{);>TfFVs)O)W;jhtQphZ`S!1cL^4XY-VYawT z4NX@(f-toy&j0{TLks-r+h5g4-{2go(V9wSG$Mb;Ov04K2ItV>s(vvcDpq5EKBWfb z>GPePL8h}7!81cFA|Yll6foczLTFZOH7K7_MvNs~!m2bASMnkxS!A4lgDw*RqbrHK z0x37XYva2`%RX+HILe*~LZj5$dR;xjP*S(>C#iaFS@ZICnO-Dj4=%hQTYW2^he_;G zExglG0gA+QVILs6CT>;~tTG{BEYVM!ia;n$6GCYS8HnjAL83VLN1e!8@I5xw-SE?Z znck$$#OS(16AOK6{z;ZvSsXE(zfjDUNx1s5(kRJk`degY8BxQ|J25EJqauq_qlJfj z+^D2UDjL1)j0${&^*v3INXFZsM}>ZSBB(bCLVL!Zq)w;iqd`@=`dvCkamG(b%CN~Z zPE%vZyku=9Ou>aptM{IExwBGq***v2aX{;Ju#|O-kn<@kcilE#8YN9{b27KtCPAV} zX5dk>Xc}5VQm%pDAD|zw02>~edyFQ)kN{0XJAi+~d?1^puI-xu03ZNKL_t&$oQ}iV zS)r>K3ILb@z({Zq%zq_ErEQ{c#%z#yy$80OEv-tYU~dToH6`Hi4wySonQseC10YTi zML|L}@s_9?c)Xpb254T!-f4Mpvz zA!W#grXl|D54iAI$INpb007JrGSbzs8W0;~^7%6Ab)@Y?!%oDr3(Xii4qf&7UZaP3 zN<7ebHZ1rFgigQ#>maXBR99d0+`TAWl1h%G@*0_lmF)h=)O1L?mw#2gsZCD_!m}hR zMcF=nm|i?Cds6jucBN#HN>fTHP+4zbOtK7N%=HkW>v7J!lvLVpT=T>09rPu#q$-c} z#2T4K{}|rt6EqFo;qTuN9TiJ+@;`f1bW|-oc%fHMLZ<6@0{T6G28s#+SbfQfu(TAGYL|MDb9_}s1 z7ja4MlmKb{T2HDP0u!;4k1oNIhBD)+q!x$~EJ*3Q?7l4RLYr7jAd&q_HwKzQhjWPO z0(0vbe`rA_)1_{^H;0;o)Y0lZ^+bEGvkaX$Ph4+i*e&7J zuhz&v0JFLs(xm{gfBDivH4R#QgLp;zYW2)}Ev(o*8!V{vHoLDcSNMchaiG ztEq$VRgWYkUH_!PY3Aw6ihEvObB(%cigQxjQa$70@P`r2>Da4o! z{XN1zf2MVio3f-|)@6klHM96tUlRTl@4_zvGD4^fR~FwCQlt?V&&4qp1(?7Ok``+Q zfQTvp4^-G9VMLN8i>9G(sA~k~x`_E*K1%JoZYR_C(P z7qJOJFcYra17vil(Wd8pil+NNDvE5K2Z)~IQIPRSElQ)S9v)$V ze*NHfnKgW48ZHG^5fwuLw z8jFNl&@!J1YwN;2o53<=4>Sqn)sn3;~Xbp&yG8)gB%@Ph9d3&1|y^dGnU z;urUQ%-f>U&C$8FO#eVzk`MAgJ`uN>`uX}D5+%uXkZQi+1x7ghr{qjh@?coPEITBVwc*y%5p3UX>uZ zv5~8{XsDkIx9Ci3_1D9qLro%y>;tPDcb&(E)9^55J||Vx5~I=VxSkC|#h68O%Vye& zOT-9`nkWRf<;ZBh`3YbOjg*m$l|Gu)cP5B+>@K~gMRQ^0aozi^C4-7aNg9*RsdXd? zzuFhnc~3&73`uDuI&%mD(-Je7*|LeOsp4AnpO@>WQlu=+nyj3IILN!lu^XhJU;AEk z6z}Kvbbv)R^-5|p3N1tn2L)#%^?whnuXGN_e zg!r+`|HQ;oq9V{hRuEwo?6`<8*QTml@wn|LqHIVCjZ@mJ51=Gbl?`$loXE-siG30w z;*8(`$_4?TY|s?Wnn`z1kq{D^Mqo+8rEtb^0*_bOkdf*`GGEFDYXK74vb-So-2Kb* z&c5)Rb1vF&_x(+CTeZ)M=Rg0jvc91vwwEUsH9h?*%ITDY~^a&xA@ zRN0WASvG*OAyK!71qkxk%||AS%H(5!thnRgql@1{{mQK&l8_@}7*~JsrwpKM;M*5e z`_{Lz!B(7V?D{Gjs64cVFw~-K@J7_04YewncVz>jL20S7LAM5c*ats*?zxwG7JHXncYO14$GqybFQZ>u4-Jm_P&UYO zdx)ttDrEy*eR^Uq8dup+J*9q_%#{sw69<%K0pH)`-03mJ4XSJ~h4I7*kyj>mi(1o> z#BAte`H*7Xs#=5~5w-*|0nb*x5;^$h$6tyxuCl=grpk{*+2BMGWs#pUXwmsFPiohz zXBjhX(G?q5!nIO1*y}{iL8{3v63<4BqEFH@Utl%K>(o?|Cl>!?S2iSyjhsr7tP&{) zfcLEH-!7)sx6Dgw*mF}fZ0B?Njhe{YgD4vs+-H_%NC{-1ax3Q(`#Sy*K0OxD?EU03 zbDES5&i3-}x8o`s)X9q4cl*48|6IYp^7Y++KW0hLWiKb)5nzmP9uD<{f`UcTaw;46 zGjNB>>4LiCQX{%_?oKT!squHEykT(uL|4f>XDmDN4gvi@$=!J7Jb(o)I!k`Ub8`;7=Jy*-%GV^&msk$_7#2 zFdxbWJ?356AnyCM%7!FKuKeM3AA0|%oWx42_F3_d|MHP#yYAdqK?V5K*t#2Uf7jdp z+DWXmYM&LKJ^drgcilN8@ooo1GQsCldJl7Fi!A-Esy$ID8;U+ZA!UOKrvOnFfD~3D zqP0Wr*$~jCZz9SDHKJq6Hi2@>nUxKZU=(FTSnwSLX1n9*DI27Xu6awmn97D>HaV3M zS7p*v{LiIq;IKH;`(prQgQZG)RW>w2?!(Wh59p=>Q%llelnqoyA-ozW8`>!wRDiO< zu53sUUBy7zV1tFnf0$Z{U)jK`h$|cVdt9}$@F~<~HfKqIco5{yP1#+-M$7}SjHES) zvLRadyIfdO&Pv5iMU~+X!t$JD^pILRfN;i<>Y|{Zkg(!$+e1iL2mB8M0KkF(qw)_B ze!_8?$Wa{noP*9h=Tp1wzTA@Lu;)DWyo*m?{yUEiUdYy1wcnG@INMR|)d%hQwTu3F z`5+1s0AO^G1ZBnFtf174R)7uw0000$Yfw!?Vb_PsKMLt9U_hV(@k`hN0000m43I&& zOic&Uh7!Q8o(-lY%56Nt(qZa|p{lyM_Xj0}a@lkunv3J1L}3RjeL;AM5R%CKkf<5U z72|3>%&%vIN%?P4wPlHXuVfs$Af62z7VB)ul_8*KgYb0E+HT<4FfvueAf63XZaRA< zC)-$SNZFb^8z|P^c>Akgb%K_dXyp@@pLzDDOqzyX2=QJ1u-uhz-A%W@#!&3tc3*zR z*`HE14WhkU@RB<*-!w|niWabfyLdKKnFK42266?e4c&uhLzOo(9g%E&!qO;t6vOl| zxjNKWQ!O8x7F_jgkY+rb$ZYRwfw|#uB&wS36ReR`3YG7ujmFl&i$%?fXOf7X4Wfm3 z-|=Q!!bKmTE>+UDi8OyN)w4mbX*n${ZCaMcSxTIn=gnygQQDCJE5gf>g!>m>#({$c~-i|Pc5oT zIFUQr%alxgCgBNsqfrXtB^d_Ak>D zYD$GLB_9y}GF%)R*q@aWff!;4Au+?Eq13HtjLHVfyP8x5s(?Pl80lbnE;CS3TarCx zkiADg&uG=q=Ax7}NraT`%3YZUwVq0mzlW7+sPqJRr|vFhzvB^=(|5m5@$q_FwtVO9 zw|&$VKfF%;=_8*!W$*o-)L-#9EY9Qdb=EGAUH+J&*lW}@fB%V7_TKl2x|>Nkn>6fp zg?2c6ON}+7&TqtGfCOpN*4hm@5+k zLe?p-S}oX~S(T{|Sx>z-J(0F9($uN_vm`M6)O_EpE~gkF%WgzXrm*1g{eQ?AL)BR; z1siAN@>;iOzKd`mippG>u1&Jmgw<-LCn$2HY6eV$BO1aJkjnB^?%-IsK!`@!rVhwQ z@30NfC;l$YR9v|@aADC{Fzc=6UivaGOQt9&P=zmRBKR)nI{%FMEi{;5~!pSsCNF{Xd& zy%ZQBn!xfDKtPa8=Jk?*n0x`JctoG~NcOBl28!Tst+lg=>YVn^f>}`-$ zmziIg#&e$rCE{|6jK>FJiWFx_5Jou7|C|d=-xxpy)Au}JUkmh>ni$y=m~!Y;JhOSG z6MW9^zJ7_#q1b>1XeraoAQGkp?{Z9oApfb)GD#t6B5bh7w8OBOPbvrg5btO@I}ib; zTTD<(Zb@v)+;XpSy;fIh#qjGESgNScNv3r9rLmxS)md-R^gV61J(YPX;FW+ea#fe! zlHQr1o-J*@;*h1E?HS|=C6VkTOqLUL?2E6%QzDcfrg#E=an$J4eLCVwnrFG7{q0RN!JBQ!5s+sv|rf^Xe%&3JN}# z<#n-I_)dd2g=wM|GH-BjTjH4x004{y9wcCt=ffV$gsXo!`;P}_H~*$w`M$j+m`?7X zN1~mJ(^Qru`#cIgL_<&AgWPrt4{XwSX&vGG3rVAJe|2WNLZ zT-Nr_ejBpn&)c@F-h-FogLlNcZwEeqLjYzLKnrlbN9aEQz#OAR0JAy99B;+BNF@{O z4owJN4PgEc05k=qZKpT&F@UOoH$6;zjPDM%kTC+<#RnCM(i9MZvO%1&^uMzYi929O zi#}=!Aq4zPI-q6dFVj=%jk*Z-zRMjN{f9U#$dMx&Lw#=#z80#&vASnLO+*-U0Kp2`ij_+U+Z81Y^Xb ztq(8?mRO$Q40W!iG`+TIlSB~8Fr!f*nv{qToK=D6N%6ld#e~I&5z0Waw6WTNq^Pz% z$sZ^8a>_}8@)(4}#5VRqs`v%*D<;+>^*X(R6dx!x^U1*!q$@&{TuC}vKD{{GI-@j7 zRNqi~hO)a5wmEc}xB>|43^YMDo8cu(a#AOnVG*~U_V&?r45gQ~E`WKD54BF=-?;m? z{b?Gs_?LUP9j4Ms%asj>KmS?Mul!xUdC$YWY8q6WaqrfrZotp27n`tY z^uU9j!j%n&9QHq?1Q=u5|G&9mYpk7-b}}I6Dr!`Qcj(6Wyj|JJ~Bkr*ZQ`O)CgNS!VD8C#8@2Oo&`t zd`0z4^v^Bx&x$#qIAX9Tc0bi|5lm~8`#Y7XKLwExU{Nz54QKsi=IRX*utE4NzSisw<`O6UrEivs7Z|^35fTT)`k|8f+)2 zN;DxeXPW9(yiSd|sw)jEYM>paKqezTS4++0?0aJTQaKYEo75#Z@&}QZSA*%C4r(#X zvM+Z*r((V8d=(*vJbMM&D@YkwJ|8>M%kgegJx2K;6+_`e%b04JQl*umK^n@Qre$N6 zl)`~x;0scbj4^|$yh$bS-tuJ-%9K4ti&@BY)b$aPJF8SpNvj15eHGV7C`k=FUT#lZ+*7D1P%+NP zl7cfY<6;>PHIK3wI9{YIs#mH$K}h0Iixw$-m}l+8h5B2pM2Y}FRG{;0Z!Tu^B&<-S z0u+3D!*456-l6_3{N-;=EwTU8_T`@~97>}U`(HO2i~Y2N_UE51p`lM3qu5{CU@SHO z02mCE7&OH;!u(L-Jpcf}Fo-R@N=U%|xij2U;M0mEJ1NH|2+|9%fEa>Um_j2oLW{`o zm`3+uckn<9(1rjRH4F8LEz~TyMTaahQkuLJ_DYD#-v>E70W&oKFd0xo?-8RE0+J;8 zkNal78q}+y#CJ9u4Y#r}aDW#D0000?58&+34W%liuqT5>5D*X%_9)Uko;(0BX$U?Ij8ADO zvxo+s4WprqYk^ApbpwZtk5*hwh9uRJR<0r4LeQYjCjh`$D2E>O_8J^9W<~;a4p_R~ zw#H&l)y@=x=`1c#Ze&Lg7)1bv!dNk-0n-A=DFA?|Fu5VwngOEY<5aMa?1%=joJTc7 zeBMTYKxo&r821syA7DldlL{I<+I2KADB`VTh2daRHux_$HdX{zCYG?>`DcU(E=BuA zB#UZx;Erdw@c7d{XC}FI<3wT-!82L0LkMENCWRp|E`xtll9~K|k`*aPhA?Fx!f}u* z&3a(AR`X1)%;zNR^iMcm-({5lfGL9_@i`3{y4P49#Sdelhtxt38?6x&y8x^YOM~E-PI6r2P zAmdA&V^vmL=Plw_qTMaI`c)8%03xsciC9a)=0k(MnuR7v-czXzKkB9ClbjD{RDUai z=_Ib%{Ag~j->C3n^#NXBTuqGC^YUW?VI`>em*jFt>`9EaLc^+L<&kz+KvD*$G-Zb} zN$NnUN(NZ#&7+w6G${NqJ??a!jD?ovOg;{)hYKk^&SRsp=O+3w%TS1+Nf|uVn!taH zTe8^cScv6!F~7BGnhj3DWY4F|D+E~b>g-8$xT4$)IHA%)m3T%kSkO)C+QlIgW)UJR ztcE>8y=)%#%oeEoXF9=_(wSo7=w*mf4#RMJb(5JmdshAyqSOxK>I7HK@Vtt>%azqr zB0(M^(*uTu`9v$eLbd5AB&6cNKs>#7D_G{Vq!hBqS~Zzl0+ z6Yy-{6TZC?43ihKq%q8T@}x;9O&Jk>Bl8)&0kFuB^b_)UL$&`cI>wR$c6#o3t_`lo zE?c&<^>(m7nG(j;#L$NW`O?BdFD;D~t=qpiG~K|k%@etyjn}3^jkVJh zuyRTmYyuCXY#3$Et+Z2xkQ8NPc=rVfMQ6RZEz{z&*v3%EEjIRj00}oh;hI);D>|4CfN7DwjlFfxN(b6>8 z{XPdQM)<8oSSXh1Rgtmqo5^`@c!=8pDFUJ5qgf?u4gWP%=TQ;9c3Mmbk&Fcukrcz? z!BD?gnSBP77&@m2?ipiok&*I1W?^w37=4@R>DJbA!BM>w826>98`j0JT>Gjh3yfczAuc@a_ZHAB&aKIj!C}@&Dtk(N}Fth9>P z!igiWy|dDA8A_m`nu{D!POinLY=Uk)K4b_~uBY0`3c(5W35EeKoKdq`hFPqw(iwv5 zOgVW1#)ZvbHc$IK#Nx3~boaPw)QiQ7%6j$y03ZNKL_t)rVG{F0uV4dF@AwRGH{94& zgz6#ZVE^48`k0@a5|}t`B^tFqU*?BIkVw(4R}v8Gh;T=4RLOAb7lsL-AeU2=3zVl8 z-x_W~TjYNWO(`bJm(gNjH^xXG1A|S`o)cA&`OGr;Xs8lA^7DC|2+RhGm>K=$OnPpAikJ`(Nv?Qjm3Vomp-HI-etBB2exDx49t`BQm z-Rd{mh>So9*(;Wdiul=_-BLCd4HfPvc?e~&f6Q(Fr|{u}m<@LKiN_ghT7~Rv#6}h3 zd@ibWn^{)UeV9}`&8|5KdD>4{3GKf|Lc*pfySMlVY1ks+2k8pi{t~)BFx4|_0?gvz z)?Y_=ONc2@Lq8vDjt|d9G_#uwpc4m;{`kn;y|+aWiNK>kvpzi~o6a?`YL?&aTlw zJlO#%p^Ug{(P_ZNox@QEX-=THGQYPCutei$++QRC@1Eo@AJLv8vd(}^S+k!eFjVQlel zrYxXUY+FOSX!bCsmK_asxq3X(6-hL%l^^$3i>la6TDH2tFxPN>LqbiT!@PzypK81? zb(;9Kl*E?(LTk`b{*(^{qG==PCKAX@Nmelq78HR##k&vWTihZwQ4SBI6Dzd<4|T&a z&ooMel3)pM8$c6?jKpLJq10fo0|*7`(~ug19?w0f8^`D!EF(#Z(JT@&X#fBK0072@ z#dw?pAw>NGP2j2sSYX3~?wc@9W>B$lqv1In0B8w3tlr2U01`p%zRg_+`c=nD03k^02m#7Pix;_Q9Ya}!h^|V&Y-oI8c5mT*>P+{3}hv%Mc2nhF&3ID>R~hD zi?r^mm#+f3H&ildHp%^0~JN=c92Z5ci={ z{_5kpFRkL!Jttem+uHckFyPx0y3Gmr=sf4K%`q|K!=&%Ujb3{aDz!FMvq(JsTf})x z!)fmFQM`N2Hk>;17o&;aY$~T}COJf3^-(UG&>{?@vlx~*KE(LdDGku2u; z%K4^WDy{DO3aluQO88;_U~0tT*c)=nrEauwJ#<8 zWSO$$V7yi!$x3>fP+wT%ra%|gR^y$KIQ1fyb$aR;e;UcH!A;ONY4FCXQLfSz)-{oEa0AK+nm%=y%1vmgO zMaXnd@+))_LVyHg@<5EM38u&ifHoDv3*nMNRTL#TQh{tjYL@uWNLf1}%$2gihu3w2 zah(BxSkRMgg%)A3+jwB2#RdQXkzke)>fF%6gw@ln0WcNNV=){B zB0-krJkEIl8#=^DDXob1um&=}xq)=V7)v%N_H>f9w23wimoEM{3k8#3&iFvC_#A+k zkVht1nC(Tme1q3{AdKQk+&j>C$_9T%LKPCP0?RND2VH~|BN;~2rvXV0ya?)+5$(N8Z=8aLhx!N>wdL<{Hk~)>xr)f+2vfVtm9h|5b08A_p zJWt(Eaax5@lU|=wNtdeY6;s(6rzy@$Sd%U3eYw>j&n6lrRTrL>>;n0UjgVeHA?9z1 z-fYU;{!@3jISK}8Xy^WyvxF98M6Sg3y-gY9Q_FwRE2>GXRur-Mf^S(luY^ywQsbM* z0lYR$!s4z4X7mfVuwfyyYK|^DVOECqtoo$41gF<|2@%r0@zAiCWOAILqVY zj1pL$*avB{#d4i@4H_O`gbdr=8SYNE*$iTfP-e@@I& z(M+ZF%!>rH913xn{0bU!4?_ZOnvGCdZmJ8>5-#PkmyDo#yHtHZ*Id3`O1;;_sHPm2 zeV>42c~MWyU2K!!)qTs2tF-hh>j*}*uR(T);uOkx|J33|h`Qukk6yPih~+PhGt#_e zMz7(rz{nU_xmdnyA)nLwYfB7Z2$hDUPSQVqowIiHoLjUW-}OoNW+4`0A~2jgis3S$ zwPezI?H(Nnp}C_`vbHsZZk{^QB`N4l$3uNd0RR910APYBWHh9vOM{KYVgPn9F@TP? zLPojhRRI_kRsRd2MGB0@=Pksw!a)l{^UR3J!CeYJGgZ{|zP;=S=9DD`0MMiRI9ePx zkvRr1(E_FfI_1o^4rN*o0H~Pe;kcijvmZd50001DLT*}!(Yz9*0sxVN8b`zM0{~1Y z7AVw6*4E+{A0TS2P0CoZ>K)~92C*Oj0H~v*0D!u&!qhTpXgnL7o{vtC$VPBx;(Q!k z-Vh2*lRy>qh`ADTl9~A3BT|erfisRX4wi?b;T*F5Y>Ij|51I*2W4hP+tD}Uj4eDM46F#r>DB3<$}b zOaAnnSYZnp1|>V7{=EX1gfQ*~BPWvWUc%ABgi83kaYm&y^F-WR3=9nBVXxw$iH&R5s8t>vUyNd z?-DDKnt-w=6|d|%*$MZGd{FJC-vzM}pf729SLwRAw+XnS1@Ts)d9>gW>Iu$OKuyqk zfj|{Yd3j}+y<9xdc2vuv(1);Ra?88_)}`B1%DuERZ$728n-J!XMyWRl4L^^s2bdrf za?XB{%`%j$Hy}LTc(Z`{xraXIpf0zMg^3m$002xHZRQk36a!Ne005XLNG9r9&Ky7x zRN|XKOsP6O1dP1^003aVkY%O4PT#Bie9ZS0MP^0{{R5MV2E>n zIq&lT&K<{P|GD`9MzueNYL=hx^L-bFrTLS8fGo!oVa{^f$NQQ$mG%7si#7m;b%?$u1X3rI-b=Ek_0q_+QFNvjpcqlMEy37_7!7%TpG+ zjxx85#*9LoJOQOVCHK}wBGU^QB%pwW9EtuktGp>4Dkbc(iNIyZsQ~>FSFU7?CWt+J z=IsD4@hoLkf9loR-`}U!Bd?sAEAO^A<@`l$-SnEXC$#}aSw0@JBrO*oloj5r#7$ga zVvSJWSWP)R6X=^>d*X%-zkKx@UoqrEeQ@LbTlas={J5iW^%cK@!p$?i;*%fy{Ea`k z>A1JQ&irbQ#}Ct^^Le{iux2y1956m5=?W)Y(qz(G@zh$fumefG!o)z}WL0X1{@9Zk zU!y?Tq+19OicuCKHwx87i`O*-86%AD-;#1a$eZyIN}9B=?%{P$mee|aPK)H~Q>vkh zlK_D~&P278s>~IO{`nX=n&CM#?cw)oF4vmnC6RFYd^7G3j zTf8Etp|yu@cbFLsN-Ho{Bq9zkH?}5CihcWht`J9$BrdGAwD|-?LE+rm*@z+}8)cY5xK zwQc+Hv{TPclEk8K0000}0V%}|)u;#Z5WpOO(32#P;RFKI;H+{fU{f|wZG3Q&mhJ>B<-PsPce#G4(CTqB7pn1A73t%e z8Mb&jzlA#x48s)ZMA(*`ig9!~#4=uBxh706fM{Ik!bhk3@C@h`p*ky=+!su@H+>ts zg-eT=rBu_q)iqXtXcK7Fjn#&e zBc2cntf?{@)tRDEJ2w*MY7g_ zMbkOP>0c`P1-a^AoLj}!ft};er%FvVW2$7kW8x$*pL(xy?-bXO%Iy+r?WX((hi60U zv%1N}lBK~w6imh}ly|KEw& zU~+~r5&mKkiEO984POII!$eoOIEwA*2hEemT-#LN@RmP|UEiRt7yQah^^@!wT9S=W zn1jt{Wb5->0V~UGIT0}er4}yK8A;NHcUhJ{`jd9i1o%KxZG1o(_VUBX!N&q2bE7%| zG(%H4)bJ>kL(r}RpmQx}Y$nP2X)&4bN$I8j5+vyst~l`N@LYZs!@AI7w=CLBB-COy zM9D3gH05)%SbUiBn9>wM3C29C!&IU))OCRoFP#uQ4J-i3CuNAx_X#ml;ZW?WHy&x^n>@F^s$~Y7jex^7iEPHP}LWhhyo|&3g{F~sXda~{)ih@ z%slX06tWR-p&gOzqcY}qRq>di+H``59J){fYQn@vW8dX1Qjb|03s55O{hWbP>j9$m zRn(b!v_)?D0jzRyOm9waCN&M~Nd2D|^QPaEBP}1rnge0{mQT|>eu=w()NTGMr)VPw&_|2g^ zgH{VtissC>NPW^-w;~0Q^ah4%lhd`6D*5YpEGe0sfz4+1q7hxpWTZ4xkhsb$_oU_( z!&RF7xERX%(Mn)T*xYU|so^J7Mlh?QTg$CKo(QUM`K8h~&;XHrEKHtVT%0W~ME#+P z8!x=ZVtF=bs$1FKs%gLj831sBj*&@*MnCqoCr!nt;j^0_`s|M$il89P@XB=$PN}#Y zO=fQojZ5dDi2==l)5<82en22SZ-|`28>8W4^UOWCM^ZeDrU1aWASEji^7lwi zxxWHz1U&$C1ONbh5YJpuDH|-u{yx1bjj%j4V6=LRe^F~&57iyjMGl4B1(kiSoH{wRNYP%oD;{HBqSwPtDCJYKOp45GyM+EflZq`!MP*4&yz6&rxQXReg|rYXOdT8Vd0^u` z4_v?I)+9+zKItD0T)pRh`|b6@mpp&3y`R{)-UP4wxj7u;a28(Gny+;IStb)Jwa&bS z2vk}_yYj2_0NKf1=Z@SOcuviavP{#C(Y361-8*?9d}8c3eQ7l~t*T>a5QR2Ybng{D z`*7(X5Vk9pv^*;1Q60Dp;3%?T$>nj*2bM<&^i4@3tsMh&5Oo98C#MFLWALC3jo{QV zsME4^MNQx&R;p5x@?UA)6tgU^u&vTcU!)s>>o~rYDyn zvlWdOwpV&z`U?Eyh6=yhaY{CQv}n_&(ZX9m3gO->tzu6wt&;QVuC(Z$4Mg#*#NaOk z02C^R(jawCRX(kK8W2L@Bn&VC{2KuCf$P`Ydi|PP&pPwMmAfxH{5j8Pr*!}{#ez_p zw1%Yqb4Ex5006N8W;p-=0GK}vFtx+#F*z)@vVodogLVM`2n7@*ENk!R%AN$`4S*S- zZve~_*59$=tUE3|>&y#R?Y-i8&wJLfZ+i_iZ-2ljH=N9pPR7a^s>KiNz?l4GG{qwrh zE6J-%ll&z2Sn0aumcdXXR$8#lbP?m>oHNci{{=5R>@9!#`bGhzW8-XT3S1CTbEX2y zoY3@L#9lqik`(KEZyHF?;NDA^QLf$WWrbJhu^mx;Jf|3C)xp)5*E`E;6Ox=qp@{B~ zZzJmo{I|cwM1(}{3(nUeT`4#J-Jr5PScqP$BD$fAi(AWM+GA6NPpx=H3@SPjPf6)i zFd+ovT63{(z^brbg1C4*?3JU8IAcOm)l2g-)ViF?U&N1oNIg(HvgGBHsf|?1qkJ_d zwgY3{a6+~yNw#KXR?;!L`l{3$Vxd;EEYTK2h)ko;!&bqFrbm?23#qG;+KhejDe*_( zq(Rt*;4l&5@rjx!^-`TZ%dav)-%PW77L>+>q-oixw7aT2OS*f@^t7#Q^hySH7$lUI zzXE3cLHlZ5AZ5Z!E?&y=0yN$i^$I<|l{!f4U)#NaBG2dw%I<|R;@v}~*Ulmn>T8Qr za9I%)x^Flso1Ar%x-ys70AW9A+BkV}kDFE;{`7FoiUi8Fv9RbgN&!VatkZ)o53tA( z2_#ElK~xr+AtFLU%m#oP;NJk4OKjQv@cCc+-X-6hBK+M)1_$#o3X9u@{f|Cm2-8^HX56enD;F$MI5t+U)!B^5jyU=;#P5tXvR z)1`DU_|M*rjKz9=J1OXWCv*%52X{J8loT`Wn=Pp4${a11uxg)8ndK15s>G}ZcU_j6| zC9DyrtAtTYZWxZQ;6yK^l$ zwT!bBcL00*;1ODyf+*W=%nUqC;h=qrtA_WXN@PM}pNeJTEhQe>r2OV^yHfUg;sT!r zz_^%%zM(Ivy-IT3{5jI}kc$hOlr}hTdugBqVj=;TUUJpib+`ZdDgWz`Ls#>wRpWE( z8Wz?NB~vw{Hm+7os)+eJP2}w?9uLyXsww?-A;}}M7T!@Z;kM}wERG$*y}qw+ywSA_a++Iu%}LG_=00F3l!7@q1q=azy?~?}n24cS^_YHhUAL6eWDcU5REjMXO%u8ql>K(?>>B5(Ce$W1PmEnJw>_Fy01vyof0Z# zgFhLOPfBNq@E~wL#o4~pE57=g>mT|k=Zvj2xo0{;#%Zh9y>*tm|BpXq@Hd>XmrY%z zGASXPz^KilV#c5+AKn*Iwoe&`J-Ib|Qog2p-`XO4e>?P{X#iVlKvP7nZ^#JoAH0n~ zdKxb<2IIr}J2ss7&JVuf4X-%%ZLcW{S6{PAAuwSl(MdI;^W2{0%66Kdu40)Z@bhG#gKbK)q5zsemgg$khDz>3 zk9nlBsY*~ifg*SwTA?C}0JR;GDA!d>u2I1Vpw#_Ju!+dhDD-%w>JJ2RB;N|EZb?nW z@W{m|P4G_H4Xp(W6>BseH0rw9RG|F8nDIRHwp2S#X>JHfvLtf_JeO$qya>#t!!l+@ z4TDS_q%yC!C6GqV_*g!u9bGcUyGQY_Ae8jDwU&WyB!y^-Defu=fe6wLgjEO9 z+_Zv(NJ;z$13_%>g{Tc4Y}4liG|Yp4jE9)9b?c1&&B41Mghbgy-v$@p(*TGEr=5EC z=TAKo8U!%M*s}TI&zyG7C;$F)3)sjIQ5gULa3BVLCCdo?-j;_N)uZ^2&@=~IQf+PF`@ImOu!88SXG5(OXj~@bEfpkDDr^S#vM3k15?1m zzz*ixJ3M^eg$GJ$y}9ajXjooB6Z5~V(Wd3b7Kgi0dQd?If#{rEo0$bUhe`4vUYF9~ zhRi}?BY0JZ)B1IHyklfsSOuzm{j*elLV1)6+v_(Sk%0K|uA{TqrB^$hC;U6gyNJ98@5S`|xlC01|FUVVs#IOVj`;d1?}5H~MhGV*Rmr5d9TU zVt322VTt;iJE*eaOcA6lTEvuY`dmxNdt#(f3V>!?XG@k~YIILk(`oJl9;`R>U`<@P zm$r8D><4P}tjzHCn5~4C&~U~-DZG>LuCwAW=W)4*j0{owVfM@EyjqZX$jqX zQ*{G{9FiTe4}lO$(;#h=1y|NEzPfVoNE9v}Z+ZgJIcPmb{47rT!MvFEPHqMN#oaH_?$vWL_? z>J&FV8y=-U3zMk*4tKa?4eNz+i5rKXYf z5q8TN%N34_DvFiE^wudGRy3p&)=mDj0;QB{q4~W$fe_9Sl_tdX))yAs+Ur+bGlV#~ zrv(Z)sZcTzwD@9#i8wr06}Q&VoS?xhI+6rgdMY0nDcKT1Dpe*3(W#|| zuEfW*BOqcD*s2gk&l+XJSXdD45yF^v7|KFR2BVt=0D6Uah8^rA1wIXcsUTW?0{{>Z zpE>QEd}cQ58vuYH2(pb%F@g}^01f)t#gbNXoWY<|@kU!%E2tK+=}ofcfXirwBxYME6htl zoC1)*jF^#+GUCJQqGAaVrofCqNReh`bYL7dmzd`g82 zDrUawmR`lPlHDs^4s^YN%(99ysbtLy+P6i=!;FwLcchru5`oO*NE{M3RF-Aa-4mNQ zd3aOKsw)ZeO&h9k(*gK20H%of(>HjsEj5Bl8c@-)(d$ZXCWZ~k#TzgHwrqa*um0j= zUq1IUyDZz;^fVtnCGFS2;Ixe@!WTCa&!sq-W%<8jt?8!yr|fypif1wUm)b>}(BFT* zJ6hxoJF7_mDa(L=Q>*KRXPeVoD7TOF^cGMJ?55K9x|oRK6qN+9#XQ1mQp?>`GMiC8 zCCYE6<6Pn~w--uIDg000004M1Z8h?*V% zU>?z{ST-Xhl>P|-(4vg;5EPhWBZZ178B>5(BpKX{Vlz zlH@qhHvr}r>(<`&!N2_Ydq4PYXk!2XFje%lmxW`Z71YJSCtkE3tt71eCcx5d{+VzvqWf+`g(v{opAyCtAj zqLC&36OPkME)?9^mYk|`xGJA_adR~F@kR-Ek|!t+9gpf^y88mwc`S|&|4`-}oHU8E zDoON87?&vsAtvUfselOVNi>8w$0%V75tjQZ@vdQlSj_wsA*$)lYU4ELNABk2IGCn^ zdowIe(aefKSiFHXzd{2e6;nlkXD{YhHv zUPM|3qAc`MCSGH+I)K!i+^d`_Y8@oq;+Z*WLRE=SlFh;xT&q=DqG#$%j2XGjkmrRK z6{h3bX<9QD!ad&{SX)=^-lE<_IZG)G8Diw;Og4qozI6_5IthETj6K&mUZ@iTFQ=uz zZgx9!8yEN5IIQv^=@Pz3#YhmQlO8X#;C!jDyA;yj+1Tgw?p@DQ;-_sRf!RoJcW_f0&Xdr}AR)@2!_6h~h7!sFSNz5WusaQ+pPY99v zdKyM1>%Aii3tA64!Y(t#Pqk;1&mg&W!sww%Myv4~HGg)=Ab!Czk z?>5Ve&a^llbqk&igP_*U%Q#FiM<;J$77T6bb+U9T3010RZTTzyHvw z7kukXs6{|nU_k^7RSN(BM0C)u*nU*Cu)=+$Qh8R~BI3=^LV@87;m`mry;=Yol=^HS zJ6$Mf8=IRF)g2&I&xY8BAEpz6M-S%qNDZv{&3qZr%|fJJCO_ViA?)h`001C3AR;uN zS1jFTg!S>$r=I=!Pk|^FFt=EL$A%C6#Xn5Wrli8oCw>`6Vr z-^HH0iX--~$*Iut0+k;xtm5Ht$+xaJ`k0sPwf7V4IU=O7b{Y#7KlBz|LtN!0WW+`4Y7E6v<2&14987btMMN0i6W_jDL8G;7!aEJin0*Uf0@Xu_6SZ# zQ~7ha7AZBQiLavt{EN}3gwcW&+g8kZ1^MBkUUHk+dmQhmc3o$|#IER^`Y08W$nm1x z?Q3B#N!W=+qEBfc^iV2+e&w%OEfk+k*Zzu=w9##$pd5aJ>|I*u|D4;$Y-?FVEd)U2W+DR8 zbl_8p3WQXc<05wz%VF<;Lzdfn2I?UU;%+~ z5kM%@D7tc;O&-SthI5aQ0xSUl06Xw}sk{7?4K#=nY#>6S6FFJHU@ya?kzuJ^O@g3Fs(j6xy=(uHx${7EZ*Fat!cd_!I{>Tqdpqw*;oaQB{kxh{JT%$^(s$qxx?)yLh;jt#;#Q?9CBLcp}^xEop#(=IjEbhj14>+EE$Gvr0%)7-C;&vi`BR$5|uc<-0)Tp-V z;@?;y_L!>Zz7;hxEag-W6-fEY6VwxzVr3Q#wh~8VM11$Y2fMGL!sjs3uD$#@M2cRd zC1P>{)fE*B1vh_}qV>Z?H*O+i^r%>mhSts#K`?=)=OfXw3$H%+Rt%eNwfBcN!gyMM z!O?u~)pU6OnRaRjEL-%3b7z~$#)Dot0~ZYd0GI|KBJ_d)W1RI6AY_Vwc+r4)#k#e3 zUHZ)*K=aNmNEu9f(d(f(qK!+61T1dj=4$HRB#6-?9=6HWKm~8kK*AdfrlC~>00000 zpgkIRHuyLbb>Dq?`Oms&onqSrN-x#X;Zd?AMJVU7n3i*c38Jk`X^c=9IdaM4+;7T! z3^m1e?#n+@`&{l;(nSy~cX*?52Df&kVKfOU0CsYKXq5H%)FZ}LNFVZn7d1Lj#PyO&m-sN;QN0m{nufyx;`>CcJL}S6c z^CYqjln#=8ZufmGM#$!DVJwENcmpG#-@HE%l8xsiBArGs`IooI%62M5RR`jQHsvES zA+@O)RzF0?4d|Vfd>cO%{?GsU;)7N{Rs4nDq-0}oYxQ`wC+xApub=`&k~Uk-@gMOI zrZuxo>*G=)@6&LS3dDY|*oX~!h0o5zUyD%mNU2&H?KpJAK`lmW6w6G&updFP@~B9k z1+Mk;eW6a&0|!uPtu-^zUWtfp|LtthNVrve8U+qGPN-`=-;?t#dQU@KA~3Wki^y+M z2R~(l>kT?me>Qnk_xyX!ejtdoG*1%+RVrY?6C3FgBuoh*Vm|7j*cJP3a3~GPv~*0Q z)ffby2EZZ%^bKRdC$7o>Sh@SM?Y4bX)8}m5bnnJ{9*DVmue{=hTh{*PUVHD+^hUni z@3L&?qh9n}H}leL*7Olw1VDX2I^j$Jxg87{OJ6cY)ALFiK2pi08dFbpnRi=S6ctU| z#Vy@MH7a|1d0GNhd3S0Yv*KXSy`He=UQehlbCN4%z*oi)l72MoV#O$u)T+}~CcTKU zM%5QUW9OkJ!YRsTIF`ZS~%gL)D$mxy1}u%PbrbBDlZ^`HQK!y@CY$G`5V7a!5O07k$?7qVzXeenZz@YT?;;(;ilmddjp&hzRkS0DBE~=RX4mou7A&0ImOOBJP zu2}Q+^DbVq=EfNO9xlJ)TDM<99VAuKs}{ZnDUxb%U0zXq?nsM`RglHFo(X2XZCpO3 zAe;RzL6wDFkRy|naB|xaLtz;2`qS-y_EncrC zF&@m=E*h7aq58Pa{ez_ur%o?@PV^@ExJ7Qx*nt#Pfp;+*=op$eT%sHl=%Ei4ng&Ft z+lD?gd5^1Ch=uD?`ibu7kT8eRIiLH57iOUaYim;3u-E8ng$zprQhJX{u~B<4y}7|0 zLEjN2D4W$Q(UpVxd%3LH?^9TJoEV1F!&DyA^6eA^aV=N7QW0-oImBrPYTv6XJ#nrO zk{{616lGcdigXI&BZhddo~@s5U%5=~3RP+NAxpXu%Qf1)oVswe$mlhv$;9vjzs39$ z?L-!xru37=@xwE|vd*&*32BDdR@UZHQZ}_)?QELVgnZ>p`gk28Emm^L)B4--kFIrY-+Y6lnH9m(bWRO z%o;GFPs4`0?|;`jKl-kBew2QF_H&+k`dJ^*CnZra`~%u!=@O%S@#q)7Y2D3tjb68) zZvb@1A&0F#k)hFtu_Fng)tbpL+J^KXqmdB>_ww zfB5Q`efhl4efT5qTD7-d)X;wLjq@*tt^@!80D#dzYzF?+9=UHi2a*x`2fYB`4{8Ao za#sKV5GN+=+29$cn+doB^u(Qv5^BJNu>T{|?H{2yoEC%g?*HBx)q8+{ zLnHXh2Q(hj%5@_AJ87#$&e`&UKRDtAe{jSn{_b;Uoq6FXC0VoP#=ak630FHgWF(O5|7XFFlfhH_4X5KI8Tgn$Zf21GyTXT}I4 zLT`ESpChbo_2^A zyQRia&>uG5^S~`@e+KR835=+ybP|PiqtY}?9AdDaMnLRuU<_ld4FF6I;9)RPz?=pE z006OJ$}~z`nL9biD+p{u`s@#!mfUp9QbUipI`L1TJ?3RC7r4mKaGyIjcCLe5nNupM0G zGM179uxOZ^{I@-E?c5 zRXtHYCDq2E3r(KMXE`%$qHFW3>lV5+&$oSJ&dY&I3WCQj+xefr`0-}8(%0El*)NARml6$6MC#gC1tKxKw zhB)l@!Ms$xEaP>lyv`{>Sw$Pd?~z#*3VM!YM#P+kJ4X4}Mf?;)Mi>f?I2i#+n2RkV zU}=6rF+My5Uv6#2Dsto;q>OQar8JYw5Rqv`%seBwJVW)#y^|6CCfe}O3f+sN%jM0N z@>eq_Yu<0=DpXe%`YHnLOnI4;sIZ4pwyV5&^*oTer_hzNq-FEti*DJ$THIyeoKkpc zG^9zC;YVG8hgn6P1W+p4)T)bbqbZS&rG6}>BRFUE!76K#^Px&b^+8t{w&`2-;(9l( zvMTf9X93z{dA}8VFYo$@|69+EQI+OmF>N8mQfNoIdzWR%%~CBY!I9c2E&WC+p>d6? zAGEaWc@A{rTcg}oeMkaTKDGP+Qf~j)6(SX0z6D_RcbP+dq0A;me zBx&VcT=>RY&7uPctFoPN%!WBYF%0HJt4J5MLZJeBQh+xmqG?Eyh|H5D>3lzO5;M zy0!7@^A-UcH~ebNwKx3N`v3axUu@XCdCMK^W!(?o)$Ov&W0o)5W&7>7+h^}5A9U~m zyX>;lqSsw#RE`(LA@b_0esbS^_pe=h+vd%=yW~wb-)?!p?kj(H>Gs?G&aTTIzvA}} zdiqly`&ej>d4nnh@fV8>EI?zZyxk|cTZ z6L;TXhaC=Fz5mWTH=Eu;783(t>IJBnA4_vTcqtonf$wWqq7^S!G0+Vq9BdXST-|$# zkP*pll0H3ku^HGwsgSVQfmY;GG9{bbu9|z_n;d3ia~4s3wTOuU!<|?DU;LT|iu1nm zO_Q?WfL$MXbne{n(D0=Kbj07R+XjZ5KozH>$V6&$C&AuVVGGLjPqjtFV%vfx{P z-WH;-x59yty!Qhq{P6N?Hs15VUo)fEe%BJedPYhtp``tag#Iz{E&ny25#T#LKwgQAz4tKb%g1cf;KDE%6;b{Xwl8 ze{Ub>)LqV#l)#aAu@c!HXE>f#t-#1Ji0Kw$wkQk_;tIb+pKu}^4(Va?jBEAdB`&l-m}ob zh;xg$)_6W5I`P7&J2Bn|1Y#w9VQlPeOp+s}5qV6sT%N&)r-?2;$aB>3Zkd8OsgcN{ z)+=abKDcZG001BWNklJ|b+M>Z?f=c=~7m^)siP6ZWANeE1{pI_gEw)%>o;Y*3aPDP}|dYEoMloci@_ zG5dvxZ01!e=Qd>Q1=y)?40IoXQ5%4l1OwK{*Pl#J-$=nIy?q&$;NwH{5jdx}P=GE;Pc*-IhIl^?uKL-m{-^ z$N}JWtOt=>4lBz<);44X-_<)=O)ScWcF(1Z?PXRhpa@1~d4l=bL)^L6Y(>@6 zxw3&t`5V-5%9jc6Vkj>wDI1Wo81eN>4g5fnDPf96Q#QCBv}x157hd@7tFHaYy4%+G z6!~e@UXMR`^;2H(`-gY&cu;FYs#2056Z?dvBCoslhHI|*@io`~^p;!xZ|kyoV!Nf= z9Qf3|_S<)_XFluTCqHR-b@x)l3MC!Y3B76`EtGZR3OD$8Yf%h(;?Trt2q8qZ#B6XP zP=pNM2}imsxUzvn!zbj=S*8tUQ%}G?q)1jam|#{m$Q9JQ_Gck>jlZ{iJDajW8uR|j z27dVIDLMy#3M)^Ceau+8Q@Z&pDygG4&E%8~>iSLUAG~U#n6t9Nzkvqc;{vS-DqZ+q zI7w>pqDxevW0FLgMxs(SplZkLD?B{*)$f^#rh(!efA*^5Pk6oQ*Yj_A;LmQqf8Zhk zy5NEXAG`nZN0~Bs>l;qGVp9Dx27QBiIFXbMnk692COAMQ5>P^lcQds{;d?YL>fyA8_|v%7*>!w>hMzQKxYFssaKQ@P7aJ1SDAM6oyc8Hrzyg>v^Deo(@7NC54aQmDpPSwVHHGy*< zqKJP7>lNh5@)qeTnSN2|AbAT=r_s2Frngg?6_*4u6t@t5Zk5M zf_ff#@Ddk`dv)7sCfnABd}*%Fo2nICG^yE+?HL4ffcKelM>_<4cztUn%gCG#NQ3ev({61=_NPu^1-zBpp3MUZ(NaycZU}?hJpbk^E}^W45#8zo1k3=Qf0D`S)PdHA0c?`Y%LMX$1a#jUXzV^}YG1Zolye0-RkzD_={}S=77y z7r*<@hn^ih#_#7FIgaxm?oEoLVfdc+O$#$!$FpQ!2Mu?_uWTH?hxD4PyCGOz`^9`a z&Tkhbg|N5bs+P~s3ca>lEhF}TaQGJ<`{f>8=l@=-`SKo16}sQi!U(4c8vteSy{F2B z(v^t0sOjl_TwomO)QMC>MiTG2Y`gKg$z>a-kL_}}l3%Iruz5J9Wv`bYy!uLJ^hYv1@8@CSwyC`E65P)FcI8H*C+RQHdp1`mxxpD-I2E)pcm+kWpC>aF}jO?cSU6 zd*qJws-)_Rs32$TUQ{z*UM`8pUu>n*ZsG<(bg8g z@c@GL8!J{r$a6duQnX>(u^l(}n~L@Ie(uTk8%pN4(Mjlb0DN}skLOlvHtj#v@V>w3 z-C93cXcGL;A$&PSRMdQrt95GVu>xSUxD@^`^_0rzTK6zlS z=JU&~^JA(owN%;}61Cgs4iV6pQ}Knh6*koF;?{MNB=3D!S<`jhBu-GQ%qc;*Tmu`j zApbMYPWRoHePM)a?n+2~)89*Gp!7{X!#D4Dejv)o2L%{|IKRKVasApGCVw?k zRsj2-wln`cHo?+=?dA47OhFQSF7Cehy>P2}@99lz@W(6mm^=)q9Nk8y;=eT??BvM~ z47mWaYw`gT$#8dk8wW84sf$d~1s9kfAi3?zUe}wXsTZAB!;zdp{}oORy5j~Vk_5$~ z)43XM8cjoW{wEx)5P2sAy#xFZTxNw$3CJLpXS_FwqJ1wG@E?v!FFSdrV(D)&#&(qP z({=CpQ#RHT9e0viexBaBuc0^0LPtvFc|RU@>Zo|?09BJ`=wKKJ-y+(U-S2{U3b3G`(7H^e)*P{7hUMB13Wjq_xmAwk2Rd0muzZc zDinRq(U2ibbVc`$6dXpDo&}1B^&R^(qdxbqCC#4FsRqG{Kldt2X`Nx7Tcs%mh0e)D zZ|l+EB@8M;avtVBt^9qbc5{obR{CnuWfT51%dUV`eCCX)my#&m_U~^W1g$p>h<@#4 zQw@LUzWQ#gKiYCX&sm_bc-c~D1xJ3i0mZp3=t6JY_-Ga2jL4Zs&jeC4zq?Oqx^7Fp zZBK1JGHgQZz44&{F5Z6?IszGFQE$+6g}e=}>>JA}nYkk00)ALqIwU}%s!Kl_IZ8fg zJ1<*qGcHzPNIAs#C+TZSNzMc!bZOXENJtIBLBDXWJ$4UYyg%y+K2LQhx>%tql%gnS z`C49!)*AQJ2!2ja=(i~=YgLUbUJc*t`sH^vr<-L4{JEoVOnL!jwc5k`1n25 zNq2k6l7=|!0}Q$ALi+~)+g#5j{?J~Am96{FP7XF;fF!K-=54QD=g%T_b?5uc_BT0W zoN$u?-Bm=F4?@OZ(r|Q%jDDwNtDkW8s%-ZP3(-)`vul*V5@;x_x`$0rYq2bJ`r)rK zXr^Ueo(3iW81-!Tr|(Lb+z@3b-=pqgp=6o4>f^oSI8M??kac;td;L+5*y#ZsLa&MX zC$@_@ATeVU+x_=dSO;_7DQ<7|BoGW-UVYXC)xUpGFx%n(M(cD5e+NcZ1il1Ngk7{3 z1X8!|SLL;~J3>=}LS6UTLrvCp^iL9=L9b zU&={Iw@8m*5K+{xDr`1q>mpg)?VOjnp`e=B_7dQS=?*;v9M=i6T$(<*Ct#avZec^a zsc)?jSt6tX&JO)yCgi>62t-kd1%Jw&&s^!yn6Kl^X!4u|vu?KIXK~^xi(c>NH}(PX zt-GO<$-w}+&YKrRoSB3mXJR#b)^s<0ARuGzz{K2p6MsD)W@R=85Q_FG$^m-A5(@#9 z8&3D9P&D|ez*C{>b-J+hB8Jq>mlSLyPhzWz%QoHLP*;k*hwbGL=FV{qa zQZ{S*N*}Wp@3HecBZ4A|@^U=}A5fA=cPG3|)kT#X9Jhxqr(*KuXK^<+G<|TlUK2w&+A(F(_0;GKd%vpQ|TQHKy5;WCGWFc$|XGv%2kmPki?WZ> z_;`F&0-IK0;I_b(nL}3Avpm4KWresjx^RlsEwPc%xhrbA@0WXe-n+6;RFgI; zDBTJkU)~9P`*#jL1d8t(Ng7Q9U<5l||ADLG;FoXYZ~h#}PjfF{YOi6dv^eOWrB;mW zpa{!?1{U#?9kNh4!%fzyb{rO)jf7+=bPIX2tzUf6@Aah}W+ppJFP5vqex=d~G~ypR z0Rbr}e;wqC$%PjP2IaWze637J>csMU)X>u8A)4*$f~i%}Za66?D<@Ott;*k)<8 zB`UZmC(Ry$-5_YPKyBIfZjk?Wj;UCO*+;j>ClK@@-O!)VX8<7`&VUHk@&PUJN!;1* zap<}5))mdXo}7&LM5;(RuhxWKN}M|tY_tfkDFH^d{e%z`p`zXp61zQ!;g8`Znbvq) zT8BO$h)_;!a-CY9BcbU099IT=gio(+@!Szs&e7=R`Oe&|s6g2AUI1Oub?Uoni7gPw znswjpGdswiH)7ay{1^;d_U)jBSYmsyv$NY!e7glj&BDdClLa+=i@dSL{y6EGbQi(v z59q5Ue3kWH6MtWQ7lp%w9Tq!l`q_@rX|SNt|Mba~8SJQp~`xWGdAo4TAH`>|A&dU>8OnrNp|{iRe9wLuWD z2K3>5GbVL+=IT zH+;I#8i2VKYqx z^NvKB8(X$NPZMXlpMUl}>m5@mzzoG{;Qfwr)N%x&0w4V>qRp5lWv2>~jpLCe^wOn# z5a$#6BK#jEw5lNw3x>JCC)q35C(|)1?7<5@IuL*Luz7XA+ge`VELU+;Y;&`EnSv!J zFS%`f6ruVAl@z$gNZT{?3E~S8k~zoyLj*(jgz=9Tpek-5fD$l*;=unSD| z%~vSX%_WEd3tk>e)z0(s^Kbn~PCiD_-XaKmpe-*r*D_!!oTg}X^G;zcMHhgAa zFfw7P&9tY<&iDkP)y9n!gk2BK*G1}+p-BGL-b3N6Yh@M!*6Xbo1+c?#n6p0fUo9+_ z2{-4PAE|0zUB?uVkW5OOE1i9{3!87RbU!c6C%L{BYY8+yA{w6%p~BtjjlqC3VXzv! z3_?$&nuLsi7TLLAKm`YA*`9H!pn95GgOu!KApkDj(Sh+|?)0|`@ z{u*fo(e*h9YPQjIxmwr#GGQCEU?{A9KJ9vuhiC8w)eSI~)`Np!C8S5L-j=fVO%lO^X&`f#ZYg)heMjtFABK<>Y>- z!VZ(~u3pfnUSq*Ojn8Jgb7dQr1@@2yn&MKOYF6fngTPupOnME%br4K7bOgvB(EK-) zZ?WAu+E`jLK$mkhP9mdoH8(<#siE9O?<|>C0vz-R&uV;y^Vn?+bvsM4Kwa;+#)t+6 zNe81yu^Z(KVOu%R$P;2bv^uS|#&#zIkR{jAoCW`PtDa8Oi;OQ5H!D08T2J3td@~?R z0@i9rR(=Ob`}SrEdWx0xU*#=V>6Lnhw`@}7=0 z9KMeunYZRxOD5>n;w}kFmK(SzK}XD>9CLhDOYrA+7&hO8ZwPD2uP8!OOxY%Z6Fa{+ znlH68X+JNDkX=ZXS-m0N5=D#>a(NAY2+);xCH+xX(F7?_+a;G>dy`4x@z{CxOQ|rr|Zc z*96booO==N1L8vEMNqXC2h}ax?}jyRDZRx_JzNYg#*&#VOaFY=_;qRn&oF8JyIF>- zHiPwvBg>J)0qWg3bLPWm7^^srr5Wc!tta??bpS8P)Yf9L1#;UvkBW`goTpLbRuC>4 z^=B&g!=U#5AB23MwchAo9H*W7Bbfz#8IQMWNjHAELgQ%jfTS@x3fkc+dU(|Q=y)%V z&7sk1TK@u5pw%l&G-+|b0?OMrets>st0DIKE@G9>qvE&X3ZL^=72)y5WLPqd&iYsQ zS)QxaCnOo#%(vKpeNrGDnsjYz@LiWNA1CPbL-YCHE7yTc6hWs!o9Q@}-AwFKa1aBKwp|udPdP!A zBsyTBJpgxgeAR-1T(PLzHJK>_5paFG!@u+V)DZgAtFNB#C2ajDIBWK0AA#?TB>kBaLe7EZyNt;} zQC0cr05vut)As~}4U@^b_Q^dV!2l=oC{z?+zah!_WyziJ?cL9!@9t+jn*8N=suXnes-^5?cP;5My zF+P4yQQEz01g*NUv5*36vqEP-N*Bz9UmvEXJ+}DG!d!(PnVpGmw-%OynrUV17{A+F zJY4LI6RJrtt*H}$-3MRA3wOm&Qv#83nKeUb?IlLBvsw@vACo{x3kfT>KaSrr>C|^( zSjh30ox&Q&7CB#MOjJw#4fDZr5r-u&d@}-UCP2bn)|3GgO}W`%qth>L0|G~_`)f!3 zdCp#az8F+;VY@~;7GdpMh12vr(U0s`XMi9rt15pCHea`+87m|3$D^q!Je=1!`<3T) zSt^vuVrA;FZ@W2q2ML_mZ15EZJyYHmvu~9(6J~SgOP}FR7L{V?o)leBUu|#D29qGt z2ThTX(Kv+ID+dh1a9(l;1<$k)D@T#+MoD}eGd>#I_{8&Xdzq=6AbCC}UgCZx5QC$8 z)*#4e;xda}j_b($ptUVyj=d{4zKXJK40F{g%{tp-86k%`EV$5Eb+NAqxbc$3MoC5` z1_=a;wE6(Sa4h=nUk&AAT3cT>M2}w2SkdZn%dq*Wp^)wW5L1vln$T`SL%E3Xx4^jL@RDlk)3-eWpG#U+tLIAC4UKjdVaW+#}vMT5qdvSBp^|dp?%I7G^ z87uR%CS4@*w`si{Y|bE|I9V#x9?jbHO!5l-a^4%CW4EQYaD%DCO6kxOFYd}}UXOiL^75H)wKv5gpwk%{U#R3f8COk{qqagCtP9+1eTJ>}v>@|x zz~^l_pFL2G8|F`95_%y1<4GJxc5ziUOdzHY$3K(l%s=Z^^e>D!h*qBW@8tdN$-+O$ zcbT@`)#kfnBldqKT>M?}#ww3Q>cG*H^Vgp05fJ$bADc>DmW|h9NfT%He{uA%H_L}S z_Lk_#+Iu_rAlDKB_Q;E77(J$NDLmB>y`m|n8aj#=x2etN1g5kGxblJdSKmP7(BQ;n zve=|qhRWx;pVd{$D&wiYo1*pNSDoJW!#b5EvzC6>`Mfv!nM{))@_SQ*@2}q8oag>a zi8Zv0C7%kWw$zn~*lalAbDHsCf4pAE0nw0Yd%32dOpZpzY|wT8Dxa_;uK}o;?W9d% zfwNxr2(A&>z`Y61pDJ~n*&*?mtX|>}CQLYppgxDq&lf(ErQTa)(@b<1Yhf{*^><8l zHq7iXk}D9U@sBFZBkP=`i1;IDZ=hUCjIAqPz`?L$9P-NFlL;puufG;BLo3YDZs+yK)6O;;cAUE!AvP& zNnhlEkjd`D?|1zno$9Ns>_UkKP2crcxoo4k8*2;F>agd!?BFR!Jkoe#=5jGN=T>&p z{ZKa!Q-CmtsR6qSyj>7Ov1t7?gfx`_{+wuR^^P>r%xUu$!pj)#UslF_q-ET&>d4}%2X z7&XGTE@Zqf4~>;y6nGlC6a!Vz9ST@{t~|;KOxHL~dBowtw5P@TtlUI;IgENn z>wymnuyMZVSa78=_dP5;L2^{jbUFtRvE$;)0A5YHn$K=(* z4kagP!9(Eh<*e1?{Dce)0MlE_%QMb1e7yWN36l4XnTeHMJEw=nC9-Aq-hGEwm%Hq)Kt`M=8!(pwmy<0sXg_Sco1hj8%(oewcLS6YE(lY-t zt3G{c-11meYXZmUYK@_jsnU8UwkYlcDmlmEO@y7}%^H6Hq>&q07IH5XzU3<*SlT<$qMW1Ofd&P*yHZk-@>VPDMMXy*pzj>)UV3eYI%{s3%XX_O z-6oI=ybPF%L=X*o0Joj}J=^|OM#k&qYO_?Hes!nd|MO|Ban^n#wURufdN*4)Ky|g= zXsI)QpXJ*%%f5VppZnvqHeb`N`*Ag#aek|H1BeUh`Se^}d$#kX_u-3#k-(;924Mdh zRx4SI!-`Zo+%ddzz%(J^^vBrdP zwv?xoBWns*&020w)bIpEqy{ zV~+Ctg#aZ%gCIG)b@=XoelPfVv+RKrLasM+f_xbL$i_r>oq{F9#T!VnM+*aSV%_wROM9I-G(6!xtcaTY{?Y;gwO<(y; zx9w{_r&MvDbbde2C-2PfDziAjz+h`T%z0qIanaM)-RVf!UV*9 z>_3<|9d~zlJoxp~j+W-qBB-qSX9AlaHuUYIHMsrp2`TEm>pV1o{v!R7HifJ=74NxP zRlSfH{(OacJ*)+NVdcQAe;Gm@5+}vvdx> zA!4#X+9CeIzp+*~h}XV}kd_TJ{DLs>&+I;{QDSbOr`Y|oJng>zt1`MY+I#%_v==9S3+oDgCyZ`WT8E3X<i*=U3BPi+m?vA~nxr??dC&J3W8lQBPF{X~rFaYC@U`GkVful0vKcfq7EIpH z`UyImxIGumChO=c4P+-W4W9%{7fz)w+uB> zm;|Q4v(7}=<1;8KYOU!;WT73JFOECwa#d1op*`YOn$Glj)O4{wwnu?Z4S`Np617L; zdRV;ZX0Jvf7`(sSuo>*jnp#32ZnD2M%kCR=>%UlJDz4Q@YCe(4Wm1vP2oeR?o3IB+~K(XezJ9jX;TcEmw~IA1ew z2d^7qCr5A1DA}ni_VYUIdah@^kOUsS%Bz|0TM3C;c7wHjB-M$5xUVd$XKr#gz9)}4 zoDWMYCv>E0DCmHkod5eZ_c1JjEm+MEXqO)dCLg;t)~UJi3dY27-CR!Mvm^@( z8p%c4`%2>P;4lS&pLcRk5&y_AmLNi!_7k4sftMQl+#f5GJk}#SiO`#t>&GLmbmh&; z*-LEIroPL~Y0q_$9c;0`T>l2f(XEz~Ak6g}O{YTrli)k6&rn#t@N(~o3Cuxjuok%p zC~D_wsRz$q!llKxyqk=fY`n>_qsj-Y6j@b4{i&u`lFB@iK$}0bDD|L6dNWxx0h?=<>3^%G#Y1jZ1{k=En z;HkR`gqXi(uj?hI~lAl_G5Df&87T=E-X zyQTWI9X&7C^+z?cu*UxDfP`fV-k-&<^iv%gv3#T9=+pJ4106qKrlg#Ui>00S8f*XZ zo+6AiwLh_kFTH)Nk9gf|u8k-h*gyIFbA98bZI=+lWe6kmEQ>L+a05T0?*XSy_UH518ai*Q-Vu*Q5D5cpT=%D=D!D1DDcFhRn95f*ANf`; zO6VGk2*M$6nbwTl`0Cu3KMB9E4?oU}s4=zn5dY{K|D0}%ZJ7b^ArO<@rP_`L|h6kK5HKSU^g z3y)ejL%%C8>O_#(Fg9V@Ny1^(nfX0V^8-@U62sF!`b*!6!&^)RMNd?Syl=!`De7Mz zE0rQW2OfoWtH&R$}W^l)g?4BJEF=?q`HaW*LP#{ZBTfRDIZ7p4c zlJnHff3(s-N4rptEq<&VrjEv>$f*3o%)*W0q7vvVwy{7$_p+xUMj= zOQkD#4LXB*OKy}LIg3E?*WUQ|V8F5b69#}afQ(3LeQ2B|STOCg9|Dn&sm`lLuF``< zvS$0LwCffrV5(EN8e3)Yvgpo@2YXypLg%_ z)NM5Ff<9G;0$e8iJ(NuPkFNLKTQKuqI&VwFR+K;lDk62Oi%=Civf3$A#gH%%k+A|G z1q9?8Z#2Tv1~Uh!V8?N=mf@#!nRp^}tUQEl{q@$`*I+1qCAljvCJ+yKDHx3t;RxXy z{OhK9-hm=Wlo%_VH4INOvVKm5VSK z)*_X^=dP+?N8ZgRSlOj=nV&~$c3Vz6@LeB`GhCN5 zWY}iwlqWnM^pFl%?90X%fzW0J7TYlxE?)bGD$Nb%8r(k2blq2P-$a^D?C=2LlY@#x zpAMjM$ZofN{ap6yyti-va(@Ew^j;5fXUqhS)fT(JyE@yfM?)y^ws1DKvoHRTEjx_w z>1Bz409jin7gJrXyr}(ipIOi6ZEVy6+g~Nuy~H0?7smc0&E)sr<0!QCZ*~RuZ4O0{ z++D@MMdv^xyVg#v7yey0Ow-~XY4lUIe!=m571Z_n;1_QJYb98suxF}7wg9Q#&*cZKh zbG4kT-nc$Pfxz0Z%mHnS&5HAV5)PZSr{8+iORj^dSYK{-t&cdEHrQqLM=}T%@np1gaZE(Z=~rY$80Atr&9wBZJF+{71C(I1Bht*K4rzcxmx&Ci>2 znBn2S8<5v)H(eAREHA5mrZDu-Sf~=GXxRCAS)fmX!s5p^$rXf#IcNA8==o0-(=Wj{ zRJsS$+AuW)6&nIEbUk;UJ8W+!(vo#0Y`a|q6dn3ldRX9<6wFUV+wJac$jH(y*?Di5 z%A2a?*0u3X8$%2B13ey0op0udXn<)(XY4pGlFPchvgPuvRU9T{)yxA~27x+tSi&Xj zOeOC0nJqX2xB?z$90JSt0r6A*l+HA$3Qp0X^7&yVp54tSSc3tMP+CASfv^`05=F^h zj1yW(iSIY^0PPJsm=YQ^K8!$i)U?vT1PP&pZ%3AlA?q4A%MG}K95x19$rQD~Qlivq z3ad-mW7Iz%x;g9LfFh}=1|YQ zy04#NgOFY62PUwPEMUPp1MOW|cn5ASP$!O-nsaA`GQ)cSl~d|rBp|K$$3%l?Ar>`ADM-pH+PCA>^6}8~d5&|t z*Mn!w_??#t%t0sAkCzfzi%Y=Y2QMMAX>YA$)|b%He_6pU&M@f&7Rsh2<{t{f1qqMh1Vbf;&n4+#Xv zUvb2ZiO3_Bn51kM>XUK|tdX7P(!fB7@6>TrKyr!iH9MXi|H?oeMJRybwnF=Evfy>o zmTVudR;_-uM}vXi?{T*mI^Tn9cT|HX#W$qA^lxpRd8SXqlWA10!Ty9;>j*|E+(^)c zD%+jwFV!sBhmd7rh!ar*5$d5w5?C4Qa~;1xOwr=^-#PJEI|vCYOZ&d5Kgdca0gcr5 zghy3SWa0GH6=d3AJ{rb(&jx*6D10N80@#QWp*#A0c%Cbb97;c8tLLV-S#-b#Am_P; zayq(6MM|fhAay44i1WSr93s9`v?q0s0~GGKzXJ1198dhZmc$(%0^1&P?KVkc)m`Xx zIz2aKmD}CgDhx;XhiecCOr%056R2$DY-Gnk6}lZ((s^srm@F(kG)lTh zvlbqrr{($mdQL=p!EeIO9D|W*uXDX&nauU$PL>^3jxk=31@T)6dYWvv_9LZd$h5E9 z*9)oDI9P4}m96!d>Ui{`UOw)H))9be3Q+Q7-0| zkJagTF{PV`c^q57;ZMt3-<>*lB?R>LlyH2~3Sv2`34 zbo1#gq8w`_BZDd!^HB^ECeXp(s(ZzR2oh8Yi!oykOBi+j(`o>jD-T0WkXg$+^8491 z*sBCUb8>zLFj%sn%Z$;T&oi(XmH!Y-t(w`fkr$hcadyN95mf`<#u z{}XsfQA>7;Ps`X|e9cUbo|+Z*76k`!k%hpf*H0DNyE4!0RraT`G>4W<*5yhx<$c>J6l!sPYDlnm;R)cGMv!3aV|s=ka%5AZs^O@K{l z)D$s=H-C@_)r90cZ#k#4z{L{Wl9#(>;9=q(N{vq$?u#$RoCl6njp52_UvQG`E*;5D zh=)!ck%o?wh7p?I+#Q9s?d%*Q%!DxBK|%*RdxG}NoPWO34W!j$$Wz-;)>7Yy$uAvz zXi$3IYW5=M5iE@XR-8TMXvkguD*bbX5krP}_K}-tTJzQ$^#ShV#H-NOVEJ4@fU>{^ zhw0ti;y#x-F@|OE8W-{ELPOyfHcTz`aL z9TKE$%k{e^=*Yw=?!R`guRV}Xn~9c)zi|oM-HfB5Gvp%J2qaI0qJHhZJxKinLC~rurMxgX`h`3 zRPm(MmwZV5DNB=zR(RiBHm*xKUBD(RhKtFh6GNk>06s|f!*ow|r}HK)`&LIA4@olU zK+5-**W0N8m9W?jLv*dfz%-2bHXgv_sp+^-x;xARupIWYYewXH3k7D6@z;WV5YI#C zcz~Ngr5M~4%px>ycN__47p6OtmwW>NEXy4y7DOWNs=U>U^NX4|AIhGpd*TkJ&-0yndE0LzPfZe}zH9Qwi< zPvXib$m}xTp_KtTHQeZ7_JZrWm3$C5`=4sLcDH%_#rh$~U(7(JNTJo@Kdjdx$oRCD zWp%3jAF67L%dG8WLTEPyYjzb^>mcmWMiMlExc$T8uF<&ZInlHQZOi?X`uQ39vgyM7 zmbZg8UuqWi>8<(b0Zc@N6W)v|pc!=A3}}Ht=kIn56g3C7s;uI zX>pUa(R!`2=t*+0zGCxiXaG1UUalm*7K_O6(tL!468?|~5iCa9Q9)t9sPv2OO?h6u z5xTu-T&iAPu^IxnrmZCZ3W6-h+W=eDK#8J{m89JqRSHE?i})VX@e1Mu)gn0JI4uZaKfz z!l;KX85&wA5^1t70dm{pL@$UA^Xop!u1FL(xg6yl2zNkO7dNV)s148*^*weA6bW@O zrjW@ximyltNwvDD@yH9zkpx%b3@mdAp~vKZ3-fe5wQ;8}vC|0!1O-H+bIlUdsQ1WU zvjIqSQKnU%GYO#>sK|kwucbC;tHi?;2k6Olz}_)gnb6Tzf*?twlqsR-Xgm#$$kKTYrI_IiUNWEyySGR71nuqgce9;Ea4Xn(Ng(R zgxmh%2~hE$dS_G5km6?@n4&h-`9Ju{%IGL9{#dNYOZh{3ojqB#$6hLh!!K=B&MvJl^$R;IFJ9D5CCPR z)HiSvO~hzS1prrnIGVkt^YeHrv)k-tL7c8<-Z+X3+bslnqdIRlSPoB0;<)wTL+S$b zc;+k4-ux60XOHA&i7<`$W4e6J%Hc8N4T)y3k;!VwH6HN(KNq0MGG~evi8TEj=uvJ- zmETeK`# z_@70Lq*FGacZez`3BLDouRc!$hU)st9 zf8zCJ&r-w*-Y*C?5ZgT#b-K;*h{4cEr6t8^D0dpI4p~uid_F~83|4ujnen)rtaXGA zn9OfYNB7?ad#TZy#; zmICOS=#X%64DZT^fWuI^ww8^8s_J#e56~<5h|@iQ3Rz zSux)0>TB4aMhEwaZU#dKd8kw`-w7hDM@4*RfEtd6-ngQ#;sHZ7Ica3X9(T072cW=v zXmRFk(DLdf{AvAh+nF6dw9V;GdFW@ZlP6^u7vpz8pN3J<)%ep1!;`55niq|QLglfK zs%}#5uXd`bH(JXAK{UMc_99Av3)FCVGM-GK`HHF_qiJyngR9mD4U9|yd?eW;?&az= zByA*%btG2!$y-L<#U=b~=8r-}wH;mMCz9Wo(Ro3zQm5Nh%Dc8gyo`tCf~2XXh%3wK z9=M`aBkL|EgTaCbNd}l9?)lr%qxmG*ndZHsObAX~NU`Q`-IID=~08 zZau?r=FgJ82vQp$8V-trP>RmrGk784_!T#xh+z zmEo}YvUrUD1@Jd!0Q8umiXyiiI`f&xZKadm8lh%tm`{n1NqCVM{_R2!c(OxwuIeBE zYx?f{+f=}_#eY(8<`bs{dg;!kB& zHJ6A?+JD~ix-&xE)wuQLTMHJZaO zI+&Xa1Kls>;Z!E( zc^8$O?V`?`B`C{xVyLnrFH@^PAw~jXnd(EB#R`Go;JyoSE-p9H#{QVIwTg;|5R$}z zsv|1hFRCZ*(v}TnCZY%Nx!1u(&HOPoYo7!3v<4!FPH2BZGCex;XPA#ye2epe4Gz@~ z{fk_6M_iX}(Zus8Va@?^mgh(_sZD#q0XmhFJ1D~gh?8B1o=dgS-Hh{JqWOOjg<4Y#KYi=Dl8Kr}Y*Fuy_6sT0y10k~iO(vHY8Px88PDw6qSzMTMw^ zNWxTufu8f)Bgt$xN$@Wn`Z;M>|AmdCWD0|*4UstZE_`$DB5ku5B z(4=Li&0kHVsjEGD_nl9_JoELmLKqAf-FV>)4!tCTke0}DYP;5M^Yd-$=z!jRiAK@1 zcsl-Fwwah11%(Z6zvEBDveP3Cq64|fqplyCg~kmnPcEiF3O}*lfkzU7{C=k+^LlRsOw4yHzvBc(jowmlu}05alb0%{BRG0V$CV~ zv6FsIo*@EGQ2f``1)Zw|{Pm$111RyZ3hA1}GZ+j9p#49gw5Pc_zj1p?X=%B?GBj?S zcgy(eqNR1n$uSL3ynUZ>qydHpzOObl6Dew5NPmq6q+>vomu;)uS>^VuX3Yo%onvGz zGiJQ0)i*F4@W&oqXs)K#ty>UVo8DAz>WkwrPfsr|mD{0w`SY93|I;k<4j7nE;Ad?Y; z!H5CJxGjPcJtOWX(Q>G`FshuT(opGRI^*-DwNx&^ZDPKx(`r_GT`m41^>!wsmn_lU zC3qf%iB1ySHb{Bhid#ISCkM+3DV`eC9X>MssoA$o7;gNtxOV}Ek#|?^Nb7LR`0IA> z-aCKpNAG{|dBqObYpG;t-lC~GAGM;s_DC{B#~?A|@DXFn22tPhTY6)Dbn4uydyh^R z54j-FU<}iq`J0Ec>gVPJAd7eKJX}Z`zc#i9_yXHH<1aI2ya_pO^vzetsZfEElUuKQ z&kjm&lKwbK{flU)u6s-g4-`sTHLtD;ZB+vGvnyAut*bpsCdZuIdKX<9&T>53fTD~I zeTD}hnG_NUe()vd&zk)nvHGNep50{^?XhX|4M*DA`79AhfMUuZK!|)OC6%q;*u=ps zMzkyBcxg)eXFK&y9gq?ub19r6mY60FANhI5o81NcJ-%P5ShA!xr588--6m2|1X?s} zs_}k<{s?r@02}F;nXCaGKmh_C6c!S);XZKSV446fgRN?!w4(P6xk14iPvv83_0aTk z)Hlt}UuLs4QvC&-w-2~_EF8{jjtmYyNUg24M{f0Fra47TycbtVb}Om61dW$=^R%@WQB3gNy0g!(P9BeY2mo95|Bg z&X4>{JAO1Z6KU4Gso76q(W!H*vEzn*@zoozy*cfMal-@EG?bTZTef7qhZCDLiGW22 zBL>Wz@g|EG?VO^bM)V7La*LwSWgr=_;f!7#Y2E^yIr;ewNyhySo#Nu?yCq>TGNWBd zOPXu2QDHu@yh>W1LM$&2v^+WTq3qFeFoVH}6VxahaPSa8K)Ou|WMbIE?o(FLpnk50 z;#TiDIBCKY#=rTxtH0f8r%akW25TJ(8Xf23#WSJZX^L}g-3xR07t)@-V~j;**3UKd zWJQ>wW`)Fb42Y^dd+)gQL2u`tRLtBcF$gi?_D42v+Rkd*32oatUH}Sjl-8zg_)ZSL z-(E>9uMwk$5X&nphF#^ee?OYZ`K@cmq49uBo8j+7pHEK=zi8aZ#cIA17K7Y^F-ZkL zr%tD3c!faUtmBT0NlYE%(48ScK12$YWK;(s#+zZ#fTJE+NKXbppiWRsqHfE5(>6*58F!qx9?XJJsgMUwQe^^sDs2IfMKf5%i4T;ba`_lo z22~LcL}yAUITFchh`vKqNlNk$fCCAr zP8<-#B!*?uHX1JEl(Y_QOK92UadN9>faf3&1i(Y&<3eeCzdm?Gb2nM?oVFeK8P~by zb?(}|Q&@LjLzgb6k1Om+YcCLpIyd;*{(Bq2&>m#{s+ z9|_~@ygNkdYLDJI{vpT%b&66&6C6A=X zGU&rWJBL)r1{(SO@9p0LC4@87bRR%>Lp=b*u^$f-04Mb|NLnqQn16z}%Aq86F#*~y zi@xW1IqA{NZp`z-PrSi5=?S@4f&%Q2u`VP~aCfF(Y>~DZL-ijiH!QZJZPij^+QDYu zJ3s(HKt6dO1mfXmr8NJ zfuM6_M5If{zWtr7FVPTM*%vI{0R2PacI6G2qsoRN^}k;+&lyCK7P{4UjoraG^T(dv zS00xxUO(ibTeSX^pnksX+apw6{i9!(%8<6Fos2G^FWdfKnPr1->|6Djk8!_y5 zZw{1@3-ZFoCk7@RgQ2CeqWbRf53_2q<)o&LmO(?`KarDLk4#3}O)MBHE2_x|(C@4s zWHJh!&K=riNlEMH&=sKN)BU2imZxu`Rpn^gBvf@|@NjHVs@k z@Zx@yJQq86>>`j$dD*rplcruic&ule2GI*j8$z=<1_QI`(^a2-{3WXoYnq*0OtW~H zqNZWSmRPxBEwQ}93Jp!3!Gq7sl9Dn4g)QYof>x~~9|?fLU@)BH(E5SlkYoImwh%YZM6myu-Zbk)V3T>%IJnvoZw?}KR2H*O@cs%wir zVkF*cT6-i(gM@Kn_kp90k0-R3)*H2TKLvO3sy%z(`^U$hf4;ojkB7fGeNnZ&fjU;7 zE=6AatmEmYUh03rnb}?omb5l^5@`E~s(V}XUdWCY{d-L?1^FkGbA&o#($kos`mXQLmw=WAUnGiUmo6A&V{K$ za-zj#(157E##(4bOgZb^p3gly*RQhG9X_&j$%ds%HWV~E?#w=2hFy1Y+fz^W<;qJJ zulD6SnbW9I0lo$b2&R5R0DE10rRwl6luMY2Un4zVEiHZj?FCDhtnq!HX-;mvUVS?I zdrgKn9-BI$|Ddy!y+sCHEFK(LG$)%ke!pW|1pr|6D$%!0*~TrE6?=$nPj<^EpDw@g zmJ#`d_InAlkdij(CP(T>m6Xlt>*t2%^*+J#wY7C*^2)YV>E_K&$_8ZvgK9Ku0tV4` zqc^-}Q)ou~kZmsnwz)2npoZ0K_Tdt_l{Q+?WsAJA#V2J0NVCYmF@pi%1tAHXtf-~T zc%b}QcZPGV1M;3^;X}!l^_8Y^479OC7q@ny~f`H!HY!aKB53UfAS! zHaj9MjJd?X%Re6QS3=J;X;O$zSQMt%7#-u5<>)v+-~n>lnsPC;v*N#GvhF{iul+&kRc26sc6CZmJJzMkAKrd9@W3h> z2TCxqV}2)&4oHb&>@7_*iY6lzj=<^mxklb(wBIH)2SGH?iI$%wUMifB?ov3_EGtC_ zr6~SZAiggKIwI5^nU8lux~IV5ivjTjTkmPa#94Ie0P}YfBmj0xr9Le67w=TUKvCTt z`Cph!E0kt;gkkaJi-6R8Sw_GID5uzY9XCMJB0Ct?0Nqbo!2$ra)yTz-=OWs|>t3`Z zl(R;60YIgWbpu3;1xdA2om5@n!|{DY|IBd9@e`ev4cJo~BO}nmlT=>mz&)Q5yl+WCK=B)x%7HvxI=5T6U}Zqr zR_v^P?)iDoJwLB=msSG@o^{R0OT1m@!2X~XVcpWSS;`Dq+sKQHJ8Y+ipX{!s-Liq> zxP>2lF<|i79!~T(B!e}7Xx}#IEEs;_xe-Ac2=w==C8h7b_sNwAlEc(yE!+PygJQ@AURtUqrNAL4;(m zASbup#X~M6lUIhoEKoP2A+VwMB4N1m`rWvE~r>5fK zRW^fT2(EI_wxnX~QGhTk=rpE&ZjL%?DEito%Bv@IJH|Q9#Z$k8dOJFIJYBbFYOrd` zX%BI?z+w@FJL)T;*o+CanN*ZUBLp@g$z;>IOY2YP7bFH=xiuHbUM7c+tJd_v>vb|j zDYAjBi^IV90kv1oOK%?D8)#Z=3&8@ZZ4j`s0jib(M6H#Z!IY&-1TMqTiG@d|u=+9q z+IUYg>+CI$w>d@-ZKER4dl}XY^t#9tzu}|v66p;AJ!E&rS)GfU7gX%1_HeFS>JA@S zvSj^|CF|v&4#O{PciJfg^7WB+r?(VL>~C1W2H)9Ur?qU*w45}stKvTnrTA)T=^L}> zuPNO`cv+`Y=Qf3nPb8V6XV`LpD{y7W$_Bx}9mSBV2M@V=@S=~teC@Tj!c{qZ^67G> zYzPhyt)kl?YTbKuBv~R&V?d_aEG!Hy2zH1RHEmR09uv2O-msmu8KRl(Q#d|}2SC+G zu|Yy60R6Bb{bPm>9?kBKfqNz2%jO0Mp+;0}&;T>u{HR+ER4;eNr-{Ihl{B5T{uxld zQJ%i6Y$3C=;UZINLyt*@ehz8731(~Hwr7bujCtg9SpJgOTV>-sj=^BW5){e9^8o4M zi_RfjD=4VL;DI-v-RJ7Z9+1n#s24(1?P3=HHBwDZr~m2e3=2pBaoO5c{Xq+af8YWRvnk zTUPgF*EHAZUo%L<^8h7c`TAtp0MoV)0A3sDLe!{mzNv=*)~!SJX9KmjnKhFOvlMe> zy1&Xd9%!za7HAm&USrc>q>bv5sMt|8Yt{#|W_{4PbE{rGJB=BCouTW`x>_nc6y@hP z#AXdpX?l>r?o7QHj``odBTX8nmPa+#ku-xsGJN>q7nM70v=M<)+^lfmMQ0j2U5KwV&%{;%x@L$juaH*&KG6t_(<35N_DeD=9#+&ST)wQIt0Ot)g?n$b57 z3ngncPF@5c2$5*gff5MXiL_>;WsA!2-Hm`lkWa`252Vnru%>1|nS3=vZ4a&~LqTuW zj3hVvUPGh8yr8AlM1)R++KcO->V$5$p6%4qYPX#YY*mE> z_za}pI4L_px|L9NL(Lfua`fBA-QGHtGoNrgiD{+sEvC+R77d@S3Y` zy}G=%jh@3nDY9v>ZrgFzI8e5_?bQipe4A3=8yQTb9j|+aEu?eU_(Q1NN2P5M8>nB? z@2u{RKq6;AN&`eQ7!0au+$67WpN<3~H&{?wx}~&q%S*G~?cAwk@I~hix+HDidiCA| zG*qBPbkhz0tJQbFjLg|{FiqK@rlf6C0-=>{DJ$EeIb`1K_ZEHf<(g9M_n|OokeA@q zjJTn+PWc5VyfXWlXQ#e2d-g}l`7BH{!zF806N+$i-uZply&(Y`FU5?M zvtLgO92q|j6uPF#f)G>;6Ik5jhyb&DL%uJ?hv|P9_)KHHeT-mklo$+#7j7JTH4XJv zclgNCCF}3FeQJ-cmyf$?O4)bY(D&7Q4u&lnC++^rMsLpHQhOvxvv_L0T3UMZsJs5y ze$b;2{go0;Lw=*XKaN&X#3m2>?ZeG~$tnQRZRlh-f{g>zo+_vv$_6P>S_Ps}Xw$yt|6aQ`2 zoC?c^%8ES?Oq#lQ>FOFfRAOp|4jG6(@#%3a8C0PeY58@Nfb7mu{+Kw1hY$)$`SYK~ zTmv|6#*8-!*Tnkun+WHqM;%ShG@xbF1{Eon1%6yjGt5>Gyh#FOzbr)aj*9Cf>zXn9 z34gElvvg9^-vuTkUFheJ0Hpan`lf zJ&-|;qf*CZYG&=i&Xu)~{z$`0vL2|be#Cy0(qC#5C*;_@lHNy?nPB+)Af6)N#@Q8A z4{rPyg;_Q*qCkR=SZs+b;jyRg%Bg=WZDmD49Vie)r0r>~&3-!k3p1DwgxaH~mJRiD ze@laeb+t#|p8o}fng(Xpkj-cYnTAUYqsLq`mbiVxnzi988yE~j3JM#rieWGqafMC2 z84O02fOfQd+KJ9N-*ObzUYxL?R@uPzctn%H?i&CgvyjFN|7qML?}CB7SjBo{&B31` zBLKD?FpXQ@x=l;UpNepqc;^k-T>LBt89S;sxL}(GHKWH|)4O+jl2uh#dvxVjYqS0K zm|;0 zl5)O;{SiaiJV$eiz9^c-uuN{Thl?ooIFM7-g#ZQhM1&xjixGWLo!b?)I zcE!#bLI7a`fCK>he`S^p0b;1cIPQ413)Pg8woL~NrY1DBX8D2Pte*50W>$Z=hrp*u z_P?p&kf_~H@JYz=|Ca#A@LYoDk^)MTAG{-FIrX}TjC_t3V2C%6+2_X;!>3K#w132hlyh}-|;$SRbdZOZX#i;6>|9W1msI@L1>}J}^Ceb225Y=_!&siTsaK1d zPxWZ>QnL)7TBueYC%e^PeW0f=Hvj-207*naRG;V}*;f$HYf}KA8i+92W`}}d5mOlS zFzFt)8`?Gh+jm5x*JR1B^yS_JbhkLo9c`2{CT zxZ`?~HMVWrPIiL~5$C{WKXG9$QDrB}Dif>p_@ivUVe_#dfOd(&h#Rcma89@yxU6b{ zpvQgaQ9`Hh0iJbf7`EF00VsB(WRIfQ&aS&CMr(vDxG{qw24B{1z(868GE+rS^FlLm zcJDvp)^eOB=gEwcQ%}jh$Iua%U(vs$9jlzkBW{wDQs&@UoFG7`8+G&_*teujQ)1P% zv*N$8xkrpRQC_}FQyQdgi2Y4oy?Q+bQZN_{1|$0jS=+#f6?(-$<}1vZt1DtdO4$HJ zqYVfg7;upR3W9YbB5fX$%}_KAj;+a3`gPJ`iw9xIlL>k!PP_vHtC*1#1e9>G07yAg zN{CiZ_G&XTcUb5;POcDdP?cEBk)a>}U~E-$&*ZVi%?q-;0`=tP{DwA>vV?8BO^q8E zdOCG(HQ~=UN4jDF&+!Ss2V+uAKeBZ*5c@HdFlPQHQmQ*?Yy@?4H)+%a)TY6j8outj zD~MH0`6lg>E@9MT20ST=%|yb(4lFl*l?Z{Y3Q#)l{63+GfxLte&eXy=30sf}3q0Kb zb`Ta&?_pBj$|h*%M?quZkHYm@kHv13=wSF3$79h-^Hgd4EV;VZg0cW4f2OQvaH)dL zMMt37IgrQcQ;O~z-ogT*JhsHAJ8FW`^P_4g;t(?@KZ-M-wC}B}C7_3as>e*qzE+q9KcFoVI6LtHSIbPOeW93xIpplp!zEuup( zX-12^b{ie3Nm_lTI>?>#{S0{fo=O}V0`KUW-?dp#0zN z5htFRet%)3JbiWHk93xmhv_N1UnuL_1f0a+GuXGIy|{jh^uY7`W+u1`O1}xyZHqw- zBS*GSHTDT6x|)q(5b{#jkEUoiDV|cLkdtQTrdzIPesj84&|=3ISj;;W z2Ff;)UMbc*-qb?dj$<)P;z^oBV zZ(Jib=0W1B-(vN<428%f?qXGCi;Zpyqlf|jgv$1i3bqrq3{W1Jrv~u79c0XwG z>KQF}SY=_IT$E82aTn#Si82@j>Wb2=RjLXL($_H4zIWAflI*ZF0h4i-;!DN@2yI?& zl8tlbSt+IrR@V&67|(DyS#Kim?#tLahHu%r zbK!y&L1Y~>b|3x)FxLiwv3>8)JyqA1j3VW~3kpsw=R$VLLJwod4efbGXC#i;39H%- z0YZ`sc5cx~CPfvXR@lISigki%o1!wnmgoHHAEg8E-Ilv{s9XdGZaq5Bp8ZiI zs>nxDb(!9VL!Kw!rUR7a zMW8M0Hf{%OUxCz-x-M1mu0ZxRGRzI6MoPqL8hcV9l%FPdl^$JM|5CeSmgQskUFX_w z@ItM{I{?#%HxNCk>XAJWR6Ztynq_AR$cOeLq|=c->;>_tYvfB8hMuXXUrq%LOJp{c@E40Bpy&zMTU2mlyBj6F z2Y*VSRxsK~@VvvA4GaQI`^%I*ecH2{Ms)4b$?T^ef?ok)7}BVbskuqEap~n}-!N`? zw%0=3!8V^k(7k8JoZNb3YH;;8*|>k4kqJdj8xg3#O~m*3(?DfKHDM`2Fvsz*eC$NLnxqsS=|Q&^034S z;*!>^*QcJ{=jw_bRdFn+kHCQJE*TuheZTJrs|IU&_h~=nv5D$KG_DgOx1hrscr{4J z0DKv~0HC*Nz!ViV3O#x=VN`yl(sm`suSJLEyG@x(I?SG`8ZsH-HW}~n537}4Nzii? zE+cIoy;IHxogWEOi$OHcDQSMWgP4+=mRI?H!NR3JX6GFA@T+Zl^xp)Fj*|Mwu?Q5{ss(=n-&)_;#d&A#CkEPl#b&`W>} z9h|oiXhoEM<+ldgg|~)m@ipgn#p%~bESb`V-O=h;6n?V=pA&lAj7yZzAk5Fi3 z4=187j*T1{!9j}~B@QT??G#rIKu8!ECa6iBVR=>6A(FYB0C?UaD2L{=KCTy;p(kD? zK-M1Vs(W_=;9&_5^ja!jIYx{H>d2x;l7xqHI8huY+M{qTN$|43I8rqFMu4Ufp3#x| z$kM6;k+v5L1AWml>R3d-Rr2-(RmF;Zo&0Cx-<|NrKb{>nI=qnw4^S>XD zu;|c%vhJX%8>Qnvs)xg}6f$yGE&H6Zd*h`Q{ql z1GE!REiMm$eqW^iT=h3R4^p0Cby4T|1ZYq{H#6CtQddVhAgx8ff>m+? z&kG!YJV*!vXFlLbyNKn>i+pgUTt(?^@cHzuPx^>|WE%&4i`1%B3y%AeK-P;sS#sX_ zeF$WP2))%MW6W_(0y{^Q0ts7q^$HT(t<#z&73d=M3+Qb^Ax!~t2!rNk*eON`)@M#g!`D7Bc7#t5E7gn2Rhoty|j$d96 z{gvssJ)x{*@c>%8tq1@BkppDN`LvZMbD$=|zCi$XtN6fZkZf7%V20; zD=9T@a^l?i&lfi@$j;g+Xmp&}PrLWChytO}t8bSqEjhDk$a*{sTWwEi)2>yvS1UD; z({)6I8xcqxhPLW>M> zi5b9xZ!ru3ylnlH?;Vb1!f33{lH>G zr{k}t0f-x$cx-CMpd0}7+imS`F|W5|U{Hs+SOEZ(ZWS*jcF!>959muKqpS+s@cuiW zP#^^(@>EwJib@f-@B9z>Op$FEYtCa#x(lUjuMGxC*i*+aLz?~hsfeOyr9g@4mP$g( zs3!e|a6OsA@uDTuawrHuL9cbdKWRP^)=%i8bb1!R$%(v)2^F=Vb*==@Cj|kyNJ1Zh zOHEut@~IUY&6DQo4Gy&rB{6cJk~A4YL1@(Igg5^2T-Mq*7_z;F-mrMFL2o{SUkwYR zlepqs(|~&5=^$c$1g+F_{gC4I`%d7(UKN)B&Q!*1oU-flMna zs<)Ky2u$dQh7{{q|6Qt6igX zL5WWQ^^Fd+sWj92#Gr}R6v41W@;K1E_-4s07qfFsrPB4Y__YZ177$xB)8(rbz~NG} zMXRfCmNkbtEF~J)`@1emkFtT+B?cov0FZSRtdfJKag!6XP~Xt3*-2(U9X^r-XjsWo zV9DavOfgmr%ld{9 zH)aTe)_eitf2BLf^P=|#bU~%xO%0rOR{YnW;@Odt^BXc5*#c!>7TW5EVQk3d1wpMPoZqgj8vhmS~e$>U3Jx=MV~A=@BBVy2k6^F zTV*YuxUN5B*{= zs?nXJ>cmM^6{uL81S#73g<3&`r zV(8aUlyBrxih;5S2;wKG2+*bnkWh+dJ4A6i=rgNWePvqQ0_CIC@YPNXA8wwR0Q!sb zItc}nr^nDalC1y^aZ*n{28C8#l%|*sZrl+wXhD2-)1F^;2N|Yhm3>2N^9_}?M}K7w zl!8tcx292}{9x`mT?A*-U=8xOoNbo=F$QZI47XKQR_-BF^ybZ)W>1~Fg9U{)=d5#j z6U*zZ`5zO@D-<@DZ{Jj&6?%FG8Fp0ukN%o2-%5*RL%ebBD@oZGOkc03G0=8@2J6ft z0lP&EhI69iLniwy=@^W-kv;l`;~SEQOUW=}&tX%`hHM}#O#|8r&ARD0fp4hZb@IyP zYnV?J2F>K>HzX4yS`22ec5859qG@2-^jBkCItF<*MnQM=?z)vtpPkKCrQq(lqK#D&J(horS3s6pYko5IeIF6e>!^LvECe|w!n9eY; z)iwLFCp0tyqESU)`3RaBtebzz_4yCSNudFOKn=Rx2pj13M_uV?x=(4_dTv}i%#{IxPF zER9dFW|bCyZ&A+uqySKUZ!gC~5Gake2*{MaN|@7^KMteM8qC9nF5) z{|nP{g~>_9zmIY0LbPdM#0e+Uyf2rmB39xyZCeq`i(v+yheU`!oZg0*u*;Tjh^ukK zUuMo>W=vT^)24(1L~|VX)yg$ASL%X=ODT|oK{r5FL}=W@X31UCuAkDUAz&~VAwr9? z0fid&{^8Yz`x(JxI<=8DH~RhLe{+Y)gy!zwmcx|N_5AsXEX^gHR|>$ZZK zKGJd!MaWqn7Bl2$(vQay+8TmDsYww~!(x*fH_3nFAI}#zC%1o!Fu!Y(&!N{u3T7rI zUP>Uk)&fyV2ahI=AJSNl|Fc)q0D$Jlx^{lo5fyHfBDyv zl|-w9=heoB0jzd}gNHrEG#AGB#sE(@%&M1jT29 zk#T)`5&)N!BZ8uzNw4JbAT3!TJ?+Th5<1eeWm$G&TUS!FaG>*AX_^{0jV0%ok&18DZ6ui;eUA&nDXJGpNp|;AKLLs^24yi>?T4c4Ym=g?HgI@WuW2{M zW_$&GiV$@7MwnpV1Pgzmp{xX^R_mdx0!sZ6nAT9Eb`o>L&jj9t?%Y?etXb4uQ=czj zZj=~CNF4#Be5Vy71~hJ*7fXFZPW@w%-js)&lpsoC;NpG8i{K1m^yPYuHvT*UTo|OHV|t|EE_&e;~2U@pO0As zp4TLcgLy#GC4f_G9Y9I8NNHY@usIMf$6(>nbv#6ji7r;5?Hud61FE7}>KmFB6><=& z4CRnP8sOPbi8!%;yP2lJ5Pidrea##8@|63dH?`FEx(mk14jPMh=l*-2@|3Mdikdbi znVmOicZH*%e)63h9F_Ld!Wq#;7xgD8Np;nsr>DM1bF^nyJoW6$5t5c+jl~UxY$7lF@vncY(mOgkk99Me->Ku?L-jlH7 z7j;ZsbePsPjFSR{;(f}@|4$}ve?lP?IWx)BbOJ?R%@YtqZ^7?pOO+NvokwrvF@9W_ zI2kG=qNW=apg#`0++Kvj)(+xzAahq2sF+EZ_EG(7(l+)$jKDoNss{a|Z*S(QsxG^* z4IY)3NZ&AQ$gLGSs-jr+#mx(w6*XzpD8E~ePEu&-4vib}s&dR;_L5vMF*JKlCN=QwkWN+l8#S)cU>AB*M@z_=w9R&2krlpF16DjOJd07U;>Y^!$GplN=5?PMaSZzyPVT$j$L_B*H7piBBW zJxB6px8XmB*-JwMZBA?1=CqdT2f1qZ-p@Z-vUKsv^70+kdk#jT6wIc9L70`x*Sz&M z>HVHvx^`gqnUM*dJGA>`(JGQv_}ui@J9Id;bxDip-nUN{E+$-Q3`#h)?I|0}$!U~d zoAb_HcZ{a$=KtlTH*2#uPDu*&@_M*H{W3oz5&-GHfF2|FF^>&SVY6}u1;|GB!MrJ0 zhk^AO4wi7;?@~9qWcbPky^<=T1XKzrIb+F$WK!P1nMmk2p36U>9oW2VtHzmGd`m%c z#0~>+oa7Kjd|s0T8|j4N`UzVnpl<}IGI~e{AL&8)seUspj#2+AD-4N0)n+Y}d0`C$ ze_CZA1zlAi13BQQjYuT)4LS9X?c1l*WkUw`KC>$_QovQfTe$aRFn{Hb0~cM*#{g7_Q#Wmhg+Gyb-R$%l$P z@4_=v0^7B;VIhXPqEoVT@NISSj=N|F=q~+57xgE+ZeCY=^o~0pef5>81^Lu%**4ym zn@)Ajz6Tzj8H#KSGJpgx#^>XKVjGug{F^i;=SGR+xQ`YsRVy2?s~ponvj5NCb%1G6 zod2Eu3`y=pA>18mgi{Q92R4cdQjNv}Xkw&UV*v{wmKX(liAunVA~vjv2v`!Oh=~P3 z0ToaK9AM-qCWbo*C?3gQ`F8%#?(ELDJ2P9qt>3-BXCCGDo1L9r-gn;L%fa zr@|Lrn&&zDaU)Lh7t9G~abff9J2hG6cbJwZ4(*uq6=p=J5(*onJX;S!|EOLj+f0LL z4#6P;Aqh#=9XF{^ZsV%xyv}-5S+CMU1)3ycL<%KY>lX2+8g?6x*=FM3NxGewDs__W z#G6xkvPi0i{D`?S155=JVN@$w(D{^1YbnwP%O1wD*!Tf!GFAR~h()RBE0I-5t(dHl zurYMOvH>6kU|7xDfvQo@RYRW!t^ZI&;wFSD#P*4ASwn+5P-}`<>r! zKm7^uAfnL8Swh&dOH=(kNEV@CJc^1qw-Krui!gr5?tWsto9h<26&iT@2?I|*Vava_ zK62l*Idd2N_uKy~CbcL4HVuH7k(8#PrWQDq0L3DHCM8LdHf?OY_IGza{dBAjPC`NB z*6kNu_`CQAJ0MPAq+f32w@dBX{WQ*;G&by<`q=c#E;%zL?LYPL7r`|&0FZWg_0ZsW z9#pjtU@HS?E{MOggTxjfrOGvmM^M+hfD%Ir{Y6){-Rp`g&szM^OH|WPs))@=e^yY{ zw#}`7xOUFpo*q2(_#f~2!}R1DG!1~5G2^*EC!%SPB&l}jil382Lto%5`4%f}UAo(l_-yM+4$t3Vm@_9uK3Z_Uyh65-+WTf&bnS(>J#-Dn8 zy9kD*n2WWT&{IwPHEEYm_xvmBfR#lxrm<8xH38DzLN@OPhOTcoAXX!8I}9Cq{Hw1& z7LJ-ht7mgnW0iM9F?Vy?-YcQ*qnG z>*oILnLhoF2$D+J2usr-+-jJ6AcLgK?Fo4Wli(29byigJn1lohU<1E1ylxtmD-2!M z)ZO!`3ro^=S{ayMlv#IiTo+dWMJ@{944iS_f7+|1_Eqm zJ}_9FX`>W#BH$~(1f(t=Ys2n@Rbp_J@aCAxUvvO?b3SrDa12 zPrU#SFwY`TUr|HWv```zJdNKbp(fa8pEiGdF=2f}^?_ASJ$L6__guHnK5fEEQ&F&z zR>ESGU^cgmP-r}Tcy`rjR z&)(hA+-89yfB*m>07*naROb1-x>u3G&@%O?tZ3b*_u+};GUfUPGeFY-Am~(cP|P(k zXa4(jYt|=Q{dH^VXT18?Wb*(3lrUr&kpPXHT3{?e1C;=r8_^)Mh+Ha_8f62gX-qgj z056D4Eu>%xM6&UKj5Q_C`T`(L>ueOEyKyR9O%Jm(?6Yr@`i21mk9}*wAN%${DwNbP zLRho+cLd{gQFlOxhYR%{_x| zT{|cEbuY-})GaG$ku!lo1CLKCn?&ExxOID)>uJ=ebZZ)b1|w7;P1=BLtXexB)IR3? zG&OxU{^t8){wRYRZo9uJ^{z@_1OQ4CnU(&P(z>Lmj29`$hZV?l4<9B#k3gEUXoOI* zx3|MqHmJLnAVtCwR*)L$5hg*ArMxM!B1@olo(mBRrWnKD4O5(cwDas2DKvhxG)h8DCEadkW5OA4gb0S?nh7PGi=;7lh&-> zoM4d&E*x>|61`O<9Ta%c-@r8>%yWqm# zC97|+Yp%wvI|iLPBGsA(IquGeh&aBKfDo1uR*!FLP>tTOdVB-715#4f+I z%M>#(9q3zG(vOtgMnyS9Lg8443%BnaD1Gdn2P|1eoDtCGGjB=ter%Lqy_P4-YS6Ff zQRzi+hH7=jvj&}+%~Wq}mvbe$(l_MBUz$t+8Ru3-LP{8o;p_0l4HmCdUBZE8KIwZ) zB;eTe!nLLSUzLWCKqehIWwSx(Alyexs)e@5A!!fU9B@t#^dXj2QJs{_De7rA$7hf< zG28bY3sN99^fO`Ykw^^!N&_*N-XwyYEE9Fb?tC7)Y60wm7snJ&^bO|>zhdKtID8eB z?fJupAGz7DLBl`)^M9Xg_~z4p?)>++-+l7+|F-T*McK5m@zm2UzU9Wzrwr(yp6dMIgB3U4d~ai-HcWunpotk-n$kX(icwgay4ArqbXH z+rgv+nwf}t-xWtJwE|@W002lebbZ5_S8l9th%}#mH4SV2*);#}TNix!^_u^FpXwR} z*kJ9h@7C`6?(MBj(&v)&fppYfKRT)7PkMH2z3)$c=*1)VC0G1LlB5{)4WMZNgpS1v zmu;%wyl(9mt5&buv~f#P&Yzue!tuSJS6tYQAzZGYRgE27K*62V8`{O_Y>|B{yd z>$H7a{_=>bZa-_~I^r+8GID(bXc~e+HkgzY8}>2PIN5re!}XP~ z;l{vPi24nickTMGcDFjEss#oWRV_!3I!AMJ4ek&GNOnU)#t6>4D`nFIT4BQn4|wR2 z8Oi2r-uxvWuUK`>RU^EcIMA97(DK4oTDzwHrkn4rTazMVCNDrGbfZx}*v2-LvCGCD zA$4fWIi1F`dzV8KQ8on7H<&4v{4N=frbg4C^CemzCOg&VRR2$ew+WMh=Wu>3W{&cX zbRNcO%Vj}S5G$BX0>5XV4Qe!9V{l|$*X`I&CZ0GG+nCt4ZQHh;iOq>^+qRR5ZR_jj zt@?g+SKY4a)3^HUyU*HdZ49U-6Jv3zj0i3wT$(tUn3W8h(GF%j^m-bPNBqs`l#++@ z8KC7$kDq&mDEpPK#ZjP~hsWH{)<>m7eCtFcFL**J?AI@uT`zEN9?lx~-+tziSpFu9 z%LtA8zI`0H_Iur9{|<7cH0XR^9LsnR6g92;4Qee&3TC4I?`2RHp5_>TtfPzRxz4bX03^hlp z&?`@K+oRf9UgCnX=kgS>VfQo~08k*5krEQ91v|AAxz{WCj9SQTM3h4rE{9BN1%l03 zFr_nJEw1fD-XXX}X)Z8FN0~fqBG66fD$?LIyulLy5j(2wT|56JRCrDzpF%p^k+sJx zy$CODy#0>AJ{zs}w08Z=FAF82=Y+bNXF_G+W~zE?rKj;Kt1XxQ^{pr4*&3Sc=U02v zY4Ry`uFuNp@-J-RRNdFiB&Y}Y4z&{CTyvx`Y4^ka$e$NRSj_m3&L+}PYYrY-^%T^0 zz?78Z(oW~eNX#9#s_p#!_gZ>V-pH&Tp0|0Ye-n`;DYW0-qqP}XftaZjR(VX|GIqqkpBG)xHk11j!b1qirasDr&-MH#!0$lv6j5!Ajuz^OW-h;FsDzmR|WzlAKv_!?6U4pPur zu`(G2*K@Rcnji1GOQ|;AKunP|pp5{`x&VLVXd?a0P_j9~hH>}J`0w}Tul*>b z;0n8wmFw_{8rK9%pO3g2DBkyHwXa8+@Er(a(C4a6rn|O3=iMKwX&PLyR~|3RXJF-m zG{~zg=rCcFB7U~u3oIq)d;6FKU|8_j-ijh3Rs}QC7F%iU@^clGgj5u4myYB9Urnr+ z^GcU+m_BUAt16h<_EW$~R#7KtRx69&S8i@-tU~1Bi|WR1mAC93(emoih7(eI$~NtV zVF)mcUF60G<$l+}w3BSs)}1%?8=|r8ZL&o%4QLl!QJyUTG{ci}Pif*usif#{X__Cai^2W$PnD+KC zi2gP-HRzoBe6gW%7~CMs?O`vRg{aMA*m|Q&cj6D*&cyb{b3FGSIfBT zuPf+qxm-J*!2EisE;k3#*37nq;1O^;dbeLt1b*$7TO$*Ea>V;0eT6eiC%cl+#w%wQv{b(*eKM_hGQ4$CgT=P4Y#U6D%e+MZPbJby3@nwJKQ2S^ds+uOL*_Vu2tovE6N^JF?s3ny;d8uboBLc2JH8IXWHj{>Wf*n#O+GM3+jklId{#lS;;X|BN+`Oxn5@P50Xrxx@J>tw-=4EuZ#SL$xmXy5f*512n|@#H zm6iyv@z2iII!%8RI~~z?+4MKw-Thd)ET^LOoo|-3w=tI*XdbTmUTbXwiN-<=!!N}D z&uk^JP8HblNX4N+xJL28ODEt&qEbCVi0sY*qu_tz%$F~rDuR)**_j(^gJFqjj_lHSsGDvZx*YA(Jyk?WIi=I-QSJ4>W@Ae8XOSu1@$|K+z#CY|_ zIMww7;E-Qm@Hh$=w#{mwNp6|7O5sljg3Qdd2fG5Po6DbCjzsImPM zb=mjG88L*qGKK+_`ckteiH@9{xoYCO%mO)R`91Or{_v#+u!(ojhbDZ>ee10=PMh55 zomD|@2N*+m?v5c@G)elYMMq*dP_7_}chmY%3$>^n+{EqRsA()GPFhg=SQ3%eum#)pMzk@*)4`7pz_E9s);91$-(n|-GoNo{aKG%TntUlllw zgg<}p@@`=7TWFM6w$bwfdxz`JrzvkH3N&(K?c@80j}wrjuYwcJI&EPOlmP?GHffEZ zJS{K*kWt8G+ldh9>_Pk&3*2hxvMry&o+5CtiiiOGZy;`ohWriL2vXIHgwT*2phO|g zUXSe%s`S6ye}Y9`;Xz&zffk4We1vv<#W>PfC$&FnhIT%XG!gW})VkkH_sVTtdk{aC zZZT}0?{qzYuoJLOAkTTbotfdo3P1%W>YiIw_Yh;|9fx%fSXtrDqL-w zl5hl#BE2|@TVsLOWOG6uDa0SXkz=iD!ya-i@?I% z2GSB5%SnYv(Ul?)kP;FUdP}AUZNXYWL&3hk+P@@MIx~mE`D5{GadVgfr^LU=D36OI z$O>;R|8m{WPzBvPK7zBlaV2TrA{(g=FAsrzxDcK_V!KNVad+J<3u$}NUjx*JNv4F> zHWe265FnUW-&FsPm^s!ppWu7n^wO(OEAPoj$Em3;{>za6+nrsAJZk_4h!R515hYHa z&c+c~z|s0y9u*bC3afW-VRyb)3r8Ns9DPQ1fA|wKA)8z{~sr+ z|LlNNqTPG)#^Cq^)e4;87$M*gQltlt z<);~31?WI7M3-2=FPt;%6gC<9NALNt#dYiAq!7{RBzRB`4Bz=kB8{v-NX44mu!kMA7D?ub+k=D$kz)w`o&?A_8080`V z}@)mo0ChZtlI(aFMSiSFcJ`|i0`dj*m+nw5d5wEvlCml(GY7{YjfUp9uagdi+itE?83SsZ(@6@H!U%r|K>C|GW_@00tx24 z43H^2qhWXg#<$HQT{wT1{Np+u+cpOl78pWB2FOmv+^on>1kdxwLcwX||7@rp$+#;V z9vV@1`Hu#Ag*74k*U|TI1oU-a@`DejFn*1BU#0Y)pdVT0b^o3%BA?JqNb8KOV{BP` zJc>v(wpX49CW}4$eWx&BIAP{G*P_t|C%VURNqXI2>!`$h$8o1DF#Yy$#&xkWLYB~R z6xcX59MGh6glUoqlim^@H8=eWuQf+8{dU^!XrD!o?kDsW)kxJ(*=s}uY*4=?Z8zQLZf5kN~$G?xr;D}B`>n>02EU~%6+@?I2c!9 ze2+1WJUjbgjKZ*Nwv%9%V+QY+Cz4?S{U|Bq7Sf><6anGT;r;53nhRyP?Ztf|(Nr$E z1My`#OlhGkS(Y#aSfUmQ`}{b9R*q%&pGBE3XEc<1c+^>14*BSa*b5%<^IKZcfyVyq z9Mt|D9ze-~g-~NyQZof5zk9D2?5QQ{`&85(0pTXb?_)w$Y^l4w>Q%15!d`|?ODzik z(EBgozy4$g^+F|t)Nepz$_4lYfepvvxQ-Q@6|;G10ECK?d3jz(@eg;m!2h#3fIn|1 zCGNasrx1^1114j^nB{tOn!Db*HTa;dsY$RS&Q{FXlxWJIth3%0ma7TNYKw#Uc2pGh z)w!TF*&m9otHxkOnfJT5;!rhqt4=fZ#EwXSTJ;{2)Ko45R)pagdfnCDXyI92aIj{B zPUl+Jk#K~Iqki}7&BJki+9G(?rc2#S_RH1oc5XE5bsf~1jnNs1f};z!4kz$MRLwiiFRT;X5xaBWusWh0e6k2|WmMUxB!|vNDnH>fe zpiH5)l+gY=M&ji}{ z7mztJ`bmZDBNSfY#N3!}7?M*CKY$)@IMOF3gRT67+N~k9lT2f53qBA(Ee!>>z4Pjf zKEwBL!S52>4g&cjwB#FYfkGnD+59+YjL$tYG|+|9%>x1wC3z{%$ zv=}Yd5~k6Vk`~}=qD+aeb!UzLXqBs}#?1BeH1?3h5B+*;{V5jV;}8O=P+EGRRs4@` z5sgQIp_r^fHg8M+e}Z7ZP&$w^u_RN_EI@B zW?vkTC8_==c{)WIprIF}5@6nk^mm9H%)1QUaZ1Oz>+})x%_N4ri5f{$X`}M5 zTeW4OLB!A($&AE5UvL5%Nx+o_a+G597#^Q4hMZuXwZ` z_4-&aTQf7Ld(Z!D{8!0lLbZ_~Y$%`#$&}~rhbemF`P^8LM*$Pv?1DL>iQu9B3S;;J zVZ%9LM}BJ679uL`6@;i*x{spdY?b3azCV^xKdNjP%ZHdv5~BL0DepPg|aOhH(f9B(x5yE08IZbE8Us>()}vk%5TUsE z7yWUQ{1=HA#vzR{N(UJB^|L+EgCls*Eixbv>W1@lGqH_>;gKjpuZhNn?b0XKQy7oB z1;noRdF#(iwlq1`E>j3p@l}ECc-mzJ=B`Q5lOI{;CNE|7$Ls(mU}X{k?D|*z-8#|+ zku^3JQ_auOYzlS8f=%Ky1Ojv1dhVwb?Gp+W62D8N~(Ef#HIBr{3 zqNN3NC7~hu&*%HnCZ^ZDYIuLi_;!~yR{D)kXi2x(d6%vuI{2bTRFkoyC8NfmLLke4 z5kpYmNaA7J?a)x;A}^EuPFvp#VTicDBR93#U4a+n!1&fAW=U3%8LkSfB|wh5Lrrwd zC;>4F@ljy)ik}Lro4j&&WU|^n&Q_=F$b-zR&R!NUufSzN=9@g@yC_3WF3>>5>Zu@? zXQUJ4oVaK3%=fr~+z+19{%9Lih)yUo_o4rl&#P<$N~~pWy}2VGKKzA%XreKlBKJ<5 zFDq03j()94RqL!_7{g=Ncbcma)cz*$Tpu9fs16G@OhHmRjd;GrU=7#lq#+q5 zYKxBFu>m%!IHy#)a{pI{S;G5nIi^H~a#my%cbTXRDeb09+ErQ{z%}fG;d)>Acbi*) zh3+od)IB`5_HeU7j(gYtvxZ9}kL>?*0lH4RLqoIcFn%fi%?R}xe!f}@aqYzV;rq{E z?oRkf7MD^B?DgxXzKy|4a(ty~kdj->Gl10SNiyAVBtlsq?~gX?rZh-{Lja6X4v1=r z7O1CtOBum+uoQFyNi3Qc8JIENlOv}iYAP`XgN4rM-C&+ld`F++++>hNaZEh z@CZu=6PE;TA}f_|#%L_vih0O+pNbx4@hCoH+4Hf$h3=;xOybw#^+ z-P-vvZ9mHrk5*>=*B!ez7&;s=`LWeK8t99Tb21mZ+v}AxD=IsOfYGM+)43e^UkeHw zLM9|j*jhy{t;f@)#~J3IXUZFN5FV62+Dr1)E`$Jx8vuS${n3v6E+!b7fOuv^W6iby zffC@GIHbuTtt?mZakLtN=k3ynKRZmk=3i5Uy=-^HvP%Z9X{Df<7Y_}OC{(Na^$gb; zUf$ajtr~FwUBH^q#`tp0jHmmcM-bDNYlH<3keqep|40w2Vg~H`CpsXz<3g(B0UWyY$+Brk{r=8PX9*yoj}twET1&{CIKk8dQ}}o z?WAEh1$5P7L>`Md0fkHZI>UB|e5Q1WfAR&3(nIfE@S&h{n#o!;!OBU}e|TYVZ5y|K zA2aB{$;hO;HO=)Y5RHv8XcX^@cR(4$lW;EnZh~?fYk@JvHNJ~5MySA7FJcPNo_4dv zkGB8hc%m=?hWRJ!Rn2m_Mxoiy)Oth4?McxOz>0IWUKf|lfeClRzm=9AmntN(KUa6kWR3r6 zPz6}TqgMUtMHpmAL;mLvHW11@tjAsNR%6?;{Wuy5&!xn8b_3R=jZ*Sz&IHJ zXa>7TdhD0JM^!Q3tIbx^%Xax^01-p}p&VXBYaheZ@~&||fC~(TgtBr|W!Wh*|A;)# z-`3K$a}NMxe`~M7`w)=2o=kfjjq-b&*k3TUo}y9lF;SUdhC*sRm~R*b);s$9JE}t= zoBU^>Rh)9$ytfgj^gZcBHFKX{1ir^MYU!;1-9|hW`0O5tpa7sJ&R?1uH!mH;Uwm(m zyp0c;7>v)#$oSlRYdD)kSNC(tmO}%qzi)Hc?wHN@y`?DzEzAwl2Q1H6UUj>mk zvFdd0{cny>`;ZRJLb~KTJzf=nG2n^y?4s|=^8Tj5kMrX~?>FP4+=AKESju?7Uu?SW z1L@SHhO0B>`R~j{ibZCaBz{wduk{2>U51xxn7HYj9@0Y(I(j>YTRUG?O{F$6h{cO{ zSA(CHSF9ia4kEJpEASSu2>&a{J(_>`*s5%VL$z~E7nx)+Um=N+6tA7Lio+gKmpUqc z(7WIR{tZtABpjJ;k;SqKa)}}q3ljW5&wB!-f*-gJUf zuBcZ@j$4X7R|weK;$PyPjM#ix*PLYm2#$E^eP2JREpIzrt?gk-oo{V0F;m@Duopcvt2~PHFOH-#|?N?YK zv$;Sr|TTsMxgT=iZLIvIn|D$gXsvlCP!Ww2~PL= zWWWBv-%z&6Fd+7zAvgd%3DP$A*FTi=Ypc>)WnB{WX^r%#C5YF z(Rxl$AYf)qlMez%ai2QhI^DQMQ>EbVT)$>=+6m{H4sQB}NpuA14-y~dnj=Zop@va& ztV-zCKWV>A+p^Cy!i{flW#qH- zgj2vcat;_MVHR=Qb>+67xg|YpUSIF0M5^WGmL5;>AVzfDQg`HtvFNKD z?g7rgB$Xnx>3idGI|x=jEJUnCD~v`fHKp=$offH^UZK$1$!+$%Y?xuVVHe|~jUQ?g zko1HtY|@brwaMy3fh;t7!t1-HW{J`)B}%h;_qN;pnVft(9IFUKWICxzpAx)N0Yb z+*Nx>kn`4GFf_rZ`Q_1?ej5VB%R#bdE<=YslE1*)jyIIU+{KcN}(83hC|N`x7QWCn+)WgCaAJck2)Wd9xy1t=oX^D(Be z`H@iI0_F@h_ufB`Fqfh=Sr|~~80FJisVhr9DRUXxHrFU|53;_363upA1D1UwEmZ2X z4%5d4>Z=b{v(;}b2$JO( zR4^ZvlXp(l;Ygp~v5qbA#z5yFkIX4NG3ba#7;iZ6@GFm8n!Jw)!z58;OG^;qP~@~I z0*+@RR99*FYFgQOb3R;8YeG~}p_Suq+X=yhcXb8FANNdHd8hqRBKpg|@`_2`eA)X6 zo845+c2T%3ih|rm%|vLAI>Po3elmiyNR;LpGV)Vk4F#!Yo;5UzurKC43L(NcWT{V~ znMaS9i4X&NQgc_mfct%Dj8%+&jdiWi>Ue1M0tHAUfT!+WM3-G}>Y`5&Nijl4EX0X$ZfQ!~DNV!70C zqi;de!OKcQpm86L54e6L{Ogl65oNYd{!jnU_g4d+nKTO&WfOIep_o1-+YK%G6WBay>Zq$Jnmh>V;%$6YfTm^}4AQ8PpJQxM8I5gX*g>g1vp>jhrg z`U9^n$XjkWKk3KI$eOMBhgW1C&MmbvnJ6hL*bUm-)I3o_Uu!`etmLgiX0QPnmWwNPjoyxNs)1HVOI4SY&DOkuu zvM34>iy-*@(I2pR6yM(wk`@v&>iC?J0mF1{7+uMREJ1|exJ4VYkxKXJd>fWqU9+>< zY9n^r9tKuUja0??*K1|E+Xa3z#QAw+oKu+i^b@=RUMkv5X&f!QX`>P{AHg-pC@O%~ zujO;;0-1SNa(53PlG$O5P01Ei%)mCV>i!;Tot1GZr6VmPYF=|{uqtM_*6X)o>y6C~ z9$*r*ag5hm1?v#W-bsD5MXW13SPzmkF`ki4c=~X*X_AO~S{L~m3>D#VD=j&s&bE3X zmRPFr&-HXMZEB#A;wGQgcVK#SH5uWPz@pK5wqkIgR>34Yg|-%Lib%)@neHT<@Ks_w zmfpVyLe{9SG`<=RLN_+p)d6-IH?2^_X@yZ<|B1f;RAY5E?Z}sO&s&!z4>>bj3R6+t zBxo?(xeK%Rp5goH+m+hh1sWOqFIBa&St`0E4!TX?c)B(+qe5Dbi3>!dXr3li&{qte zHA_DkFU+`mFRAVgya96^cXa=m~nv7gTJ@4ZKGh8*G(m7nUlnEUA={jabsb4~fdcL@ax4+Uj{wRJlzZW2Rw z=3HSUv6Ax=;Sv8f8Bb^EAuS=80adB&O$!wBWFR4r1}lm4mmKI)fQk_OJ!AJnoDGVU zS2)tWeC)~~K|NZqDXeyAJ+ zWxd(oaiHG5!JNYN(K3humw3w_Jw|_btQD^fZohsqFO%Ir;N)eYiRN9U9iXmPGa?qC zD8|eL>lR*S1)GJ(^}}_Aiv9iFf&q~Z-^$=Jj_HHq9xs?4b;N(6pD6+V8y7If|2%vh z;z6un<`xN@=1QdzW6n~%tO6)w(LiMC_JEo@fDsfolVHk-$yL`rP4q^Y;}|%wj-QIQ zQcUk~2#eN%#%C((gk26()a^sex;qf{?h^+!;!MSgqg;&RDPWBB0K=>{|L6f9TBPAb`D{UyY&-gh`AbAm z02Stw6JQOSW?hybV4pj=!s}HlKlWg*E8*6pMJ~UHdu9qA4MCEz>{RP%pDP^=-O;8K z{JOtBEMX|_|KK+DyjPV=9m*iaue`63VJc=yy=lsE4FeZKTaa6^6fcB0)yGG_Xfw+h z6|b66_RVv!&{|4xCVZ-SW(=*yYYn5lX9*{$rW-IRzhlRMgbIeyGmEmf?r;Ij-}vFp z-5TWjNPLA~u%E_?8}1X%==Cq}$Z|V9q*E@aF}&IiIuzJAe);$LBp4b=)`7OA6E?8; zYt}n|%O`;`l=}U@4F?#*2=Dmww7wL?JJp}v5m|(_M28{qlbS=$Z-~DF=^OqN`D?lp zO_kPLpxoo_AK8YH#@i35lB+ceM<*+>uI&f`Lta*G_?;T>6~w6#I?%1gfDd_O`rp!| z;FY)h6Tj^oNw6tB$SB_-FILhpdkgi?4MDxSBn|B}Eo^_oB4#f%KmltRFAd)$X7@1m z)Uwc^cp(A1AeAH_D@`y5KY$CxBlgPvf^DV7Ehvzjoky_0U|Q=OJ<#>vlbI#{B$cN3 zFs?fi#UlF7DWFY;z@p9)vR{)N8t~9bIVfO_U;THi1Ao*3eXi?3VS)MW zj33W{Y<4GYSEm5ydFN$WQyRa7&F#2YWNs^rib8PAiV9{kw{V{{;gOACoSCMM!a%b| zZrGWaT5I1;MQWvF6l^`ht?;KIpogSEfS-=$&QMrcb5J8U!xr&$gKGdiyUtv++)g*5 zmKymx>1Wy4#b^{V6$^{&;na;_h-pZH?ZKj^5bRS&DN)M4eb1;)}h->@sj{ykk>)@-JZ5D2WvfgImgB=H*=z_rBgeDu>4keED zm${p13^eZ+X`s&knml!7!xjfD5x>h;$6qvQsdaN_Gyk&-B#68=+u3OU!jA#F1<}zF>$^!ea#rTj#Eo zZ7~~|d2%P{U@E{LgMs)zy9L}pKca>o92&#bf`*p@Gz0(^n0ZC~2TVC4eh@vv{4t7> zz4nr}bp9o=1g0JxC8Nq1@SGZ5E}?avVj2tlv(~3-soE?|KhfEGJJA8PzwY22zafjYxGdCQ zA_}C#?J>;5Mz1P?ezfsux6XuS_Gs5^FUb^IjOPklt?CNyIVa|c3eaxBFQ=w)+S8MB z2fellvK1`D6!ewGZAJF$wrdQWjbua)MFj&L5$W%EYo`eo*5;&70(+_J?PMD7!07jc;wVlP85r4(f zguI4Fq!Zrl+7CpYG)BY zkcBE59@=wtyC3BxZS|mY+7`Z0t(iX(mlCQl49D0ErIs89z5|A{Y)@k4oa0mKY%!1+ zRn9c`!eryZC!#RQh#B1q3n69_-HfX1r-r*qCZq~>9^GKcxM~%F@!ZWX?aG7jk!*ix zzLYi(6YMp{{e0>l{d=JOxk|?(n8;;0_{V z^UpwpBLVfz__|u^KH zkAe#%W($T~h`R!nJ0ze!-`QW8OW(^)UtA@g^_dGa7^dLZh98iR_ zcrw4X1I%Otw98p&^n3j6W&tBn-v#(9hUv#M$L+GDpnRNHgf6*cCQVT@@kn7xKjc9b z6U0jSG(28uCHm{=;P7|xWA3^YIL|5%Mxl0~Wy_cZu~92oVXZUXB?g9{HU*=T(c^+c ztun-@Dodr~4MSKBXHm+`iSevmQmO7G;DsvuG@M7~*lih3jjxnw5I0p8ByHQp(~C2z z{dHJnNI#xaw47}_uImkh8j5)jVd^py$*4&|Be!b(e0li0(z3wx5?j;mzH4-R*|kqx zYVdWU&mut|3`!ivxQO{OSv2loEdcZeVhBFgV9b?(YQu?V65@{FQODC#5``5NC-P8? zE*P!f#wcTS54@2L8RWZ_bsKP^5D`cwCAF%bK=L75RjUn*+Tk1Cyd&*7li_zkb$a7S z88}XIJRzm|ru|F;PFu33#%TiK9@)5oS^XTF!XQ2)-N;HJ6FrhZt-|;_E=-Ea1iljO z1(GEG&x%D*d=4p7fpq#ekuhdB{8wWB6Jxs=QSJ{>VINF^9D^X!gc~pYVEB6B9gXKH zwxHJOYrpqne)0iEgN8gKMwBy>3s*U42Tn9=9%~O}!QDUgTgO0}$eY39;*60<&G^?~lm z-_)Wpn4YY~9i%AG9SLis=oasml{4t!4}L*iGN||%@pWdiP4LhLZx}S`(*ze6MUjJ* zr0o}78hX8+Jtcytoifj4*u&~9QYGr48vjxdI23bMDEcN#LC;Je1=%hqF>vGYHq}s` zJov}kkx_~4G}TQ0^KUE!SYcJtI@DmF>;U8++H#^20H=0btb2cC{`7tcKgU!!04hWZ z(?4DCUEH6XNHIheFx356l_BTC#j%1gK`BcsUde$Hb6thl5$0v1oPF7(_Rs(D6Mz!r z+}98*19BpxYWxwnaF>?hBl8h+8L65B*^ly=K#7uSNat2UEP_a~99J)uYtmuoen09@ zHRq_Xtu02h_&ox8gP81l1P*pPsai~^B8Vd^v1+&0`Djz_%EhReNRy?TZuM48TJQ>$ zJ*`ok05`nsG_PSG9Pp-Mli}WnOl=WtKMmdxZ^Miy!s3cSa*s|&dT+R!mHlBnG$7H6&58rjwHl2GP5;IIAKi;9DsV0@m1 z(oeM{4e3VWH*iMtKMPG{)QStcOIaZe)z7k^@`y+)*^~A(Lc7<6kHP&YL1^k_rRr$EUfy>7-A9DFEluJLWKPV^M>K(i zcd`zfj1Zwb4i``lUd#KV$qXP*;xN!?k!pzMUt}XgIw^~D-+)jU%TB9b&Vt~e>ZnZZ z1YTesDyDG9--QJs$zNhX?I;7ybDtNkGZ?}W5tvG|(e>xWT9qdkT+7at`!8sAg1Qx| zZ4KMOu(mD6M8+R?s6mOHI%rj-Vu`{cZtKyj3o4S7tmGb_nbsh3uIlI-ieiT?Carjr zwTmHA$69>u^q*QyD@bUsbinM-TCgWqT8gDd(`rfd%6ZMewRlWYT`A>Y1S>15cpNBa zU@h6%fFSdw;;DMz37%bQHp`~1ECz*}_nTVr=Tj9>nvC^W&Ht41Ayr`LbDFC|CSYa~ z>@YB-foZ+^8of4#@BNJsFCpwS9AP#GpJz~H=31$*g%9Ch)~M5wAy|XD1eNR>8n2QR zNMW^Rq{XoTX@qlx)IGtXb`F%{sJs5x`DvJY`2&0EJtPvQ|Vho z()6ep^)4}DsYqfY*ULsFu9B1=Y|erVanK2(WfV_E7qgEUhZ-MF^oRu{V=A}V!DchN zo#c1bZs}49#PcwI1ft^Ow@qehTZkxWCwnnOP|SnLI+(Kf+G?oX+u$_^l~;W+eg|z+ zK~*j!rV{H3u5HLktRl`c488p*)1hR6Hb}Xol-iA71-zSm1C=MCPRKHBRKc=%r?Pkt zZcX3gSQW`TiR71aoclVzFNVs~Vg}-D_Yne0Pq6lMhe8RC{{Euq*-CLhrj6ZaMjAD) zJjmRe4Z<4iF!2WiMtV9TEjRobW=7U!!b+bUslmmwEOs|(@JA<>wkUU)j_0puKMPlt zu5FEICMjs!#~s3C?#rj^jpg&0I8l72F+KXBmH$5%z#VF?bCFKNeMVO0oM0H(zXi9L z8ihP)ZAM!t6oz62V36O)O4qbR8%JZ65Eu=RL>_py`>%Qg0O zf$6O)(Eca?X(v_7kRG;c%L-(zxCF zGFTrINVorzZ_l;{dBi%@aYX?+^~p?3i4Yo%yRi@U?TvPqj%PJ-g+)OJv>D*FRtuZ{ z7M(`D;aDO@-?mAutnj14q@)@Z>j**Z_D#hmh8`7xyDOf*2%F>bWcB*?e8 z2b>nSR+vhb5gt<;2yc0FwQf(3d+Ym9rZ(#ZQk)_a*+Zo)G}*)xAKw1eRI4M8LE_9# z-lpz_;VX7wZeaA)6A}5F1R(=;3E{yMg!+Q3IN(Pdzy;`muZhd)-4q1WX%YThf;bZ) zOEsJ8|5)cJdN#(nIL@PRAfYqXqnG)4m21}1J5PEL}`xi>B1i?wVJKf#fNN8L7;xe8~6Jz5DrpJ^@LOV;p+~6 zqi0S}ZD!T70ng!@#?@9?i*z^@`11Ce*_L+aLrG; zMU#{M)<2DGZ^Cucpzdrg*#fzI?l|c;fFkhDt2rao(`c#oo!)Hu?zYs~;$k~|TKbcX zbUIr+kuMa6;8<%dA5Zi*LFIH6xapb9&s8SW%V|nhdOB-8*Nn$G?5$IB>aeQ!tJ*Eq zUu$NjbnnJZZ5F`Vb64K_h1X-GVhHCZYxS09->a+^)hgW)HMRG%@u&CejrY~7pfJQc z1)Tsu3Ie=2WrN{bo_?1NahFqi;%6sy~j!Jz&rzkC7`z7#lQ@We7&4 z(;96nBUcGAjzhwh8|^kBx;hnz<|&H&kN{ zt%PzYu(tcjZ#|x7rGh@M+!2r3Qr~y2F)XXBj1!i9%g)EKf7p^9hV-#lz5w~?XEzrq zfh4Up6tR!3tkT3|HtNqTjwGD zUTk7Q3!bO#8NWq`Qeys8Nc5g7$m^FjuerQm2Fj-&Y!0tmpVCbC;K=b@S@TxNF~U!V z+FUE?z|diQr4k-)U{{jphjcMu&dimLrESNhWx%+=xk6A_+@T8$eHVwv+rwHMFK^Nu zuphnSn?s>!wwlV?ct#P+fwVvdvu+xV#C$ZSp5I5h#`IX?i<+*lz)TJu7uKgNQsS~t zx53@OOy}`(vhXI~N3@b?G|z&@TJ6(4Ld&+}P6lw^iJI#6zrcH6m$^~qDs07((`Fm) ztFGs|S35eF(P8XT0=G|uRBmeA<*KS&ro;3QU09Vh#}n*QZTmULFpE3H3z6MXGDagqUCE$+aLmJHV*U|6y-kkHFFLFlUy* zzt-L$j7?A`2>b0R#ClSn69NzjN+IzdB<|hc6Vt`=dDN-SfK(aXuD$Q3WR}I}F_kJr zvc)6H`QAV8!E&yvC=p03Dk-@(?f!UL>v^quj|2y6ugH zxt)YtK5d3FgF8n%RGV$EEmov>p}0$NDemrC zq(~`N+}+*X-JRgx;_k)Wic4_UK*G&;&OQ0XB7rySk&!)n_8j;2fM&L}>p+m#%{aYY zV}F5@(0r%|fC0NG4nE$oK5xoSEPJWu`v00Hb|Ceg4Z5g3~prK8(=%EjjnA>0lq zFa*t2r7>w^5_yu`Elg${+5JwpJX>~v+zg8fm%lx%bRJCy`1FmBre(ZGisU|UU5h!#Zp+V{A{0~l^IlOTf2Y$yTdCi*ICTtj~l3XiZ7e`on#96$H@$# z%eB?y+(%jo++9`+>F<};r*q9rFDaHpP|dLW%m@$&q@mLI2U#75Q1tSW_o%aiDHNrr z*~n?4iQMhfw_)2uGSGMp>)j$IemA%0*-Z;qM@oHo=>8d{=2cXp4o!xt#523?LiJyA zw5?$yIQGEJz+toY4YDsxb+aahT~hgF{yEikgLuDFZeCg- z^RhhYS1p~&K!r}6F#X*pmSC#R%#e!E7@33I^d71S^H(YsK@mm-8w)tfyv!#}tRl6h zbdQAGSXu_Q#y5?oSTv-w%Hw~Fu#(fYx7{>*(Vuv>od}ZO7LR1;lhlc5Yfy^hc+I0t zSDFlY{d(W-E)3s%GQeEXxJ={x66f@InuT^?{w(cJdtA-abS0!5Oj&>8Qos?> zA`X88@eNK2{MDf3zjj4>PE1T<5Ej#t7#nCSB>M8s??J9HVuwi?@%bgfc8cJOQd%2( z3+Y%;lSItH=}Ro#?t=tjy$VkJD{2C>yf2r>BTdOR#R5E>z%IRX!iVg(T*)CqCEOB4 z$HWzL^^394q^~|wadM^7k!1`_Z|XV%?HJ~xRp&I!PUCN6BaDf>$U2!}QMy&^m0lV$ zaGD8st4{tayJ?dbJYif4L23qDzyA8IJYCdsUaZd1yVcn}ffO-w3VwQ?C||MOv*f!6 zX31DVBeuKgUh@!Mr)I3fLl&|&i>}$2!LkzjN2Yp<+196B4Zy!T(FM><;;xCdpuz4_ zFtn`PT#jFZd=Ogx$TkJ7`Qfl|#tvu9JMkFKy?Ux?uME_CG3k|o~+?XqoE4trP8iOiUFQCLp zSzjCY2n}2`bKO97c=a@ONXNt0p(x+wSk*oWe(4o$M`$&tze>p#kL^cW*?N5w>Q04Qcq@7iXmm)J5cY2ti50)bCZpzUU%lu?y!6xG1-F!EhZ+Yu&FOl z$j|#gRi}>DQJ$1Yv`q!jPM2-{-=a?NIWf=%6yG|Wa3JhKQ+LOWt+s@ zWHr%%Ex6un#NQgqUgoz48&GHeRQ=y)#x2aV)6k(_s7y{dghpOf^c^@Iu}tDO znIv5fkNn}jExS#>`n8cikxwLP^IM|BNXksCqD{$np3-dD4|GwTRKAQCw&skUU zsEa&nLmfJ%Yn`2kB_N�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 literal 0 HcmV?d00001 diff --git a/docs/public/logo.png b/docs/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..71670f7a661995d18b4f67db643b1440d065bd2f GIT binary patch literal 4076 zcmZ`+c{CK>`wN+jshO&hNk9J?Fmn+~>K^^Szo`46K-#j-mf< zz;OmreN+4u<0!?M*%)$xbvT2YfiJ(Zy`aIPJJ>50V2$6nZntx1jq)e<^QH`PhPA*m z-|^n*6pHNyJpIg_J`5=O1j`xc%$o!iPM@q^5{!QfZCK^3TM;C6LnGRN&t}=4%`$AE zU>(S=d)}zh0j6XL{rNsFsQ8WIfgZWfL~_?bBMwv>F%F9Cji&R~;+d^j-1;*JJd( zFNPU%4t2i|E$e=0lB5%O!HNw5XP35&hk=Hh$}C`c77D144+3Dui-Jjr{~`hB4iCuP zPf(XcU z3^C*ciVlXHL{Y_%Qz&v6avDVfL(ZTGW5}5lZVdS$g#$w-Q&=(N9Lg;WIhPWE(Ry=V zECo5P8j<7IrN}J$V8Yb`{g|D~oO9XxVa}?aWy`A-`^BT2F zdhkk4YQ1($)+sRmqUPer3&`}(-kCJoE0^`M(g0UgOo~rhRITiqEaZ~kwtdo@Gf`gH z7y1o;SrRgVGPeo<^`!-vP4%xwRo-qLU8@1~s*CT+j-Avy`Z(vRXDfIFC}_z`?R2Sj zeU7htl9lJT7W@45<=ud-s%$@!<$Rr4oaAh17*Ld}xKod*;v7jhT z%`9)p7N#(sz4?S|Xu6^Y`Yy~-z+pqru8h;qt>Kt}3}!?utmf*UZi}YoqkcI-h2$kl zKV%D_7VjhMzimpV*KcZn>i`#n#xzW{9cK;|H(H>N}DSx9lz>c+Viw9 z?8;z}-k>_7&kkQ_30K-up={*$Y!`N2Q?Z2M0ewTI{h+-&o)+6G>FNkteDruKo0jgp zSt7!N`?g%%_m}|Rpzf;RYIS5J*(51#f2?mD8*LBtOYyB8dR`#Gg-B8rdY^qR)lS8b zPfFw9eo!9&grwQ|5iSWm?rt!iIVb-KAM#9~dA;tpu#zl)$+IqJG*Tuo&(~5zd!dn1 z+U6ms2*XK7$;TJz;l*#x=xZ80-*CSz+Wf%*Qm`YtLd?8Cr zu!YJ*s|C{>>K;7i+N`;UYcNn93gT_`i|o34sXbA`*)Z7ap_J=W8y~8u>p zYmjj0=2~q%D1HOerrKj?Lvf7JIB;-sA|uYci=L@(wkWet(gfb5fpC)CO9xt?o>u6G zT266FSjjD3C6$D+N@FgcbFO9|By7-vbGLLH<%)$#@eEkGj!c#`vjOy!b``}a@|H8X zHYztqKeMC%G5k|n>r!DqUV~!DR79n-`KkcF*G;uG2NZW2kDI1HyDMp0XyDxY zm|4f>ehOzua;s9t+$j1uv49>=+dXY0+<$^K_DT;MSUJdk_nm>vOd+h}0ySkKI*8nPPW6m0= z8%xD<{hnSCU)C?#=$~L$p?x<-5=72^+eu^#hYDM7c0^ZQ@j;n;XVO6he8tO!zhAK; zT&e?pV{7B2nw70VB1Nr~-4Tz8DsjS2=|wrC<=J?CMuVOCT(l})Z*dJixdCd4AG*_B^Zs|2d=3D~H#bv<&SKI+rrA>?qoi!V{$kug`JnJiq7U zay@*#cN9HJs?1-)#yS?u)gHb}f`0at@J=lvej}pdvGaMJRJ7NdvFb{uQLKk4y<-+$ zz3J=|pZ#4<=_^UZWG527#~ zba9F4S2v5^K(J2YNUZgiIY^{h%@!2AFm4v~Q^&buQk{0sL8q1rHp`shiD*`~1&P$m zkAthBG9~yMx%9+`>p;x+1=AasvlZ@!3RtPcPM^#gt2pdcSOkP_eY$`6%dqghPp|up z7Cvwwm2l1%_3Ki1^UbPC6nTwTNK=yVj%&!A%h$6>D#kC8Q+T}H#Lq7?t?u5r{m=Vz z>1V}bo1@)h6yGVR2l_*i;?1g9lh?5MxVgzqJC@jV4m8!`2YGH8;kz0ee6-$v0$=3h zzb}n4GHlrORqWO5`$}YHvsV(MYQ+$pcnnC)M6sS1Zv_|aGU!;_Cr{HtGk!UV_Sb?y z!t1A9$x>@y<8$(`)UM5mWHB}*Vb@nh+L6&~xc0J;JGtw@eS&rq28T<7 zxGc-g9oc8)I^r^MlNCv_&oH|}NIVLUMqw`5q!_0|*%M$OexnC$=_4R9Ko5sy{o3^B zS^L!AJ4JRfGOTAwF0n5cBp+pUxu0{c5Br$ZT<}sfPE1Hmo2PkpFEW%w-;Ox5-o+6> zRHq_3knMYU%2Bxip$ZLmIAr3)g%rKZ4rb(awfGa0dzsbBL?2d6C~C+OQ;e!bC2fcv z)KeYZUXh#y!$UK0Z7r<`K8N8%-cDGE;3-+^y#wCJgDUy%rDD99xHM|gl`I6*6z0SX zBaqUVu<(tJ7X2ai{Jb|?^>3|+R-}XJoS|XuxLdO>y}-B7IzLBVs`Juu+N)*x*bHI@ zsV8>-bG`dUq++vh6bM5y4lS=<9n9w4%;)WhL*sHP@V%+@#>frqn4BpJA#E9^I3N0p z#oq~BxSP!{ORCr`*k$dIb!$UoaS^Hvv^3ud+O8=CDo9zCb@qI$g(h_P#EH56)e5cnvcvdNQeZZUG(s-sxa z1EFvo2CGT8ul5AmujEx=fm17Ul`=s4Rb({~I3?hAZ4_FgX4N5y^zf@lG&dai5{7sb zM;S!es&Sx7pNxBR5kuGxKf+n$hVv?bfT{c_=R{A6St}X1Eim3zIyg_(b zN1Ar1REm5MUNz<$VLc^RZ?%({R+9-G7?p+mkQSFUaJTRecD1u2orzm$e8F63iV9kR z;P3JDbWxYm+&#Bvch>n>uR#Ehm$5=TCk(14Hx4X|i#X02=Ey9H&=6DL%aZ#9KxM&L zmt>BxNT_p_Z8m-8wyoK~`}2X)LPEdiN427=6.9.0'} - '@babel/standalone@7.25.8': - resolution: {integrity: sha512-UvRanvLCGPRscJ5Rw9o6vUBS5P+E+gkhl6eaokrIN+WM1kUkmj254VZhyihFdDZVDlI3cPcZoakbJJw24QPISw==} + '@babel/standalone@7.26.4': + resolution: {integrity: sha512-SF+g7S2mhTT1b7CHyfNjDkPU1corxg4LPYsyP0x5KuCl+EbtBQHRLqr9N3q7e7+x7NQ5LYxQf8mJ2PmzebLr0A==} engines: {node: '>=6.9.0'} '@babel/template@7.25.7': @@ -779,17 +764,15 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@cfworker/json-schema@3.0.1': - resolution: {integrity: sha512-fjgm7yhAaUVp7Lp4WGTiuBXzXgUoKWxVEFEte0YWdPIo6tWMxL3Jv7zrGSaxd/4fihLaRJEUsK1aMkGdAEcqUg==} - - '@changesets/apply-release-plan@7.0.5': - resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} - '@changesets/apply-release-plan@7.0.6': - resolution: {integrity: sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==} + '@cfworker/json-schema@4.0.3': + resolution: {integrity: sha512-ZykIcDTVv5UNmKWSTLAs3VukO6NDJkkSKxrgUTDPBkAlORVT3H9n5DbRjRl8xIotklscHdbLIa0b9+y3mQq73g==} - '@changesets/assemble-release-plan@6.0.4': - resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} + '@changesets/apply-release-plan@7.0.7': + resolution: {integrity: sha512-qnPOcmmmnD0MfMg9DjU1/onORFyRpDXkMMl2IJg9mECY6RnxL3wN0TCCc92b2sXt1jt8DgjAUUsZYGUGTdYIXA==} '@changesets/assemble-release-plan@6.0.5': resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} @@ -800,19 +783,12 @@ packages: '@changesets/changelog-github@0.5.0': resolution: {integrity: sha512-zoeq2LJJVcPJcIotHRJEEA2qCqX0AQIeFE+L21L8sRLPVqDhSXY8ZWAt2sohtBpFZkBwu+LUwMSKRr2lMy3LJA==} - '@changesets/cli@2.27.10': - resolution: {integrity: sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==} - hasBin: true - - '@changesets/cli@2.27.9': - resolution: {integrity: sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==} + '@changesets/cli@2.27.11': + resolution: {integrity: sha512-1QislpE+nvJgSZZo9+Lj3Lno5pKBgN46dAV8IVxKJy9wX8AOrs9nn5pYVZuDpoxWJJCALmbfOsHkyxujgetQSg==} hasBin: true - '@changesets/config@3.0.3': - resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} - - '@changesets/config@3.0.4': - resolution: {integrity: sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==} + '@changesets/config@3.0.5': + resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} @@ -823,18 +799,12 @@ packages: '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.4': - resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} - - '@changesets/get-release-plan@4.0.5': - resolution: {integrity: sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==} + '@changesets/get-release-plan@4.0.6': + resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.1': - resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} - '@changesets/git@3.0.2': resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} @@ -847,9 +817,6 @@ packages: '@changesets/pre@2.0.1': resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} - '@changesets/read@0.6.1': - resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} - '@changesets/read@0.6.2': resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} @@ -865,13 +832,11 @@ packages: '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} - '@clack/core@0.3.4': - resolution: {integrity: sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==} + '@clack/core@0.3.5': + resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} - '@clack/prompts@0.8.1': - resolution: {integrity: sha512-I263nEUNbX4lPTX93trl1fkIvGrGlz6nUYkqOddF0ZmjqcxUgUlXmpUIUqfapirRKJrFddvwF+qdZgg8cSqF7g==} - bundledDependencies: - - is-unicode-supported + '@clack/prompts@0.8.2': + resolution: {integrity: sha512-6b9Ab2UiZwJYA9iMyboYyW9yJvAO9V753ZhS+DHKEjZRKAxPPOb7MXXu84lsPFG+vZt6FRFniZ8rXi+zCIw4yQ==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -951,18 +916,18 @@ packages: resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} engines: {node: '>=18'} - '@csstools/media-query-list-parser@3.0.1': - resolution: {integrity: sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==} + '@csstools/media-query-list-parser@4.0.2': + resolution: {integrity: sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==} engines: {node: '>=18'} peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.1 - '@csstools/css-tokenizer': ^3.0.1 + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 - '@csstools/selector-specificity@4.0.0': - resolution: {integrity: sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==} + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} engines: {node: '>=18'} peerDependencies: - postcss-selector-parser: ^6.1.0 + postcss-selector-parser: ^7.0.0 '@docsearch/css@3.8.0': resolution: {integrity: sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==} @@ -987,90 +952,81 @@ packages: search-insights: optional: true - '@dovenv/convert@0.0.6': - resolution: {integrity: sha512-09BVzikEZO1Uz38GesvR17cRNY6rM8iqdPpSkR2BOkzFyvKBYHTsSP+V6JyXFLtdofWb8ebVUyASdpYh8H1fhg==} + '@dovenv/convert@1.1.5': + resolution: {integrity: sha512-EXS5gCuFJ1aaA7h53n8hwAiDQYlzVBnoxIAj2ownO4xqiBpDG/m9r8vUDC1tjXlXEliOrYbDm94dvN8MXCSXjA==} peerDependencies: - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/core@0.0.6': - resolution: {integrity: sha512-VA/r8VgG/8aEkxLaygwahJmJ44fIkt4iJr6DdeoBLcjgarG58Xm+002kiuqyk1Z4pvFDQHLD0giXoMeaWFxP+g==} + '@dovenv/core@1.1.5': + resolution: {integrity: sha512-Yvyqmbr9ke3pyK8CW3yIrxdPjrEGhj3plls5suerRWDGYphhkDCKcc8ZabAUjsah2bh4jg9h60/BQUTvhxuUnQ==} hasBin: true - '@dovenv/docs@0.0.6': - resolution: {integrity: sha512-Zt3j0l0b8ZfMelHUHMK7lFqLfVzXToXxLsDsisKkDxhFmsmvJ77gYSsYGPiRb1pevRUBZQBV7Z5ncMDMdcDANQ==} + '@dovenv/docs@1.1.5': + resolution: {integrity: sha512-GNmwY3YJyxwIMOKje2YXEovIR5v/tv3IkKFeF8fQ+LKw2jWDZE5fJdiaYezNZIuNpXeFHzi4gTBFGX+9nd63rA==} hasBin: true peerDependencies: - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/eslint-config@0.0.6': - resolution: {integrity: sha512-Y74e9pj/Yf1NidvVehBk16ib5U82a3+/sx3+wgfJamIx6FI1qpAz5pINqFtfO6j8FXMB9N27onxHZCOZ+fKBvw==} + '@dovenv/eslint-config@1.1.5': + resolution: {integrity: sha512-kqkK/hRxxxsZUSKm1AV6OZuFmOVc3YH17tJaA83FdHzt4M9FUmx4pP9ho4KDxBdLlRfmDO8UKdZdAWRw15cNAg==} peerDependencies: eslint: 9.14.0 - '@dovenv/examples@0.0.6': - resolution: {integrity: sha512-c6cYFT4BCSakn2Lv5b3DW5h8a1K+71kL5OJ9pku7yeGD2H/AxoyvS/UEyjXWG8lFTW+BEnj1QonaqSi0rqVH4g==} + '@dovenv/examples@1.1.5': + resolution: {integrity: sha512-BwyN0QsZGt/pvkSZVPYUJdWnWaWtXBMzBqr4UrTx5e3hOYaFXJzin3oRcXdGuyfNWwy4OaYTy45OljquZnoHsw==} + peerDependencies: + '@dovenv/core': 1.1.5 + + '@dovenv/lint@1.1.5': + resolution: {integrity: sha512-Fx3UoTrnlTKiClwnBCnqcijQioeriRtTX9ppJF/9OeNaeejL+EY09LuQHzpiEUNE6n6qg3cToYSwv+6zDWx1bw==} peerDependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/lint@0.0.6': - resolution: {integrity: sha512-vMKKTVYkTztBVzhzqNOzA7Ihznjm5Q0UEfTpRnectEOA0PhmcMs5UHPZwBGCcBNc3TlhWEYVZVMZrhRfW54DGw==} + '@dovenv/repo@1.1.5': + resolution: {integrity: sha512-bTn2frOCBHBrCmCPx4KhIS0XCIYNIBcGviCrfrk59UI8+Qef8r0gpqbueZ9BC7C3hTMOKPu4hG/x5iGKkMJ5zQ==} peerDependencies: - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/media@0.0.6': - resolution: {integrity: sha512-6gb/av2yd8J7lTjfV2zEGqGsIjk2MbsJ3YNwpsbXVL2akkmevRZzMD9HlCh1p1IHBTdRZt57wROk+fWwNQpeLg==} + '@dovenv/stylelint-config@1.1.5': + resolution: {integrity: sha512-TFvAgEhFVBnkltyB5tjEXbUSgvUzEhJlp31E48qBF5fc3dO5m0SCEkpVfWoM+rvhvzl7QDzWtXQblu8vPBhCnQ==} peerDependencies: - '@dovenv/utils': 0.0.6 + stylelint: '>=16.11.0' - '@dovenv/repo@0.0.6': - resolution: {integrity: sha512-y4RCQBvpx2ZDNysd0PZPcLAj2qhFjOEl5vUNRJOGI9SJxxbP+ACmtDl9AmnTbTCzEkInd2hj4SwuAzSDfCf0ag==} + '@dovenv/templates@1.1.5': + resolution: {integrity: sha512-jvE4QR6b0FnoMNtZLxf8PWhCQ8E0U7VF9JmRi8q+DhECCaW+kT9rF6hf9Er8Tw1dZLfLoDHshNd+Epu10uRr3Q==} peerDependencies: - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/stylelint-config@0.0.6': - resolution: {integrity: sha512-SBJf0MR6N40xn66rA0e5PPElec4VNB5JbeaeZpy3EQRiv2ZhEEIEJvhKiDNKEn8tSOuvAHdJNC3PFG6eFWXW2w==} + '@dovenv/theme-banda@1.1.5': + resolution: {integrity: sha512-tyexh4t9GIQmFnQgRaAWbFKEjt1Mu14Svq2nQzZLWB7+GGnUJEscLDw/qHbWg1x+eNlaFetzdZq3gXOOlJqo0w==} peerDependencies: - stylelint: 16.10.0 + '@dovenv/core': 1.1.5 - '@dovenv/theme-banda@0.0.6': - resolution: {integrity: sha512-a/FfJZr28Lt2MTxclhFL0+f8XFZw07O/LuLVQQgHwt9BCjmT+p4YcsiDbor1gOQXzhzdYItOROBxyW93kgDmiA==} + '@dovenv/theme-pigeonposse@1.1.5': + resolution: {integrity: sha512-viwHRLRC5bLFgHyXkQKx451cB7CMme1DgMkMkzZj4VhEewE5o3O2LjgXC1AosFE5z3XXqV/KBrjC0YbPrzgg+Q==} peerDependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/todo@0.0.6': - resolution: {integrity: sha512-WTEdxnnmADanfQuetpqEsTTYE5hSBT90SOGru36Mujaqvti+5g8NYaFUpRJk0KTfURSmpR9ZFLsxLoysEuGpAg==} + '@dovenv/todo@1.1.5': + resolution: {integrity: sha512-9N6N6hEZ7vjV7DH4ZstS/EwE8X8+LbRpllWBeY3YUiDJmWZ7H5enfHzqUZiq0xcfubwYKf9/HFAhmQwj/rw+Hw==} peerDependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 - '@dovenv/utils@0.0.6': - resolution: {integrity: sha512-pHSmCGFtq3nybEByurdMLFhdoguO84t7OHWlChlo0Bn3p0qpl90L/TAsSYZqSd6IhGFyhVGAdehAMP3gGoULrA==} + '@dovenv/utils@1.1.5': + resolution: {integrity: sha512-nC1uth7M0yiM/GHkdw5V1tCPO+gkLfPi6Dvns+jz5iDbgtdUI8bU6zGPN0CkYqL7eAQi0TCLqk0tquZT3eNrww==} - '@dovenv/workspace@0.0.6': - resolution: {integrity: sha512-0OMBUB5zrnIuEzCTlwaH8rqGk/bdLPUJV7NdnWhd2ZugzucrwZZ0FZZYa/DPUusbiR0XHP8jLKSG8qw1/e5jXA==} + '@dovenv/workspace@1.1.5': + resolution: {integrity: sha512-vvMATWtxSLUgXJ6jikHFuCpUNJWNkTDkEiU87JPhpm60Zq0gjWihpu+sN0MKX1p51oPIku4PVliDM/hCT+TQiw==} peerDependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} - '@electron/get@2.0.3': - resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} - engines: {node: '>=12'} - '@es-joy/jsdoccomment@0.49.0': resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} engines: {node: '>=16'} - '@esbuild/aix-ppc64@0.19.12': - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} engines: {node: '>=12'} @@ -1089,11 +1045,11 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.19.12': - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} @@ -1113,10 +1069,10 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm@0.19.12': - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] os: [android] '@esbuild/android-arm@0.21.5': @@ -1137,10 +1093,10 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-x64@0.19.12': - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] os: [android] '@esbuild/android-x64@0.21.5': @@ -1161,11 +1117,11 @@ packages: cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.19.12': - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} @@ -1185,10 +1141,10 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.19.12': - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.21.5': @@ -1209,11 +1165,11 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.19.12': - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} @@ -1233,10 +1189,10 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.19.12': - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.21.5': @@ -1257,11 +1213,11 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.19.12': - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} @@ -1281,10 +1237,10 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.19.12': - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.21.5': @@ -1305,10 +1261,10 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.19.12': - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.21.5': @@ -1329,10 +1285,10 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.19.12': - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.21.5': @@ -1353,10 +1309,10 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.19.12': - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.21.5': @@ -1377,10 +1333,10 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.19.12': - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.21.5': @@ -1401,10 +1357,10 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.19.12': - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.21.5': @@ -1425,10 +1381,10 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.19.12': - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.21.5': @@ -1449,10 +1405,10 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.19.12': - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.21.5': @@ -1473,10 +1429,16 @@ packages: cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.19.12': - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.21.5': @@ -1497,6 +1459,12 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} @@ -1509,10 +1477,10 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.19.12': - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.21.5': @@ -1533,11 +1501,11 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.19.12': - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} cpu: [x64] - os: [sunos] + os: [openbsd] '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} @@ -1557,11 +1525,11 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.19.12': - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} @@ -1581,10 +1549,10 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.19.12': - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.21.5': @@ -1605,10 +1573,10 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.19.12': - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.21.5': @@ -1629,16 +1597,18 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1696,32 +1666,26 @@ packages: '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - '@fortawesome/fontawesome-common-types@6.7.0': - resolution: {integrity: sha512-AUetZXU6cQdAe21p8j3mg2aD40MMDKfFNUNgq/G7gR3HMDp0BsQskAudLDSgq6d0SbCY0QKP0g4s5Y02S1kkhw==} + '@fortawesome/fontawesome-common-types@6.7.2': + resolution: {integrity: sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==} engines: {node: '>=6'} - '@fortawesome/fontawesome-svg-core@6.7.0': - resolution: {integrity: sha512-v6YZjSPuxriC7lYxCzKFbgZ1iaf60AVX2CsfZXSc0U9+mqVd8VGVtMEqDqz5GxDpNUQ8bMDfW+gspVMYGlRpUA==} + '@fortawesome/fontawesome-svg-core@6.7.2': + resolution: {integrity: sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==} engines: {node: '>=6'} - '@fortawesome/free-brands-svg-icons@6.7.0': - resolution: {integrity: sha512-O/9/yKlN4T0bsYCBcx0NKq7YOr/512Yfpk8wZhOhaxg9/OxWLipDKXlP1hfEFE3I26mfYtsqLkbpz1CNu6KYqw==} + '@fortawesome/free-brands-svg-icons@6.7.2': + resolution: {integrity: sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==} engines: {node: '>=6'} - '@fortawesome/free-regular-svg-icons@6.7.0': - resolution: {integrity: sha512-0htjBKeeN3TJf0JtQPsQu/n/prpc9TtSbtgi84XzCUdPpc49znb+MXMACFmehR5kSA7NQVMjLD+Dh9816wklbw==} + '@fortawesome/free-regular-svg-icons@6.7.2': + resolution: {integrity: sha512-7Z/ur0gvCMW8G93dXIQOkQqHo2M5HLhYrRVC0//fakJXxcF1VmMPsxnG6Ee8qEylA8b8Q3peQXWMNZ62lYF28g==} engines: {node: '>=6'} - '@fortawesome/free-solid-svg-icons@6.7.0': - resolution: {integrity: sha512-9ww5hQ3OzEehUrSXAlPTJ73xDub73fnxr+se5PU0MFQor2nZBO0m7HNm5Q4KD9XMYjwRqh2BnBNR2/9EFbGqmg==} + '@fortawesome/free-solid-svg-icons@6.7.2': + resolution: {integrity: sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==} engines: {node: '>=6'} - '@fortawesome/vue-fontawesome@3.0.8': - resolution: {integrity: sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==} - peerDependencies: - '@fortawesome/fontawesome-svg-core': ~1 || ~6 - vue: '>= 3.0.0 < 4' - '@gitmoji/commit-types@1.1.5': resolution: {integrity: sha512-8D3FZMRY+gtYpTcHG1SOGmm9CFqxNh6rI9xDoCydxHxnWgqInbdF3nk9gibW5gXA58Hf2cVcJaLEcGOKLRAtmw==} @@ -1731,9 +1695,6 @@ packages: '@gitmoji/parser-opts@1.4.0': resolution: {integrity: sha512-zzmx/vtpdB/ijjUm7u9OzHNCXWKpSbzVEgVzOzhilMgoTBlUDyInZFUtiCTV+Wf4oCP9nxGa/kQGQFfN+XLH1g==} - '@homebridge/node-pty-prebuilt-multiarch@0.11.14': - resolution: {integrity: sha512-fuiq5kb4i0Ao0BTf7O6kvtwUhCCCJHLhWLWaaUaLuniDGS4xmj+gxvkidJpxYVT/zTXdbcLuCY44UnoWC7xODg==} - '@html-eslint/eslint-plugin@0.27.0': resolution: {integrity: sha512-aAF14sgDKidMCCQpJ4kIhe+fwyAaAbvDlgVTIgd99F+HOWxokTTXDt39a3gewMBo76IeEHDaoizUDJQ/Vc7Mdg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2308,42 +2269,6 @@ packages: resolution: {integrity: sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==} engines: {node: '>=v12.0.0'} - '@lezer/common@1.2.3': - resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} - - '@lezer/lr@1.4.2': - resolution: {integrity: sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==} - - '@lmdb/lmdb-darwin-arm64@2.8.5': - resolution: {integrity: sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==} - cpu: [arm64] - os: [darwin] - - '@lmdb/lmdb-darwin-x64@2.8.5': - resolution: {integrity: sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==} - cpu: [x64] - os: [darwin] - - '@lmdb/lmdb-linux-arm64@2.8.5': - resolution: {integrity: sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==} - cpu: [arm64] - os: [linux] - - '@lmdb/lmdb-linux-arm@2.8.5': - resolution: {integrity: sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==} - cpu: [arm] - os: [linux] - - '@lmdb/lmdb-linux-x64@2.8.5': - resolution: {integrity: sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==} - cpu: [x64] - os: [linux] - - '@lmdb/lmdb-win32-x64@2.8.5': - resolution: {integrity: sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==} - cpu: [x64] - os: [win32] - '@manypkg/find-root@1.1.0': resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} @@ -2354,43 +2279,9 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@mischnic/json-sourcemap@0.1.1': - resolution: {integrity: sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==} - engines: {node: '>=12.0.0'} - '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} - cpu: [arm64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': - resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} - cpu: [x64] - os: [darwin] - - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} - cpu: [arm64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} - cpu: [arm] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} - cpu: [x64] - os: [linux] - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} - cpu: [x64] - os: [win32] - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2407,281 +2298,53 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - '@parcel/cache@2.12.0': - resolution: {integrity: sha512-FX5ZpTEkxvq/yvWklRHDESVRz+c7sLTXgFuzz6uEnBcXV38j6dMSikflNpHA6q/L4GKkCqRywm9R6XQwhwIMyw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@parcel/core': ^2.12.0 - - '@parcel/codeframe@2.12.0': - resolution: {integrity: sha512-v2VmneILFiHZJTxPiR7GEF1wey1/IXPdZMcUlNXBiPZyWDfcuNgGGVQkx/xW561rULLIvDPharOMdxz5oHOKQg==} - engines: {node: '>= 12.0.0'} - - '@parcel/codeframe@2.13.2': - resolution: {integrity: sha512-qFMiS14orb6QSQj5/J/QN+gJElUfedVAKBTNkp9QB4i8ObdLHDqHRUzFb55ZQJI3G4vsxOOWAOUXGirtLwrxGQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/core@2.12.0': - resolution: {integrity: sha512-s+6pwEj+GfKf7vqGUzN9iSEPueUssCCQrCBUlcAfKrJe0a22hTUCjewpB0I7lNrCIULt8dkndD+sMdOrXsRl6Q==} - engines: {node: '>= 12.0.0'} - - '@parcel/diagnostic@2.12.0': - resolution: {integrity: sha512-8f1NOsSFK+F4AwFCKynyIu9Kr/uWHC+SywAv4oS6Bv3Acig0gtwUjugk0C9UaB8ztBZiW5TQZhw+uPZn9T/lJA==} - engines: {node: '>= 12.0.0'} - - '@parcel/diagnostic@2.13.2': - resolution: {integrity: sha512-6Au0JEJ5SY2gYrY0/m0i0sTuqTvK0k2E9azhBJR+zzCREbUxLiDdLZ+vXAfLW7t/kPAcWtdNU0Bj7pnZcMiMXg==} - engines: {node: '>= 16.0.0'} - - '@parcel/events@2.12.0': - resolution: {integrity: sha512-nmAAEIKLjW1kB2cUbCYSmZOGbnGj8wCzhqnK727zCCWaA25ogzAtt657GPOeFyqW77KyosU728Tl63Fc8hphIA==} - engines: {node: '>= 12.0.0'} - - '@parcel/events@2.13.2': - resolution: {integrity: sha512-BVB9hW1RGh/tMaDHfpa+uIgz5PMULorCnjmWr/KvrlhdUSUQoaPYfRcTDYrKhoKuNIKsWSnTGvXrxE53L5qo0w==} - engines: {node: '>= 16.0.0'} - - '@parcel/feature-flags@2.13.2': - resolution: {integrity: sha512-cCwDAKD4Er24EkuQ+loVZXSURpM0gAGRsLJVoBtFiCSbB3nmIJJ6FLRwSBI/5OsOUExiUXDvSpfUCA5ldGTzbw==} - engines: {node: '>= 16.0.0'} - - '@parcel/fs@2.12.0': - resolution: {integrity: sha512-NnFkuvou1YBtPOhTdZr44WN7I60cGyly2wpHzqRl62yhObyi1KvW0SjwOMa0QGNcBOIzp4G0CapoZ93hD0RG5Q==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@parcel/core': ^2.12.0 - - '@parcel/graph@3.2.0': - resolution: {integrity: sha512-xlrmCPqy58D4Fg5umV7bpwDx5Vyt7MlnQPxW68vae5+BA4GSWetfZt+Cs5dtotMG2oCHzZxhIPt7YZ7NRyQzLA==} - engines: {node: '>= 12.0.0'} - - '@parcel/logger@2.12.0': - resolution: {integrity: sha512-cJ7Paqa7/9VJ7C+KwgJlwMqTQBOjjn71FbKk0G07hydUEBISU2aDfmc/52o60ErL9l+vXB26zTrIBanbxS8rVg==} - engines: {node: '>= 12.0.0'} - - '@parcel/logger@2.13.2': - resolution: {integrity: sha512-SFVABAMqaT9jIDn4maPgaQQauPDz8fpoKUGEuLF44Q0aQFbBUy7vX7KYs/EvYSWZo4VyJcUDHvIInBlepA0/ZQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/markdown-ansi@2.12.0': - resolution: {integrity: sha512-WZz3rzL8k0H3WR4qTHX6Ic8DlEs17keO9gtD4MNGyMNQbqQEvQ61lWJaIH0nAtgEetu0SOITiVqdZrb8zx/M7w==} - engines: {node: '>= 12.0.0'} - - '@parcel/markdown-ansi@2.13.2': - resolution: {integrity: sha512-MIEoetfT/snk1GqWzBI3AhifV257i2xke9dvyQl14PPiMl+TlVhwnbQyA09WJBvDor+MuxZypHL7xoFdW8ff3A==} - engines: {node: '>= 16.0.0'} - - '@parcel/node-resolver-core@3.3.0': - resolution: {integrity: sha512-rhPW9DYPEIqQBSlYzz3S0AjXxjN6Ub2yS6tzzsW/4S3Gpsgk/uEq4ZfxPvoPf/6TgZndVxmKwpmxaKtGMmf3cA==} - engines: {node: '>= 12.0.0'} - - '@parcel/package-manager@2.12.0': - resolution: {integrity: sha512-0nvAezcjPx9FT+hIL+LS1jb0aohwLZXct7jAh7i0MLMtehOi0z1Sau+QpgMlA9rfEZZ1LIeFdnZZwqSy7Ccspw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@parcel/core': ^2.12.0 - - '@parcel/packager-ts@2.13.2': - resolution: {integrity: sha512-GTFdmHu+hqXghlc810KxaQn4qwmwwcBWVyTNUkp/da+I7+0+qE4NL2E3ELDuRVx/j8tC3AKUeU07ln1adDNjyQ==} - engines: {node: '>= 16.0.0', parcel: ^2.13.2} - - '@parcel/plugin@2.12.0': - resolution: {integrity: sha512-nc/uRA8DiMoe4neBbzV6kDndh/58a4wQuGKw5oEoIwBCHUvE2W8ZFSu7ollSXUGRzfacTt4NdY8TwS73ScWZ+g==} - engines: {node: '>= 12.0.0'} - - '@parcel/plugin@2.13.2': - resolution: {integrity: sha512-Q+RIENS1B185yLPhrGdzBK1oJrZmh/RXrYMnzJs78Tog8SpihjeNBNR6z4PT85o2F+Gy2y1S9A26fpiGq161qQ==} - engines: {node: '>= 16.0.0'} - - '@parcel/profiler@2.12.0': - resolution: {integrity: sha512-q53fvl5LDcFYzMUtSusUBZSjQrKjMlLEBgKeQHFwkimwR1mgoseaDBDuNz0XvmzDzF1UelJ02TUKCGacU8W2qA==} - engines: {node: '>= 12.0.0'} - - '@parcel/profiler@2.13.2': - resolution: {integrity: sha512-fur6Oq2HkX6AiM8rtqmDvldH5JWz0sqXA1ylz8cE3XOiDZIuvCulZmQ+hH+4odaNH6QocI1MwfV+GDh3HlQoCA==} - engines: {node: '>= 16.0.0'} - - '@parcel/rust@2.12.0': - resolution: {integrity: sha512-005cldMdFZFDPOjbDVEXcINQ3wT4vrxvSavRWI3Az0e3E18exO/x/mW9f648KtXugOXMAqCEqhFHcXECL9nmMw==} - engines: {node: '>= 12.0.0'} - - '@parcel/rust@2.13.2': - resolution: {integrity: sha512-XFIewSwxkrDYOnnSP/XZ1LDLdXTs7L9CjQUWtl46Vir5Pq/rinemwLJeKGIwKLHy7fhUZQjYxquH6fBL+AY8DA==} - engines: {node: '>= 16.0.0'} - - '@parcel/source-map@2.1.1': - resolution: {integrity: sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==} - engines: {node: ^12.18.3 || >=14} - - '@parcel/transformer-typescript-types@2.13.2': - resolution: {integrity: sha512-EUtWLnvZuw1CiOhlgU0WEo7QHE7G0RTPyWpmMHWJljCsvpTeAlfU12V2ko2tmtFNp9F8JiwBhP0+od5+f5LlBA==} - engines: {node: '>= 16.0.0', parcel: ^2.13.2} - peerDependencies: - typescript: '>=3.0.0' - - '@parcel/ts-utils@2.13.2': - resolution: {integrity: sha512-wj6trzSaZ7nHDzx5zVQfs467WrA3p7g6bos7Opr8nTw5V1qACXa03C9ccRiEUmR0i+Bk8kEZKUunswhjBiPuHg==} - engines: {node: '>= 16.0.0'} - peerDependencies: - typescript: '>=3.0.0' + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} - '@parcel/types-internal@2.13.2': - resolution: {integrity: sha512-j0zb3WNM8O/+d8CArll7/4w4AyBED3Jbo32/unz89EPVN0VklmgBrRCAI5QXDKuJAGdAZSL5/a8bNYbwl7/Wxw==} + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@parcel/types@2.12.0': - resolution: {integrity: sha512-8zAFiYNCwNTQcglIObyNwKfRYQK5ELlL13GuBOrSMxueUiI5ylgsGbTS1N7J3dAGZixHO8KhHGv5a71FILn9rQ==} + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} - '@parcel/types@2.13.2': - resolution: {integrity: sha512-6ixqjk2pjKELn4sQ/jdvpbCVTeH6xXQTdotkN8Wzk68F2K2MtSPIRAEocumlexScfffbRQplr2MdIf1JJWLogA==} + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} - '@parcel/utils@2.12.0': - resolution: {integrity: sha512-z1JhLuZ8QmDaYoEIuUCVZlhcFrS7LMfHrb2OCRui5SQFntRWBH2fNM6H/fXXUkT9SkxcuFP2DUA6/m4+Gkz72g==} - engines: {node: '>= 12.0.0'} + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} - '@parcel/utils@2.13.2': - resolution: {integrity: sha512-BkFtRo5xenmonwnBy+X4sVbHIRrx+ZHMPpS/6hFqyTvoUUFq2yTFQnfRGVVOOvscVUxpGom+kewnrTG3HHbZoA==} - engines: {node: '>= 16.0.0'} + '@resvg/resvg-js-android-arm-eabi@2.6.2': + resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] - '@parcel/watcher-android-arm64@2.4.1': - resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} - engines: {node: '>= 10.0.0'} + '@resvg/resvg-js-android-arm64@2.6.2': + resolution: {integrity: sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==} + engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.4.1': - resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} - engines: {node: '>= 10.0.0'} + '@resvg/resvg-js-darwin-arm64@2.6.2': + resolution: {integrity: sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==} + engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.4.1': - resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} - engines: {node: '>= 10.0.0'} + '@resvg/resvg-js-darwin-x64@2.6.2': + resolution: {integrity: sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.4.1': - resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.4.1': - resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - - '@parcel/watcher-linux-arm64-glibc@2.4.1': - resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-arm64-musl@2.4.1': - resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - - '@parcel/watcher-linux-x64-glibc@2.4.1': - resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-linux-x64-musl@2.4.1': - resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - - '@parcel/watcher-win32-arm64@2.4.1': - resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.4.1': - resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.4.1': - resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.4.1': - resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} - engines: {node: '>= 10.0.0'} - - '@parcel/workers@2.12.0': - resolution: {integrity: sha512-zv5We5Jmb+ZWXlU6A+AufyjY4oZckkxsZ8J4dvyWL0W8IQvGO1JB4FGeryyttzQv3RM3OxcN/BpTGPiDG6keBw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@parcel/core': ^2.12.0 - - '@parcel/workers@2.13.2': - resolution: {integrity: sha512-P78BpH0yTT9KK09wgK4eabtlb5OlcWAmZebOToN5UYuwWEylKt0gWZx1+d+LPQupvK84/iZ+AutDScsATjgUMw==} - engines: {node: '>= 16.0.0'} - peerDependencies: - '@parcel/core': ^2.13.2 - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@pkgr/core@0.1.1': - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@playwright/test@1.49.0': - resolution: {integrity: sha512-DMulbwQURa8rNIQrf94+jPJQ4FmOVdpE5ZppRNvWVjvhC+6sOeo28r8MgIpQRYouXRtt/FCCXU7zn20jnHR4Qw==} - engines: {node: '>=18'} - hasBin: true - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - - '@resvg/resvg-js-android-arm-eabi@2.6.2': - resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - - '@resvg/resvg-js-android-arm64@2.6.2': - resolution: {integrity: sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@resvg/resvg-js-darwin-arm64@2.6.2': - resolution: {integrity: sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@resvg/resvg-js-darwin-x64@2.6.2': - resolution: {integrity: sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@resvg/resvg-js-linux-arm-gnueabihf@2.6.2': - resolution: {integrity: sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==} - engines: {node: '>= 10'} + '@resvg/resvg-js-linux-arm-gnueabihf@2.6.2': + resolution: {integrity: sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==} + engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -2751,9 +2414,9 @@ packages: '@types/babel__core': optional: true - '@rollup/plugin-commonjs@25.0.8': - resolution: {integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==} - engines: {node: '>=14.0.0'} + '@rollup/plugin-commonjs@28.0.2': + resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 peerDependenciesMeta: @@ -2778,13 +2441,22 @@ packages: rollup: optional: true + '@rollup/plugin-node-resolve@16.0.0': + resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/plugin-replace@2.4.2': resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 - '@rollup/plugin-replace@5.0.7': - resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==} + '@rollup/plugin-replace@6.0.2': + resolution: {integrity: sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2807,8 +2479,8 @@ packages: peerDependencies: rollup: ^1.20.0||^2.0.0 - '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -2821,150 +2493,259 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.29.1': + resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.24.0': resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.29.1': + resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.24.0': resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.29.1': + resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.24.0': resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.29.1': + resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.29.1': + resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.29.1': + resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.24.0': resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.24.0': resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.29.1': + resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.24.0': resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.29.1': + resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.24.0': resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.24.0': resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.29.1': + resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.24.0': resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.29.1': + resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.24.0': resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.29.1': + resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.24.0': resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.29.1': + resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.24.0': resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.29.1': + resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.24.0': resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.29.1': + resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} + cpu: [x64] + os: [win32] + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} '@schemastore/package@0.0.10': resolution: {integrity: sha512-D3LxMCnkgsb4LO5sDKf6E+yahM2SqpEHmkqMPDSJis5Cy/j2MgWo/g/iq0lECK0mrPWfx3hqKm2ZJlqxwbRJQA==} - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - - '@shikijs/core@1.23.1': - resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==} - '@shikijs/core@1.24.0': resolution: {integrity: sha512-6pvdH0KoahMzr6689yh0QJ3rCgF4j1XsXRHNEeEN6M4xJTfQ6QPWrmHzIddotg+xPJUPEPzYzYCKzpYyhTI6Gw==} - '@shikijs/engine-javascript@1.23.1': - resolution: {integrity: sha512-i/LdEwT5k3FVu07SiApRFwRcSJs5QM9+tod5vYCPig1Ywi8GR30zcujbxGQFJHwYD7A5BUqagi8o5KS+LEVgBg==} + '@shikijs/core@1.24.1': + resolution: {integrity: sha512-3q/9oarMVcLqJ+NQOdKL40dJVq/UKCsiWXz3QRQPBglHqa8dDJ0p6TuMuk2gHphy5FZcvFtg4UHBgpW0JtZ8+A==} + + '@shikijs/core@1.24.4': + resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==} + + '@shikijs/core@1.26.1': + resolution: {integrity: sha512-yeo7sG+WZQblKPclUOKRPwkv1PyoHYkJ4gP9DzhFJbTdueKR7wYTI1vfF/bFi1NTgc545yG/DzvVhZgueVOXMA==} '@shikijs/engine-javascript@1.24.0': resolution: {integrity: sha512-ZA6sCeSsF3Mnlxxr+4wGEJ9Tto4RHmfIS7ox8KIAbH0MTVUkw3roHPHZN+LlJMOHJJOVupe6tvuAzRpN8qK1vA==} - '@shikijs/engine-oniguruma@1.23.1': - resolution: {integrity: sha512-KQ+lgeJJ5m2ISbUZudLR1qHeH3MnSs2mjFg7bnencgs5jDVPeJ2NVDJ3N5ZHbcTsOIh0qIueyAJnwg7lg7kwXQ==} + '@shikijs/engine-javascript@1.24.1': + resolution: {integrity: sha512-lNgUSHYDYaQ6daj4lJJqcY2Ru9LgHwpFoposJkRVRPh21Yg4kaPFRhzaWoSg3PliwcDOpDuMy3xsmQaJp201Fg==} + + '@shikijs/engine-javascript@1.24.4': + resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==} + + '@shikijs/engine-javascript@1.26.1': + resolution: {integrity: sha512-CRhA0b8CaSLxS0E9A4Bzcb3LKBNpykfo9F85ozlNyArxjo2NkijtiwrJZ6eHa+NT5I9Kox2IXVdjUsP4dilsmw==} '@shikijs/engine-oniguruma@1.24.0': resolution: {integrity: sha512-Eua0qNOL73Y82lGA4GF5P+G2+VXX9XnuUxkiUuwcxQPH4wom+tE39kZpBFXfUuwNYxHSkrSxpB1p4kyRW0moSg==} + '@shikijs/engine-oniguruma@1.24.1': + resolution: {integrity: sha512-KdrTIBIONWd+Xs61eh8HdIpfigtrseat9dpARvaOe2x0g/FNTbwbkGr3y92VSOVD1XotzEskh3v/nCzyWjkf7g==} + + '@shikijs/engine-oniguruma@1.24.4': + resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==} + + '@shikijs/engine-oniguruma@1.26.1': + resolution: {integrity: sha512-F5XuxN1HljLuvfXv7d+mlTkV7XukC1cawdtOo+7pKgPD83CAB1Sf8uHqP3PK0u7njFH0ZhoXE1r+0JzEgAQ+kg==} + + '@shikijs/langs@1.26.1': + resolution: {integrity: sha512-oz/TQiIqZejEIZbGtn68hbJijAOTtYH4TMMSWkWYozwqdpKR3EXgILneQy26WItmJjp3xVspHdiUxUCws4gtuw==} + + '@shikijs/themes@1.26.1': + resolution: {integrity: sha512-JDxVn+z+wgLCiUhBGx2OQrLCkKZQGzNH3nAxFir4PjUcYiyD8Jdms9izyxIogYmSwmoPTatFTdzyrRKbKlSfPA==} + '@shikijs/transformers@1.24.0': resolution: {integrity: sha512-Qf/hby+PRPkoHncjYnJf5svK1aCsOUtQhuLzKPnmeXJtuUZCmbH0pTpdNtXe9tgln/RHlyRJnv7q46HHS1sO0Q==} - '@shikijs/twoslash@1.24.0': - resolution: {integrity: sha512-ELyIoD54dFDlb4eGt5sy54WhFeJ39N1hR9W7ADwHWn3XH7cOPjj320EPCh2t76fIoLb0auD46tVLQVVMn93qsA==} - - '@shikijs/types@1.23.1': - resolution: {integrity: sha512-98A5hGyEhzzAgQh2dAeHKrWW4HfCMeoFER2z16p5eJ+vmPeF6lZ/elEne6/UCU551F/WqkopqRsr1l2Yu6+A0g==} + '@shikijs/twoslash@1.26.1': + resolution: {integrity: sha512-jgRt6c6y+rXVfpcLIAY8luCKDiadhozrLS1+xjXA6WcZ/5wCAB2oj+ubue+14UZkg2yLJaH0X7N8N2J7/X1YJQ==} '@shikijs/types@1.24.0': resolution: {integrity: sha512-aptbEuq1Pk88DMlCe+FzXNnBZ17LCiLIGWAeCWhoFDzia5Q5Krx3DgnULLiouSdd6+LUM39XwXGppqYE0Ghtug==} - '@shikijs/vitepress-twoslash@1.23.1': - resolution: {integrity: sha512-L67HkzDkbECjYdWxQA9BuKAIB0c7eaa+7sD6dZUQ6/cdJGiWvaPLYMRwMWZQ4ToRsz1X6MQmOKQp6Xb6FEc3Bg==} + '@shikijs/types@1.24.1': + resolution: {integrity: sha512-ZwZFbShFY/APfKNt3s9Gv8rhTm29GodSKsOW66X6N+HGsZuaHalE1VUEX4fv93UXHTZTLjb3uxn63F96RhGfXw==} - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} + '@shikijs/types@1.24.4': + resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==} - '@sindresorhus/is@0.7.0': - resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} - engines: {node: '>=4'} + '@shikijs/types@1.26.1': + resolution: {integrity: sha512-d4B00TKKAMaHuFYgRf3L0gwtvqpW4hVdVwKcZYbBfAAQXspgkbWqnFfuFl3MDH6gLbsubOcr+prcnsqah3ny7Q==} + + '@shikijs/vitepress-twoslash@1.26.1': + resolution: {integrity: sha512-doNqlJ+oOkC98cgiJSFJ3T/RZMBTiutQ3xw8EB8Xr6Qbk1/5Tfg+eOpI/2h2HTHdEafC2jzkgWK/l7Te1u5aWA==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} + + '@shikijs/vscode-textmate@9.3.1': + resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==} '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - - '@sindresorhus/is@6.3.1': - resolution: {integrity: sha512-FX4MfcifwJyFOI2lPoX7PQxCqx8BG1HCho7WdiXwpEQx1Ycij0JxkfYtGK7yqNScrZGSlt6RE6sw8QYoH7eKnQ==} - engines: {node: '>=16'} - '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - '@stylistic/eslint-plugin@2.10.1': resolution: {integrity: sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2977,89 +2758,6 @@ packages: '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - '@swc/core-darwin-arm64@1.7.36': - resolution: {integrity: sha512-8vDczXzCgv3ceTPhEivlpGprN44YlrCK1nbfU9g2TrhV/Aiqi09W/eM5zLesdoM1Z3mJl492gc/8nlTkpDdusw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.7.36': - resolution: {integrity: sha512-Pa2Gao7+Wf5m3SsK4abKRtd48AtoUnJInvaC3d077swBfgZjbjUbQvcpdc2dOeQtWwo49rFqUZJonMsL0jnPgQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.7.36': - resolution: {integrity: sha512-3YsMWd7V+WZEjbfBnLkkz/olcRBa8nyoK0iIOnNARJBMcYaJxjkJSMZpmSojCnIVwvjA1N83CPAbUL+W+fCnHg==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.7.36': - resolution: {integrity: sha512-lqM3aBB7kJazJYOwHeA5OGNLqXoQPZ/76b3dV+XcjN1GhD0CcXz6mW5PRYVin6OSN1eKrKBKJjtDA1mqADDEvw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.7.36': - resolution: {integrity: sha512-bqei2YDzvUfG0pth5W2xJaj0eG4XWYk0d/NJ75vBX6bkIzK6dC8iuKQ41jOfUWonnrAs7rTDDJW0sTn/evvRdw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.7.36': - resolution: {integrity: sha512-03maXTUyaBjeCxlDltmdzHje1ryQt1C4OWmmNgSSRXjLb+GNnAenwOJMSrcvHP/aNClD2pwsFCnYKDGy+sYE6w==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.7.36': - resolution: {integrity: sha512-XXysqLkvjtQnXm1zHqLhy00UYPv/gk5OtwR732X+piNisnEbcJBqI8Qp9O7YvLWllRcoP8IMBGDWLGdGLSpViA==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.7.36': - resolution: {integrity: sha512-k7+dmb13a/zPw+E4XYfPmLZFWJgcOcBRKIjYl9nQErtYsgsg3Ji6TBbsvJVETy23lNHyewZ17V5Vq6NzaG0hzg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.7.36': - resolution: {integrity: sha512-ridD3ay6YM2PEYHZXXFN+edYEv0FOynaqOBP+NSnGNHA35azItIjoIe+KNi4WltGtAjpKCHSpjGCNfna12wdYQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.7.36': - resolution: {integrity: sha512-j1z2Z1Ln9d0E3dHsPkC1K9XDh0ojhRPwV+GfRTu4D61PE+aYhYLvbJC6xPvL4/204QrStRS7eDu3m+BcDp3rgQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - - '@swc/core@1.7.36': - resolution: {integrity: sha512-bu7ymMX+LCJOSSrKank25Jaq66ymLVA9fOUuy4ck3/6rbXdLw+pIJPnIDKQ9uNcxww8KDxOuJk9Ui9pqR+aGFw==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.13': - resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - '@textlint/ast-node-types@12.6.1': resolution: {integrity: sha512-uzlJ+ZsCAyJm+lBi7j0UeBbj+Oy6w/VWoGJ3iHRHE5eZ8Z4iK66mq+PG/spupmbllLtz77OJbY89BYqgFyjXmA==} @@ -3079,9 +2777,6 @@ packages: '@types/babel__preset-env@7.9.7': resolution: {integrity: sha512-m63P4DQR9d0/g8GwRsmyizGqfCGWI6LVnuNg4OV8YhNM+VMBAepJ4394Z/rJA0pBYV+AXgFfHP4RiIlk9mYVVQ==} - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - '@types/conventional-commits-parser@5.0.0': resolution: {integrity: sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ==} @@ -3100,24 +2795,15 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lodash@4.17.13': - resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} - '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} @@ -3133,9 +2819,6 @@ packages: '@types/minimatch@5.1.2': resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -3148,14 +2831,8 @@ packages: '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@18.19.67': - resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==} - - '@types/node@22.10.1': - resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} - - '@types/normalize-package-data@2.4.4': - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/node@22.10.5': + resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} '@types/readdir-glob@1.1.5': resolution: {integrity: sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==} @@ -3163,9 +2840,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - '@types/tinycolor2@1.4.6': resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} @@ -3181,9 +2855,6 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.14.0': resolution: {integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3205,10 +2876,6 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.11.0': - resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.14.0': resolution: {integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3226,10 +2893,6 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.11.0': - resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.14.0': resolution: {integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3238,15 +2901,6 @@ packages: resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.11.0': - resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@8.14.0': resolution: {integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3265,12 +2919,6 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.11.0': - resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.14.0': resolution: {integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3287,10 +2935,6 @@ packages: typescript: optional: true - '@typescript-eslint/visitor-keys@8.11.0': - resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.14.0': resolution: {integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3489,12 +3133,12 @@ packages: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} - '@yao-pkg/pkg-fetch@3.5.17': - resolution: {integrity: sha512-2gD2K8JUwHwvFFZbwVXwmm90P0U3s8Kqiym4w7t2enTajH28LMhpXaqh/x+SzKeNwvPGoaRUhV0h2nPtWTDoDA==} + '@yao-pkg/pkg-fetch@3.5.18': + resolution: {integrity: sha512-tdUT7zS2lyXeJwkA8lDI4aVxHwauAc5lKj6Xui3/BtDe6vDsQ8KP+f66u07AI28DuTzKxjRJKNNXVdyGv2Ndsg==} hasBin: true - '@yao-pkg/pkg@6.1.1': - resolution: {integrity: sha512-AqVKon68/8V81vfGhmRrqUCcMZFzQNWFbBowcKNq82KND7vp17FlDwheRst4wn8bjNA2lwRTFhuQJWHA5EfETw==} + '@yao-pkg/pkg@6.2.0': + resolution: {integrity: sha512-kq1aDs9aa+fEtKQQ2AsxcL4Z82LsYw9ZQIwD3Q/wDq8ZPN69wCf2+OQp271lnqMybYInXwwBJ3swIb/nvaXS/g==} engines: {node: '>=18.0.0'} hasBin: true @@ -3509,19 +3153,11 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - abortcontroller-polyfill@1.7.5: - resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.13.0: - resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -3531,10 +3167,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -3556,6 +3188,9 @@ packages: alien-signals@0.2.2: resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==} + anafanafo@2.0.0: + resolution: {integrity: sha512-Nlfq7NC4AOkTJerWRIZcOAiMNtIDVIGWGvQ98O7Jl6Kr2Dk0dX5u4MqN778kSRTy5KRqchpLdF2RtLFEz9FVkQ==} + anchor-markdown-header@0.6.0: resolution: {integrity: sha512-v7HJMtE1X7wTpNFseRhxsY/pivP4uAJbidVhPT+yhz4i/vV1+qx371IXuV9V7bN6KjFtheLJxqaSm0Y/8neJTA==} @@ -3566,14 +3201,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} @@ -3582,14 +3209,6 @@ packages: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} - ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - - ansi-regex@4.1.1: - resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} - engines: {node: '>=6'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3620,10 +3239,6 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - app-path@3.3.0: - resolution: {integrity: sha512-EAgEXkdcxH1cgEePOSsmUtw9ItPl0KTxnh/pj9ZbhvbKbij9x0oX6PWpGnorDr0DS5AosLgoa5n3T/hZmKQpYA==} - engines: {node: '>=8'} - app-path@4.0.0: resolution: {integrity: sha512-mgBO9PZJ3MpbKbwFTljTi36ZKBvG5X/fkVR1F85ANsVcVllEb+C0LGNdJfGUm84GpC4xxgN6HFkmkMU8VEO4mA==} engines: {node: '>=12'} @@ -3631,13 +3246,6 @@ packages: aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - - archive-type@4.0.0: - resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} - engines: {node: '>=4'} - archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -3699,10 +3307,6 @@ packages: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -3722,12 +3326,6 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - async-promises@0.2.3: - resolution: {integrity: sha512-/iraEWVBoP+CTSonpypBsELpabsz8sWKq9XMfVzcrxwJ8Io6aooca9uH8kJDYgQF7jiwKY01itNoyqiyto9RLw==} - - async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} - async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3789,9 +3387,17 @@ packages: peerDependencies: '@babel/core': ^7.10.0 + badge-maker@4.1.0: + resolution: {integrity: sha512-qYImXoz0WZRMaauqSMo6QNurKp26K3RcOhefuGfno50xmAzHEJsgHbP4gnHs6Ps53KgQgFi4MJKB6Rq8H7siww==} + engines: {node: '>=16'} + hasBin: true + bail@1.0.5: resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3801,9 +3407,6 @@ packages: bare-events@2.5.0: resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} - base-x@3.0.10: - resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} - base64-js@1.3.1: resolution: {integrity: sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==} @@ -3817,30 +3420,13 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bin-build@3.0.0: - resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} - engines: {node: '>=4'} - - bin-check@4.1.0: - resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} - engines: {node: '>=4'} - - bin-version-check@4.0.0: - resolution: {integrity: sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==} - engines: {node: '>=6'} - - bin-version@3.1.0: - resolution: {integrity: sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==} - engines: {node: '>=6'} - - bin-wrapper@4.1.0: - resolution: {integrity: sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==} - engines: {node: '>=6'} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + binary-search@1.3.6: + resolution: {integrity: sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==} + birpc@0.2.19: resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} @@ -3863,10 +3449,6 @@ packages: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} - boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -3937,25 +3519,6 @@ packages: '@75lb/nature': optional: true - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - - cacheable-request@2.1.4: - resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -3967,22 +3530,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - callsites@4.2.0: - resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} - engines: {node: '>=12.20'} - - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - camelcase@8.0.0: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} @@ -3997,11 +3544,6 @@ packages: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} engines: {node: '>=6'} - carbon-now-cli@2.0.0: - resolution: {integrity: sha512-nad2waGHrt4ISKU3VAPdf+cyeXdPRVuNmJSQtLD4KSNcPwR3wqpgCo7Y4PBZYdYU+E0IRSaS5a1QfIU25Inqxw==} - engines: {node: '>=16.0.0', npm: '>=7.10.0'} - hasBin: true - caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4009,10 +3551,6 @@ packages: resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} engines: {node: '>= 10'} - caw@2.0.1: - resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} - engines: {node: '>=4'} - ccount@1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} @@ -4042,17 +3580,20 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chance@1.1.12: resolution: {integrity: sha512-vVBIGQVnwtUG+SYe0ge+3MvF78cvSpuCOEUJr7sVEk2vSBuMW6OXNJjSzdtzrlxNUEaoqH2GBd5Y/+18BEB01Q==} - change-file-extension@0.1.1: - resolution: {integrity: sha512-lB0j9teu8JtDPDHRfU8pNH33w4wMu5bOaKoT4PxH+AKugBrIfpiJMTTKIm0TErNeJPkeQEgvH31YpccTwOKPRg==} - engines: {node: '>=18'} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + char-width-table-consumer@1.0.0: + resolution: {integrity: sha512-Fz4UD0LBpxPgL9i29CJ5O4KANwaMnX/OhhbxzvNa332h+9+nRKyeuLw4wA51lt/ex67+/AdsoBQJF3kgX2feYQ==} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -4096,10 +3637,6 @@ packages: chroma-js@3.1.2: resolution: {integrity: sha512-IJnETTalXbsLx1eKEgx19d5L6SRM7cH4vINw/99p/M11HCuXGRWL+6YmCm7FWFGIo6dtWuQoQi1dc5yQ7ESIHg==} - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} @@ -4107,26 +3644,10 @@ packages: citty@0.1.6: resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} - engines: {node: '>=4'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4144,25 +3665,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} - cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} - cli-width@2.2.1: - resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} - - clipboard-sys@1.2.1: - resolution: {integrity: sha512-Ln/sq2sspjDrrBzgWHGN1hwo/GCZNpGBU+W1Cr2x31P7FlUTNiot0tbuqS/OXANd3konhUXrk4qPPtXpc4OXNw==} - os: [linux, darwin, win32] - - clipboardy@2.3.0: - resolution: {integrity: sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==} - engines: {node: '>=8'} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -4170,19 +3676,12 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-response@1.0.2: - resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} - - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} + color-convert@0.5.3: + resolution: {integrity: sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==} color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4231,10 +3730,6 @@ packages: resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} engines: {node: '>=12.20.0'} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - commander@12.1.0: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} @@ -4281,8 +3776,8 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - conf@13.0.1: - resolution: {integrity: sha512-l9Uwc9eOnz39oADzGO2cSBDi7siv8lwO+31ocQ2nOJijnDiW3pxqm9VV10DPYUO28wW83DjABoUqY1nfHRR2hQ==} + conf@13.1.0: + resolution: {integrity: sha512-Bi6v586cy1CoTFViVO4lGTtx780lfF96fUmS1lSX6wpZf6330NvHUu6fReVuDP1de8Mg0nkZb01c8tAQdz1o3w==} engines: {node: '>=18'} confbox@0.1.8: @@ -4294,10 +3789,6 @@ packages: config-master@3.1.0: resolution: {integrity: sha512-n7LBL1zBzYdTpF1mx5DNcZnZn05CWIdsdvtPL4MosvqbBUK3Rq6VWEtGUuF3Y0s9/CIhMejezqlSkP6TnCJ/9g==} - configstore@6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} - configstore@7.0.0: resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} engines: {node: '>=18'} @@ -4306,13 +3797,13 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + consola@3.3.3: + resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} + engines: {node: ^14.18.0 || >=16.10.0} + console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - contentstream@1.0.0: resolution: {integrity: sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==} engines: {node: '>= 0.8.0'} @@ -4326,10 +3817,6 @@ packages: engines: {node: '>=16'} hasBin: true - convert-hrtime@5.0.0: - resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} - engines: {node: '>=12'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -4375,13 +3862,6 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -4394,9 +3874,8 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} + css-color-converter@2.0.0: + resolution: {integrity: sha512-oLIG2soZz3wcC3aAl/7Us5RS8Hvvc6I8G8LniF/qfMmrm7fIKQ8RIDDRZeKyGL2SrWfNqYspuLShbnjBMVWm8g==} css-declaration-sorter@7.2.0: resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} @@ -4423,6 +3902,9 @@ packages: resolution: {integrity: sha512-8Fxxv+tGhORlshCdCwnNJytvlvq46sOLSYEx2ZIGurahWvMucSRnyjPA3AmrMq4VPRYbHVpWj5VkiVasrM2H4Q==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-unit-converter@1.1.2: + resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} + css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} @@ -4457,21 +3939,16 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - csv-parse@5.5.6: - resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==} + csv-parse@5.6.0: + resolution: {integrity: sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==} - csv-stringify@6.5.1: - resolution: {integrity: sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==} + csv-stringify@6.5.2: + resolution: {integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA==} current-module-paths@1.1.2: resolution: {integrity: sha512-H4s4arcLx/ugbu1XkkgSvcUZax0L6tXUqnppGniQb8l5VjUKGHoayXE5RiriiPhYDd+kjZnaok1Uig13PKtKYQ==} engines: {node: '>=12.17'} - cwebp-bin@8.0.0: - resolution: {integrity: sha512-j2s6jA84aG20lB0i/FBwqZGc8nHx4VASUK8OTDxy3xoUHoX/+pP6T15/TnWwhMcD0pZ05y5GgRPkurufOC8tnQ==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - cwise-compiler@1.1.3: resolution: {integrity: sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==} @@ -4508,9 +3985,6 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} - death@1.1.0: - resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} - debounce-fn@6.0.0: resolution: {integrity: sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ==} engines: {node: '>=18'} @@ -4532,14 +4006,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decode-gif@1.0.1: resolution: {integrity: sha512-L0MT527mwlkil9TiN1xwnJXzUxCup55bUT91CPmQlc9zYejXJ8xp17d5EVnwM80JOIGImBUk1ptJQ+hDihyzwg==} engines: {node: '>=10'} @@ -4547,14 +4013,6 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - - decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - decompress-response@4.2.1: resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} engines: {node: '>=8'} @@ -4602,10 +4060,6 @@ packages: resolution: {integrity: sha512-qCSH6I0INPxd9Y1VtAiLpnYvz5O//6rCfJXKk0z66Up9/VOSr+1yS8XSKA5IWRxjocFGlzPyaZYe+jxq7OOLtQ==} engines: {node: '>=16.0.0'} - deepmerge@2.2.1: - resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} - engines: {node: '>=0.10.0'} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -4621,18 +4075,10 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -4644,10 +4090,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - delay@4.4.1: resolution: {integrity: sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ==} engines: {node: '>=6'} @@ -4667,11 +4109,6 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.0.3: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} @@ -4680,9 +4117,6 @@ packages: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -4737,43 +4171,17 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - - dot-prop@8.0.2: - resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} - engines: {node: '>=16'} - dot-prop@9.0.0: resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} engines: {node: '>=18'} - dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - - dotenv@7.0.0: - resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} - engines: {node: '>=6'} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} - download@6.2.5: - resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==} - engines: {node: '>=4'} - - download@7.1.0: - resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} - engines: {node: '>=6'} - duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - duplexer3@0.1.5: - resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -4788,11 +4196,6 @@ packages: electron-to-chromium@1.5.41: resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==} - electron@25.9.8: - resolution: {integrity: sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==} - engines: {node: '>= 12.20.55'} - hasBin: true - emoji-regex-xs@1.0.0: resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} @@ -4884,9 +4287,6 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} @@ -4910,11 +4310,6 @@ packages: resolution: {integrity: sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==} engines: {node: '>=0.10.0'} - esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -4930,6 +4325,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -5202,18 +4602,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - exec-buffer@3.2.0: - resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==} - engines: {node: '>=4'} - - execa@0.7.0: - resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} - engines: {node: '>=4'} - - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -5222,14 +4610,6 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.5.1: - resolution: {integrity: sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg==} - engines: {node: ^18.19.0 || >=20.5.0} - - executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} - exif-parser@0.1.12: resolution: {integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==} @@ -5241,14 +4621,6 @@ packages: resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} engines: {node: '>=12.0.0'} - ext-list@2.2.2: - resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} - engines: {node: '>=0.10.0'} - - ext-name@5.0.0: - resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} - engines: {node: '>=4'} - extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -5263,11 +4635,6 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} @@ -5275,10 +4642,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.0.1: - resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} - engines: {node: '>=6.0.0'} - fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} @@ -5336,10 +4699,6 @@ packages: engines: {node: '>= 0.4.0'} hasBin: true - figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} - figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} @@ -5352,14 +4711,6 @@ packages: resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==} engines: {node: '>=18'} - file-exists@5.0.1: - resolution: {integrity: sha512-TeBMgeKbdSsQtcY2XqKY/yTa4BciMD/Gw8YcND0XMDZt4CDj87l1Wl4x7K0ravZ80tZcyIGMD0hj2VSRPR8M8Q==} - engines: {node: '>=6.0.0'} - - file-extension@4.0.5: - resolution: {integrity: sha512-l0rOL3aKkoi6ea7MNZe6OHgqYYpn48Qfflr8Pe9G9JPPTx5A+sfboK91ZufzIs59/lPqh351l0eb6iKU9J5oGg==} - engines: {node: '>=4'} - file-set@5.2.2: resolution: {integrity: sha512-/KgJI1V/QaDK4enOk/E2xMFk1cTWJghEr7UmWiRZfZ6upt6gQCfMn4jJ7aOm64OKurj4TaVnSSgSDqv5ZKYA3A==} engines: {node: '>=12.17'} @@ -5369,26 +4720,14 @@ packages: '@75lb/nature': optional: true - file-type@10.11.0: - resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==} - engines: {node: '>=6'} - file-type@16.5.4: resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} engines: {node: '>=10'} - file-type@19.6.0: - resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} - engines: {node: '>=18'} - file-type@3.9.0: resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} engines: {node: '>=0.10.0'} - file-type@4.4.0: - resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} - engines: {node: '>=4'} - file-type@5.2.0: resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} engines: {node: '>=4'} @@ -5397,10 +4736,6 @@ packages: resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} engines: {node: '>=4'} - file-type@8.1.0: - resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} - engines: {node: '>=6'} - file-type@9.0.0: resolution: {integrity: sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==} engines: {node: '>=6'} @@ -5408,22 +4743,10 @@ packages: filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - filename-reserved-regex@2.0.0: - resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} - engines: {node: '>=4'} - - filenamify@2.1.0: - resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} - engines: {node: '>=4'} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - filter-obj@1.1.0: - resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} - engines: {node: '>=0.10.0'} - find-replace@5.0.2: resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==} engines: {node: '>=14'} @@ -5445,10 +4768,6 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - find-versions@3.2.0: - resolution: {integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==} - engines: {node: '>=6'} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -5491,10 +4810,6 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -5524,9 +4839,6 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} - fs-extra@5.0.0: - resolution: {integrity: sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -5546,11 +4858,6 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -5559,10 +4866,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function-timeout@1.0.2: - resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} - engines: {node: '>=18'} - function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -5597,18 +4900,10 @@ packages: get-pixels-frame-info-update@3.3.2: resolution: {integrity: sha512-LzVij57X/gK4Y6LpcDdqj+R9WCpD6Sv3ZH85GMA+S3xgPGCz81mHql4GiSnF4GijRjk7TE0ja2sDr8FFYKLe2g==} - get-proxy@2.1.0: - resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} - engines: {node: '>=4'} - get-set-props@0.1.0: resolution: {integrity: sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==} engines: {node: '>=0.10.0'} - get-stdin@8.0.0: - resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} - engines: {node: '>=10'} - get-stdin@9.0.0: resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} engines: {node: '>=12'} @@ -5617,18 +4912,6 @@ packages: resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} engines: {node: '>=0.10.0'} - get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} - - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -5637,10 +4920,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -5655,18 +4934,9 @@ packages: resolution: {integrity: sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==} engines: {node: '>= 0.8.0'} - gif-encoder@0.6.1: - resolution: {integrity: sha512-pDHqEc0/F+9RvJwah0TkZbE+FvvYdjvopES2cBvzaVqi0H5ShvmQxYkohN7fvhktPuGQ9LlkOqolHjA7tJ11qg==} - engines: {node: '>= 0.10.0'} - gif-frames@1.0.1: resolution: {integrity: sha512-9ddxnrEbAjdv0R6Ib8DHhd3TIsaulrm55qWpiH1dsVp4X/QPE8FxtK2YvuYrj+y+YhiBHRHRXo5Gei9GzdMS3g==} - gifsicle@5.3.0: - resolution: {integrity: sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==} - engines: {node: '>=10'} - hasBin: true - gifwrap@0.10.1: resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} @@ -5712,23 +4982,10 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -5782,22 +5039,6 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} - - got@7.1.0: - resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} - engines: {node: '>=4'} - - got@8.3.2: - resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==} - engines: {node: '>=4'} - graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -5829,10 +5070,6 @@ packages: engines: {node: '>=6'} deprecated: this library is no longer supported - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -5851,16 +5088,10 @@ packages: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} - has-symbol-support-x@1.4.2: - resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} - has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - has-to-string-tag-x@1.4.1: - resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} - has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -5868,16 +5099,12 @@ packages: has-unicode@2.0.1: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - has-yarn@3.0.0: - resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} + hast-util-to-html@9.0.4: + resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} @@ -5892,13 +5119,6 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -5915,12 +5135,6 @@ packages: htmlparser2@9.1.0: resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} - http-cache-semantics@3.8.1: - resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} - - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -5928,14 +5142,6 @@ packages: http2-client@1.3.5: resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -5951,10 +5157,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} - engines: {node: '>=18.18.0'} - husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -5967,10 +5169,6 @@ packages: idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - identifier-regex@1.0.0: - resolution: {integrity: sha512-Rcy5cjBOM9iTR+Vwy0Llyip9u0cA99T1yiWOhDW/+PDaTQhyski0tMovsipQ/FRNDkudjLWusJ/IMVIlG5WZnQ==} - engines: {node: '>=18'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5990,46 +5188,10 @@ packages: image-q@4.0.0: resolution: {integrity: sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==} - imagemin-gifsicle@7.0.0: - resolution: {integrity: sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==} - engines: {node: '>=10'} - - imagemin-jpegtran@8.0.0: - resolution: {integrity: sha512-iGaaImltX4oJ1lmS9jb7Qw3NRusQnVBr7hYJuhyL0CHRV42pDMkIGBVCHKA9j9mcWHnO5Ryu3LV7t4fU4sC4xg==} - engines: {node: '>=18'} - - imagemin-optipng@8.0.0: - resolution: {integrity: sha512-CUGfhfwqlPjAC0rm8Fy+R2DJDBGjzy2SkfyT09L8rasnF9jSoHFqJ1xxSZWK6HVPZBMhGPMxCTL70OgTHlLF5A==} - engines: {node: '>=10'} - - imagemin-pngquant@10.0.0: - resolution: {integrity: sha512-kt0LFxyv7sBxUbZyvt+JXoU0HvSnmTJkEW32rZPQ9d7AQJPVh0vkz9mGkvbX0yntY2zW/3N20Yw69PBSt1UQzw==} - engines: {node: '>=18'} - - imagemin-svgo@11.0.1: - resolution: {integrity: sha512-sUZdlXFXZkPt61nzVXbt7EzYjjevPkNuZmAw0VjEm085PRrK5AHSF+1myF0NKtE+ZhY2Vf6W3CEoRqAgksruWQ==} - engines: {node: '>=18'} - - imagemin-webp@8.0.0: - resolution: {integrity: sha512-yN6kNKir6T/U3AtP3uLHrLn9XYafk2m49EbUqLCQ3GPRRLRs+4pUQxxaHz+lnTDM+LQpkSjGQaFVcSgYqvW3dQ==} - engines: {node: '>=14.16'} - - imagemin@9.0.0: - resolution: {integrity: sha512-oFlmioXTIrDCNYiKUVPjzUzm8M/7X74WEO6v8NFjn3ZtxjArdVJiRRdbPpq/OG4BdwaHMUz8ej9Fp4AcaDzMnA==} - engines: {node: '>=18'} - import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-lazy@3.1.0: - resolution: {integrity: sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==} - engines: {node: '>=6'} - - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -6037,10 +5199,6 @@ 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. @@ -6051,10 +5209,6 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -6063,18 +5217,10 @@ packages: resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} engines: {node: ^18.17.0 || >=20.5.0} - inquirer@6.5.2: - resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} - engines: {node: '>=6.0.0'} - internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} - into-stream@3.1.0: - resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==} - engines: {node: '>=4'} - into-stream@6.0.0: resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==} engines: {node: '>=10'} @@ -6124,17 +5270,10 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - is-core-module@2.15.1: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} - is-cwebp-readable@3.0.0: - resolution: {integrity: sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==} - is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -6146,11 +5285,6 @@ packages: is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6164,10 +5298,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -6186,10 +5316,6 @@ packages: is-get-set-prop@1.0.0: resolution: {integrity: sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==} - is-gif@3.0.0: - resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==} - engines: {node: '>=6'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -6197,10 +5323,6 @@ packages: is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-identifier@1.0.1: - resolution: {integrity: sha512-HQ5v4rEJ7REUV54bCd2l5FaD299SGDEn2UPoVXaTHAyGviLq2menVUD2udi3trQ32uvB6LdAh/0ck2EuizrtpA==} - engines: {node: '>=18'} - is-in-ci@1.0.0: resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} engines: {node: '>=18'} @@ -6211,10 +5333,6 @@ packages: engines: {node: '>=14.16'} hasBin: true - is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - is-installed-globally@1.0.0: resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} engines: {node: '>=18'} @@ -6259,25 +5377,10 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-object@1.0.2: - resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} - - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -6290,14 +5393,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - is-png@2.0.0: - resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==} - engines: {node: '>=8'} - - is-png@3.0.1: - resolution: {integrity: sha512-8TqC8+bdsm3YkpI2aECCDycFDl1hTB0HMVRnP3xRRa3Tqx2oVE7sBi1G6CuO9IqEyWSzbBZr1mGqdb3it9h/pg==} - engines: {node: '>=12'} - is-proto-prop@2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} @@ -6312,10 +5407,6 @@ packages: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} engines: {node: '>=0.10.0'} - is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} - engines: {node: '>=0.10.0'} - is-shared-array-buffer@1.0.3: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} @@ -6332,10 +5423,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -6344,10 +5431,6 @@ packages: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} - is-svg@5.1.0: - resolution: {integrity: sha512-uVg5yifaTxHoefNf5Jcx+i9RZe2OBYd/UStp1umx+EERa4xGRa3LLGXjoEph43qUORC0qkafUgrXZ6zzK89yGA==} - engines: {node: '>=14.16'} - is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} @@ -6363,10 +5446,6 @@ packages: is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -6390,18 +5469,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - is-yarn-global@0.4.1: - resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} - engines: {node: '>=12'} - isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} @@ -6420,14 +5491,6 @@ packages: isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - isurl@1.0.0: - resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} - engines: {node: '>= 4'} - - iterm2-version@4.2.0: - resolution: {integrity: sha512-IoiNVk4SMPu6uTcK+1nA5QaHNok2BMDLjSl5UomrOixe5g4GkylhPwuiGdw00ysSCrXAKNMfFTu+u/Lk5f6OLQ==} - engines: {node: '>=8'} - iterm2-version@5.0.0: resolution: {integrity: sha512-WdLXcMYvN3SXT6vEtuW78vnZs4pVWm2nBnb4VKjOPPXmdlR1xTHmBgqKacOzAe4RXOiY/V+0u/0zsU3LoGQoBg==} engines: {node: '>=12'} @@ -6456,12 +5519,12 @@ packages: jimp@0.22.12: resolution: {integrity: sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==} - jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true - jiti@2.3.3: - resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true jpeg-js@0.3.7: @@ -6470,11 +5533,6 @@ packages: jpeg-js@0.4.4: resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==} - jpegtran-bin@7.0.0: - resolution: {integrity: sha512-8ecI4vXIV7eI2+nzRQsHAVaQVBGDotUY76CJZhlYaBAljBnK/509+sGGCs8eJyiS5N4tOcYZS+8Q4KgzorqlBA==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6512,8 +5570,8 @@ packages: resolution: {integrity: sha512-MQA+lCe3ioZd0uGbyB3nDCDZcKgKC7m/Ivt0LgKZdUoOlMJxUWJQ3WI6GeyHp9ouznKaCjlp7CU9sw5k46yZTw==} engines: {node: '>=12'} - jsdoc-to-markdown@9.0.5: - resolution: {integrity: sha512-lqvKgSva+wGUusRz6xtImdM92lrjHNmyi7LyWdLMQBijCnoFwTZjNF3zUqm6uahsSaRALQNyzGXmjaef6IUE4g==} + jsdoc-to-markdown@9.1.1: + resolution: {integrity: sha512-QqYVSo58iHXpD5Jwi1u4AFeuMcQp4jfk7SmWzvXKc3frM9Kop17/OHudmi0phzkT/K137Rlroc9Q0y+95XpUsw==} engines: {node: '>=12.17'} hasBin: true peerDependencies: @@ -6536,9 +5594,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.0: - resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} - json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -6548,9 +5603,11 @@ packages: json-schema-migrate@2.0.0: resolution: {integrity: sha512-r38SVTtojDRp4eD6WsCqiE0eNDt4v1WalBXb9cyZYw9ai5cGtBwzRNWjHzJl38w6TxFkXAIA7h+fyX3tnrAFhQ==} - json-schema-to-typescript@15.0.3: - resolution: {integrity: sha512-iOKdzTUWEVM4nlxpFudFsWyUiu/Jakkga4OZPEt7CGoSEsAsUgdOZqR6pcgx2STBek9Gm4hcarJpXSzIvZ/hKA==} - engines: {node: '>=16.0.0'} + json-schema-to-typescript-lite@14.1.0: + resolution: {integrity: sha512-b8K6P3aiLgiYKYcHacgZKrwPXPyjekqRPV5vkNfBt0EoohcOSXEbcuGzgi6KQmsAhuy5Mh2KMxofXodRhMxURA==} + + json-schema-to-zod@2.6.0: + resolution: {integrity: sha512-6sFZqOzHZeON8g2ZW5HJ114Hb/FffNCjWh8dgulJaKFkUqKCEWZAzF4+g07SQpfBZF7HXemwedtdLypZzmnVpQ==} hasBin: true json-schema-traverse@0.4.1: @@ -6606,13 +5663,6 @@ packages: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} - junk@4.0.1: - resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} - engines: {node: '>=12.20'} - - keyv@3.0.0: - resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -6627,6 +5677,9 @@ packages: klaw@3.0.0: resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==} + knitwork@1.2.0: + resolution: {integrity: sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==} + known-css-properties@0.34.0: resolution: {integrity: sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==} @@ -6640,10 +5693,6 @@ packages: resolution: {integrity: sha512-OzIvbHKKDpi60TnF9t7UUVAF1B4mcqc02z5PIvrm08Wyb+yOcz63GRvEuVxNT18a9E1SrNouhB4W2NNLeD7Ykg==} engines: {node: '>=18'} - latest-version@7.0.0: - resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} - engines: {node: '>=14.16'} - latest-version@9.0.0: resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} engines: {node: '>=18'} @@ -6652,11 +5701,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - leasot@12.5.0: - resolution: {integrity: sha512-bx2hqCDZ6EVzdaM+aIBNO12Ff0BscGVWPf23Wzj5FLCEXZuJR729Wn5Naom8dJcqpEbsk2XXzvdHus/3WZqW5w==} - engines: {node: '>=12'} - hasBin: true - leasot@14.4.0: resolution: {integrity: sha512-QGPf5zuauwsHPRMg5bqa+u6IrSrdx4XiqvIkWFVXVRFHyyI7828+oXsKJDX/0o9qXG/lLwOzsnC6d7lep+HXdA==} engines: {node: '>=18'} @@ -6692,23 +5736,10 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - listr2@6.6.1: - resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} - engines: {node: '>=16.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - listr2@8.2.5: resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} - lmdb@2.8.5: - resolution: {integrity: sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==} - hasBin: true - load-bmfont@1.4.2: resolution: {integrity: sha512-qElWkmjW9Oq1F9EI5Gt7aD9zcdHb9spJCW1L/dmPf7KzCCEJxq8nhHz5eCgI9aMf7vrG/wyaCqdsI+Iy9ZTlog==} @@ -6773,10 +5804,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - log-symbols@5.1.0: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} @@ -6789,14 +5816,6 @@ packages: resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==} engines: {node: '>=18'} - log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - - log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -6810,22 +5829,10 @@ packages: loupe@3.1.2: resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} - lowercase-keys@1.0.0: - resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==} - engines: {node: '>=0.10.0'} - lowercase-keys@1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} engines: {node: '>=0.10.0'} - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -6833,16 +5840,9 @@ packages: resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} engines: {node: 20 || >=22} - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - 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'} - lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -6852,6 +5852,9 @@ packages: magic-string@0.30.12: resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -6860,14 +5863,6 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - mark.js@8.11.1: resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} @@ -6907,8 +5902,8 @@ packages: peerDependencies: marked: '>=1 <15' - marked@15.0.1: - resolution: {integrity: sha512-VnnE19XO2Vb2oZeH8quAepfrb6Aaz4OoY8yZQACfuy/5KVJ0GxYC0Qxzz/iuc+g5UF7H0HJ+QROfvH26XeBdDA==} + marked@15.0.3: + resolution: {integrity: sha512-Ai0cepvl2NHnTcO9jYDtcOEtVBNVYR31XnEA3BndO7f5As1wzpcOceSUM8FDkNLJNIODcLpDTWay/qQhqbuMvg==} engines: {node: '>= 18'} hasBin: true @@ -6917,10 +5912,6 @@ packages: engines: {node: '>= 12'} hasBin: true - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - matcher@5.0.0: resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7020,10 +6011,6 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} - meow@9.0.0: - resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -7150,10 +6137,6 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} - mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -7163,10 +6146,6 @@ packages: engines: {node: '>=4'} hasBin: true - mimic-fn@1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} - engines: {node: '>=4'} - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -7179,10 +6158,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} @@ -7191,17 +6166,9 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - minimatch@10.0.1: resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} engines: {node: 20 || >=22} @@ -7221,10 +6188,6 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -7271,24 +6234,24 @@ packages: engines: {node: '>=10'} hasBin: true - mkdist@1.6.0: - resolution: {integrity: sha512-nD7J/mx33Lwm4Q4qoPgRBVA9JQNKgyE7fLo5vdPWVDdjz96pXglGERp/fRnGPCTB37Kykfxs5bDdXa9BWOT9nw==} + mkdist@2.2.0: + resolution: {integrity: sha512-GfKwu4A2grXfhj2TZm4ydfzP515NaALqKaPq4WqaZ6NhEnD47BiIQPySoCTTvVqHxYcuqVkNdCXjYf9Bz1Y04Q==} hasBin: true peerDependencies: - sass: ^1.78.0 - typescript: '>=5.5.4' + sass: ^1.83.0 + typescript: '>=5.7.2' + vue: ^3.5.13 vue-tsc: ^1.8.27 || ^2.0.21 peerDependenciesMeta: sass: optional: true typescript: optional: true + vue: + optional: true vue-tsc: optional: true - mlly@1.7.2: - resolution: {integrity: sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA==} - mlly@1.7.3: resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==} @@ -7299,13 +6262,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msgpackr-extract@3.0.3: - resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} - hasBin: true - - msgpackr@1.11.0: - resolution: {integrity: sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==} - muggle-string@0.4.1: resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} @@ -7315,9 +6271,6 @@ packages: multistream@4.1.0: resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==} - mute-stream@0.0.7: - resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -7347,19 +6300,10 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-abi@3.71.0: resolution: {integrity: sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==} engines: {node: '>=10'} - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-bitmap@0.0.1: resolution: {integrity: sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==} engines: {node: '>=v0.6.5'} @@ -7381,14 +6325,6 @@ packages: encoding: optional: true - node-gyp-build-optional-packages@5.1.1: - resolution: {integrity: sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==} - hasBin: true - - node-gyp-build-optional-packages@5.2.2: - resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} - hasBin: true - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -7410,13 +6346,6 @@ packages: engines: {node: '>=6'} hasBin: true - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -7425,26 +6354,6 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - normalize-url@2.0.1: - resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==} - engines: {node: '>=4'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} - engines: {node: '>=14.16'} - - npm-conf@1.1.3: - resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} - engines: {node: '>=4'} - - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -7464,9 +6373,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - oas-kit-common@1.0.8: resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} @@ -7528,10 +6434,6 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} - engines: {node: '>=4'} - onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -7544,44 +6446,27 @@ packages: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - oniguruma-to-es@0.4.1: - resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} + oniguruma-to-es@0.10.0: + resolution: {integrity: sha512-zapyOUOCJxt+xhiNRPPMtfJkHGsZ98HHB9qJEkdT8BGytO/+kpe4m1Ngf0MzbzTmhacn11w9yGeDP6tzDhnCdg==} oniguruma-to-es@0.7.0: resolution: {integrity: sha512-HRaRh09cE0gRS3+wi2zxekB+I5L8C/gN60S+vb11eADHUaB/q4u8wGGOX3GvwvitG8ixaeycZfeoyruKQzUgNg==} + oniguruma-to-es@0.8.1: + resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==} + open@10.1.0: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - openapi-to-md@1.0.24: - resolution: {integrity: sha512-JSDV6tdd1YrK2WvDZFQ1IMPvcCI+/2K+i84sKRTCty2xA/SVSeqOnSTATWpa4b4e4DSVBmEvpT5S0TdgGN23sw==} - hasBin: true - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - optipng-bin@7.0.1: - resolution: {integrity: sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==} - engines: {node: '>=10'} - hasBin: true - ora@8.1.1: resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} engines: {node: '>=18'} - ordered-binary@1.5.2: - resolution: {integrity: sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==} - - os-filter-obj@2.0.0: - resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} - engines: {node: '>=4'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -7589,46 +6474,10 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - ow@2.0.0: - resolution: {integrity: sha512-ESUigmGrdhUZ2nQSFNkeKSl6ZRPupXzprMs3yF9DYlNVpJ8XAjM/fI9RUZxA7PI1K9HQDCCvBo1jr/GEIo9joQ==} - engines: {node: '>=18'} - - p-cancelable@0.3.0: - resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} - engines: {node: '>=4'} - - p-cancelable@0.4.1: - resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==} - engines: {node: '>=4'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - - p-event@1.3.0: - resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==} - engines: {node: '>=4'} - - p-event@2.3.1: - resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} - engines: {node: '>=6'} - p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - - p-is-promise@1.1.0: - resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==} - engines: {node: '>=4'} - p-is-promise@3.0.0: resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} engines: {node: '>=8'} @@ -7657,34 +6506,10 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map-series@1.0.0: - resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==} - engines: {node: '>=4'} - p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-pipe@4.0.0: - resolution: {integrity: sha512-HkPfFklpZQPUKBFXzKFB6ihLriIHxnmuQdK9WmLDwe4hf2PdhhfWT/FJa+pc3bA1ywvKXtedxIRmd4Y7BTXE4w==} - engines: {node: '>=12'} - - p-reduce@1.0.0: - resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==} - engines: {node: '>=4'} - - p-timeout@1.2.1: - resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==} - engines: {node: '>=4'} - - p-timeout@2.0.1: - resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} - engines: {node: '>=4'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7700,10 +6525,6 @@ packages: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} - package-json@8.1.1: - resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} - engines: {node: '>=14.16'} - package-manager-detector@0.2.2: resolution: {integrity: sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==} @@ -7771,10 +6592,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -7813,10 +6630,6 @@ packages: resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} engines: {node: '>=8'} - peek-readable@5.3.1: - resolution: {integrity: sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw==} - engines: {node: '>=14.16'} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -7874,18 +6687,8 @@ packages: resolution: {integrity: sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==} hasBin: true - pkg-types@1.2.1: - resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==} - - playwright-core@1.49.0: - resolution: {integrity: sha512-R+3KKTQF3npy5GTiKH/T+kdhoJfJojjHESR1YEWhYuEKRVfVaxH3+4+GvXE5xyCngCxhxnykk0Vlah9v8fs3jA==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.49.0: - resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==} - engines: {node: '>=18'} - hasBin: true + pkg-types@1.3.0: + resolution: {integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==} plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} @@ -7907,11 +6710,6 @@ packages: resolution: {integrity: sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==} engines: {node: '>=12.13.0'} - pngquant-bin@9.0.0: - resolution: {integrity: sha512-jlOKfIQBTNJwQn2JKK5xLmwrsi/NwVTmHRvbrknCjdWxfX1/c/+yP4Jmp9jRZWedft/vnhh+rGbvl/kUmesurg==} - engines: {node: '>=18'} - hasBin: true - possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -8010,9 +6808,9 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} + postcss-nested@7.0.2: + resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} + engines: {node: '>=18.0'} peerDependencies: postcss: ^8.2.14 @@ -8113,6 +6911,10 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} + postcss-sorting@8.0.2: resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} peerDependencies: @@ -8144,11 +6946,6 @@ packages: preact@10.25.1: resolution: {integrity: sha512-frxeZV2vhQSohQwJ7FvlqC40ze89+8friponWUFeVEkaCfhC6Eu4V0iND5C9CXz8JLndV07QRDeXzH1+Anz5Og==} - prebuild-install@7.1.1: - resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} - engines: {node: '>=10'} - hasBin: true - prebuild-install@7.1.2: resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} engines: {node: '>=10'} @@ -8158,24 +6955,11 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prepend-http@1.0.4: - resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} - engines: {node: '>=0.10.0'} - - prepend-http@2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} - engines: {node: '>=4'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - prettier@3.4.1: - resolution: {integrity: sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==} - engines: {node: '>=14'} - hasBin: true - pretty-bytes@5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} @@ -8212,9 +6996,6 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -8248,28 +7029,12 @@ packages: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - query-string@5.1.1: - resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} - engines: {node: '>=0.10.0'} - - query-string@7.1.3: - resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} - engines: {node: '>=6'} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -8277,14 +7042,6 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} @@ -8321,10 +7078,6 @@ packages: resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==} engines: {node: '>= 4'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - reftools@1.1.9: resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} @@ -8347,11 +7100,14 @@ packages: regex-recursion@4.3.0: resolution: {integrity: sha512-5LcLnizwjcQ2ALfOj95MjcatxyqF5RPySx9yT+PaXu3Gox2vyAtLDjHB8NTJLtMGkvyau6nI3CfpwFCjPUIs/A==} + regex-recursion@5.1.1: + resolution: {integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==} + regex-utilities@2.3.0: resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} - regex@5.0.2: - resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==} + regex@5.1.1: + resolution: {integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==} regexp.prototype.flags@1.5.3: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} @@ -8385,9 +7141,15 @@ packages: remark-gfm@1.0.0: resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} + remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + remark-parse@9.0.0: resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} + remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + rename-keys@1.2.0: resolution: {integrity: sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==} engines: {node: '>= 0.8.0'} @@ -8405,9 +7167,6 @@ packages: engines: {node: '>= 6'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-dir@1.2.0: - resolution: {integrity: sha512-LY85DTSu+heYgDqq/mK+7zFHWkttVNRXC9NKcKGyuGLdlsfbjEPrIEYdCVrx6hqnJb+xSu3Lzaoo8VnmOhhjNA==} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -8419,13 +7178,6 @@ packages: requizzle@0.2.4: resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} - reserved-identifiers@1.0.0: - resolution: {integrity: sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==} - engines: {node: '>=18'} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -8441,28 +7193,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - responselike@1.0.2: - resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - restore-cursor@2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} - engines: {node: '>=4'} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -8474,11 +7204,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.6.3: - resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -8493,10 +7218,6 @@ packages: engines: {node: 20 || >=22} hasBin: true - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - roarr@7.21.1: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} @@ -8513,31 +7234,23 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.24.0: resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.29.1: + resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-applescript@7.0.0: resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} engines: {node: '>=18'} - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -8582,22 +7295,6 @@ packages: semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - - semver-regex@2.0.0: - resolution: {integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==} - engines: {node: '>=6'} - - semver-truncate@1.1.2: - resolution: {integrity: sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==} - engines: {node: '>=0.10.0'} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -8607,10 +7304,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -8625,28 +7318,23 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.23.1: - resolution: {integrity: sha512-8kxV9TH4pXgdKGxNOkrSMydn1Xf6It8lsle0fiqxf7a1149K1WGtdOu3Zb91T5r1JpvRPxqxU3C2XdZZXQnrig==} - shiki@1.24.0: resolution: {integrity: sha512-qIneep7QRwxRd5oiHb8jaRzH15V/S8F3saCXOdjwRLgozZJr5x2yeBhQtqkO3FSzQDwYEFAYuifg4oHjpDghrg==} + shiki@1.24.1: + resolution: {integrity: sha512-/qByWMg05+POb63c/OvnrU17FcCUa34WU4F6FCrd/mjDPEDPl8YUNRkRMbo8l3iYMLydfCgxi1r37JFoSw8A4A==} + + shiki@1.26.1: + resolution: {integrity: sha512-Gqg6DSTk3wYqaZ5OaYtzjcdxcBvX5kCy24yvRJEgjT5U+WHlmqCThLuBUx0juyxQBi+6ug53IGeuQS07DWwpcw==} + should-equal@2.0.0: resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} @@ -8738,18 +7426,6 @@ packages: '@75lb/nature': optional: true - sort-keys-length@1.0.1: - resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} - engines: {node: '>=0.10.0'} - - sort-keys@1.1.2: - resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} - engines: {node: '>=0.10.0'} - - sort-keys@2.0.0: - resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} - engines: {node: '>=4'} - sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} @@ -8779,21 +7455,12 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} - spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} @@ -8804,10 +7471,6 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - split-on-first@1.1.0: - resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} - engines: {node: '>=6'} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -8815,9 +7478,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} @@ -8839,26 +7499,10 @@ packages: streamx@2.20.1: resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} - strict-uri-encode@1.1.0: - resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} - engines: {node: '>=0.10.0'} - - strict-uri-encode@2.0.0: - resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} - engines: {node: '>=4'} - - string-argv@0.0.2: - resolution: {integrity: sha512-p6/Mqq0utTQWUeGMi/m0uBtlLZEwXSY3+mXzeRRqw7fz5ezUb28Wr0R99NlfbWaMmL/jCyT9be4jpn7Yz8IO8w==} - engines: {node: '>=0.6.19'} - string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} - string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -8902,14 +7546,6 @@ packages: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} - strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - - strip-ansi@5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -8933,10 +7569,6 @@ packages: strip-dirs@2.1.0: resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -8945,14 +7577,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -8961,10 +7585,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-outer@1.0.1: - resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} - engines: {node: '>=0.10.0'} - strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -8972,10 +7592,6 @@ packages: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} - strtok3@9.1.1: - resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} - engines: {node: '>=16'} - stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} @@ -9020,19 +7636,11 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.1 - stylelint@16.10.0: - resolution: {integrity: sha512-z/8X2rZ52dt2c0stVwI9QL2AFJhLhbPkyfpDFcizs200V/g7v+UYY6SNcB9hKOLcDDX/yGLDsY/pX08sLkz9xQ==} + stylelint@16.11.0: + resolution: {integrity: sha512-zrl4IrKmjJQ+h9FoMp69UMCq5SxeHk0URhxUBj4d3ISzo/DplOFBJZc7t7Dr6otB+1bfbbKNLOmCDpzKSlW+Nw==} engines: {node: '>=18.12.0'} hasBin: true - sumchecker@3.0.1: - resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} - engines: {node: '>= 8.0'} - - super-regex@1.0.0: - resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} - engines: {node: '>=18'} - superjson@2.2.1: resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} engines: {node: '>=16'} @@ -9100,8 +7708,8 @@ packages: resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} engines: {node: '>=12.17'} - table@6.8.2: - resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} tapable@2.2.1: @@ -9130,30 +7738,14 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - temp-dir@1.0.0: - resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} - engines: {node: '>=4'} - temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} - tempfile@2.0.0: - resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} - engines: {node: '>=4'} - tempy@0.6.0: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} engines: {node: '>=10'} - tempy@1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} - - term-img@5.0.0: - resolution: {integrity: sha512-Wpi50MA7bJwJKi5bVYu/t+xu9kNqesdzg6gWHOh3+1R9NRx1LmYoCMly9bUiabMZPNPH3juT8lOhZxUYxPEIBw==} - engines: {node: '>=10'} - term-img@7.0.0: resolution: {integrity: sha512-uG+2G+WVElamsxKAy3h8sug6ut3MFa7gdYXc3LpCIKKlCPTBZq5KulU+618I47TnMvm3vyVkfQO+6yVunBZoRQ==} engines: {node: '>=18'} @@ -9165,10 +7757,6 @@ packages: terminal-char-width@1.0.10: resolution: {integrity: sha512-p9H7JIVM2am3v3GfQTKv+Bj1y3YiLVIsv4nfNJtZsbBM+XR4/UUiHvcsvpX+PoBjpD6xSyuX00GUkKgFXXI61A==} - terminal-image@1.2.1: - resolution: {integrity: sha512-jA6idV4m0RcOImxHuoCsDtjDqhZpuHOekyPPx8uvGZ0/ORQ9fLLqQr5rMUFgheqqyTUt/7dQsGUaQJYHwsvxMQ==} - engines: {node: '>=10'} - terminal-image@3.0.0: resolution: {integrity: sha512-OD6kMGbZNhfFWPGqV4VOARS68pShaAFo9W4Bc4WWmETo91HLhTTSQ91iPX3W9jP4GbIMksDtz8RHRU3AZ61gwg==} engines: {node: '>=18'} @@ -9177,9 +7765,9 @@ packages: resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} engines: {node: '>=12'} - terminalizer@0.12.0: - resolution: {integrity: sha512-eDi+ezFetag//7/0Y6C/XlxVPBjMkM3pvYUr1gV6CJy8hEx2vjNWqubiw87psdrMnXSOTDthDWSvpArECuM9cA==} - hasBin: true + terminal-size@4.0.0: + resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} + engines: {node: '>=18'} terser@5.36.0: resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} @@ -9206,14 +7794,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - time-span@5.1.0: - resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} - engines: {node: '>=12'} - - timed-out@4.0.1: - resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} - engines: {node: '>=0.10.0'} - timm@1.7.1: resolution: {integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==} @@ -9236,10 +7816,6 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} - tinyglobby@0.2.9: - resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==} - engines: {node: '>=12.0.0'} - tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} @@ -9259,10 +7835,6 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - to-buffer@1.1.1: resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} @@ -9278,10 +7850,6 @@ packages: resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} engines: {node: '>=10'} - token-types@6.0.0: - resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} - engines: {node: '>=14.16'} - toml-eslint-parser@0.10.0: resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -9306,23 +7874,23 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - - trim-repeated@1.0.0: - resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} - engines: {node: '>=0.10.0'} - trough@1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' + ts-json-schema-generator@2.3.0: + resolution: {integrity: sha512-t4lBQAwZc0sOJq9LJt3NgbznIcslVnm0JeEMFq8qIRklpMRY8jlYD0YmnRWbqBKANxkby91P1XanSSlSOFpUmg==} + engines: {node: '>=18.0.0'} + hasBin: true + ts-unused-exports@9.0.5: resolution: {integrity: sha512-1XAXaH2i4Al/aZO06pWDn9MUgTN0KQi+fvWudiWfHUTHAav45gzrx7Xq6JAsu6+LoMlVoyGvNvZSPW3KTjDncA==} hasBin: true @@ -9332,9 +7900,6 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -9369,46 +7934,18 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - type-fest@4.29.1: resolution: {integrity: sha512-Y1zUveI92UYM/vo1EFlQSsNf74+hfKH+7saZJslF0Fw92FRaiTAnHPIvo9d7SLxXt/gAYqA4RXyDTioMQCCp0A==} engines: {node: '>=16'} @@ -9429,9 +7966,6 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typedarray.prototype.slice@1.0.3: resolution: {integrity: sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==} engines: {node: '>= 0.4'} @@ -9493,11 +8027,11 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - unbuild@2.0.0: - resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==} + unbuild@3.2.0: + resolution: {integrity: sha512-9XO8Yh0r2a0Aid8beiPXJQ5vaT3KdnNPnV5WDnAZljOX1rfp0/O75oruwiZtU5qCqb7lYVsBg9iOgG2+0VGwVw==} hasBin: true peerDependencies: - typescript: ^5.1.6 + typescript: ^5.7.2 peerDependenciesMeta: typescript: optional: true @@ -9508,9 +8042,6 @@ packages: underscore@1.13.7: resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} @@ -9545,6 +8076,9 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unified@9.2.2: resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} @@ -9555,10 +8089,6 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - unist-util-is@4.1.0: resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} @@ -9591,8 +8121,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - untyped@1.5.1: - resolution: {integrity: sha512-reBOnkJBFfBZ8pCKaeHgfZLcehXtM6UTxc+vqs1JvCps0c4amLNp3fhdGBZwYp+VLyoY9n3X5KOP7lCyWBUX9A==} + untyped@1.5.2: + resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==} hasBin: true unzipper@0.12.3: @@ -9608,10 +8138,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-notifier@6.0.2: - resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} - engines: {node: '>=14.16'} - update-notifier@7.3.1: resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} engines: {node: '>=18'} @@ -9622,18 +8148,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse-lax@1.0.0: - resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} - engines: {node: '>=0.10.0'} - - url-parse-lax@3.0.0: - resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} - engines: {node: '>=4'} - - url-to-options@1.0.1: - resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} - engines: {node: '>= 4'} - url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} @@ -9647,22 +8161,11 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@6.0.0: resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} engines: {node: ^18.17.0 || >=20.5.0} @@ -9691,22 +8194,22 @@ packages: vite-plugin-full-reload@1.2.0: resolution: {integrity: sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==} - vite-plugin-pwa@0.21.0: - resolution: {integrity: sha512-gnDE5sN2hdxA4vTl0pe6PCTPXqChk175jH8dZVVTBjFhWarZZoXaAdoTIKCIa8Zbx94sC0CnCOyERBWpxvry+g==} + vite-plugin-pwa@0.21.1: + resolution: {integrity: sha512-rkTbKFbd232WdiRJ9R3u+hZmf5SfQljX1b45NF6oLA6DSktEKpYllgTo1l2lkiZWMWV78pABJtFjNXfBef3/3Q==} engines: {node: '>=16.0.0'} peerDependencies: '@vite-pwa/assets-generator': ^0.2.6 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 workbox-build: ^7.3.0 workbox-window: ^7.3.0 peerDependenciesMeta: '@vite-pwa/assets-generator': optional: true - vite-plugin-restart@0.4.1: - resolution: {integrity: sha512-MYhDFaa2HMoSavr/2pShj6toKVFso+zqF6FAdWGC8JSIrsNig+4giy9EzoSySgGRJvsnbwZXKdjAvn8ag8rUkA==} + vite-plugin-restart@0.4.2: + resolution: {integrity: sha512-9aWN2ScJ8hbT7aC8SDeZnsbWapnslz1vhNq6Vgf2GU9WdN4NExlrWhtnu7pmtOUG3Guj8y6lPcUZ+ls7SVP33w==} peerDependencies: - vite: ^2.9.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^2.9.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 vite@5.4.11: resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} @@ -9770,8 +8273,8 @@ packages: terser: optional: true - vitepress-plugin-group-icons@1.3.0: - resolution: {integrity: sha512-E6Up5HyWh0gxmy2v1v1VVzQpL9UOZuHgoqOmSNBMTRv2rSwg6nk8MeIiJD0tJ0xtWrY5dwG69ENZPyFoD+fVoA==} + vitepress-plugin-group-icons@1.3.2: + resolution: {integrity: sha512-l7SMf8YZR3dTgnGSDvWwKHgv1K4DCtTFCxjXlo7cnYWoNT3kPRygnmSVf21azrXymRHHk0R6Lxkzjm65uBBKOQ==} vitepress-plugin-rss@0.3.0: resolution: {integrity: sha512-pK8HepzkfB9RnA+KMFKIs1XxA4EMcDxXgiZ86mJitqb41LS/dWcleOXYmjCFP7sCUgitDFrBt74+rQgkceer4g==} @@ -9861,9 +8364,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - weak-lru-cache@1.2.2: - resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9906,10 +8406,6 @@ packages: wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - widest-line@5.0.0: resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} engines: {node: '>=18'} @@ -9974,10 +8470,6 @@ packages: workbox-window@7.3.0: resolution: {integrity: sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -9993,9 +8485,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10050,9 +8539,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -10076,8 +8562,8 @@ packages: engines: {node: '>= 14'} hasBin: true - yaml@2.6.1: - resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -10116,6 +8602,11 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} + zod-to-json-schema@3.24.1: + resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==} + peerDependencies: + zod: ^3.24.1 + zod-validation-error@3.4.0: resolution: {integrity: sha512-ZOPR9SVY6Pb2qqO5XHt+MkkTRxGXb4EVtnjc9JpXUOtUB1T9Ru7mZOT361AN3MsetVe7R0a1KZshJDZdgp9miQ==} engines: {node: '>=18.0.0'} @@ -10956,7 +9447,7 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/standalone@7.25.8': {} + '@babel/standalone@7.26.4': {} '@babel/template@7.25.7': dependencies: @@ -10993,27 +9484,16 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@cfworker/json-schema@3.0.1': {} - - '@changesets/apply-release-plan@7.0.5': + '@babel/types@7.26.3': dependencies: - '@changesets/config': 3.0.3 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.1 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.6.3 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@cfworker/json-schema@4.0.3': {} - '@changesets/apply-release-plan@7.0.6': + '@changesets/apply-release-plan@7.0.7': dependencies: - '@changesets/config': 3.0.4 + '@changesets/config': 3.0.5 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.2 '@changesets/should-skip-package': 0.1.1 @@ -11027,15 +9507,6 @@ snapshots: resolve-from: 5.0.0 semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.4': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.5': dependencies: '@changesets/errors': 0.2.0 @@ -11057,15 +9528,15 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.27.10': + '@changesets/cli@2.27.11': dependencies: - '@changesets/apply-release-plan': 7.0.6 + '@changesets/apply-release-plan': 7.0.7 '@changesets/assemble-release-plan': 6.0.5 '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.4 + '@changesets/config': 3.0.5 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.5 + '@changesets/get-release-plan': 4.0.6 '@changesets/git': 3.0.2 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.1 @@ -11088,48 +9559,7 @@ snapshots: spawndamnit: 3.0.1 term-size: 2.2.1 - '@changesets/cli@2.27.9': - dependencies: - '@changesets/apply-release-plan': 7.0.5 - '@changesets/assemble-release-plan': 6.0.4 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.3 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.4 - '@changesets/git': 3.0.1 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.1 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - ci-info: 3.9.0 - enquirer: 2.4.1 - external-editor: 3.1.0 - fs-extra: 7.0.1 - mri: 1.2.0 - p-limit: 2.3.0 - package-manager-detector: 0.2.2 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.6.3 - spawndamnit: 2.0.0 - term-size: 2.2.1 - - '@changesets/config@3.0.3': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 - - '@changesets/config@3.0.4': + '@changesets/config@3.0.5': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.2 @@ -11157,19 +9587,10 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.4': - dependencies: - '@changesets/assemble-release-plan': 6.0.4 - '@changesets/config': 3.0.3 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.1 - '@changesets/types': 6.0.0 - '@manypkg/get-packages': 1.1.3 - - '@changesets/get-release-plan@4.0.5': + '@changesets/get-release-plan@4.0.6': dependencies: '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.4 + '@changesets/config': 3.0.5 '@changesets/pre': 2.0.1 '@changesets/read': 0.6.2 '@changesets/types': 6.0.0 @@ -11177,14 +9598,6 @@ snapshots: '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.1': - dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 2.0.0 - '@changesets/git@3.0.2': dependencies: '@changesets/errors': 0.2.0 @@ -11209,16 +9622,6 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.1': - dependencies: - '@changesets/git': 3.0.1 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 - '@changesets/read@0.6.2': dependencies: '@changesets/git': 3.0.2 @@ -11245,14 +9648,14 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 - '@clack/core@0.3.4': + '@clack/core@0.3.5': dependencies: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@0.8.1': + '@clack/prompts@0.8.2': dependencies: - '@clack/core': 0.3.4 + '@clack/core': 0.3.5 picocolors: 1.1.1 sisteransi: 1.0.5 @@ -11278,7 +9681,7 @@ snapshots: '@commitlint/format@19.5.0': dependencies: '@commitlint/types': 19.5.0 - chalk: 5.3.0 + chalk: 5.4.1 '@commitlint/is-ignored@19.5.0': dependencies: @@ -11292,15 +9695,15 @@ snapshots: '@commitlint/rules': 19.5.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@22.10.1)(typescript@5.7.2)': + '@commitlint/load@19.5.0(@types/node@22.10.5)(typescript@5.7.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 - chalk: 5.3.0 + chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.7.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.10.5)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -11353,7 +9756,7 @@ snapshots: '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.0 - chalk: 5.3.0 + chalk: 5.4.1 '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': dependencies: @@ -11361,14 +9764,14 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} - '@csstools/media-query-list-parser@3.0.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + '@csstools/media-query-list-parser@4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/selector-specificity@4.0.0(postcss-selector-parser@6.1.2)': + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.0.0)': dependencies: - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.0.0 '@docsearch/css@3.8.0': {} @@ -11394,11 +9797,11 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@dovenv/convert@0.0.6(@dovenv/utils@0.0.6)(typescript@5.7.2)': + '@dovenv/convert@1.1.5(@dovenv/core@1.1.5)(typescript@5.7.2)': dependencies: - '@dovenv/utils': 0.0.6 - jsdoc-to-markdown: 9.0.5 - openapi-to-md: 1.0.24 + '@dovenv/core': 1.1.5 + jsdoc-to-markdown: 9.1.1 + swagger2openapi: 7.0.8 typedoc: 0.26.11(typescript@5.7.2) typedoc-plugin-markdown: 4.2.10(typedoc@0.26.11(typescript@5.7.2)) transitivePeerDependencies: @@ -11406,34 +9809,32 @@ snapshots: - encoding - typescript - '@dovenv/core@0.0.6': + '@dovenv/core@1.1.5': dependencies: - '@dovenv/utils': 0.0.6 + '@dovenv/utils': 1.1.5 update-notifier: 7.3.1 transitivePeerDependencies: - debug - encoding - supports-color - '@dovenv/docs@0.0.6(@algolia/client-search@5.15.0)(@dovenv/utils@0.0.6)(@fortawesome/fontawesome-svg-core@6.7.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0)': + '@dovenv/docs@1.1.5(@algolia/client-search@5.15.0)(@dovenv/core@1.1.5)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0)': dependencies: - '@dovenv/utils': 0.0.6 - '@fortawesome/vue-fontawesome': 3.0.8(@fortawesome/fontawesome-svg-core@6.7.0)(vue@3.5.13(typescript@5.7.2)) - '@shikijs/vitepress-twoslash': 1.23.1(typescript@5.7.2) + '@dovenv/core': 1.1.5 + '@shikijs/vitepress-twoslash': 1.26.1(typescript@5.7.2) markdown-it-container: 4.0.0 markdown-it-task-lists: 2.1.1 medium-zoom: 1.1.0 vite-plugin-full-reload: 1.2.0 - vite-plugin-pwa: 0.21.0(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) - vite-plugin-restart: 0.4.1(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0)) - vitepress: 1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2) - vitepress-plugin-group-icons: 1.3.0 - vitepress-plugin-rss: 0.3.0(vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)) + vite-plugin-pwa: 0.21.1(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) + vite-plugin-restart: 0.4.2(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0)) + vitepress: 1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2) + vitepress-plugin-group-icons: 1.3.2 + vitepress-plugin-rss: 0.3.0(vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)) vue: 3.5.13(typescript@5.7.2) vue-social-sharing: 3.0.9(vue@3.5.13(typescript@5.7.2)) transitivePeerDependencies: - '@algolia/client-search' - - '@fortawesome/fontawesome-svg-core' - '@nuxt/kit' - '@types/node' - '@types/react' @@ -11468,38 +9869,38 @@ snapshots: - workbox-build - workbox-window - '@dovenv/eslint-config@0.0.6(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))': + '@dovenv/eslint-config@1.1.5(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2))': dependencies: - '@eslint/compat': 1.2.3(eslint@9.14.0(jiti@2.3.3)) + '@eslint/compat': 1.2.3(eslint@9.14.0(jiti@2.4.2)) '@eslint/js': 9.15.0 '@eslint/markdown': 6.2.1 '@html-eslint/eslint-plugin': 0.27.0 '@html-eslint/parser': 0.27.0 - '@stylistic/eslint-plugin': 2.10.1(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.14.0(jiti@2.3.3) - eslint-plugin-align-assignments: 1.1.2(eslint@9.14.0(jiti@2.3.3)) + '@stylistic/eslint-plugin': 2.10.1(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.14.0(jiti@2.4.2) + eslint-plugin-align-assignments: 1.1.2(eslint@9.14.0(jiti@2.4.2)) eslint-plugin-align-import: 1.0.0 - eslint-plugin-canonical: 5.0.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - eslint-plugin-css: 0.11.0(eslint@9.14.0(jiti@2.3.3)) + eslint-plugin-canonical: 5.0.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) + eslint-plugin-css: 0.11.0(eslint@9.14.0(jiti@2.4.2)) eslint-plugin-html: 8.1.2 - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-jsdoc: 50.5.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-json-schema-validator: 5.1.3(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-jsonc: 2.18.1(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-markdown: 5.1.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-markdownlint: 0.6.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-package-json: 0.15.6(eslint@9.14.0(jiti@2.3.3))(jsonc-eslint-parser@2.4.0) - eslint-plugin-playwright: 2.0.1(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-promise: 7.1.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-svelte: 2.46.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-toml: 0.11.1(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-vue: 9.31.0(eslint@9.14.0(jiti@2.3.3)) - eslint-plugin-yml: 1.15.0(eslint@9.14.0(jiti@2.3.3)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-jsdoc: 50.5.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-json-schema-validator: 5.1.3(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.18.1(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-markdown: 5.1.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-markdownlint: 0.6.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-package-json: 0.15.6(eslint@9.14.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) + eslint-plugin-playwright: 2.0.1(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-promise: 7.1.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-svelte: 2.46.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-toml: 0.11.1(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-vue: 9.31.0(eslint@9.14.0(jiti@2.4.2)) + eslint-plugin-yml: 1.15.0(eslint@9.14.0(jiti@2.4.2)) globals: 15.12.0 jsonc-eslint-parser: 2.4.0 svelte-eslint-parser: 0.43.0 typescript: 5.6.3 - typescript-eslint: 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + typescript-eslint: 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) transitivePeerDependencies: - '@eslint/json' - '@typescript-eslint/parser' @@ -11511,26 +9912,28 @@ snapshots: - svelte - ts-node - '@dovenv/examples@0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6)': + '@dovenv/examples@1.1.5(@dovenv/core@1.1.5)': dependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 + jsdoc-api: 9.3.4 leasot: 14.4.0 + transitivePeerDependencies: + - '@75lb/nature' - '@dovenv/lint@0.0.6(@dovenv/utils@0.0.6)(@types/node@22.10.1)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(jiti@2.3.3)(typescript@5.7.2)': + '@dovenv/lint@1.1.5(@dovenv/core@1.1.5)(@types/node@22.10.5)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(jiti@2.4.2)(typescript@5.7.2)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@22.10.1)(typescript@5.7.2) + '@commitlint/load': 19.5.0(@types/node@22.10.5)(typescript@5.7.2) '@commitlint/read': 19.5.0 - '@dovenv/eslint-config': 0.0.6(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)) - '@dovenv/stylelint-config': 0.0.6(stylelint@16.10.0(typescript@5.7.2)) - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 + '@dovenv/eslint-config': 1.1.5(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)) + '@dovenv/stylelint-config': 1.1.5(stylelint@16.11.0(typescript@5.7.2)) commitlint-config-gitmoji: 2.3.1 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) lint-staged: 15.2.10 - stylelint: 16.10.0(typescript@5.7.2) - stylelint-formatter-pretty: 4.0.1(stylelint@16.10.0(typescript@5.7.2)) + stylelint: 16.11.0(typescript@5.7.2) + stylelint-formatter-pretty: 4.0.1(stylelint@16.11.0(typescript@5.7.2)) transitivePeerDependencies: - '@eslint/json' - '@types/node' @@ -11545,59 +9948,92 @@ snapshots: - ts-node - typescript - '@dovenv/media@0.0.6(@dovenv/utils@0.0.6)(enquirer@2.4.1)': - dependencies: - '@dovenv/utils': 0.0.6 - carbon-now-cli: 2.0.0(enquirer@2.4.1) - imagemin: 9.0.0 - imagemin-gifsicle: 7.0.0 - imagemin-jpegtran: 8.0.0 - imagemin-optipng: 8.0.0 - imagemin-pngquant: 10.0.0 - imagemin-svgo: 11.0.1 - imagemin-webp: 8.0.0 - terminalizer: 0.12.0 - transitivePeerDependencies: - - debug - - enquirer - - supports-color - - '@dovenv/repo@0.0.6(@dovenv/utils@0.0.6)': + '@dovenv/repo@1.1.5(@dovenv/core@1.1.5)': dependencies: - '@changesets/changelog-github': 0.5.0 - '@changesets/cli': 2.27.9 - '@dovenv/utils': 0.0.6 + '@changesets/cli': 2.27.11 + '@dovenv/core': 1.1.5 husky: 9.1.7 + + '@dovenv/stylelint-config@1.1.5(stylelint@16.11.0(typescript@5.7.2))': + dependencies: + postcss-html: 1.7.0 + stylelint: 16.11.0(typescript@5.7.2) + stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@16.11.0(typescript@5.7.2)) + stylelint-config-recess-order: 5.1.1(stylelint@16.11.0(typescript@5.7.2)) + stylelint-config-recommended: 14.0.1(stylelint@16.11.0(typescript@5.7.2)) + stylelint-config-standard: 36.0.1(stylelint@16.11.0(typescript@5.7.2)) + stylelint-order: 6.0.4(stylelint@16.11.0(typescript@5.7.2)) + + '@dovenv/templates@1.1.5(@dovenv/core@1.1.5)': + dependencies: + '@dovenv/core': 1.1.5 + + '@dovenv/theme-banda@1.1.5(@algolia/client-search@5.15.0)(@dovenv/core@1.1.5)(@types/node@22.10.5)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(axios@1.7.8)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0)': + dependencies: + '@dovenv/convert': 1.1.5(@dovenv/core@1.1.5)(typescript@5.7.2) + '@dovenv/core': 1.1.5 + '@dovenv/docs': 1.1.5(@algolia/client-search@5.15.0)(@dovenv/core@1.1.5)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) + '@dovenv/examples': 1.1.5(@dovenv/core@1.1.5) + '@dovenv/lint': 1.1.5(@dovenv/core@1.1.5)(@types/node@22.10.5)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(jiti@2.4.2)(typescript@5.7.2) + '@dovenv/repo': 1.1.5(@dovenv/core@1.1.5) + '@dovenv/templates': 1.1.5(@dovenv/core@1.1.5) + '@dovenv/todo': 1.1.5(@dovenv/core@1.1.5) + '@dovenv/workspace': 1.1.5(@dovenv/core@1.1.5) transitivePeerDependencies: + - '@75lb/nature' + - '@algolia/client-search' + - '@eslint/json' + - '@nuxt/kit' + - '@types/node' + - '@types/react' + - '@typescript-eslint/parser' + - '@vite-pwa/assets-generator' + - '@vue/composition-api' + - async-validator + - axios + - change-case + - drauu - encoding + - eslint-import-resolver-node + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - fuse.js + - idb-keyval + - jiti + - jwt-decode + - less + - lightningcss + - markdown-it-mathjax3 + - nprogress + - postcss + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - supports-color + - svelte + - terser + - ts-node + - typescript + - universal-cookie + - vite + - workbox-build + - workbox-window - '@dovenv/stylelint-config@0.0.6(stylelint@16.10.0(typescript@5.7.2))': + '@dovenv/theme-pigeonposse@1.1.5(@algolia/client-search@5.15.0)(@dovenv/core@1.1.5)(@types/node@22.10.5)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(axios@1.7.8)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0)': dependencies: - postcss-html: 1.7.0 - stylelint: 16.10.0(typescript@5.7.2) - stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@16.10.0(typescript@5.7.2)) - stylelint-config-recess-order: 5.1.1(stylelint@16.10.0(typescript@5.7.2)) - stylelint-config-recommended: 14.0.1(stylelint@16.10.0(typescript@5.7.2)) - stylelint-config-standard: 36.0.1(stylelint@16.10.0(typescript@5.7.2)) - stylelint-order: 6.0.4(stylelint@16.10.0(typescript@5.7.2)) - - '@dovenv/theme-banda@0.0.6(@algolia/client-search@5.15.0)(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6)(@fortawesome/fontawesome-svg-core@6.7.0)(@types/node@22.10.1)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(axios@1.7.8)(enquirer@2.4.1)(jiti@2.3.3)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0)': - dependencies: - '@dovenv/convert': 0.0.6(@dovenv/utils@0.0.6)(typescript@5.7.2) - '@dovenv/core': 0.0.6 - '@dovenv/docs': 0.0.6(@algolia/client-search@5.15.0)(@dovenv/utils@0.0.6)(@fortawesome/fontawesome-svg-core@6.7.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) - '@dovenv/examples': 0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6) - '@dovenv/lint': 0.0.6(@dovenv/utils@0.0.6)(@types/node@22.10.1)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(jiti@2.3.3)(typescript@5.7.2) - '@dovenv/media': 0.0.6(@dovenv/utils@0.0.6)(enquirer@2.4.1) - '@dovenv/repo': 0.0.6(@dovenv/utils@0.0.6) - '@dovenv/todo': 0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6) - '@dovenv/utils': 0.0.6 - '@dovenv/workspace': 0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6) + '@dovenv/core': 1.1.5 + '@dovenv/theme-banda': 1.1.5(@algolia/client-search@5.15.0)(@dovenv/core@1.1.5)(@types/node@22.10.5)(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(axios@1.7.8)(jiti@2.4.2)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0) transitivePeerDependencies: - '@75lb/nature' - '@algolia/client-search' - '@eslint/json' - - '@fortawesome/fontawesome-svg-core' - '@nuxt/kit' - '@types/node' - '@types/react' @@ -11607,10 +10043,8 @@ snapshots: - async-validator - axios - change-case - - debug - drauu - encoding - - enquirer - eslint-import-resolver-node - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -11643,34 +10077,35 @@ snapshots: - workbox-build - workbox-window - '@dovenv/todo@0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6)': + '@dovenv/todo@1.1.5(@dovenv/core@1.1.5)': dependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 - leasot: 12.5.0 + '@dovenv/core': 1.1.5 + leasot: 14.4.0 - '@dovenv/utils@0.0.6': + '@dovenv/utils@1.1.5': dependencies: - '@cfworker/json-schema': 3.0.1 - '@clack/core': 0.3.4 - '@clack/prompts': 0.8.1 - '@fortawesome/fontawesome-svg-core': 6.7.0 - '@fortawesome/free-brands-svg-icons': 6.7.0 - '@fortawesome/free-regular-svg-icons': 6.7.0 - '@fortawesome/free-solid-svg-icons': 6.7.0 + '@cfworker/json-schema': 4.0.3 + '@clack/core': 0.3.5 + '@clack/prompts': 0.8.2 + '@fortawesome/fontawesome-svg-core': 6.7.2 + '@fortawesome/free-brands-svg-icons': 6.7.2 + '@fortawesome/free-regular-svg-icons': 6.7.2 + '@fortawesome/free-solid-svg-icons': 6.7.2 '@resvg/resvg-js': 2.6.2 '@schemastore/package': 0.0.10 '@vibrant/color': 3.2.1-alpha.1 + ansi-align: 3.0.1 archiver: 7.0.1 + badge-maker: 4.1.0 boxen: 8.0.1 chalk: 5.3.0 chroma-js: 3.1.2 cli-highlight: 2.1.11 columnify: 1.6.0 - conf: 13.0.1 + conf: 13.1.0 consola: 3.2.3 - csv-parse: 5.5.6 - csv-stringify: 6.5.1 + csv-parse: 5.6.0 + csv-stringify: 6.5.2 decompress: 4.2.1 decompress-targz: 4.1.1 deepmerge-ts: 7.1.3 @@ -11685,66 +10120,57 @@ snapshots: ini: 5.0.0 jimp-compact: 0.16.1-2 js-yaml: 4.1.0 - json-schema-to-typescript: 15.0.3 + json-schema-to-typescript-lite: 14.1.0 + json-schema-to-zod: 2.6.0 log-update: 6.1.0 - marked: 15.0.1 - marked-terminal: 7.2.1(marked@15.0.1) + marked: 15.0.3 + marked-terminal: 7.2.1(marked@15.0.3) matcher: 5.0.0 node-localstorage: 3.0.5 node-vibrant: 3.2.1-alpha.1 + npm-run-path: 6.0.0 open: 10.1.0 ora: 8.1.1 pretty-ms: 9.2.0 qrcode-terminal: 0.12.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 smol-toml: 1.3.1 string-width: 7.2.0 svg2img: 1.0.0-beta.2 svgson: 5.3.1 - table: 6.8.2 + table: 6.9.0 terminal-char-width: 1.0.10 terminal-image: 3.0.0 terminal-link: 3.0.0 + terminal-size: 4.0.0 + ts-json-schema-generator: 2.3.0 turndown: 7.2.0 - ultimate-text-to-image: 1.0.1 + unified: 11.0.5 yargs: 17.7.2 zod: 3.23.8 + zod-to-json-schema: 3.24.1(zod@3.23.8) zod-validation-error: 3.4.0(zod@3.23.8) zodex: 0.18.2(zod@3.23.8) + optionalDependencies: + ultimate-text-to-image: 1.0.1 transitivePeerDependencies: - debug - encoding - supports-color - '@dovenv/workspace@0.0.6(@dovenv/core@0.0.6)(@dovenv/utils@0.0.6)': + '@dovenv/workspace@1.1.5(@dovenv/core@1.1.5)': dependencies: - '@dovenv/core': 0.0.6 - '@dovenv/utils': 0.0.6 + '@dovenv/core': 1.1.5 '@dual-bundle/import-meta-resolve@4.1.0': {} - '@electron/get@2.0.3': - dependencies: - debug: 4.3.7 - env-paths: 2.2.1 - fs-extra: 8.1.0 - got: 11.8.6 - progress: 2.0.3 - semver: 6.3.1 - sumchecker: 3.0.1 - optionalDependencies: - global-agent: 3.0.0 - transitivePeerDependencies: - - supports-color - '@es-joy/jsdoccomment@0.49.0': dependencies: comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.19.12': - optional: true - '@esbuild/aix-ppc64@0.21.5': optional: true @@ -11754,7 +10180,7 @@ snapshots: '@esbuild/aix-ppc64@0.24.0': optional: true - '@esbuild/android-arm64@0.19.12': + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.21.5': @@ -11766,7 +10192,7 @@ snapshots: '@esbuild/android-arm64@0.24.0': optional: true - '@esbuild/android-arm@0.19.12': + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.21.5': @@ -11778,7 +10204,7 @@ snapshots: '@esbuild/android-arm@0.24.0': optional: true - '@esbuild/android-x64@0.19.12': + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.21.5': @@ -11790,7 +10216,7 @@ snapshots: '@esbuild/android-x64@0.24.0': optional: true - '@esbuild/darwin-arm64@0.19.12': + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.21.5': @@ -11802,7 +10228,7 @@ snapshots: '@esbuild/darwin-arm64@0.24.0': optional: true - '@esbuild/darwin-x64@0.19.12': + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.21.5': @@ -11814,7 +10240,7 @@ snapshots: '@esbuild/darwin-x64@0.24.0': optional: true - '@esbuild/freebsd-arm64@0.19.12': + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.21.5': @@ -11826,7 +10252,7 @@ snapshots: '@esbuild/freebsd-arm64@0.24.0': optional: true - '@esbuild/freebsd-x64@0.19.12': + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.21.5': @@ -11838,7 +10264,7 @@ snapshots: '@esbuild/freebsd-x64@0.24.0': optional: true - '@esbuild/linux-arm64@0.19.12': + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.21.5': @@ -11850,7 +10276,7 @@ snapshots: '@esbuild/linux-arm64@0.24.0': optional: true - '@esbuild/linux-arm@0.19.12': + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.21.5': @@ -11862,7 +10288,7 @@ snapshots: '@esbuild/linux-arm@0.24.0': optional: true - '@esbuild/linux-ia32@0.19.12': + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.21.5': @@ -11874,7 +10300,7 @@ snapshots: '@esbuild/linux-ia32@0.24.0': optional: true - '@esbuild/linux-loong64@0.19.12': + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.21.5': @@ -11886,7 +10312,7 @@ snapshots: '@esbuild/linux-loong64@0.24.0': optional: true - '@esbuild/linux-mips64el@0.19.12': + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.21.5': @@ -11898,7 +10324,7 @@ snapshots: '@esbuild/linux-mips64el@0.24.0': optional: true - '@esbuild/linux-ppc64@0.19.12': + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.21.5': @@ -11910,7 +10336,7 @@ snapshots: '@esbuild/linux-ppc64@0.24.0': optional: true - '@esbuild/linux-riscv64@0.19.12': + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.21.5': @@ -11922,7 +10348,7 @@ snapshots: '@esbuild/linux-riscv64@0.24.0': optional: true - '@esbuild/linux-s390x@0.19.12': + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.21.5': @@ -11934,7 +10360,7 @@ snapshots: '@esbuild/linux-s390x@0.24.0': optional: true - '@esbuild/linux-x64@0.19.12': + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.21.5': @@ -11946,7 +10372,10 @@ snapshots: '@esbuild/linux-x64@0.24.0': optional: true - '@esbuild/netbsd-x64@0.19.12': + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': optional: true '@esbuild/netbsd-x64@0.21.5': @@ -11958,13 +10387,16 @@ snapshots: '@esbuild/netbsd-x64@0.24.0': optional: true + '@esbuild/netbsd-x64@0.24.2': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true '@esbuild/openbsd-arm64@0.24.0': optional: true - '@esbuild/openbsd-x64@0.19.12': + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-x64@0.21.5': @@ -11976,7 +10408,7 @@ snapshots: '@esbuild/openbsd-x64@0.24.0': optional: true - '@esbuild/sunos-x64@0.19.12': + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.21.5': @@ -11988,7 +10420,7 @@ snapshots: '@esbuild/sunos-x64@0.24.0': optional: true - '@esbuild/win32-arm64@0.19.12': + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.21.5': @@ -12000,7 +10432,7 @@ snapshots: '@esbuild/win32-arm64@0.24.0': optional: true - '@esbuild/win32-ia32@0.19.12': + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.21.5': @@ -12012,7 +10444,7 @@ snapshots: '@esbuild/win32-ia32@0.24.0': optional: true - '@esbuild/win32-x64@0.19.12': + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.21.5': @@ -12024,18 +10456,19 @@ snapshots: '@esbuild/win32-x64@0.24.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0(jiti@2.3.3))': + '@esbuild/win32-x64@0.24.2': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.14.0(jiti@2.4.2))': dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} - '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.3(eslint@9.14.0(jiti@2.3.3))': + '@eslint/compat@1.2.3(eslint@9.14.0(jiti@2.4.2))': optionalDependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) '@eslint/config-array@0.18.0': dependencies: @@ -12092,28 +10525,23 @@ snapshots: '@floating-ui/utils@0.2.8': {} - '@fortawesome/fontawesome-common-types@6.7.0': {} + '@fortawesome/fontawesome-common-types@6.7.2': {} - '@fortawesome/fontawesome-svg-core@6.7.0': + '@fortawesome/fontawesome-svg-core@6.7.2': dependencies: - '@fortawesome/fontawesome-common-types': 6.7.0 + '@fortawesome/fontawesome-common-types': 6.7.2 - '@fortawesome/free-brands-svg-icons@6.7.0': + '@fortawesome/free-brands-svg-icons@6.7.2': dependencies: - '@fortawesome/fontawesome-common-types': 6.7.0 + '@fortawesome/fontawesome-common-types': 6.7.2 - '@fortawesome/free-regular-svg-icons@6.7.0': + '@fortawesome/free-regular-svg-icons@6.7.2': dependencies: - '@fortawesome/fontawesome-common-types': 6.7.0 + '@fortawesome/fontawesome-common-types': 6.7.2 - '@fortawesome/free-solid-svg-icons@6.7.0': + '@fortawesome/free-solid-svg-icons@6.7.2': dependencies: - '@fortawesome/fontawesome-common-types': 6.7.0 - - '@fortawesome/vue-fontawesome@3.0.8(@fortawesome/fontawesome-svg-core@6.7.0)(vue@3.5.13(typescript@5.7.2))': - dependencies: - '@fortawesome/fontawesome-svg-core': 6.7.0 - vue: 3.5.13(typescript@5.7.2) + '@fortawesome/fontawesome-common-types': 6.7.2 '@gitmoji/commit-types@1.1.5': {} @@ -12126,11 +10554,6 @@ snapshots: dependencies: '@gitmoji/gitmoji-regex': 1.0.0 - '@homebridge/node-pty-prebuilt-multiarch@0.11.14': - dependencies: - nan: 2.22.0 - prebuild-install: 7.1.2 - '@html-eslint/eslint-plugin@0.27.0': {} '@html-eslint/parser@0.27.0': @@ -12172,7 +10595,7 @@ snapshots: debug: 4.3.7 kolorist: 1.8.0 local-pkg: 0.5.1 - mlly: 1.7.2 + mlly: 1.7.3 transitivePeerDependencies: - supports-color @@ -12931,30 +11354,6 @@ snapshots: dependencies: lodash: 4.17.21 - '@lezer/common@1.2.3': {} - - '@lezer/lr@1.4.2': - dependencies: - '@lezer/common': 1.2.3 - - '@lmdb/lmdb-darwin-arm64@2.8.5': - optional: true - - '@lmdb/lmdb-darwin-x64@2.8.5': - optional: true - - '@lmdb/lmdb-linux-arm64@2.8.5': - optional: true - - '@lmdb/lmdb-linux-arm@2.8.5': - optional: true - - '@lmdb/lmdb-linux-x64@2.8.5': - optional: true - - '@lmdb/lmdb-win32-x64@2.8.5': - optional: true - '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.25.7 @@ -12985,32 +11384,9 @@ snapshots: transitivePeerDependencies: - encoding - supports-color - - '@mischnic/json-sourcemap@0.1.1': - dependencies: - '@lezer/common': 1.2.3 - '@lezer/lr': 1.4.2 - json5: 2.2.3 - - '@mixmark-io/domino@2.2.0': {} - - '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': optional: true - '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': - optional: true - - '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': - optional: true + '@mixmark-io/domino@2.2.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -13026,320 +11402,11 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} - '@parcel/cache@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/core': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0) - '@parcel/logger': 2.12.0 - '@parcel/utils': 2.12.0 - lmdb: 2.8.5 - - '@parcel/codeframe@2.12.0': - dependencies: - chalk: 4.1.2 - - '@parcel/codeframe@2.13.2': - dependencies: - chalk: 4.1.2 - - '@parcel/core@2.12.0': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0) - '@parcel/diagnostic': 2.12.0 - '@parcel/events': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0) - '@parcel/graph': 3.2.0 - '@parcel/logger': 2.12.0 - '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0) - '@parcel/profiler': 2.12.0 - '@parcel/rust': 2.12.0 - '@parcel/source-map': 2.1.1 - '@parcel/types': 2.12.0(@parcel/core@2.12.0) - '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0) - abortcontroller-polyfill: 1.7.5 - base-x: 3.0.10 - browserslist: 4.24.0 - clone: 2.1.2 - dotenv: 7.0.0 - dotenv-expand: 5.1.0 - json5: 2.2.3 - msgpackr: 1.11.0 - nullthrows: 1.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - '@swc/helpers' - - '@parcel/diagnostic@2.12.0': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - nullthrows: 1.1.1 - - '@parcel/diagnostic@2.13.2': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - nullthrows: 1.1.1 - - '@parcel/events@2.12.0': {} - - '@parcel/events@2.13.2': {} - - '@parcel/feature-flags@2.13.2': {} - - '@parcel/fs@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/core': 2.12.0 - '@parcel/rust': 2.12.0 - '@parcel/types': 2.12.0(@parcel/core@2.12.0) - '@parcel/utils': 2.12.0 - '@parcel/watcher': 2.4.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0) - transitivePeerDependencies: - - '@swc/helpers' - - '@parcel/graph@3.2.0': - dependencies: - nullthrows: 1.1.1 - - '@parcel/logger@2.12.0': - dependencies: - '@parcel/diagnostic': 2.12.0 - '@parcel/events': 2.12.0 - - '@parcel/logger@2.13.2': - dependencies: - '@parcel/diagnostic': 2.13.2 - '@parcel/events': 2.13.2 - - '@parcel/markdown-ansi@2.12.0': - dependencies: - chalk: 4.1.2 - - '@parcel/markdown-ansi@2.13.2': - dependencies: - chalk: 4.1.2 - - '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0)': - dependencies: - '@mischnic/json-sourcemap': 0.1.1 - '@parcel/diagnostic': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0) - '@parcel/rust': 2.12.0 - '@parcel/utils': 2.12.0 - nullthrows: 1.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/package-manager@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/core': 2.12.0 - '@parcel/diagnostic': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0) - '@parcel/logger': 2.12.0 - '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0) - '@parcel/types': 2.12.0(@parcel/core@2.12.0) - '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0) - '@swc/core': 1.7.36 - semver: 7.6.3 - transitivePeerDependencies: - - '@swc/helpers' - - '@parcel/packager-ts@2.13.2(@parcel/core@2.12.0)': - dependencies: - '@parcel/plugin': 2.13.2(@parcel/core@2.12.0) - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/plugin@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/types': 2.12.0(@parcel/core@2.12.0) - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/plugin@2.13.2(@parcel/core@2.12.0)': - dependencies: - '@parcel/types': 2.13.2(@parcel/core@2.12.0) - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/profiler@2.12.0': - dependencies: - '@parcel/diagnostic': 2.12.0 - '@parcel/events': 2.12.0 - chrome-trace-event: 1.0.4 - - '@parcel/profiler@2.13.2': - dependencies: - '@parcel/diagnostic': 2.13.2 - '@parcel/events': 2.13.2 - '@parcel/types-internal': 2.13.2 - chrome-trace-event: 1.0.4 - - '@parcel/rust@2.12.0': {} - - '@parcel/rust@2.13.2': {} - - '@parcel/source-map@2.1.1': - dependencies: - detect-libc: 1.0.3 - - '@parcel/transformer-typescript-types@2.13.2(@parcel/core@2.12.0)(typescript@5.7.2)': - dependencies: - '@parcel/diagnostic': 2.13.2 - '@parcel/plugin': 2.13.2(@parcel/core@2.12.0) - '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.13.2(typescript@5.7.2) - '@parcel/utils': 2.13.2 - nullthrows: 1.1.1 - typescript: 5.7.2 - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/ts-utils@2.13.2(typescript@5.7.2)': - dependencies: - nullthrows: 1.1.1 - typescript: 5.7.2 - - '@parcel/types-internal@2.13.2': - dependencies: - '@parcel/diagnostic': 2.13.2 - '@parcel/feature-flags': 2.13.2 - '@parcel/source-map': 2.1.1 - utility-types: 3.11.0 - - '@parcel/types@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0) - '@parcel/diagnostic': 2.12.0 - '@parcel/fs': 2.12.0(@parcel/core@2.12.0) - '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0) - '@parcel/source-map': 2.1.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0) - utility-types: 3.11.0 - transitivePeerDependencies: - - '@parcel/core' - - '@swc/helpers' - - '@parcel/types@2.13.2(@parcel/core@2.12.0)': - dependencies: - '@parcel/types-internal': 2.13.2 - '@parcel/workers': 2.13.2(@parcel/core@2.12.0) - transitivePeerDependencies: - - '@parcel/core' - - '@parcel/utils@2.12.0': - dependencies: - '@parcel/codeframe': 2.12.0 - '@parcel/diagnostic': 2.12.0 - '@parcel/logger': 2.12.0 - '@parcel/markdown-ansi': 2.12.0 - '@parcel/rust': 2.12.0 - '@parcel/source-map': 2.1.1 - chalk: 4.1.2 - nullthrows: 1.1.1 - - '@parcel/utils@2.13.2': - dependencies: - '@parcel/codeframe': 2.13.2 - '@parcel/diagnostic': 2.13.2 - '@parcel/logger': 2.13.2 - '@parcel/markdown-ansi': 2.13.2 - '@parcel/rust': 2.13.2 - '@parcel/source-map': 2.1.1 - chalk: 4.1.2 - nullthrows: 1.1.1 - - '@parcel/watcher-android-arm64@2.4.1': - optional: true - - '@parcel/watcher-darwin-arm64@2.4.1': - optional: true - - '@parcel/watcher-darwin-x64@2.4.1': - optional: true - - '@parcel/watcher-freebsd-x64@2.4.1': - optional: true - - '@parcel/watcher-linux-arm-glibc@2.4.1': - optional: true - - '@parcel/watcher-linux-arm64-glibc@2.4.1': - optional: true - - '@parcel/watcher-linux-arm64-musl@2.4.1': - optional: true - - '@parcel/watcher-linux-x64-glibc@2.4.1': - optional: true - - '@parcel/watcher-linux-x64-musl@2.4.1': - optional: true - - '@parcel/watcher-win32-arm64@2.4.1': - optional: true - - '@parcel/watcher-win32-ia32@2.4.1': - optional: true - - '@parcel/watcher-win32-x64@2.4.1': - optional: true - - '@parcel/watcher@2.4.1': - dependencies: - detect-libc: 1.0.3 - is-glob: 4.0.3 - micromatch: 4.0.8 - node-addon-api: 7.1.1 - optionalDependencies: - '@parcel/watcher-android-arm64': 2.4.1 - '@parcel/watcher-darwin-arm64': 2.4.1 - '@parcel/watcher-darwin-x64': 2.4.1 - '@parcel/watcher-freebsd-x64': 2.4.1 - '@parcel/watcher-linux-arm-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-musl': 2.4.1 - '@parcel/watcher-linux-x64-glibc': 2.4.1 - '@parcel/watcher-linux-x64-musl': 2.4.1 - '@parcel/watcher-win32-arm64': 2.4.1 - '@parcel/watcher-win32-ia32': 2.4.1 - '@parcel/watcher-win32-x64': 2.4.1 - - '@parcel/workers@2.12.0(@parcel/core@2.12.0)': - dependencies: - '@parcel/core': 2.12.0 - '@parcel/diagnostic': 2.12.0 - '@parcel/logger': 2.12.0 - '@parcel/profiler': 2.12.0 - '@parcel/types': 2.12.0(@parcel/core@2.12.0) - '@parcel/utils': 2.12.0 - nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' - - '@parcel/workers@2.13.2(@parcel/core@2.12.0)': - dependencies: - '@parcel/core': 2.12.0 - '@parcel/diagnostic': 2.13.2 - '@parcel/logger': 2.13.2 - '@parcel/profiler': 2.13.2 - '@parcel/types-internal': 2.13.2 - '@parcel/utils': 2.13.2 - nullthrows: 1.1.1 - '@pkgjs/parseargs@0.11.0': optional: true '@pkgr/core@0.1.1': {} - '@playwright/test@1.49.0': - dependencies: - playwright: 1.49.0 - '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -13403,9 +11470,9 @@ snapshots: '@resvg/resvg-js-win32-ia32-msvc': 2.6.2 '@resvg/resvg-js-win32-x64-msvc': 2.6.2 - '@rollup/plugin-alias@5.1.1(rollup@3.29.5)': + '@rollup/plugin-alias@5.1.1(rollup@4.29.1)': optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 '@rollup/plugin-babel@5.3.1(@babel/core@7.26.0)(rollup@2.79.2)': dependencies: @@ -13416,26 +11483,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/plugin-commonjs@25.0.8(rollup@3.29.5)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.29.1)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) commondir: 1.0.1 estree-walker: 2.0.2 - glob: 8.1.0 + fdir: 6.4.2(picomatch@4.0.2) is-reference: 1.2.1 - magic-string: 0.30.12 + magic-string: 0.30.17 + picomatch: 4.0.2 optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 - '@rollup/plugin-json@6.1.0(rollup@3.29.5)': + '@rollup/plugin-json@6.1.0(rollup@4.29.1)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 '@rollup/plugin-node-resolve@15.3.0(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@2.79.2) + '@rollup/pluginutils': 5.1.4(rollup@2.79.2) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 @@ -13443,15 +11511,15 @@ snapshots: optionalDependencies: rollup: 2.79.2 - '@rollup/plugin-node-resolve@15.3.0(rollup@3.29.5)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.29.1)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': dependencies: @@ -13459,12 +11527,12 @@ snapshots: magic-string: 0.25.9 rollup: 2.79.2 - '@rollup/plugin-replace@5.0.7(rollup@3.29.5)': + '@rollup/plugin-replace@6.0.2(rollup@4.29.1)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - magic-string: 0.30.12 + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) + magic-string: 0.30.17 optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 '@rollup/plugin-terser@0.4.4(rollup@2.79.2)': dependencies: @@ -13481,147 +11549,260 @@ snapshots: picomatch: 2.3.1 rollup: 2.79.2 - '@rollup/pluginutils@5.1.2(rollup@2.79.2)': + '@rollup/pluginutils@5.1.4(rollup@2.79.2)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: rollup: 2.79.2 - '@rollup/pluginutils@5.1.2(rollup@3.29.5)': + '@rollup/pluginutils@5.1.4(rollup@4.29.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: - rollup: 3.29.5 + rollup: 4.29.1 '@rollup/rollup-android-arm-eabi@4.24.0': optional: true + '@rollup/rollup-android-arm-eabi@4.29.1': + optional: true + '@rollup/rollup-android-arm64@4.24.0': optional: true + '@rollup/rollup-android-arm64@4.29.1': + optional: true + '@rollup/rollup-darwin-arm64@4.24.0': optional: true + '@rollup/rollup-darwin-arm64@4.29.1': + optional: true + '@rollup/rollup-darwin-x64@4.24.0': optional: true + '@rollup/rollup-darwin-x64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.29.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.29.1': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.29.1': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.29.1': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.29.1': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.29.1': + optional: true + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true + '@rollup/rollup-linux-x64-musl@4.29.1': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.29.1': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.29.1': + optional: true + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.29.1': + optional: true + '@rtsao/scc@1.1.0': {} '@schemastore/package@0.0.10': {} - '@sec-ant/readable-stream@0.4.1': {} - - '@shikijs/core@1.23.1': - dependencies: - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 - '@shikijs/core@1.24.0': dependencies: '@shikijs/engine-javascript': 1.24.0 '@shikijs/engine-oniguruma': 1.24.0 '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 - '@shikijs/engine-javascript@1.23.1': + '@shikijs/core@1.24.1': dependencies: - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-es: 0.4.1 + '@shikijs/engine-javascript': 1.24.1 + '@shikijs/engine-oniguruma': 1.24.1 + '@shikijs/types': 1.24.1 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.4 + + '@shikijs/core@1.24.4': + dependencies: + '@shikijs/engine-javascript': 1.24.4 + '@shikijs/engine-oniguruma': 1.24.4 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.4 + + '@shikijs/core@1.26.1': + dependencies: + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.4 '@shikijs/engine-javascript@1.24.0': dependencies: '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 + oniguruma-to-es: 0.7.0 + + '@shikijs/engine-javascript@1.24.1': + dependencies: + '@shikijs/types': 1.24.1 + '@shikijs/vscode-textmate': 9.3.1 oniguruma-to-es: 0.7.0 - '@shikijs/engine-oniguruma@1.23.1': + '@shikijs/engine-javascript@1.24.4': dependencies: - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 + oniguruma-to-es: 0.8.1 + + '@shikijs/engine-javascript@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 0.10.0 '@shikijs/engine-oniguruma@1.24.0': dependencies: '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 + + '@shikijs/engine-oniguruma@1.24.1': + dependencies: + '@shikijs/types': 1.24.1 + '@shikijs/vscode-textmate': 9.3.1 + + '@shikijs/engine-oniguruma@1.24.4': + dependencies: + '@shikijs/types': 1.24.4 + '@shikijs/vscode-textmate': 9.3.1 + + '@shikijs/engine-oniguruma@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 + + '@shikijs/langs@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 + + '@shikijs/themes@1.26.1': + dependencies: + '@shikijs/types': 1.26.1 '@shikijs/transformers@1.24.0': dependencies: shiki: 1.24.0 - '@shikijs/twoslash@1.24.0(typescript@5.7.2)': + '@shikijs/twoslash@1.26.1(typescript@5.7.2)': dependencies: - '@shikijs/core': 1.24.0 - '@shikijs/types': 1.24.0 + '@shikijs/core': 1.26.1 + '@shikijs/types': 1.26.1 twoslash: 0.2.12(typescript@5.7.2) transitivePeerDependencies: - supports-color - typescript - '@shikijs/types@1.23.1': + '@shikijs/types@1.24.0': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - '@shikijs/types@1.24.0': + '@shikijs/types@1.24.1': + dependencies: + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + + '@shikijs/types@1.24.4': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 '@types/hast': 3.0.4 - '@shikijs/vitepress-twoslash@1.23.1(typescript@5.7.2)': + '@shikijs/types@1.26.1': dependencies: - '@shikijs/twoslash': 1.24.0(typescript@5.7.2) + '@shikijs/vscode-textmate': 10.0.1 + '@types/hast': 3.0.4 + + '@shikijs/vitepress-twoslash@1.26.1(typescript@5.7.2)': + dependencies: + '@shikijs/twoslash': 1.26.1(typescript@5.7.2) floating-vue: 5.2.2(vue@3.5.13(typescript@5.7.2)) mdast-util-from-markdown: 2.0.2 mdast-util-gfm: 3.0.0 mdast-util-to-hast: 13.2.0 - shiki: 1.23.1 + shiki: 1.26.1 twoslash: 0.2.12(typescript@5.7.2) twoslash-vue: 0.2.12(typescript@5.7.2) vue: 3.5.13(typescript@5.7.2) @@ -13630,24 +11811,18 @@ snapshots: - supports-color - typescript - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@10.0.1': {} - '@sindresorhus/is@0.7.0': {} + '@shikijs/vscode-textmate@9.3.1': {} '@sindresorhus/is@4.6.0': {} - '@sindresorhus/is@5.6.0': {} - - '@sindresorhus/is@6.3.1': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sindresorhus/merge-streams@4.0.0': {} - - '@stylistic/eslint-plugin@2.10.1(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@stylistic/eslint-plugin@2.10.1(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/utils': 8.16.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - eslint: 9.14.0(jiti@2.3.3) + '@typescript-eslint/utils': 8.16.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.14.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 estraverse: 5.3.0 @@ -13658,7 +11833,7 @@ snapshots: '@sugarat/theme-shared@0.0.3': dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 gray-matter: 4.0.3 '@surma/rollup-plugin-off-main-thread@2.2.3': @@ -13668,66 +11843,6 @@ snapshots: magic-string: 0.25.9 string.prototype.matchall: 4.0.11 - '@swc/core-darwin-arm64@1.7.36': - optional: true - - '@swc/core-darwin-x64@1.7.36': - optional: true - - '@swc/core-linux-arm-gnueabihf@1.7.36': - optional: true - - '@swc/core-linux-arm64-gnu@1.7.36': - optional: true - - '@swc/core-linux-arm64-musl@1.7.36': - optional: true - - '@swc/core-linux-x64-gnu@1.7.36': - optional: true - - '@swc/core-linux-x64-musl@1.7.36': - optional: true - - '@swc/core-win32-arm64-msvc@1.7.36': - optional: true - - '@swc/core-win32-ia32-msvc@1.7.36': - optional: true - - '@swc/core-win32-x64-msvc@1.7.36': - optional: true - - '@swc/core@1.7.36': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.13 - optionalDependencies: - '@swc/core-darwin-arm64': 1.7.36 - '@swc/core-darwin-x64': 1.7.36 - '@swc/core-linux-arm-gnueabihf': 1.7.36 - '@swc/core-linux-arm64-gnu': 1.7.36 - '@swc/core-linux-arm64-musl': 1.7.36 - '@swc/core-linux-x64-gnu': 1.7.36 - '@swc/core-linux-x64-musl': 1.7.36 - '@swc/core-win32-arm64-msvc': 1.7.36 - '@swc/core-win32-ia32-msvc': 1.7.36 - '@swc/core-win32-x64-msvc': 1.7.36 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.13': - dependencies: - '@swc/counter': 0.1.3 - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - '@textlint/ast-node-types@12.6.1': {} '@textlint/markdown-to-ast@12.6.1': @@ -13754,16 +11869,9 @@ snapshots: '@types/babel__preset-env@7.9.7': {} - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 22.10.1 - '@types/responselike': 1.0.3 - '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 '@types/debug@4.1.12': dependencies: @@ -13776,26 +11884,18 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.10.1 + '@types/node': 22.10.5 '@types/hast@3.0.4': dependencies: - '@types/unist': 2.0.11 - - '@types/http-cache-semantics@4.0.4': {} + '@types/unist': 3.0.3 '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} - '@types/keyv@3.1.4': - dependencies: - '@types/node': 22.10.1 - '@types/linkify-it@5.0.0': {} - '@types/lodash@4.17.13': {} - '@types/markdown-it@14.1.2': dependencies: '@types/linkify-it': 5.0.0 @@ -13813,8 +11913,6 @@ snapshots: '@types/minimatch@5.1.2': {} - '@types/minimist@1.2.5': {} - '@types/ms@0.7.34': {} '@types/node@10.17.60': {} @@ -13823,26 +11921,16 @@ snapshots: '@types/node@16.9.1': {} - '@types/node@18.19.67': - dependencies: - undici-types: 5.26.5 - - '@types/node@22.10.1': + '@types/node@22.10.5': dependencies: undici-types: 6.20.0 - '@types/normalize-package-data@2.4.4': {} - '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 '@types/resolve@1.20.2': {} - '@types/responselike@1.0.3': - dependencies: - '@types/node': 22.10.1 - '@types/tinycolor2@1.4.6': {} '@types/trusted-types@2.0.7': {} @@ -13853,20 +11941,15 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@types/yauzl@2.10.3': + '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@types/node': 22.10.1 - optional: true - - '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2) '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.14.0 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -13876,24 +11959,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2)': + '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 8.14.0 '@typescript-eslint/types': 8.14.0 '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) '@typescript-eslint/visitor-keys': 8.14.0 debug: 4.3.7 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.11.0': - dependencies: - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/visitor-keys': 8.11.0 - '@typescript-eslint/scope-manager@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 @@ -13904,10 +11982,10 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: @@ -13916,27 +11994,10 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.11.0': {} - '@typescript-eslint/types@8.14.0': {} '@typescript-eslint/types@8.16.0': {} - '@typescript-eslint/typescript-estree@8.11.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/visitor-keys': 8.11.0 - debug: 4.3.7 - fast-glob: 3.3.2 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.6.3)': dependencies: '@typescript-eslint/types': 8.14.0 @@ -13967,45 +12028,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.11.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) - '@typescript-eslint/scope-manager': 8.11.0 - '@typescript-eslint/types': 8.11.0 - '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) - eslint: 9.14.0(jiti@2.3.3) - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.14.0 '@typescript-eslint/types': 8.14.0 '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.6.3) - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.16.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3)': + '@typescript-eslint/utils@8.16.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.16.0 '@typescript-eslint/types': 8.16.0 '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3) - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.11.0': - dependencies: - '@typescript-eslint/types': 8.11.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.14.0': dependencies: '@typescript-eslint/types': 8.14.0 @@ -14084,9 +12129,9 @@ snapshots: dependencies: '@vibrant/types': 3.2.1-alpha.1 - '@vitejs/plugin-vue@5.2.1(vite@5.4.11(@types/node@22.10.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue@5.2.1(vite@5.4.11(@types/node@22.10.5)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - vite: 5.4.11(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.11(@types/node@22.10.5)(terser@5.36.0) vue: 3.5.13(typescript@5.7.2) '@vitest/expect@2.1.8': @@ -14096,13 +12141,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.8(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))': + '@vitest/mocker@2.1.8(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))': dependencies: '@vitest/spy': 2.1.8 estree-walker: 3.0.3 magic-string: 0.30.12 optionalDependencies: - vite: 5.4.9(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.9(@types/node@22.10.5)(terser@5.36.0) '@vitest/pretty-format@2.1.8': dependencies: @@ -14156,7 +12201,7 @@ snapshots: '@vue/compiler-ssr': 3.5.13 '@vue/shared': 3.5.13 estree-walker: 2.0.2 - magic-string: 0.30.12 + magic-string: 0.30.17 postcss: 8.4.49 source-map-js: 1.2.1 @@ -14258,7 +12303,7 @@ snapshots: '@xmldom/xmldom@0.8.10': {} - '@yao-pkg/pkg-fetch@3.5.17': + '@yao-pkg/pkg-fetch@3.5.18': dependencies: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 @@ -14271,22 +12316,22 @@ snapshots: - encoding - supports-color - '@yao-pkg/pkg@6.1.1': + '@yao-pkg/pkg@6.2.0': dependencies: '@babel/generator': 7.26.0 '@babel/parser': 7.26.0 '@babel/types': 7.26.0 - '@yao-pkg/pkg-fetch': 3.5.17 + '@yao-pkg/pkg-fetch': 3.5.18 into-stream: 6.0.0 minimist: 1.2.8 multistream: 4.1.0 picocolors: 1.1.1 picomatch: 4.0.2 - prebuild-install: 7.1.1 + prebuild-install: 7.1.2 resolve: 1.22.8 stream-meter: 1.0.4 tar: 7.4.3 - tinyglobby: 0.2.9 + tinyglobby: 0.2.10 unzipper: 0.12.3 transitivePeerDependencies: - encoding @@ -14297,24 +12342,17 @@ snapshots: jsonparse: 1.3.1 through: 2.3.8 - abbrev@1.1.1: {} + abbrev@1.1.1: + optional: true abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - abortcontroller-polyfill@1.7.5: {} - - acorn-jsx@5.3.2(acorn@8.13.0): - dependencies: - acorn: 8.13.0 - acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 - acorn@8.13.0: {} - acorn@8.14.0: {} agent-base@6.0.2: @@ -14323,11 +12361,6 @@ snapshots: transitivePeerDependencies: - supports-color - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -14364,6 +12397,10 @@ snapshots: alien-signals@0.2.2: {} + anafanafo@2.0.0: + dependencies: + char-width-table-consumer: 1.0.0 + anchor-markdown-header@0.6.0: dependencies: emoji-regex: 10.1.0 @@ -14374,12 +12411,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@3.2.0: {} - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@5.0.0: dependencies: type-fest: 1.4.0 @@ -14388,10 +12419,6 @@ snapshots: dependencies: environment: 1.1.0 - ansi-regex@3.0.1: {} - - ansi-regex@4.1.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -14415,21 +12442,12 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - app-path@3.3.0: - dependencies: - execa: 1.0.0 - app-path@4.0.0: dependencies: execa: 5.1.1 - aproba@2.0.0: {} - - arch@2.2.0: {} - - archive-type@4.0.0: - dependencies: - file-type: 4.4.0 + aproba@2.0.0: + optional: true archiver-utils@5.0.2: dependencies: @@ -14457,6 +12475,7 @@ snapshots: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 + optional: true argparse@1.0.10: dependencies: @@ -14520,8 +12539,6 @@ snapshots: is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - arrify@1.0.1: {} - asn1@0.2.6: dependencies: safer-buffer: 2.1.2 @@ -14536,12 +12553,6 @@ snapshots: astral-regex@2.0.0: {} - async-promises@0.2.3: {} - - async@2.6.4: - dependencies: - lodash: 4.17.21 - async@3.2.6: {} asynckit@0.4.0: {} @@ -14555,14 +12566,14 @@ snapshots: stubborn-fs: 1.2.5 when-exit: 2.1.3 - autoprefixer@10.4.20(postcss@8.4.47): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.0 caniuse-lite: 1.0.30001669 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -14580,6 +12591,7 @@ snapshots: proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + optional: true b4a@1.6.7: {} @@ -14613,8 +12625,15 @@ snapshots: '@babel/template': 7.25.7 tslib: 2.8.1 + badge-maker@4.1.0: + dependencies: + anafanafo: 2.0.0 + css-color-converter: 2.0.0 + bail@1.0.5: {} + bail@2.0.2: {} + balanced-match@1.0.2: {} balanced-match@2.0.0: {} @@ -14622,11 +12641,8 @@ snapshots: bare-events@2.5.0: optional: true - base-x@3.0.10: - dependencies: - safe-buffer: 5.2.1 - - base64-js@1.3.1: {} + base64-js@1.3.1: + optional: true base64-js@1.5.1: {} @@ -14638,41 +12654,10 @@ snapshots: dependencies: is-windows: 1.0.2 - bin-build@3.0.0: - dependencies: - decompress: 4.2.1 - download: 6.2.5 - execa: 0.7.0 - p-map-series: 1.0.0 - tempfile: 2.0.0 - - bin-check@4.1.0: - dependencies: - execa: 0.7.0 - executable: 4.1.1 - - bin-version-check@4.0.0: - dependencies: - bin-version: 3.1.0 - semver: 5.7.2 - semver-truncate: 1.1.2 - - bin-version@3.1.0: - dependencies: - execa: 1.0.0 - find-versions: 3.2.0 - - bin-wrapper@4.1.0: - dependencies: - bin-check: 4.1.0 - bin-version-check: 4.0.0 - download: 7.1.0 - import-lazy: 3.1.0 - os-filter-obj: 2.0.0 - pify: 4.0.1 - binary-extensions@2.3.0: {} + binary-search@1.3.6: {} + birpc@0.2.19: {} bl@1.2.3: @@ -14694,22 +12679,11 @@ snapshots: boolean@3.2.0: {} - boxen@7.1.1: - dependencies: - ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.3.0 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - boxen@8.0.1: dependencies: ansi-align: 3.0.1 camelcase: 8.0.0 - chalk: 5.3.0 + chalk: 5.4.1 cli-boxes: 3.0.0 string-width: 7.2.0 type-fest: 4.29.1 @@ -14775,40 +12749,6 @@ snapshots: dependencies: array-back: 6.2.2 - cacheable-lookup@5.0.4: {} - - cacheable-lookup@7.0.0: {} - - cacheable-request@10.2.14: - dependencies: - '@types/http-cache-semantics': 4.0.4 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.1 - responselike: 3.0.0 - - cacheable-request@2.1.4: - dependencies: - clone-response: 1.0.2 - get-stream: 3.0.0 - http-cache-semantics: 3.8.1 - keyv: 3.0.0 - lowercase-keys: 1.0.0 - normalize-url: 2.0.1 - responselike: 1.0.2 - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -14821,18 +12761,6 @@ snapshots: callsites@3.1.0: {} - callsites@4.2.0: {} - - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - - camelcase@7.0.1: {} - camelcase@8.0.0: {} caniuse-api@3.0.0: @@ -14852,31 +12780,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color - - carbon-now-cli@2.0.0(enquirer@2.4.1): - dependencies: - '@playwright/test': 1.49.0 - chalk: 4.1.2 - clipboard-sys: 1.2.1 - clipboardy: 2.3.0 - file-exists: 5.0.1 - file-extension: 4.0.5 - get-stdin: 8.0.0 - inquirer: 6.5.2 - jsonfile: 6.1.0 - listr2: 6.6.1(enquirer@2.4.1) - lodash: 4.17.21 - meow: 9.0.0 - nanoid: 3.3.7 - open: 8.4.2 - playwright: 1.49.0 - query-string: 7.1.3 - tempy: 1.0.1 - terminal-image: 1.2.1 - update-notifier: 6.0.2 - transitivePeerDependencies: - - debug - - enquirer + optional: true caseless@0.12.0: {} @@ -14884,13 +12788,6 @@ snapshots: dependencies: lodash: 4.17.21 - caw@2.0.1: - dependencies: - get-proxy: 2.1.0 - isurl: 1.0.0 - tunnel-agent: 0.6.0 - url-to-options: 1.0.1 - ccount@1.1.0: {} ccount@2.0.1: {} @@ -14926,12 +12823,16 @@ snapshots: chalk@5.3.0: {} - chance@1.1.12: {} + chalk@5.4.1: {} - change-file-extension@0.1.1: {} + chance@1.1.12: {} char-regex@1.0.2: {} + char-width-table-consumer@1.0.0: + dependencies: + binary-search: 1.3.6 + character-entities-html4@2.1.0: {} character-entities-legacy@1.1.4: {} @@ -14962,36 +12863,21 @@ snapshots: chownr@1.1.4: {} - chownr@2.0.0: {} + chownr@2.0.0: + optional: true chownr@3.0.0: {} chroma-js@3.1.2: {} - chrome-trace-event@1.0.4: {} - ci-info@3.9.0: {} citty@0.1.6: dependencies: - consola: 3.2.3 - - clean-stack@2.2.0: {} + consola: 3.3.3 cli-boxes@3.0.0: {} - cli-cursor@2.1.0: - dependencies: - restore-cursor: 2.0.0 - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -15013,29 +12899,11 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 - cli-truncate@3.1.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 5.1.2 - cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.2.0 - cli-width@2.2.1: {} - - clipboard-sys@1.2.1: - dependencies: - execa: 5.1.1 - fs-extra: 10.1.0 - - clipboardy@2.3.0: - dependencies: - arch: 2.2.0 - execa: 1.0.0 - is-wsl: 2.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -15048,17 +12916,9 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.2: - dependencies: - mimic-response: 1.0.1 - - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - clone@1.0.4: {} - clone@2.1.2: {} + color-convert@0.5.3: {} color-convert@1.9.3: dependencies: @@ -15072,7 +12932,8 @@ snapshots: color-name@1.1.4: {} - color-support@1.1.3: {} + color-support@1.1.3: + optional: true colord@2.9.3: {} @@ -15103,8 +12964,6 @@ snapshots: table-layout: 4.1.1 typical: 7.3.0 - commander@10.0.1: {} - commander@12.1.0: {} commander@2.20.3: {} @@ -15149,7 +13008,7 @@ snapshots: concat-map@0.0.1: {} - conf@13.0.1: + conf@13.1.0: dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -15172,14 +13031,6 @@ snapshots: dependencies: walk-back: 2.0.1 - configstore@6.0.0: - dependencies: - dot-prop: 6.0.1 - graceful-fs: 4.2.11 - unique-string: 3.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 5.1.0 - configstore@7.0.0: dependencies: atomically: 2.0.3 @@ -15189,11 +13040,10 @@ snapshots: consola@3.2.3: {} - console-control-strings@1.1.0: {} + consola@3.3.3: {} - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 + console-control-strings@1.1.0: + optional: true contentstream@1.0.0: dependencies: @@ -15210,8 +13060,6 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - convert-hrtime@5.0.0: {} - convert-source-map@2.0.0: {} copy-anything@3.0.5: @@ -15228,11 +13076,11 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.10.1)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.10.5)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): dependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 cosmiconfig: 9.0.0(typescript@5.7.2) - jiti: 1.21.6 + jiti: 1.21.7 typescript: 5.7.2 cosmiconfig@9.0.0(typescript@5.7.2): @@ -15251,20 +13099,6 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 - cross-spawn@5.1.0: - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.3: dependencies: path-key: 3.1.1 @@ -15279,13 +13113,15 @@ snapshots: crypto-random-string@2.0.0: {} - crypto-random-string@4.0.0: + css-color-converter@2.0.0: dependencies: - type-fest: 1.4.0 + color-convert: 0.5.3 + color-name: 1.1.4 + css-unit-converter: 1.1.2 - css-declaration-sorter@7.2.0(postcss@8.4.47): + css-declaration-sorter@7.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 css-functions-list@3.2.3: {} @@ -15312,53 +13148,55 @@ snapshots: mdn-data: 2.12.1 source-map-js: 1.2.1 + css-unit-converter@1.1.2: {} + css-what@6.1.0: {} cssesc@3.0.0: {} - cssnano-preset-default@7.0.6(postcss@8.4.47): + cssnano-preset-default@7.0.6(postcss@8.4.49): dependencies: browserslist: 4.24.0 - css-declaration-sorter: 7.2.0(postcss@8.4.47) - cssnano-utils: 5.0.0(postcss@8.4.47) - postcss: 8.4.47 - postcss-calc: 10.0.2(postcss@8.4.47) - postcss-colormin: 7.0.2(postcss@8.4.47) - postcss-convert-values: 7.0.4(postcss@8.4.47) - postcss-discard-comments: 7.0.3(postcss@8.4.47) - postcss-discard-duplicates: 7.0.1(postcss@8.4.47) - postcss-discard-empty: 7.0.0(postcss@8.4.47) - postcss-discard-overridden: 7.0.0(postcss@8.4.47) - postcss-merge-longhand: 7.0.4(postcss@8.4.47) - postcss-merge-rules: 7.0.4(postcss@8.4.47) - postcss-minify-font-values: 7.0.0(postcss@8.4.47) - postcss-minify-gradients: 7.0.0(postcss@8.4.47) - postcss-minify-params: 7.0.2(postcss@8.4.47) - postcss-minify-selectors: 7.0.4(postcss@8.4.47) - postcss-normalize-charset: 7.0.0(postcss@8.4.47) - postcss-normalize-display-values: 7.0.0(postcss@8.4.47) - postcss-normalize-positions: 7.0.0(postcss@8.4.47) - postcss-normalize-repeat-style: 7.0.0(postcss@8.4.47) - postcss-normalize-string: 7.0.0(postcss@8.4.47) - postcss-normalize-timing-functions: 7.0.0(postcss@8.4.47) - postcss-normalize-unicode: 7.0.2(postcss@8.4.47) - postcss-normalize-url: 7.0.0(postcss@8.4.47) - postcss-normalize-whitespace: 7.0.0(postcss@8.4.47) - postcss-ordered-values: 7.0.1(postcss@8.4.47) - postcss-reduce-initial: 7.0.2(postcss@8.4.47) - postcss-reduce-transforms: 7.0.0(postcss@8.4.47) - postcss-svgo: 7.0.1(postcss@8.4.47) - postcss-unique-selectors: 7.0.3(postcss@8.4.47) - - cssnano-utils@5.0.0(postcss@8.4.47): + css-declaration-sorter: 7.2.0(postcss@8.4.49) + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 10.0.2(postcss@8.4.49) + postcss-colormin: 7.0.2(postcss@8.4.49) + postcss-convert-values: 7.0.4(postcss@8.4.49) + postcss-discard-comments: 7.0.3(postcss@8.4.49) + postcss-discard-duplicates: 7.0.1(postcss@8.4.49) + postcss-discard-empty: 7.0.0(postcss@8.4.49) + postcss-discard-overridden: 7.0.0(postcss@8.4.49) + postcss-merge-longhand: 7.0.4(postcss@8.4.49) + postcss-merge-rules: 7.0.4(postcss@8.4.49) + postcss-minify-font-values: 7.0.0(postcss@8.4.49) + postcss-minify-gradients: 7.0.0(postcss@8.4.49) + postcss-minify-params: 7.0.2(postcss@8.4.49) + postcss-minify-selectors: 7.0.4(postcss@8.4.49) + postcss-normalize-charset: 7.0.0(postcss@8.4.49) + postcss-normalize-display-values: 7.0.0(postcss@8.4.49) + postcss-normalize-positions: 7.0.0(postcss@8.4.49) + postcss-normalize-repeat-style: 7.0.0(postcss@8.4.49) + postcss-normalize-string: 7.0.0(postcss@8.4.49) + postcss-normalize-timing-functions: 7.0.0(postcss@8.4.49) + postcss-normalize-unicode: 7.0.2(postcss@8.4.49) + postcss-normalize-url: 7.0.0(postcss@8.4.49) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.49) + postcss-ordered-values: 7.0.1(postcss@8.4.49) + postcss-reduce-initial: 7.0.2(postcss@8.4.49) + postcss-reduce-transforms: 7.0.0(postcss@8.4.49) + postcss-svgo: 7.0.1(postcss@8.4.49) + postcss-unique-selectors: 7.0.3(postcss@8.4.49) + + cssnano-utils@5.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - cssnano@7.0.6(postcss@8.4.47): + cssnano@7.0.6(postcss@8.4.49): dependencies: - cssnano-preset-default: 7.0.6(postcss@8.4.47) + cssnano-preset-default: 7.0.6(postcss@8.4.49) lilconfig: 3.1.2 - postcss: 8.4.47 + postcss: 8.4.49 csso@5.0.5: dependencies: @@ -15366,17 +13204,12 @@ snapshots: csstype@3.1.3: {} - csv-parse@5.5.6: {} + csv-parse@5.6.0: {} - csv-stringify@6.5.1: {} + csv-stringify@6.5.2: {} current-module-paths@1.1.2: {} - cwebp-bin@8.0.0: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - cwise-compiler@1.1.3: dependencies: uniq: 1.0.1 @@ -15413,8 +13246,6 @@ snapshots: de-indent@1.0.2: {} - death@1.1.0: {} - debounce-fn@6.0.0: dependencies: mimic-function: 5.0.1 @@ -15427,13 +13258,6 @@ snapshots: dependencies: ms: 2.1.3 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - decode-gif@1.0.1: dependencies: array-range: 1.0.1 @@ -15443,15 +13267,10 @@ snapshots: dependencies: character-entities: 2.0.2 - decode-uri-component@0.2.2: {} - - decompress-response@3.3.0: - dependencies: - mimic-response: 1.0.1 - decompress-response@4.2.1: dependencies: mimic-response: 2.1.0 + optional: true decompress-response@6.0.0: dependencies: @@ -15508,8 +13327,6 @@ snapshots: deepmerge-ts@7.1.3: {} - deepmerge@2.2.1: {} - deepmerge@4.3.1: {} default-browser-id@5.0.0: {} @@ -15523,16 +13340,12 @@ snapshots: dependencies: clone: 1.0.4 - defer-to-connect@2.0.1: {} - define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - define-lazy-prop@2.0.0: {} - define-lazy-prop@3.0.0: {} define-properties@1.2.1: @@ -15543,36 +13356,21 @@ snapshots: defu@6.1.4: {} - del@6.1.1: - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - delay@4.4.1: {} delayed-stream@1.0.0: {} - delegates@1.0.0: {} + delegates@1.0.0: + optional: true dequal@2.0.3: {} detect-indent@6.1.0: {} - detect-libc@1.0.3: {} - detect-libc@2.0.3: {} detect-newline@3.1.0: {} - detect-node@2.1.0: - optional: true - devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -15646,59 +13444,16 @@ snapshots: dependencies: is-obj: 2.0.0 - dot-prop@6.0.1: - dependencies: - is-obj: 2.0.0 - - dot-prop@8.0.2: - dependencies: - type-fest: 3.13.1 - dot-prop@9.0.0: dependencies: type-fest: 4.29.1 - dotenv-expand@5.1.0: {} - - dotenv@7.0.0: {} - dotenv@8.6.0: {} - download@6.2.5: - dependencies: - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 5.2.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 7.1.0 - make-dir: 1.3.0 - p-event: 1.3.0 - pify: 3.0.0 - - download@7.1.0: - dependencies: - archive-type: 4.0.0 - caw: 2.0.1 - content-disposition: 0.5.4 - decompress: 4.2.1 - ext-name: 5.0.0 - file-type: 8.1.0 - filenamify: 2.1.0 - get-stream: 3.0.0 - got: 8.3.2 - make-dir: 1.3.0 - p-event: 2.3.1 - pify: 3.0.0 - duplexer2@0.1.4: dependencies: readable-stream: 2.3.8 - duplexer3@0.1.5: {} - eastasianwidth@0.2.0: {} ecc-jsbn@0.1.2: @@ -15712,14 +13467,6 @@ snapshots: electron-to-chromium@1.5.41: {} - electron@25.9.8: - dependencies: - '@electron/get': 2.0.3 - '@types/node': 18.19.67 - extract-zip: 2.0.1 - transitivePeerDependencies: - - supports-color - emoji-regex-xs@1.0.0: {} emoji-regex@10.1.0: {} @@ -15843,9 +13590,6 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es6-error@4.1.1: - optional: true - es6-promise@3.3.1: {} esbuild-node-externals@1.15.0(esbuild@0.24.0): @@ -15868,32 +13612,6 @@ snapshots: esbuild-plugin-wasm@1.1.0: {} - esbuild@0.19.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -15974,6 +13692,34 @@ snapshots: '@esbuild/win32-ia32': 0.24.0 '@esbuild/win32-x64': 0.24.0 + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -15986,14 +13732,14 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.14.0(jiti@2.3.3)): + eslint-compat-utils@0.5.1(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) semver: 7.6.3 - eslint-compat-utils@0.6.4(eslint@9.14.0(jiti@2.3.3)): + eslint-compat-utils@0.6.4(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) semver: 7.6.3 eslint-import-resolver-node@0.3.9: @@ -16004,64 +13750,64 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 - eslint: 9.14.0(jiti@2.3.3) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-json-compat-utils@0.2.1(eslint@9.14.0(jiti@2.3.3))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.14.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2) - eslint: 9.14.0(jiti@2.3.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2) - eslint: 9.14.0(jiti@2.3.3) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2) + eslint: 9.14.0(jiti@2.4.2) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) transitivePeerDependencies: - supports-color - eslint-plugin-align-assignments@1.1.2(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-align-assignments@1.1.2(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) eslint-plugin-align-import@1.0.0: {} - eslint-plugin-canonical@5.0.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3): + eslint-plugin-canonical@5.0.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.11.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/utils': 8.16.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) chance: 1.1.12 debug: 4.3.7 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)) - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)))(eslint@9.14.0(jiti@2.3.3)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)))(eslint@9.14.0(jiti@2.4.2)) is-get-set-prop: 1.0.0 is-js-type: 2.0.0 is-obj-prop: 1.0.0 @@ -16082,12 +13828,12 @@ snapshots: - supports-color - typescript - eslint-plugin-css@0.11.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-css@0.11.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) colord: 2.9.3 - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.4.2)) known-css-properties: 0.34.0 postcss-value-parser: 4.2.0 @@ -16095,7 +13841,7 @@ snapshots: dependencies: htmlparser2: 9.1.0 - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -16104,9 +13850,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -16118,20 +13864,20 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@50.5.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-jsdoc@50.5.0(eslint@9.14.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -16141,13 +13887,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-json-schema-validator@5.1.3(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-json-schema-validator@5.1.3(eslint@9.14.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) ajv: 8.17.1 debug: 4.3.7 - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.4.2)) json-schema-migrate: 2.0.0 jsonc-eslint-parser: 2.4.0 minimatch: 8.0.4 @@ -16158,12 +13904,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.18.1(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-jsonc@2.18.1(eslint@9.14.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.6.4(eslint@9.14.0(jiti@2.3.3)) - eslint-json-compat-utils: 0.2.1(eslint@9.14.0(jiti@2.3.3))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.6.4(eslint@9.14.0(jiti@2.4.2)) + eslint-json-compat-utils: 0.2.1(eslint@9.14.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -16172,24 +13918,24 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-markdown@5.1.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-markdown@5.1.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color - eslint-plugin-markdownlint@0.6.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-markdownlint@0.6.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) markdownlint: 0.34.0 - eslint-plugin-package-json@0.15.6(eslint@9.14.0(jiti@2.3.3))(jsonc-eslint-parser@2.4.0): + eslint-plugin-package-json@0.15.6(eslint@9.14.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): dependencies: '@altano/repository-tools': 0.1.1 detect-indent: 6.1.0 detect-newline: 3.1.0 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) jsonc-eslint-parser: 2.4.0 package-json-validator: 0.7.0 semver: 7.6.3 @@ -16197,61 +13943,61 @@ snapshots: sort-package-json: 1.57.0 validate-npm-package-name: 6.0.0 - eslint-plugin-playwright@2.0.1(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-playwright@2.0.1(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) globals: 13.24.0 - eslint-plugin-promise@7.1.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-promise@7.1.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) - eslint-plugin-svelte@2.46.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-svelte@2.46.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.0 - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.4.2)) esutils: 2.0.3 known-css-properties: 0.35.0 - postcss: 8.4.47 - postcss-load-config: 3.1.4(postcss@8.4.47) - postcss-safe-parser: 6.0.0(postcss@8.4.47) + postcss: 8.4.49 + postcss-load-config: 3.1.4(postcss@8.4.49) + postcss-safe-parser: 6.0.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 semver: 7.6.3 svelte-eslint-parser: 0.43.0 transitivePeerDependencies: - ts-node - eslint-plugin-toml@0.11.1(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-toml@0.11.1(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 4.3.7 - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.4.2)) lodash: 4.17.21 toml-eslint-parser: 0.10.0 transitivePeerDependencies: - supports-color - eslint-plugin-vue@9.31.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-vue@9.31.0(eslint@9.14.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) - eslint: 9.14.0(jiti@2.3.3) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) + eslint: 9.14.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.14.0(jiti@2.3.3)) + vue-eslint-parser: 9.4.3(eslint@9.14.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-yml@1.15.0(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-yml@1.15.0(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 4.3.7 - eslint: 9.14.0(jiti@2.3.3) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.3.3)) + eslint: 9.14.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@2.4.2)) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.3 @@ -16272,9 +14018,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.14.0(jiti@2.3.3): + eslint@9.14.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.14.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 '@eslint/core': 0.7.0 @@ -16288,7 +14034,7 @@ snapshots: '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 debug: 4.3.7 escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 @@ -16310,7 +14056,7 @@ snapshots: optionator: 0.9.4 text-table: 0.2.0 optionalDependencies: - jiti: 2.3.3 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -16322,8 +14068,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.13.0 - acorn-jsx: 5.3.2(acorn@8.13.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -16356,37 +14102,9 @@ snapshots: events@3.3.0: {} - exec-buffer@3.2.0: - dependencies: - execa: 0.7.0 - p-finally: 1.0.0 - pify: 3.0.0 - rimraf: 2.6.3 - tempfile: 2.0.0 - - execa@0.7.0: - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - - execa@1.0.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -16398,7 +14116,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -16408,40 +14126,12 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.5.1: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.3 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.2.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.1.1 - - executable@4.1.1: - dependencies: - pify: 2.3.0 - exif-parser@0.1.12: {} expand-template@2.0.3: {} expect-type@1.1.0: {} - ext-list@2.2.2: - dependencies: - mime-db: 1.53.0 - - ext-name@5.0.0: - dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -16450,28 +14140,16 @@ snapshots: extendable-error@0.1.7: {} - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - - extract-zip@2.0.1: - dependencies: - debug: 4.3.7 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 extsprintf@1.3.0: {} fast-deep-equal@3.1.3: {} - fast-equals@5.0.1: {} - fast-fifo@1.3.2: {} fast-glob@3.3.2: @@ -16522,10 +14200,6 @@ snapshots: figlet@1.8.0: {} - figures@2.0.0: - dependencies: - escape-string-regexp: 1.0.5 - figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 @@ -16538,60 +14212,33 @@ snapshots: dependencies: flat-cache: 5.0.0 - file-exists@5.0.1: {} - - file-extension@4.0.5: {} - file-set@5.2.2: dependencies: array-back: 6.2.2 fast-glob: 3.3.2 - file-type@10.11.0: {} - file-type@16.5.4: dependencies: readable-web-to-node-stream: 3.0.2 strtok3: 6.3.0 token-types: 4.2.1 - file-type@19.6.0: - dependencies: - get-stream: 9.0.1 - strtok3: 9.1.1 - token-types: 6.0.0 - uint8array-extras: 1.4.0 - file-type@3.9.0: {} - file-type@4.4.0: {} - file-type@5.2.0: {} file-type@6.2.0: {} - file-type@8.1.0: {} - file-type@9.0.0: {} filelist@1.0.4: dependencies: minimatch: 5.1.6 - filename-reserved-regex@2.0.0: {} - - filenamify@2.1.0: - dependencies: - filename-reserved-regex: 2.0.0 - strip-outer: 1.0.1 - trim-repeated: 1.0.0 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - filter-obj@1.1.0: {} - find-replace@5.0.2: {} find-up@4.1.0: @@ -16610,10 +14257,6 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - find-versions@3.2.0: - dependencies: - semver-regex: 2.0.0 - flat-cache@4.0.1: dependencies: flatted: 3.3.1 @@ -16649,8 +14292,6 @@ snapshots: forever-agent@0.6.1: {} - form-data-encoder@2.1.4: {} - form-data@2.3.3: dependencies: asynckit: 0.4.0 @@ -16662,6 +14303,7 @@ snapshots: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + optional: true format@0.2.2: {} @@ -16686,12 +14328,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-extra@5.0.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -16714,19 +14350,15 @@ snapshots: fs-minipass@2.1.0: dependencies: minipass: 3.3.6 + optional: true fs.realpath@1.0.0: {} - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true function-bind@1.1.2: {} - function-timeout@1.0.2: {} - function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 @@ -16747,6 +14379,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 + optional: true gensync@1.0.0-beta.2: {} @@ -16778,14 +14411,8 @@ snapshots: request: 2.88.2 through: 2.3.8 - get-proxy@2.1.0: - dependencies: - npm-conf: 1.1.3 - get-set-props@0.1.0: {} - get-stdin@8.0.0: {} - get-stdin@9.0.0: {} get-stream@2.3.1: @@ -16793,25 +14420,10 @@ snapshots: object-assign: 4.1.1 pinkie-promise: 2.0.1 - get-stream@3.0.0: {} - - get-stream@4.1.0: - dependencies: - pump: 3.0.2 - - get-stream@5.2.0: - dependencies: - pump: 3.0.2 - get-stream@6.0.1: {} get-stream@8.0.1: {} - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -16830,22 +14442,12 @@ snapshots: dependencies: readable-stream: 1.1.14 - gif-encoder@0.6.1: - dependencies: - readable-stream: 1.1.14 - gif-frames@1.0.1: dependencies: get-pixels-frame-info-update: 3.3.2 multi-integer-range: 3.0.0 save-pixels-jpeg-js-upgrade: 2.3.4-jpeg-js-upgrade.0 - gifsicle@5.3.0: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - execa: 5.1.1 - gifwrap@0.10.1: dependencies: image-q: 4.0.0 @@ -16911,32 +14513,10 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.6.3 - serialize-error: 7.0.1 - optional: true - global-directory@4.0.1: dependencies: ini: 4.1.1 - global-dirs@3.0.1: - dependencies: - ini: 2.0.0 - global-modules@2.0.0: dependencies: global-prefix: 3.0.0 @@ -17010,82 +14590,13 @@ snapshots: dependencies: get-intrinsic: 1.2.4 - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - got@12.6.1: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - got@7.1.0: - dependencies: - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.3 - decompress-response: 3.3.0 - duplexer3: 0.1.5 - get-stream: 3.0.0 - is-plain-obj: 1.1.0 - is-retry-allowed: 1.2.0 - is-stream: 1.1.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - p-cancelable: 0.3.0 - p-timeout: 1.2.1 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 1.0.0 - url-to-options: 1.0.1 - - got@8.3.2: - dependencies: - '@sindresorhus/is': 0.7.0 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.3 - cacheable-request: 2.1.4 - decompress-response: 3.3.0 - duplexer3: 0.1.5 - get-stream: 3.0.0 - into-stream: 3.1.0 - is-retry-allowed: 1.2.0 - isurl: 1.0.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 0.4.1 - p-timeout: 2.0.1 - pify: 3.0.0 - safe-buffer: 5.2.1 - timed-out: 4.0.1 - url-parse-lax: 3.0.0 - url-to-options: 1.0.1 - graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} gradient-string@3.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 tinygradient: 1.1.5 graphemer@1.4.0: {} @@ -17113,8 +14624,6 @@ snapshots: ajv: 6.12.6 har-schema: 2.0.0 - hard-rejection@2.1.0: {} - has-bigints@1.0.2: {} has-flag@3.0.0: {} @@ -17127,27 +14636,20 @@ snapshots: has-proto@1.0.3: {} - has-symbol-support-x@1.4.2: {} - has-symbols@1.0.3: {} - has-to-string-tag-x@1.4.1: - dependencies: - has-symbol-support-x: 1.4.2 - has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - has-unicode@2.0.1: {} - - has-yarn@3.0.0: {} + has-unicode@2.0.1: + optional: true hasown@2.0.2: dependencies: function-bind: 1.1.2 - hast-util-to-html@9.0.3: + hast-util-to-html@9.0.4: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 @@ -17171,12 +14673,6 @@ snapshots: hookable@5.5.3: {} - hosted-git-info@2.8.9: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - html-tags@3.3.1: {} html-void-elements@3.0.0: {} @@ -17202,10 +14698,6 @@ snapshots: domutils: 3.1.0 entities: 4.5.0 - http-cache-semantics@3.8.1: {} - - http-cache-semantics@4.1.1: {} - http-signature@1.2.0: dependencies: assert-plus: 1.0.0 @@ -17214,16 +14706,6 @@ snapshots: http2-client@1.3.5: {} - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -17237,8 +14719,6 @@ snapshots: human-signals@5.0.0: {} - human-signals@8.0.0: {} - husky@9.1.7: {} iconv-lite@0.4.24: @@ -17247,10 +14727,6 @@ snapshots: idb@7.1.1: {} - identifier-regex@1.0.0: - dependencies: - reserved-identifiers: 1.0.0 - ieee754@1.2.1: {} ignore@5.3.2: {} @@ -17263,73 +14739,15 @@ snapshots: dependencies: '@types/node': 16.9.1 - imagemin-gifsicle@7.0.0: - dependencies: - execa: 1.0.0 - gifsicle: 5.3.0 - is-gif: 3.0.0 - - imagemin-jpegtran@8.0.0: - dependencies: - execa: 9.5.1 - file-type: 19.6.0 - image-dimensions: 2.3.0 - jpegtran-bin: 7.0.0 - uint8array-extras: 1.4.0 - - imagemin-optipng@8.0.0: - dependencies: - exec-buffer: 3.2.0 - is-png: 2.0.0 - optipng-bin: 7.0.1 - - imagemin-pngquant@10.0.0: - dependencies: - environment: 1.1.0 - execa: 8.0.1 - is-png: 3.0.1 - ow: 2.0.0 - pngquant-bin: 9.0.0 - uint8array-extras: 1.4.0 - - imagemin-svgo@11.0.1: - dependencies: - is-svg: 5.1.0 - svgo: 3.3.2 - - imagemin-webp@8.0.0: - dependencies: - cwebp-bin: 8.0.0 - exec-buffer: 3.2.0 - is-cwebp-readable: 3.0.0 - - imagemin@9.0.0: - dependencies: - change-file-extension: 0.1.1 - environment: 1.1.0 - file-type: 19.6.0 - globby: 14.0.2 - junk: 4.0.1 - ow: 2.0.0 - p-pipe: 4.0.0 - slash: 5.1.0 - uint8array-extras: 1.4.0 - import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-lazy@3.1.0: {} - - import-lazy@4.0.0: {} - import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -17339,39 +14757,16 @@ snapshots: ini@1.3.8: {} - ini@2.0.0: {} - ini@4.1.1: {} ini@5.0.0: {} - inquirer@6.5.2: - dependencies: - ansi-escapes: 3.2.0 - chalk: 2.4.2 - cli-cursor: 2.1.0 - cli-width: 2.2.1 - external-editor: 3.1.0 - figures: 2.0.0 - lodash: 4.17.21 - mute-stream: 0.0.7 - run-async: 2.4.1 - rxjs: 6.6.7 - string-width: 2.1.1 - strip-ansi: 5.2.0 - through: 2.3.8 - internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - into-stream@3.1.0: - dependencies: - from2: 2.3.0 - p-is-promise: 1.1.0 - into-stream@6.0.0: dependencies: from2: 2.3.0 @@ -17418,18 +14813,10 @@ snapshots: is-callable@1.2.7: {} - is-ci@3.0.1: - dependencies: - ci-info: 3.9.0 - is-core-module@2.15.1: dependencies: hasown: 2.0.2 - is-cwebp-readable@3.0.0: - dependencies: - file-type: 10.11.0 - is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -17440,16 +14827,12 @@ snapshots: is-decimal@1.0.4: {} - is-docker@2.2.1: {} - is-docker@3.0.0: {} is-extendable@0.1.1: {} is-extglob@2.1.1: {} - is-fullwidth-code-point@2.0.0: {} - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -17465,32 +14848,18 @@ snapshots: get-set-props: 0.1.0 lowercase-keys: 1.0.1 - is-gif@3.0.0: - dependencies: - file-type: 10.11.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 is-hexadecimal@1.0.4: {} - is-identifier@1.0.1: - dependencies: - identifier-regex: 1.0.0 - super-regex: 1.0.0 - is-in-ci@1.0.0: {} is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 - is-installed-globally@0.4.0: - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - is-installed-globally@1.0.0: dependencies: global-directory: 4.0.1 @@ -17525,26 +14894,14 @@ snapshots: is-obj@2.0.0: {} - is-object@1.0.2: {} - - is-path-cwd@2.2.0: {} - - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} - is-png@2.0.0: {} - - is-png@3.0.1: {} - is-proto-prop@2.0.0: dependencies: lowercase-keys: 1.0.1 @@ -17561,8 +14918,6 @@ snapshots: is-regexp@1.0.0: {} - is-retry-allowed@1.2.0: {} - is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 @@ -17573,8 +14928,6 @@ snapshots: is-stream@3.0.0: {} - is-stream@4.0.1: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -17583,10 +14936,6 @@ snapshots: dependencies: better-path-resolve: 1.0.0 - is-svg@5.1.0: - dependencies: - fast-xml-parser: 4.5.0 - is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 @@ -17601,8 +14950,6 @@ snapshots: is-typedarray@1.0.0: {} - is-unicode-supported@0.1.0: {} - is-unicode-supported@1.3.0: {} is-unicode-supported@2.1.0: {} @@ -17617,16 +14964,10 @@ snapshots: is-windows@1.0.2: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 - is-yarn-global@0.4.1: {} - isarray@0.0.1: {} isarray@1.0.0: {} @@ -17644,16 +14985,6 @@ snapshots: isstream@0.1.2: {} - isurl@1.0.0: - dependencies: - has-to-string-tag-x: 1.4.1 - is-object: 1.0.2 - - iterm2-version@4.2.0: - dependencies: - app-path: 3.3.0 - plist: 3.1.0 - iterm2-version@5.0.0: dependencies: app-path: 4.0.0 @@ -17708,19 +15039,14 @@ snapshots: - debug - encoding - jiti@1.21.6: {} + jiti@1.21.7: {} - jiti@2.3.3: {} + jiti@2.4.2: {} jpeg-js@0.3.7: {} jpeg-js@0.4.4: {} - jpegtran-bin@7.0.0: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -17761,7 +15087,7 @@ snapshots: transitivePeerDependencies: - '@75lb/nature' - jsdoc-to-markdown@9.0.5: + jsdoc-to-markdown@9.1.1: dependencies: array-back: 6.2.2 command-line-args: 6.0.1 @@ -17794,8 +15120,6 @@ snapshots: jsesc@3.0.2: {} - json-buffer@3.0.0: {} - json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -17804,17 +15128,12 @@ snapshots: dependencies: ajv: 8.17.1 - json-schema-to-typescript@15.0.3: + json-schema-to-typescript-lite@14.1.0: dependencies: '@apidevtools/json-schema-ref-parser': 11.7.2 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.13 - is-glob: 4.0.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - minimist: 1.2.8 - prettier: 3.4.1 - tinyglobby: 0.2.9 + + json-schema-to-zod@2.6.0: {} json-schema-traverse@0.4.1: {} @@ -17838,7 +15157,7 @@ snapshots: jsonc-eslint-parser@2.4.0: dependencies: - acorn: 8.13.0 + acorn: 8.14.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.6.3 @@ -17864,12 +15183,6 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - junk@4.0.1: {} - - keyv@3.0.0: - dependencies: - json-buffer: 3.0.0 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -17884,6 +15197,8 @@ snapshots: dependencies: graceful-fs: 4.2.11 + knitwork@1.2.0: {} + known-css-properties@0.34.0: {} known-css-properties@0.35.0: {} @@ -17892,10 +15207,6 @@ snapshots: ky@1.7.2: {} - latest-version@7.0.0: - dependencies: - package-json: 8.1.1 - latest-version@9.0.0: dependencies: package-json: 10.0.1 @@ -17904,24 +15215,10 @@ snapshots: dependencies: readable-stream: 2.3.8 - leasot@12.5.0: - dependencies: - async: 3.2.6 - chalk: 4.1.2 - commander: 7.2.0 - eol: 0.9.1 - get-stdin: 8.0.0 - globby: 11.1.0 - json2xml: 0.1.3 - lodash: 4.17.21 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - text-table: 0.2.0 - leasot@14.4.0: dependencies: async: 3.2.6 - chalk: 5.3.0 + chalk: 5.4.1 commander: 9.5.0 eol: 0.9.1 get-stdin: 9.0.0 @@ -17947,6 +15244,7 @@ snapshots: dependencies: base64-js: 1.3.1 unicode-trie: 1.0.0 + optional: true lines-and-columns@1.2.4: {} @@ -17969,17 +15267,6 @@ snapshots: transitivePeerDependencies: - supports-color - listr2@6.6.1(enquirer@2.4.1): - dependencies: - cli-truncate: 3.1.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 5.0.1 - rfdc: 1.4.1 - wrap-ansi: 8.1.0 - optionalDependencies: - enquirer: 2.4.1 - listr2@8.2.5: dependencies: cli-truncate: 4.0.0 @@ -17989,21 +15276,6 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 9.0.0 - lmdb@2.8.5: - dependencies: - msgpackr: 1.11.0 - node-addon-api: 6.1.0 - node-gyp-build-optional-packages: 5.1.1 - ordered-binary: 1.5.2 - weak-lru-cache: 1.2.2 - optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 2.8.5 - '@lmdb/lmdb-darwin-x64': 2.8.5 - '@lmdb/lmdb-linux-arm': 2.8.5 - '@lmdb/lmdb-linux-arm64': 2.8.5 - '@lmdb/lmdb-linux-x64': 2.8.5 - '@lmdb/lmdb-win32-x64': 2.8.5 - load-bmfont@1.4.2: dependencies: buffer-equal: 0.0.1 @@ -18020,7 +15292,7 @@ snapshots: local-pkg@0.5.1: dependencies: mlly: 1.7.3 - pkg-types: 1.2.1 + pkg-types: 1.3.0 locate-path@5.0.0: dependencies: @@ -18064,19 +15336,14 @@ snapshots: lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - log-symbols@5.1.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 log-symbols@6.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 log-symbols@7.0.0: @@ -18084,21 +15351,6 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.1 - log-update@4.0.0: - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - - log-update@5.0.1: - dependencies: - ansi-escapes: 5.0.0 - cli-cursor: 4.0.0 - slice-ansi: 5.0.0 - strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 - log-update@6.1.0: dependencies: ansi-escapes: 7.0.0 @@ -18113,31 +15365,16 @@ snapshots: loupe@3.1.2: {} - lowercase-keys@1.0.0: {} - lowercase-keys@1.0.1: {} - lowercase-keys@2.0.0: {} - - lowercase-keys@3.0.0: {} - lru-cache@10.4.3: {} lru-cache@11.0.1: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lunr@2.3.9: {} magic-string@0.25.9: @@ -18148,6 +15385,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-dir@1.3.0: dependencies: pify: 3.0.0 @@ -18155,10 +15396,7 @@ snapshots: make-dir@3.1.0: dependencies: semver: 6.3.1 - - map-obj@1.0.1: {} - - map-obj@4.3.0: {} + optional: true mark.js@8.11.1: {} @@ -18193,26 +15431,21 @@ snapshots: markdown-it: 14.1.0 markdownlint-micromark: 0.1.9 - marked-terminal@7.2.1(marked@15.0.1): + marked-terminal@7.2.1(marked@15.0.3): dependencies: ansi-escapes: 7.0.0 ansi-regex: 6.1.0 - chalk: 5.3.0 + chalk: 5.4.1 cli-highlight: 2.1.11 cli-table3: 0.6.5 - marked: 15.0.1 + marked: 15.0.3 node-emoji: 2.1.3 supports-hyperlinks: 3.1.0 - marked@15.0.1: {} + marked@15.0.3: {} marked@4.3.0: {} - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - matcher@5.0.0: dependencies: escape-string-regexp: 5.0.0 @@ -18416,21 +15649,6 @@ snapshots: meow@13.2.0: {} - meow@9.0.0: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize: 1.2.0 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -18687,36 +15905,27 @@ snapshots: mime-db@1.52.0: {} - mime-db@1.53.0: {} - mime-types@2.1.35: dependencies: mime-db: 1.52.0 mime@1.6.0: {} - mimic-fn@1.2.0: {} - mimic-fn@2.1.0: {} mimic-fn@4.0.0: {} mimic-function@5.0.1: {} - mimic-response@1.0.1: {} - - mimic-response@2.1.0: {} + mimic-response@2.1.0: + optional: true mimic-response@3.1.0: {} - mimic-response@4.0.0: {} - min-document@2.19.0: dependencies: dom-walk: 0.1.2 - min-indent@1.0.1: {} - minimatch@10.0.1: dependencies: brace-expansion: 2.0.1 @@ -18737,19 +15946,15 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - minimist@1.2.8: {} minipass@3.3.6: dependencies: yallist: 4.0.0 + optional: true - minipass@5.0.0: {} + minipass@5.0.0: + optional: true minipass@7.1.2: {} @@ -18759,6 +15964,7 @@ snapshots: dependencies: minipass: 3.3.6 yallist: 4.0.0 + optional: true minizlib@3.0.1: dependencies: @@ -18777,58 +15983,36 @@ snapshots: mkdirp@3.0.1: {} - mkdist@1.6.0(typescript@5.7.2): + mkdist@2.2.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): dependencies: - autoprefixer: 10.4.20(postcss@8.4.47) + autoprefixer: 10.4.20(postcss@8.4.49) citty: 0.1.6 - cssnano: 7.0.6(postcss@8.4.47) + cssnano: 7.0.6(postcss@8.4.49) defu: 6.1.4 - esbuild: 0.24.0 - jiti: 1.21.6 - mlly: 1.7.2 + esbuild: 0.24.2 + jiti: 1.21.7 + mlly: 1.7.3 pathe: 1.1.2 - pkg-types: 1.2.1 - postcss: 8.4.47 - postcss-nested: 6.2.0(postcss@8.4.47) + pkg-types: 1.3.0 + postcss: 8.4.49 + postcss-nested: 7.0.2(postcss@8.4.49) semver: 7.6.3 - tinyglobby: 0.2.9 + tinyglobby: 0.2.10 optionalDependencies: typescript: 5.7.2 - - mlly@1.7.2: - dependencies: - acorn: 8.13.0 - pathe: 1.1.2 - pkg-types: 1.2.1 - ufo: 1.5.4 + vue: 3.5.13(typescript@5.7.2) mlly@1.7.3: dependencies: acorn: 8.14.0 pathe: 1.1.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 ufo: 1.5.4 mri@1.2.0: {} ms@2.1.3: {} - msgpackr-extract@3.0.3: - dependencies: - node-gyp-build-optional-packages: 5.2.2 - optionalDependencies: - '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 - '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 - optional: true - - msgpackr@1.11.0: - optionalDependencies: - msgpackr-extract: 3.0.3 - muggle-string@0.4.1: {} multi-integer-range@3.0.0: {} @@ -18838,15 +16022,14 @@ snapshots: once: 1.4.0 readable-stream: 3.6.2 - mute-stream@0.0.7: {} - mz@2.7.0: dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.22.0: {} + nan@2.22.0: + optional: true nanoid@3.3.7: {} @@ -18870,16 +16053,10 @@ snapshots: neo-async@2.6.2: {} - nice-try@1.0.5: {} - node-abi@3.71.0: dependencies: semver: 7.6.3 - node-addon-api@6.1.0: {} - - node-addon-api@7.1.1: {} - node-bitmap@0.0.1: {} node-emoji@2.1.3: @@ -18897,15 +16074,6 @@ snapshots: dependencies: whatwg-url: 5.0.0 - node-gyp-build-optional-packages@5.1.1: - dependencies: - detect-libc: 2.0.3 - - node-gyp-build-optional-packages@5.2.2: - dependencies: - detect-libc: 2.0.3 - optional: true - node-int64@0.4.0: {} node-localstorage@3.0.5: @@ -18933,44 +16101,12 @@ snapshots: nopt@5.0.0: dependencies: abbrev: 1.1.1 - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.8 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-package-data@3.0.3: - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.15.1 - semver: 7.6.3 - validate-npm-package-license: 3.0.4 + optional: true normalize-path@3.0.0: {} normalize-range@0.1.2: {} - normalize-url@2.0.1: - dependencies: - prepend-http: 2.0.0 - query-string: 5.1.1 - sort-keys: 2.0.0 - - normalize-url@6.1.0: {} - - normalize-url@8.0.1: {} - - npm-conf@1.1.3: - dependencies: - config-chain: 1.1.13 - pify: 3.0.0 - - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -18990,13 +16126,12 @@ snapshots: console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 + optional: true nth-check@2.1.1: dependencies: boolbase: 1.0.0 - nullthrows@1.1.1: {} - oas-kit-common@1.0.8: dependencies: fast-safe-stringify: 2.1.1 @@ -19072,10 +16207,6 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@2.0.1: - dependencies: - mimic-fn: 1.2.0 - onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -19088,18 +16219,24 @@ snapshots: dependencies: mimic-function: 5.0.1 - oniguruma-to-es@0.4.1: + oniguruma-to-es@0.10.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.2 - regex-recursion: 4.3.0 + regex: 5.1.1 + regex-recursion: 5.1.1 oniguruma-to-es@0.7.0: dependencies: emoji-regex-xs: 1.0.0 - regex: 5.0.2 + regex: 5.1.1 regex-recursion: 4.3.0 + oniguruma-to-es@0.8.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 + open@10.1.0: dependencies: default-browser: 5.2.1 @@ -19107,20 +16244,6 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - openapi-to-md@1.0.24: - dependencies: - commander: 10.0.1 - swagger2openapi: 7.0.8 - yaml: 2.6.1 - transitivePeerDependencies: - - encoding - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -19130,14 +16253,9 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - optipng-bin@7.0.1: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - ora@8.1.1: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -19147,49 +16265,14 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.1.0 - ordered-binary@1.5.2: {} - - os-filter-obj@2.0.0: - dependencies: - arch: 2.2.0 - os-tmpdir@1.0.2: {} outdent@0.5.0: {} - ow@2.0.0: - dependencies: - '@sindresorhus/is': 6.3.1 - callsites: 4.2.0 - dot-prop: 8.0.2 - environment: 1.1.0 - fast-equals: 5.0.1 - is-identifier: 1.0.1 - - p-cancelable@0.3.0: {} - - p-cancelable@0.4.1: {} - - p-cancelable@2.1.1: {} - - p-cancelable@3.0.0: {} - - p-event@1.3.0: - dependencies: - p-timeout: 1.2.1 - - p-event@2.3.1: - dependencies: - p-timeout: 2.0.1 - p-filter@2.1.0: dependencies: p-map: 2.1.0 - p-finally@1.0.0: {} - - p-is-promise@1.1.0: {} - p-is-promise@3.0.0: {} p-limit@2.3.0: @@ -19216,28 +16299,8 @@ snapshots: dependencies: p-limit: 4.0.0 - p-map-series@1.0.0: - dependencies: - p-reduce: 1.0.0 - p-map@2.1.0: {} - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - - p-pipe@4.0.0: {} - - p-reduce@1.0.0: {} - - p-timeout@1.2.1: - dependencies: - p-finally: 1.0.0 - - p-timeout@2.0.1: - dependencies: - p-finally: 1.0.0 - p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -19253,16 +16316,10 @@ snapshots: registry-url: 6.0.1 semver: 7.6.3 - package-json@8.1.1: - dependencies: - got: 12.6.1 - registry-auth-token: 5.0.3 - registry-url: 6.0.1 - semver: 7.6.3 - package-manager-detector@0.2.2: {} - pako@0.2.9: {} + pako@0.2.9: + optional: true pako@1.0.11: {} @@ -19324,8 +16381,6 @@ snapshots: path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-key@4.0.0: {} @@ -19352,8 +16407,6 @@ snapshots: peek-readable@4.1.0: {} - peek-readable@5.3.1: {} - pend@1.2.0: {} perfect-debounce@1.0.0: {} @@ -19392,20 +16445,12 @@ snapshots: dependencies: pngjs: 3.4.0 - pkg-types@1.2.1: + pkg-types@1.3.0: dependencies: confbox: 0.1.8 - mlly: 1.7.2 + mlly: 1.7.3 pathe: 1.1.2 - playwright-core@1.49.0: {} - - playwright@1.49.0: - dependencies: - playwright-core: 1.49.0 - optionalDependencies: - fsevents: 2.3.2 - plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.10 @@ -19422,203 +16467,202 @@ snapshots: pngjs@6.0.0: {} - pngquant-bin@9.0.0: - dependencies: - bin-build: 3.0.0 - bin-wrapper: 4.1.0 - execa: 8.0.1 - possible-typed-array-names@1.0.0: {} - postcss-calc@10.0.2(postcss@8.4.47): + postcss-calc@10.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.2(postcss@8.4.47): + postcss-colormin@7.0.2(postcss@8.4.49): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.4(postcss@8.4.47): + postcss-convert-values@7.0.4(postcss@8.4.49): dependencies: browserslist: 4.24.0 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-discard-comments@7.0.3(postcss@8.4.47): + postcss-discard-comments@7.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 - postcss-discard-duplicates@7.0.1(postcss@8.4.47): + postcss-discard-duplicates@7.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-discard-empty@7.0.0(postcss@8.4.47): + postcss-discard-empty@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-discard-overridden@7.0.0(postcss@8.4.47): + postcss-discard-overridden@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-html@1.7.0: dependencies: htmlparser2: 8.0.2 js-tokens: 9.0.1 - postcss: 8.4.47 - postcss-safe-parser: 6.0.0(postcss@8.4.47) + postcss: 8.4.49 + postcss-safe-parser: 6.0.0(postcss@8.4.49) - postcss-load-config@3.1.4(postcss@8.4.47): + postcss-load-config@3.1.4(postcss@8.4.49): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-merge-longhand@7.0.4(postcss@8.4.47): + postcss-merge-longhand@7.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - stylehacks: 7.0.4(postcss@8.4.47) + stylehacks: 7.0.4(postcss@8.4.49) - postcss-merge-rules@7.0.4(postcss@8.4.47): + postcss-merge-rules@7.0.4(postcss@8.4.49): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.4.47) - postcss: 8.4.47 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@7.0.0(postcss@8.4.47): + postcss-minify-font-values@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.4.47): + postcss-minify-gradients@7.0.0(postcss@8.4.49): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.4.47) - postcss: 8.4.47 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.2(postcss@8.4.47): + postcss-minify-params@7.0.2(postcss@8.4.49): dependencies: browserslist: 4.24.0 - cssnano-utils: 5.0.0(postcss@8.4.47) - postcss: 8.4.47 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-selectors@7.0.4(postcss@8.4.47): + postcss-minify-selectors@7.0.4(postcss@8.4.49): dependencies: cssesc: 3.0.0 - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@7.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.47 - postcss-selector-parser: 6.1.2 + postcss: 8.4.49 + postcss-selector-parser: 7.0.0 - postcss-normalize-charset@7.0.0(postcss@8.4.47): + postcss-normalize-charset@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-normalize-display-values@7.0.0(postcss@8.4.47): + postcss-normalize-display-values@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.4.47): + postcss-normalize-positions@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.4.47): + postcss-normalize-repeat-style@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.4.47): + postcss-normalize-string@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.4.47): + postcss-normalize-timing-functions@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.2(postcss@8.4.47): + postcss-normalize-unicode@7.0.2(postcss@8.4.49): dependencies: browserslist: 4.24.0 - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.4.47): + postcss-normalize-url@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.4.47): + postcss-normalize-whitespace@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.4.47): + postcss-ordered-values@7.0.1(postcss@8.4.49): dependencies: - cssnano-utils: 5.0.0(postcss@8.4.47) - postcss: 8.4.47 + cssnano-utils: 5.0.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-reduce-initial@7.0.2(postcss@8.4.47): + postcss-reduce-initial@7.0.2(postcss@8.4.49): dependencies: browserslist: 4.24.0 caniuse-api: 3.0.0 - postcss: 8.4.47 + postcss: 8.4.49 - postcss-reduce-transforms@7.0.0(postcss@8.4.47): + postcss-reduce-transforms@7.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 postcss-resolve-nested-selector@0.1.6: {} - postcss-safe-parser@6.0.0(postcss@8.4.47): + postcss-safe-parser@6.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-safe-parser@7.0.1(postcss@8.4.47): + postcss-safe-parser@7.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-scss@4.0.9(postcss@8.4.47): + postcss-scss@4.0.9(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sorting@8.0.2(postcss@8.4.47): + postcss-selector-parser@7.0.0: dependencies: - postcss: 8.4.47 + cssesc: 3.0.0 + util-deprecate: 1.0.2 - postcss-svgo@7.0.1(postcss@8.4.47): + postcss-sorting@8.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 + + postcss-svgo@7.0.1(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@7.0.3(postcss@8.4.47): + postcss-unique-selectors@7.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} @@ -19637,21 +16681,6 @@ snapshots: preact@10.25.1: {} - prebuild-install@7.1.1: - dependencies: - detect-libc: 2.0.3 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 3.71.0 - pump: 3.0.2 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.1 - tunnel-agent: 0.6.0 - prebuild-install@7.1.2: dependencies: detect-libc: 2.0.3 @@ -19669,14 +16698,8 @@ snapshots: prelude-ls@1.2.1: {} - prepend-http@1.0.4: {} - - prepend-http@2.0.0: {} - prettier@2.8.8: {} - prettier@3.4.1: {} - pretty-bytes@5.6.0: {} pretty-bytes@6.1.1: {} @@ -19697,9 +16720,8 @@ snapshots: proto-props@2.0.0: {} - proxy-from-env@1.1.0: {} - - pseudomap@1.0.2: {} + proxy-from-env@1.1.0: + optional: true psl@1.15.0: dependencies: @@ -19728,27 +16750,10 @@ snapshots: qs@6.5.3: {} - query-string@5.1.1: - dependencies: - decode-uri-component: 0.2.2 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - - query-string@7.1.3: - dependencies: - decode-uri-component: 0.2.2 - filter-obj: 1.1.0 - split-on-first: 1.1.0 - strict-uri-encode: 2.0.0 - queue-microtask@1.2.3: {} queue-tick@1.0.1: {} - quick-lru@4.0.1: {} - - quick-lru@5.1.1: {} - randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -19760,19 +16765,6 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -19838,11 +16830,6 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - reftools@1.1.9: {} regenerate-unicode-properties@10.2.0: @@ -19863,9 +16850,14 @@ snapshots: dependencies: regex-utilities: 2.3.0 + regex-recursion@5.1.1: + dependencies: + regex: 5.1.1 + regex-utilities: 2.3.0 + regex-utilities@2.3.0: {} - regex@5.0.2: + regex@5.1.1: dependencies: regex-utilities: 2.3.0 @@ -19918,12 +16910,27 @@ snapshots: transitivePeerDependencies: - supports-color + remark-parse@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.1 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + remark-parse@9.0.0: dependencies: mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color + remark-stringify@11.0.0: + dependencies: + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + rename-keys@1.2.0: {} render-gif@2.0.4: @@ -19960,8 +16967,6 @@ snapshots: tunnel-agent: 0.6.0 uuid: 3.4.0 - require-dir@1.2.0: {} - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -19970,48 +16975,17 @@ snapshots: dependencies: lodash: 4.17.21 - reserved-identifiers@1.0.0: {} - - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.8: - dependencies: - is-core-module: 2.15.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@1.0.2: - dependencies: - lowercase-keys: 1.0.1 - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - restore-cursor@2.0.0: - dependencies: - onetime: 2.0.1 - signal-exit: 3.0.7 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - restore-cursor@4.0.0: + resolve@1.22.8: dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 restore-cursor@5.1.0: dependencies: @@ -20022,13 +16996,10 @@ snapshots: rfdc@1.4.1: {} - rimraf@2.6.3: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 + optional: true rimraf@5.0.10: dependencies: @@ -20039,38 +17010,24 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.1 - roarr@2.15.4: - dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - optional: true - roarr@7.21.1: dependencies: fast-printf: 1.6.9 safe-stable-stringify: 2.5.0 semver-compare: 1.0.0 - rollup-plugin-dts@6.1.1(rollup@3.29.5)(typescript@5.7.2): + rollup-plugin-dts@6.1.1(rollup@4.29.1)(typescript@5.7.2): dependencies: - magic-string: 0.30.12 - rollup: 3.29.5 + magic-string: 0.30.17 + rollup: 4.29.1 typescript: 5.7.2 optionalDependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.0 rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 - rollup@3.29.5: - optionalDependencies: - fsevents: 2.3.3 - rollup@4.24.0: dependencies: '@types/estree': 1.0.6 @@ -20093,18 +17050,37 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.24.0 fsevents: 2.3.3 - run-applescript@7.0.0: {} + rollup@4.29.1: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.29.1 + '@rollup/rollup-android-arm64': 4.29.1 + '@rollup/rollup-darwin-arm64': 4.29.1 + '@rollup/rollup-darwin-x64': 4.29.1 + '@rollup/rollup-freebsd-arm64': 4.29.1 + '@rollup/rollup-freebsd-x64': 4.29.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 + '@rollup/rollup-linux-arm-musleabihf': 4.29.1 + '@rollup/rollup-linux-arm64-gnu': 4.29.1 + '@rollup/rollup-linux-arm64-musl': 4.29.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 + '@rollup/rollup-linux-riscv64-gnu': 4.29.1 + '@rollup/rollup-linux-s390x-gnu': 4.29.1 + '@rollup/rollup-linux-x64-gnu': 4.29.1 + '@rollup/rollup-linux-x64-musl': 4.29.1 + '@rollup/rollup-win32-arm64-msvc': 4.29.1 + '@rollup/rollup-win32-ia32-msvc': 4.29.1 + '@rollup/rollup-win32-x64-msvc': 4.29.1 + fsevents: 2.3.3 - run-async@2.4.1: {} + run-applescript@7.0.0: {} run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@6.6.7: - dependencies: - tslib: 1.14.1 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -20153,32 +17129,16 @@ snapshots: semver-compare@1.0.0: {} - semver-diff@4.0.0: - dependencies: - semver: 7.6.3 - - semver-regex@2.0.0: {} - - semver-truncate@1.1.2: - dependencies: - semver: 5.7.2 - - semver@5.7.2: {} - semver@6.3.1: {} semver@7.6.3: {} - serialize-error@7.0.1: - dependencies: - type-fest: 0.13.1 - optional: true - serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - set-blocking@2.0.0: {} + set-blocking@2.0.0: + optional: true set-function-length@1.2.2: dependencies: @@ -20196,34 +17156,39 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - shiki@1.23.1: - dependencies: - '@shikijs/core': 1.23.1 - '@shikijs/engine-javascript': 1.23.1 - '@shikijs/engine-oniguruma': 1.23.1 - '@shikijs/types': 1.23.1 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - shiki@1.24.0: dependencies: '@shikijs/core': 1.24.0 '@shikijs/engine-javascript': 1.24.0 '@shikijs/engine-oniguruma': 1.24.0 '@shikijs/types': 1.24.0 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + + shiki@1.24.1: + dependencies: + '@shikijs/core': 1.24.1 + '@shikijs/engine-javascript': 1.24.1 + '@shikijs/engine-oniguruma': 1.24.1 + '@shikijs/types': 1.24.1 + '@shikijs/vscode-textmate': 9.3.1 + '@types/hast': 3.0.4 + + shiki@1.26.1: + dependencies: + '@shikijs/core': 1.26.1 + '@shikijs/engine-javascript': 1.26.1 + '@shikijs/engine-oniguruma': 1.26.1 + '@shikijs/langs': 1.26.1 + '@shikijs/themes': 1.26.1 + '@shikijs/types': 1.26.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 should-equal@2.0.0: @@ -20272,6 +17237,7 @@ snapshots: decompress-response: 4.2.1 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-get@4.0.1: dependencies: @@ -20318,18 +17284,6 @@ snapshots: array-back: 6.2.2 typical: 7.3.0 - sort-keys-length@1.0.1: - dependencies: - sort-keys: 1.1.2 - - sort-keys@1.1.2: - dependencies: - is-plain-obj: 1.1.0 - - sort-keys@2.0.0: - dependencies: - is-plain-obj: 1.1.0 - sort-object-keys@1.1.3: {} sort-package-json@1.57.0: @@ -20358,28 +17312,13 @@ snapshots: space-separated-tokens@2.0.2: {} - spawndamnit@2.0.0: - dependencies: - cross-spawn: 5.1.0 - signal-exit: 3.0.7 - spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 - spdx-exceptions@2.5.0: {} - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 - spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 @@ -20389,15 +17328,10 @@ snapshots: speakingurl@14.0.1: {} - split-on-first@1.1.0: {} - split2@4.2.0: {} sprintf-js@1.0.3: {} - sprintf-js@1.1.3: - optional: true - sshpk@1.18.0: dependencies: asn1: 0.2.6 @@ -20428,19 +17362,8 @@ snapshots: optionalDependencies: bare-events: 2.5.0 - strict-uri-encode@1.1.0: {} - - strict-uri-encode@2.0.0: {} - - string-argv@0.0.2: {} - string-argv@0.3.2: {} - string-width@2.1.1: - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -20514,14 +17437,6 @@ snapshots: is-obj: 1.0.1 is-regexp: 1.0.0 - strip-ansi@4.0.0: - dependencies: - ansi-regex: 3.0.1 - - strip-ansi@5.2.0: - dependencies: - ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -20540,26 +17455,14 @@ snapshots: dependencies: is-natural-number: 4.0.1 - strip-eof@1.0.0: {} - strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} - - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} - strip-outer@1.0.1: - dependencies: - escape-string-regexp: 1.0.5 - strnum@1.0.5: {} strtok3@6.3.0: @@ -20567,60 +17470,55 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 - strtok3@9.1.1: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 5.3.1 - stubborn-fs@1.2.5: {} - stylehacks@7.0.4(postcss@8.4.47): + stylehacks@7.0.4(postcss@8.4.49): dependencies: browserslist: 4.24.0 - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 - stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.10.0(typescript@5.7.2)): + stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@16.11.0(typescript@5.7.2)): dependencies: postcss-html: 1.7.0 - stylelint: 16.10.0(typescript@5.7.2) + stylelint: 16.11.0(typescript@5.7.2) - stylelint-config-recess-order@5.1.1(stylelint@16.10.0(typescript@5.7.2)): + stylelint-config-recess-order@5.1.1(stylelint@16.11.0(typescript@5.7.2)): dependencies: - stylelint: 16.10.0(typescript@5.7.2) - stylelint-order: 6.0.4(stylelint@16.10.0(typescript@5.7.2)) + stylelint: 16.11.0(typescript@5.7.2) + stylelint-order: 6.0.4(stylelint@16.11.0(typescript@5.7.2)) - stylelint-config-recommended@14.0.1(stylelint@16.10.0(typescript@5.7.2)): + stylelint-config-recommended@14.0.1(stylelint@16.11.0(typescript@5.7.2)): dependencies: - stylelint: 16.10.0(typescript@5.7.2) + stylelint: 16.11.0(typescript@5.7.2) - stylelint-config-standard@36.0.1(stylelint@16.10.0(typescript@5.7.2)): + stylelint-config-standard@36.0.1(stylelint@16.11.0(typescript@5.7.2)): dependencies: - stylelint: 16.10.0(typescript@5.7.2) - stylelint-config-recommended: 14.0.1(stylelint@16.10.0(typescript@5.7.2)) + stylelint: 16.11.0(typescript@5.7.2) + stylelint-config-recommended: 14.0.1(stylelint@16.11.0(typescript@5.7.2)) - stylelint-formatter-pretty@4.0.1(stylelint@16.10.0(typescript@5.7.2)): + stylelint-formatter-pretty@4.0.1(stylelint@16.11.0(typescript@5.7.2)): dependencies: ansi-escapes: 7.0.0 log-symbols: 7.0.0 picocolors: 1.1.1 plur: 5.1.0 string-width: 7.2.0 - stylelint: 16.10.0(typescript@5.7.2) + stylelint: 16.11.0(typescript@5.7.2) supports-hyperlinks: 3.1.0 - stylelint-order@6.0.4(stylelint@16.10.0(typescript@5.7.2)): + stylelint-order@6.0.4(stylelint@16.11.0(typescript@5.7.2)): dependencies: - postcss: 8.4.47 - postcss-sorting: 8.0.2(postcss@8.4.47) - stylelint: 16.10.0(typescript@5.7.2) + postcss: 8.4.49 + postcss-sorting: 8.0.2(postcss@8.4.49) + stylelint: 16.11.0(typescript@5.7.2) - stylelint@16.10.0(typescript@5.7.2): + stylelint@16.11.0(typescript@5.7.2): dependencies: '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) '@csstools/css-tokenizer': 3.0.3 - '@csstools/media-query-list-parser': 3.0.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) - '@csstools/selector-specificity': 4.0.0(postcss-selector-parser@6.1.2) + '@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0) '@dual-bundle/import-meta-resolve': 4.1.0 balanced-match: 2.0.0 colord: 2.9.3 @@ -20638,38 +17536,27 @@ snapshots: ignore: 6.0.2 imurmurhash: 0.1.4 is-plain-object: 5.0.0 - known-css-properties: 0.34.0 + known-css-properties: 0.35.0 mathml-tag-names: 2.1.3 meow: 13.2.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.47 + postcss: 8.4.49 postcss-resolve-nested-selector: 0.1.6 - postcss-safe-parser: 7.0.1(postcss@8.4.47) - postcss-selector-parser: 6.1.2 + postcss-safe-parser: 7.0.1(postcss@8.4.49) + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 resolve-from: 5.0.0 string-width: 4.2.3 supports-hyperlinks: 3.1.0 svg-tags: 1.0.0 - table: 6.8.2 + table: 6.9.0 write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color - typescript - sumchecker@3.0.1: - dependencies: - debug: 4.3.7 - transitivePeerDependencies: - - supports-color - - super-regex@1.0.0: - dependencies: - function-timeout: 1.0.2 - time-span: 5.1.0 - superjson@2.2.1: dependencies: copy-anything: 3.0.5 @@ -20699,8 +17586,8 @@ snapshots: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.47 - postcss-scss: 4.0.9(postcss@8.4.47) + postcss: 8.4.49 + postcss-scss: 4.0.9(postcss@8.4.49) svg-tags@1.0.0: {} @@ -20760,7 +17647,7 @@ snapshots: array-back: 6.2.2 wordwrapjs: 5.1.0 - table@6.8.2: + table@6.9.0: dependencies: ajv: 8.17.1 lodash.truncate: 4.4.2 @@ -20809,6 +17696,7 @@ snapshots: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + optional: true tar@7.4.3: dependencies: @@ -20819,15 +17707,8 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - temp-dir@1.0.0: {} - temp-dir@2.0.0: {} - tempfile@2.0.0: - dependencies: - temp-dir: 1.0.0 - uuid: 3.4.0 - tempy@0.6.0: dependencies: is-stream: 2.0.1 @@ -20835,19 +17716,6 @@ snapshots: type-fest: 0.16.0 unique-string: 2.0.0 - tempy@1.0.1: - dependencies: - del: 6.1.1 - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - - term-img@5.0.0: - dependencies: - ansi-escapes: 4.3.2 - iterm2-version: 4.2.0 - term-img@7.0.0: dependencies: ansi-escapes: 7.0.0 @@ -20859,19 +17727,9 @@ snapshots: dependencies: is-windows: 0.1.1 - terminal-image@1.2.1: - dependencies: - chalk: 4.1.2 - jimp: 0.14.0 - log-update: 4.0.0 - render-gif: 2.0.4 - term-img: 5.0.0 - transitivePeerDependencies: - - debug - terminal-image@3.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 image-dimensions: 2.3.0 jimp: 0.22.12 log-update: 6.1.0 @@ -20886,32 +17744,7 @@ snapshots: ansi-escapes: 5.0.0 supports-hyperlinks: 2.3.0 - terminalizer@0.12.0: - dependencies: - '@homebridge/node-pty-prebuilt-multiarch': 0.11.14 - async: 2.6.4 - async-promises: 0.2.3 - axios: 1.7.8 - chalk: 2.4.2 - death: 1.1.0 - deepmerge: 2.2.1 - electron: 25.9.8 - fs-extra: 5.0.0 - gif-encoder: 0.6.1 - inquirer: 6.5.2 - js-yaml: 3.14.1 - lodash: 4.17.21 - performance-now: 2.1.0 - pngjs: 3.4.0 - progress: 2.0.3 - require-dir: 1.2.0 - string-argv: 0.0.2 - tmp: 0.2.3 - uuid: 10.0.0 - yargs: 17.7.2 - transitivePeerDependencies: - - debug - - supports-color + terminal-size@4.0.0: {} terser@5.36.0: dependencies: @@ -20936,15 +17769,10 @@ snapshots: through@2.3.8: {} - time-span@5.1.0: - dependencies: - convert-hrtime: 5.0.0 - - timed-out@4.0.1: {} - timm@1.7.1: {} - tiny-inflate@1.0.3: {} + tiny-inflate@1.0.3: + optional: true tiny-invariant@1.3.3: {} @@ -20959,11 +17787,6 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 - tinyglobby@0.2.9: - dependencies: - fdir: 6.4.2(picomatch@4.0.2) - picomatch: 4.0.2 - tinygradient@1.1.5: dependencies: '@types/tinycolor2': 1.4.6 @@ -20979,8 +17802,6 @@ snapshots: dependencies: os-tmpdir: 1.0.2 - tmp@0.2.3: {} - to-buffer@1.1.1: {} to-fast-properties@2.0.0: {} @@ -20994,11 +17815,6 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 - token-types@6.0.0: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - toml-eslint-parser@0.10.0: dependencies: eslint-visitor-keys: 3.4.3 @@ -21024,18 +17840,25 @@ snapshots: trim-lines@3.0.1: {} - trim-newlines@3.0.1: {} - - trim-repeated@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - trough@1.0.5: {} + trough@2.2.0: {} + ts-api-utils@1.3.0(typescript@5.6.3): dependencies: typescript: 5.6.3 + ts-json-schema-generator@2.3.0: + dependencies: + '@types/json-schema': 7.0.15 + commander: 12.1.0 + glob: 10.4.5 + json5: 2.2.3 + normalize-path: 3.0.0 + safe-stable-stringify: 2.5.0 + tslib: 2.8.1 + typescript: 5.7.2 + ts-unused-exports@9.0.5(typescript@5.6.3): dependencies: chalk: 4.1.2 @@ -21049,8 +17872,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - tslib@2.8.1: {} tsx@4.19.2: @@ -21093,27 +17914,12 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.13.1: - optional: true - type-fest@0.16.0: {} - type-fest@0.18.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} - - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - type-fest@1.4.0: {} - type-fest@2.19.0: {} - - type-fest@3.13.1: {} - type-fest@4.29.1: {} typed-array-buffer@1.0.2: @@ -21148,10 +17954,6 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typedarray-to-buffer@3.1.5: - dependencies: - is-typedarray: 1.0.0 - typedarray.prototype.slice@1.0.3: dependencies: call-bind: 1.0.7 @@ -21170,15 +17972,15 @@ snapshots: lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.24.0 + shiki: 1.24.1 typescript: 5.7.2 - yaml: 2.6.1 + yaml: 2.7.0 - typescript-eslint@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3): + typescript-eslint@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.7.2) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) + '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.7.2) + '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@2.4.2))(typescript@5.6.3) optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: @@ -21207,6 +18009,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true unbox-primitive@1.0.2: dependencies: @@ -21215,37 +18018,38 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - unbuild@2.0.0(typescript@5.7.2): + unbuild@3.2.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)): dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@3.29.5) - '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.5) - '@rollup/plugin-json': 6.1.0(rollup@3.29.5) - '@rollup/plugin-node-resolve': 15.3.0(rollup@3.29.5) - '@rollup/plugin-replace': 5.0.7(rollup@3.29.5) - '@rollup/pluginutils': 5.1.2(rollup@3.29.5) - chalk: 5.3.0 + '@rollup/plugin-alias': 5.1.1(rollup@4.29.1) + '@rollup/plugin-commonjs': 28.0.2(rollup@4.29.1) + '@rollup/plugin-json': 6.1.0(rollup@4.29.1) + '@rollup/plugin-node-resolve': 16.0.0(rollup@4.29.1) + '@rollup/plugin-replace': 6.0.2(rollup@4.29.1) + '@rollup/pluginutils': 5.1.4(rollup@4.29.1) citty: 0.1.6 - consola: 3.2.3 + consola: 3.3.3 defu: 6.1.4 - esbuild: 0.19.12 - globby: 13.2.2 + esbuild: 0.24.2 hookable: 5.5.3 - jiti: 1.21.6 - magic-string: 0.30.12 - mkdist: 1.6.0(typescript@5.7.2) - mlly: 1.7.2 + jiti: 2.4.2 + magic-string: 0.30.17 + mkdist: 2.2.0(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)) + mlly: 1.7.3 pathe: 1.1.2 - pkg-types: 1.2.1 + pkg-types: 1.3.0 pretty-bytes: 6.1.1 - rollup: 3.29.5 - rollup-plugin-dts: 6.1.1(rollup@3.29.5)(typescript@5.7.2) + rollup: 4.29.1 + rollup-plugin-dts: 6.1.1(rollup@4.29.1)(typescript@5.7.2) scule: 1.3.0 - untyped: 1.5.1 + tinyglobby: 0.2.10 + ufo: 1.5.4 + untyped: 1.5.2 optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: - sass - supports-color + - vue - vue-tsc unbzip2-stream@1.4.3: @@ -21255,8 +18059,6 @@ snapshots: underscore@1.13.7: {} - undici-types@5.26.5: {} - undici-types@6.20.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -21276,11 +18078,22 @@ snapshots: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 + optional: true unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + unified@9.2.2: dependencies: '@types/unist': 2.0.11 @@ -21297,10 +18110,6 @@ snapshots: dependencies: crypto-random-string: 2.0.0 - unique-string@3.0.0: - dependencies: - crypto-random-string: 4.0.0 - unist-util-is@4.1.0: {} unist-util-is@6.0.0: @@ -21339,14 +18148,15 @@ snapshots: universalify@2.0.1: {} - untyped@1.5.1: + untyped@1.5.2: dependencies: '@babel/core': 7.26.0 - '@babel/standalone': 7.25.8 - '@babel/types': 7.25.8 + '@babel/standalone': 7.26.4 + '@babel/types': 7.26.3 + citty: 0.1.6 defu: 6.1.4 - jiti: 2.3.3 - mri: 1.2.0 + jiti: 2.4.2 + knitwork: 1.2.0 scule: 1.3.0 transitivePeerDependencies: - supports-color @@ -21367,27 +18177,10 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - update-notifier@6.0.2: - dependencies: - boxen: 7.1.1 - chalk: 5.3.0 - configstore: 6.0.0 - has-yarn: 3.0.0 - import-lazy: 4.0.0 - is-ci: 3.0.1 - is-installed-globally: 0.4.0 - is-npm: 6.0.0 - is-yarn-global: 0.4.1 - latest-version: 7.0.0 - pupa: 3.1.0 - semver: 7.6.3 - semver-diff: 4.0.0 - xdg-basedir: 5.1.0 - update-notifier@7.3.1: dependencies: boxen: 8.0.1 - chalk: 5.3.0 + chalk: 5.4.1 configstore: 7.0.0 is-in-ci: 1.0.0 is-installed-globally: 1.0.0 @@ -21403,16 +18196,6 @@ snapshots: dependencies: punycode: 2.3.1 - url-parse-lax@1.0.0: - dependencies: - prepend-http: 1.0.4 - - url-parse-lax@3.0.0: - dependencies: - prepend-http: 2.0.0 - - url-to-options@1.0.1: {} - url@0.11.4: dependencies: punycode: 1.4.1 @@ -21428,17 +18211,8 @@ snapshots: util-deprecate@1.0.2: {} - utility-types@3.11.0: {} - - uuid@10.0.0: {} - uuid@3.4.0: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-npm-package-name@6.0.0: {} verror@1.10.0: @@ -21469,13 +18243,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.8(@types/node@22.10.1)(terser@5.36.0): + vite-node@2.1.8(@types/node@22.10.5)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.7 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.9(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.9(@types/node@22.10.5)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -21492,43 +18266,43 @@ snapshots: picocolors: 1.1.1 picomatch: 2.3.1 - vite-plugin-pwa@0.21.0(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0): + vite-plugin-pwa@0.21.1(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0))(workbox-build@7.3.0)(workbox-window@7.3.0): dependencies: debug: 4.3.7 pretty-bytes: 6.1.1 tinyglobby: 0.2.10 - vite: 5.4.9(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.9(@types/node@22.10.5)(terser@5.36.0) workbox-build: 7.3.0 workbox-window: 7.3.0 transitivePeerDependencies: - supports-color - vite-plugin-restart@0.4.1(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0)): + vite-plugin-restart@0.4.2(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0)): dependencies: micromatch: 4.0.8 - vite: 5.4.9(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.9(@types/node@22.10.5)(terser@5.36.0) - vite@5.4.11(@types/node@22.10.1)(terser@5.36.0): + vite@5.4.11(@types/node@22.10.5)(terser@5.36.0): dependencies: esbuild: 0.21.5 - postcss: 8.4.47 - rollup: 4.24.0 + postcss: 8.4.49 + rollup: 4.29.1 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 fsevents: 2.3.3 terser: 5.36.0 - vite@5.4.9(@types/node@22.10.1)(terser@5.36.0): + vite@5.4.9(@types/node@22.10.5)(terser@5.36.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.24.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 fsevents: 2.3.3 terser: 5.36.0 - vitepress-plugin-group-icons@1.3.0: + vitepress-plugin-group-icons@1.3.2: dependencies: '@iconify-json/logos': 1.2.3 '@iconify-json/vscode-icons': 1.2.3 @@ -21536,22 +18310,22 @@ snapshots: transitivePeerDependencies: - supports-color - vitepress-plugin-rss@0.3.0(vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)): + vitepress-plugin-rss@0.3.0(vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2)): dependencies: '@sugarat/theme-shared': 0.0.3 feed: 4.2.2 - vitepress: 1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2) + vitepress: 1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2) - vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.1)(axios@1.7.8)(postcss@8.4.47)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2): + vitepress@1.5.0(@algolia/client-search@5.15.0)(@types/node@22.10.5)(axios@1.7.8)(postcss@8.4.49)(search-insights@2.17.3)(terser@5.36.0)(typescript@5.7.2): dependencies: '@docsearch/css': 3.8.0 '@docsearch/js': 3.8.0(@algolia/client-search@5.15.0)(search-insights@2.17.3) '@iconify-json/simple-icons': 1.2.13 - '@shikijs/core': 1.24.0 + '@shikijs/core': 1.24.4 '@shikijs/transformers': 1.24.0 - '@shikijs/types': 1.24.0 + '@shikijs/types': 1.24.4 '@types/markdown-it': 14.1.2 - '@vitejs/plugin-vue': 5.2.1(vite@5.4.11(@types/node@22.10.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) + '@vitejs/plugin-vue': 5.2.1(vite@5.4.11(@types/node@22.10.5)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2)) '@vue/devtools-api': 7.6.7 '@vue/shared': 3.5.13 '@vueuse/core': 11.3.0(vue@3.5.13(typescript@5.7.2)) @@ -21559,11 +18333,11 @@ snapshots: focus-trap: 7.6.2 mark.js: 8.11.1 minisearch: 7.1.1 - shiki: 1.24.0 - vite: 5.4.11(@types/node@22.10.1)(terser@5.36.0) + shiki: 1.24.1 + vite: 5.4.11(@types/node@22.10.5)(terser@5.36.0) vue: 3.5.13(typescript@5.7.2) optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -21592,10 +18366,10 @@ snapshots: - typescript - universal-cookie - vitest@2.1.8(@types/node@22.10.1)(terser@5.36.0): + vitest@2.1.8(@types/node@22.10.5)(terser@5.36.0): dependencies: '@vitest/expect': 2.1.8 - '@vitest/mocker': 2.1.8(vite@5.4.9(@types/node@22.10.1)(terser@5.36.0)) + '@vitest/mocker': 2.1.8(vite@5.4.9(@types/node@22.10.5)(terser@5.36.0)) '@vitest/pretty-format': 2.1.8 '@vitest/runner': 2.1.8 '@vitest/snapshot': 2.1.8 @@ -21611,11 +18385,11 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.9(@types/node@22.10.1)(terser@5.36.0) - vite-node: 2.1.8(@types/node@22.10.1)(terser@5.36.0) + vite: 5.4.9(@types/node@22.10.5)(terser@5.36.0) + vite-node: 2.1.8(@types/node@22.10.5)(terser@5.36.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.10.1 + '@types/node': 22.10.5 transitivePeerDependencies: - less - lightningcss @@ -21631,10 +18405,10 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.7.2) - vue-eslint-parser@9.4.3(eslint@9.14.0(jiti@2.3.3)): + vue-eslint-parser@9.4.3(eslint@9.14.0(jiti@2.4.2)): dependencies: debug: 4.3.7 - eslint: 9.14.0(jiti@2.3.3) + eslint: 9.14.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -21670,8 +18444,6 @@ snapshots: dependencies: defaults: 1.0.4 - weak-lru-cache@1.2.2: {} - webidl-conversions@3.0.1: {} webidl-conversions@4.0.2: {} @@ -21723,10 +18495,7 @@ snapshots: wide-align@1.1.5: dependencies: string-width: 4.2.3 - - widest-line@4.0.1: - dependencies: - string-width: 5.1.2 + optional: true widest-line@5.0.0: dependencies: @@ -21851,12 +18620,6 @@ snapshots: '@types/trusted-types': 2.0.7 workbox-core: 7.3.0 - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -21877,13 +18640,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@3.0.3: - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 @@ -21934,11 +18690,10 @@ snapshots: y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@3.1.1: {} - yallist@4.0.0: {} + yallist@4.0.0: + optional: true yallist@5.0.0: {} @@ -21946,13 +18701,13 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.6.1 + yaml: 2.7.0 yaml@1.10.2: {} yaml@2.5.1: {} - yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@20.2.9: {} @@ -21995,6 +18750,10 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.5.2 + zod-to-json-schema@3.24.1(zod@3.23.8): + dependencies: + zod: 3.23.8 + zod-validation-error@3.4.0(zod@3.23.8): dependencies: zod: 3.23.8