From 78b48ce344009eec50c933d7dd5d1578af227e40 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 17 Sep 2024 13:50:34 +0700 Subject: [PATCH 01/53] feat: initial commit for dashboard --- agrilink_vocpro/.editorconfig | 16 + agrilink_vocpro/.gitignore | 42 + agrilink_vocpro/.vscode/extensions.json | 4 + agrilink_vocpro/.vscode/launch.json | 20 + agrilink_vocpro/.vscode/tasks.json | 42 + agrilink_vocpro/README.md | 27 + agrilink_vocpro/angular.json | 113 + agrilink_vocpro/package-lock.json | 14504 ++++++++++++++++ agrilink_vocpro/package.json | 42 + agrilink_vocpro/public/favicon.ico | Bin 0 -> 15086 bytes agrilink_vocpro/src/app/app.component.html | 1 + agrilink_vocpro/src/app/app.component.scss | 0 agrilink_vocpro/src/app/app.component.spec.ts | 29 + agrilink_vocpro/src/app/app.component.ts | 13 + agrilink_vocpro/src/app/app.config.ts | 8 + agrilink_vocpro/src/app/app.routes.ts | 26 + .../pages/dashboard/dashboard.component.html | 66 + .../pages/dashboard/dashboard.component.scss | 68 + .../dashboard/dashboard.component.spec.ts | 23 + .../pages/dashboard/dashboard.component.ts | 43 + .../dashboard/layouts/layouts.component.html | 10 + .../dashboard/layouts/layouts.component.scss | 4 + .../layouts/layouts.component.spec.ts | 23 + .../dashboard/layouts/layouts.component.ts | 14 + .../layouts/sidebar/sidebar.component.html | 25 + .../layouts/sidebar/sidebar.component.scss | 24 + .../layouts/sidebar/sidebar.component.spec.ts | 23 + .../layouts/sidebar/sidebar.component.ts | 13 + .../gauge-chart/gauge-chart.component.html | 11 + .../gauge-chart/gauge-chart.component.scss | 34 + .../gauge-chart/gauge-chart.component.spec.ts | 23 + .../page/gauge-chart/gauge-chart.component.ts | 101 + .../dashboard/page/graph/graph.component.html | 16 + .../dashboard/page/graph/graph.component.scss | 44 + .../page/graph/graph.component.spec.ts | 23 + .../dashboard/page/graph/graph.component.ts | 221 + agrilink_vocpro/src/index.html | 27 + agrilink_vocpro/src/main.ts | 6 + agrilink_vocpro/src/styles.scss | 3 + agrilink_vocpro/tsconfig.app.json | 15 + agrilink_vocpro/tsconfig.json | 33 + agrilink_vocpro/tsconfig.spec.json | 15 + 42 files changed, 15795 insertions(+) create mode 100644 agrilink_vocpro/.editorconfig create mode 100644 agrilink_vocpro/.gitignore create mode 100644 agrilink_vocpro/.vscode/extensions.json create mode 100644 agrilink_vocpro/.vscode/launch.json create mode 100644 agrilink_vocpro/.vscode/tasks.json create mode 100644 agrilink_vocpro/README.md create mode 100644 agrilink_vocpro/angular.json create mode 100644 agrilink_vocpro/package-lock.json create mode 100644 agrilink_vocpro/package.json create mode 100644 agrilink_vocpro/public/favicon.ico create mode 100644 agrilink_vocpro/src/app/app.component.html create mode 100644 agrilink_vocpro/src/app/app.component.scss create mode 100644 agrilink_vocpro/src/app/app.component.spec.ts create mode 100644 agrilink_vocpro/src/app/app.component.ts create mode 100644 agrilink_vocpro/src/app/app.config.ts create mode 100644 agrilink_vocpro/src/app/app.routes.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/dashboard.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts create mode 100644 agrilink_vocpro/src/index.html create mode 100644 agrilink_vocpro/src/main.ts create mode 100644 agrilink_vocpro/src/styles.scss create mode 100644 agrilink_vocpro/tsconfig.app.json create mode 100644 agrilink_vocpro/tsconfig.json create mode 100644 agrilink_vocpro/tsconfig.spec.json diff --git a/agrilink_vocpro/.editorconfig b/agrilink_vocpro/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/agrilink_vocpro/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/agrilink_vocpro/.gitignore b/agrilink_vocpro/.gitignore new file mode 100644 index 0000000..cc7b141 --- /dev/null +++ b/agrilink_vocpro/.gitignore @@ -0,0 +1,42 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/agrilink_vocpro/.vscode/extensions.json b/agrilink_vocpro/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/agrilink_vocpro/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/agrilink_vocpro/.vscode/launch.json b/agrilink_vocpro/.vscode/launch.json new file mode 100644 index 0000000..925af83 --- /dev/null +++ b/agrilink_vocpro/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/agrilink_vocpro/.vscode/tasks.json b/agrilink_vocpro/.vscode/tasks.json new file mode 100644 index 0000000..a298b5b --- /dev/null +++ b/agrilink_vocpro/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/agrilink_vocpro/README.md b/agrilink_vocpro/README.md new file mode 100644 index 0000000..26c6fa8 --- /dev/null +++ b/agrilink_vocpro/README.md @@ -0,0 +1,27 @@ +# AgrilinkVocpro + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.4. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/agrilink_vocpro/angular.json b/agrilink_vocpro/angular.json new file mode 100644 index 0000000..752110a --- /dev/null +++ b/agrilink_vocpro/angular.json @@ -0,0 +1,113 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "agrilink_vocpro": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/agrilink_vocpro", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.scss", + "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/bootstrap-icons/font/bootstrap-icons.css" + ], + "scripts": [ + "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" + ] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kB", + "maximumError": "4kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "agrilink_vocpro:build:production" + }, + "development": { + "buildTarget": "agrilink_vocpro:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.scss", + "node_modules/bootstrap/dist/css/bootstrap.min.css", + "node_modules/bootstrap-icons/font/bootstrap-icons.css" + ], + "scripts": [ + "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" + ] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/agrilink_vocpro/package-lock.json b/agrilink_vocpro/package-lock.json new file mode 100644 index 0000000..7c42a2f --- /dev/null +++ b/agrilink_vocpro/package-lock.json @@ -0,0 +1,14504 @@ +{ + "name": "agrilink-vocpro", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "agrilink-vocpro", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", + "chart.js": "^4.4.4", + "highcharts-angular": "^4.0.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.4", + "@angular/cli": "^18.2.4", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.5.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1802.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.4.tgz", + "integrity": "sha512-VH7AwGng1zuWPTJoH1IgHYeNhqZIgzlwDx39JPmArZAW/WZHDILWB7ipbTNw0R4U4VncrXJqDmMVex7NdHP6sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.4.tgz", + "integrity": "sha512-zLDstS95Yb7iBA1ZCYe3LsOLpIhr0ZC3sZ03PhVvAGbVRGSbQNnhQRZLKMk+LDhYJiG+eNFQGLfU3RfZrGds7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.4", + "@angular-devkit/build-webpack": "0.1802.4", + "@angular-devkit/core": "18.2.4", + "@angular/build": "18.2.4", + "@babel/core": "7.25.2", + "@babel/generator": "7.25.0", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.25.0", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/runtime": "7.25.0", + "@discoveryjs/json-ext": "0.6.1", + "@ngtools/webpack": "18.2.4", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.20", + "babel-loader": "9.1.3", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.23.0", + "fast-glob": "3.3.2", + "http-proxy-middleware": "3.0.0", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "magic-string": "0.30.11", + "mini-css-extract-plugin": "2.9.0", + "mrmime": "2.0.0", + "open": "10.1.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.41", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.77.6", + "sass-loader": "16.0.0", + "semver": "7.6.3", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.31.6", + "tree-kill": "1.2.2", + "tslib": "2.6.3", + "vite": "5.4.0", + "watchpack": "2.4.1", + "webpack": "5.94.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.0.4", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.23.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^18.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1802.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.4.tgz", + "integrity": "sha512-juaDoguYccObm2xnzRDRlOtiL7ZyZcSAyiyls6QuO8hoo/h6phdHALJkUhI9+SIhCRQ6eUQtolC7hN3J+FZKnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.4", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.4.tgz", + "integrity": "sha512-svlgZ0vbLrfNJAQE5WePAutcYIyA7C0OfzKSTMsfV2X1I+1blYDaZIu/ocnHqofMHu6ZqdSaaU/p/rieqU8fcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.4.tgz", + "integrity": "sha512-s2WdUhyLlKj5kOjb6vrvJg9/31KvgyRJGjy7PnzS43tpwF9MLuM3AYhuJsXHPhx+i0nyWn/Jnd8ZLjMzXljSxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.11", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.4.tgz", + "integrity": "sha512-ajjXpLD+SyxbHnmhj2ZvYpXneviOjcBgU9L2UX4OVS0jVWxCNHLhJrcMqtqFHA6U5fPnhPNR9cmnt6tmqri0rA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4" + } + }, + "node_modules/@angular/build": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.4.tgz", + "integrity": "sha512-GVs7O7wxNMJCkqh6Vv2u9GEArWg9jyEt8Fofd6CJGzxKBYQ4hR5gjzL/lU6kNFiMcioS1wm1f6qtJtgilUO+9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.4", + "@babel/core": "7.25.2", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.22", + "@vitejs/plugin-basic-ssl": "1.1.0", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.23.0", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "listr2": "8.2.4", + "lmdb": "3.0.13", + "magic-string": "0.30.11", + "mrmime": "2.0.0", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.20.0", + "sass": "1.77.6", + "semver": "7.6.3", + "vite": "5.4.0", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cli": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.4.tgz", + "integrity": "sha512-n+Y2xlgcpTZ+MZmycf2b3ceVvANDJFkDEodobVtyG63WvGOhkZ3aGhT7sHguKpAQwJLicSf8zF2z+v1Yi0DvRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.4", + "@angular-devkit/core": "18.2.4", + "@angular-devkit/schematics": "18.2.4", + "@inquirer/prompts": "5.3.8", + "@listr2/prompt-adapter-inquirer": "2.0.15", + "@schematics/angular": "18.2.4", + "@yarnpkg/lockfile": "1.1.0", + "ini": "4.1.3", + "jsonc-parser": "3.3.1", + "listr2": "8.2.4", + "npm-package-arg": "11.0.3", + "npm-pick-manifest": "9.1.0", + "pacote": "18.0.6", + "resolve": "1.22.8", + "semver": "7.6.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.4.tgz", + "integrity": "sha512-flUaKhdr8KvtjH0cLC6Rrjirt8GsiFlrmZLZplr784O3Gkei2VBBNFoopgmlEzbVGPiIG5QlFZH9yvah6JPQZw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.4.tgz", + "integrity": "sha512-o3ngFr1Bjt7cKOu4DSZJGCUF9YPTxJee97wFon2eNFj6FFNTmnGwAvsnJjHBMmk90fmZLC2/HpPdhYz7WprMZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.4.tgz", + "integrity": "sha512-BIp5zr+npqSs/4KWPxwKdn7+sjo008ieNOQDlXyQms9BKlxx/gDnj7W2TsxhrkDTYCIHF73fJZ7u2U8Qy4JWfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.25.2", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "18.2.4", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/core": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.4.tgz", + "integrity": "sha512-ulYmYpI/ZVQ5BL38rBy4DS/9wgGWmVD9Uo6tcrLqCzt1G1G2nKwseZv009536pHfk6dj2HdPSkpcerhWh57DWw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.10" + } + }, + "node_modules/@angular/forms": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.4.tgz", + "integrity": "sha512-rlLhReauUz6jhLCEkGabLqqF6xLaTfvxafuj2ojzcqoKGSZcXDIM/UOSoWX756B8NtrpsuglpGBZjZlsrAZGsg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.4.tgz", + "integrity": "sha512-ddzq5MyPvFyTv0kUe8U9fbhE1nZtLYBCFKDqICrzHXiVRAdqLv6qtE5PtbURrdspSy1u/YEGV4LdkNJK3UgnZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.2.4", + "@angular/common": "18.2.4", + "@angular/core": "18.2.4" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.4.tgz", + "integrity": "sha512-0nA04zJueGzdnl37TJ7guDCrzxYS4fjqgvYKiOpFktpMHPuNrBlAQo5YA7u20HGFG3i47PQh7hEWhQaqcXXpQw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/compiler": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4" + } + }, + "node_modules/@angular/router": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.4.tgz", + "integrity": "sha512-kYNHD3K1Xou2PRMqbG2tVahtMobgDlhwHdMB7G5oFHg6K13gQ2TmopF1U5A2wYtIMdsC+AkVGIJEOxQN8fmgcA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", + "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", + "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", + "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz", + "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", + "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz", + "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz", + "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", + "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^2.4.7", + "@inquirer/confirm": "^3.1.22", + "@inquirer/editor": "^2.1.22", + "@inquirer/expand": "^2.1.22", + "@inquirer/input": "^2.2.9", + "@inquirer/number": "^1.0.10", + "@inquirer/password": "^2.1.22", + "@inquirer/rawlist": "^2.2.4", + "@inquirer/search": "^1.0.7", + "@inquirer/select": "^2.4.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz", + "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz", + "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "license": "MIT" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", + "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^1.5.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 6" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz", + "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz", + "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz", + "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz", + "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz", + "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz", + "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ngtools/webpack": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.4.tgz", + "integrity": "sha512-JVDRexu3q7lg2oqJG36RtX7cqTheoZRwg2HhMV8hYXUDL0fyOrv2galwTCgXrx7vAjlx45L2uR2kuWbgW0VVcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.4.tgz", + "integrity": "sha512-GxrPv4eOPrjMKoAVhch9eprW8H/DFhBy5Zgp7CgGui9NprYkkubxw/yyo11WfR5CFZ/q5AfsjV76dPCkhLwLmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "@angular-devkit/schematics": "18.2.4", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", + "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.11.3.tgz", + "integrity": "sha512-+3lpHrCw/it2/7lBL15VR0HEumaBss0+f/Lb6ZvHISn1mlK83jjFpooTLsMWbIjJMDjDjOExMsTxnXSIT4k4ww==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chart.js": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.24", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.24.tgz", + "integrity": "sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", + "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highcharts": { + "version": "11.4.8", + "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.8.tgz", + "integrity": "sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA==", + "license": "https://www.highcharts.com/license", + "peer": true + }, + "node_modules/highcharts-angular": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/highcharts-angular/-/highcharts-angular-4.0.1.tgz", + "integrity": "sha512-KAy+RRJyrDDKFYLFr3p2O+ups3ZyDP3CoakHuO3u+ZUCm85ziJ29WT1qPjzp2NBupYt+MGZV/DAyPMi5iyAIHw==", + "license": "SEE LICENSE IN ", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "highcharts": ">=9.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.2.0.tgz", + "integrity": "sha512-tSAtdrvWybZkQmmaIoDgnvHG8ORUNw5kEVlO5CvrXj02Jjr9TZrmjFq7FUiOUzJiOP2wLGYT6PgrQgQF4R1xiw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz", + "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.13", + "@lmdb/lmdb-darwin-x64": "3.0.13", + "@lmdb/lmdb-linux-arm": "3.0.13", + "@lmdb/lmdb-linux-arm64": "3.0.13", + "@lmdb/lmdb-linux-x64": "3.0.13", + "@lmdb/lmdb-win32-x64": "3.0.13" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "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" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", + "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", + "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", + "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" + } + } +} diff --git a/agrilink_vocpro/package.json b/agrilink_vocpro/package.json new file mode 100644 index 0000000..0b57c3c --- /dev/null +++ b/agrilink_vocpro/package.json @@ -0,0 +1,42 @@ +{ + "name": "agrilink-vocpro", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "bootstrap": "^5.3.3", + "bootstrap-icons": "^1.11.3", + "chart.js": "^4.4.4", + "highcharts-angular": "^4.0.1", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.4", + "@angular/cli": "^18.2.4", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.5.2" + } +} diff --git a/agrilink_vocpro/public/favicon.ico b/agrilink_vocpro/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/agrilink_vocpro/src/app/app.component.html b/agrilink_vocpro/src/app/app.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/agrilink_vocpro/src/app/app.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/agrilink_vocpro/src/app/app.component.scss b/agrilink_vocpro/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/agrilink_vocpro/src/app/app.component.spec.ts b/agrilink_vocpro/src/app/app.component.spec.ts new file mode 100644 index 0000000..f36d12a --- /dev/null +++ b/agrilink_vocpro/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have the 'agrilink_vocpro' title`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('agrilink_vocpro'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, agrilink_vocpro'); + }); +}); diff --git a/agrilink_vocpro/src/app/app.component.ts b/agrilink_vocpro/src/app/app.component.ts new file mode 100644 index 0000000..628be1e --- /dev/null +++ b/agrilink_vocpro/src/app/app.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.scss' +}) +export class AppComponent { + title = 'agrilink_vocpro'; +} diff --git a/agrilink_vocpro/src/app/app.config.ts b/agrilink_vocpro/src/app/app.config.ts new file mode 100644 index 0000000..a1e7d6f --- /dev/null +++ b/agrilink_vocpro/src/app/app.config.ts @@ -0,0 +1,8 @@ +import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] +}; diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts new file mode 100644 index 0000000..cce54bf --- /dev/null +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -0,0 +1,26 @@ +import { Routes } from '@angular/router'; +import { DashboardComponent } from './pages/dashboard/dashboard.component'; +import { LayoutsComponent } from './pages/dashboard/layouts/layouts.component'; +import { GraphComponent } from './pages/dashboard/page/graph/graph.component'; + +export const routes: Routes = [ + { + path: '', + redirectTo:'dashboard', + pathMatch:'full' + }, + { + path: '', + component: LayoutsComponent, + children:[ + { + path: 'dashboard', + component: DashboardComponent, + }, + { + path: 'graph', + component: GraphComponent + }, + ] + } +]; diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html new file mode 100644 index 0000000..08c5d29 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -0,0 +1,66 @@ +
+
+

Good Evening

+

Welcome to your management system

+
+
+

Latets Update: 06/09/2024 15:39:21

+
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+ +
+
Monitoring
+
+ +
+
+
diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss new file mode 100644 index 0000000..c97271e --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -0,0 +1,68 @@ +.container { + font-family: "Poppins", sans-serif; +} + +.title { + color: #49473C; + font-size: 30px; + margin-top: 10px; +} + +.description { + color: #49473C; + font-size: 15px; + margin-top: 10px; +} + +.update{ + color: #49473C; + font-size: 15px; + margin-top: 18px; +} + +.card-container { + display: flex; + flex-wrap: wrap; + gap: 20px; + margin-top: 20px; + justify-content: space-between; +} + +.card-parameter{ + border: 1px solid #16423C; + color: #16423C; + padding: 20px 0px 20px 0px; + border-radius: 8px; + text-align: center; + flex: 1 1 40%; + min-width: 200px; +} + +.card-content{ + text-align: center; + margin:auto; +} + +.title-graph{ + color: #49473C; + font-size: 23px; + font-weight: 400; + margin-top: 45px; +} + +.graph{ + margin-top: 22px; +} + +@media (max-width: 768px) { + .card-suhu, .card-cahaya, .card-kelembapan { + flex: 1 1 45%; + } +} + +@media (max-width: 576px) { + .card-suhu, .card-cahaya, .card-kelembapan { + flex: 1 1 100%; + } +} + diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.spec.ts new file mode 100644 index 0000000..30e39a2 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardComponent } from './dashboard.component'; + +describe('DashboardComponent', () => { + let component: DashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DashboardComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts new file mode 100644 index 0000000..77af7c5 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -0,0 +1,43 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { SidebarComponent } from './layouts/sidebar/sidebar.component'; +import { GaugeChartComponent } from './page/gauge-chart/gauge-chart.component'; +import { GraphComponent } from './page/graph/graph.component'; + +@Component({ + selector: 'app-dashboard', + standalone: true, + imports: [RouterOutlet, SidebarComponent, GaugeChartComponent, GraphComponent], + templateUrl: './dashboard.component.html', + styleUrl: './dashboard.component.scss' +}) +export class DashboardComponent{ + //kelembaban + kelembabanData: number = 90; + kelembabanColorStops: [number, string][] = [[0, '#16423C'], [1, '#16423C']]; + kelembabanMaxValue: number = 100; + kelembabanSatuanData: string = '%'; + kelembabanTitle: string = 'Kelembapan Udara'; + + //suhu + suhuData: number = 35; + suhuColorStops: [number, string][] = [[0, '#663440'], [1, '#663440']]; + suhuMaxValue: number = 100; + suhuSatuanData: string = '°C'; + suhuTitle: string = 'Suhu'; + + //intensitas cahaya + intensitasCahayaData: number = 3469; + intensitasCahayaColorStops: [number, string][] = [[0, '#b35b03'], [1, '#b35b03']]; + intensitasCahayaMaxValue: number = 4000; + intensitasCahayaSatuanData: string = 'lux'; + intensitasCahayaTitle: string = 'Intensitas Cahaya'; + + //kelembaban tanah + kelembabanTanahData: number = 90; + kelembabanTanahColorStops: [number, string][] = [[0, '#493e30'], [1, '#493e30']]; + kelembabanTanahMaxValue: number = 100; + kelembabanTanahSatuanData: string = '%'; + kelembabanTanahTitle: string = 'Kelembapan Tanah'; + +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html new file mode 100644 index 0000000..d33ba7c --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html @@ -0,0 +1,10 @@ +
+
+
+ +
+
+ +
+
+
diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss new file mode 100644 index 0000000..cbc9506 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss @@ -0,0 +1,4 @@ +.background{ + background-color: #16423C; + border-radius: 0px 15px 15px 0px; +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.spec.ts new file mode 100644 index 0000000..bbad7d7 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LayoutsComponent } from './layouts.component'; + +describe('LayoutsComponent', () => { + let component: LayoutsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LayoutsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LayoutsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.ts b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.ts new file mode 100644 index 0000000..9be5803 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { SidebarComponent } from './sidebar/sidebar.component'; + +@Component({ + selector: 'app-layouts', + standalone: true, + imports: [RouterOutlet, SidebarComponent], + templateUrl: './layouts.component.html', + styleUrl: './layouts.component.scss' +}) +export class LayoutsComponent { + +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html new file mode 100644 index 0000000..0aca31c --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss new file mode 100644 index 0000000..4461e9e --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss @@ -0,0 +1,24 @@ +.background{ + background-color: #16423C; + border-radius: 0px 15px 15px 0px; +} + +.title{ + color: white; +} + +.space{ + margin-bottom: 15px; + margin-top: 15px; + font-weight: 900; +} + +.menu{ + color: white; + font-size: 15px; + padding-left: 10px; +} + +.container-sidebar{ + display: block; +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.spec.ts new file mode 100644 index 0000000..5445f3c --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SidebarComponent } from './sidebar.component'; + +describe('SidebarComponent', () => { + let component: SidebarComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SidebarComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SidebarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts new file mode 100644 index 0000000..d787208 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; + +@Component({ + selector: 'app-sidebar', + standalone: true, + imports: [RouterLink], + templateUrl: './sidebar.component.html', + styleUrl: './sidebar.component.scss' +}) +export class SidebarComponent { + +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html new file mode 100644 index 0000000..1773455 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html @@ -0,0 +1,11 @@ +
+
+
+
+
+ + diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.scss new file mode 100644 index 0000000..36943d0 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.scss @@ -0,0 +1,34 @@ +.gauge-chart{ + width: 50%; + display: inline-block; +} + +.loading { + width: 30px; + height: 30px; + border-radius: 50%; + border: 7px solid #ddd; + border-top-color: rgb(28, 12, 203); + animation: loading 1s linear infinite; +} + +.loading-state { + position: absolute; + top: 50%; + left: 50%; + z-index: 9999; + transform: translate(-50%, -50%); +} + +.loading-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 9999; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.spec.ts new file mode 100644 index 0000000..dce21d0 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GaugeChartComponent } from './gauge-chart.component'; + +describe('GaugeChartComponent', () => { + let component: GaugeChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GaugeChartComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(GaugeChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts new file mode 100644 index 0000000..b0d5400 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts @@ -0,0 +1,101 @@ +import { Component, Input } from '@angular/core'; +import * as Highcharts from 'highcharts'; +import HighchartsMore from 'highcharts/highcharts-more'; +import HC_solidGauge from 'highcharts/modules/solid-gauge'; +import { HighchartsChartModule } from 'highcharts-angular'; +import { CommonModule } from '@angular/common'; + + +HighchartsMore(Highcharts); +HC_solidGauge(Highcharts); + +@Component({ + selector: 'app-gauge-chart', + standalone: true, + imports: [HighchartsChartModule, CommonModule], + templateUrl: './gauge-chart.component.html', + styleUrls: ['./gauge-chart.component.scss'] +}) +export class GaugeChartComponent { + @Input() gaugeTitle: string = 'Gauge'; + @Input() gaugeData: number = 0; + @Input() colorStops: [number, string][] = []; + @Input() maxValue: number = 100; + @Input() satuanData: string = ''; + + isLoading: boolean = true; + + Highcharts: typeof Highcharts = Highcharts; + + chartOptions: Highcharts.Options = {}; + + constructor() {} + + ngOnChanges() { + this.isLoading = false; + this.chartOptions = { + + chart: { + type: 'solidgauge', + height: '100%', + backgroundColor: 'transparent' + }, + credits: { + enabled: false + }, + title: { + text: this.gaugeTitle, + style: { + fontSize: '15px', + fontFamily: 'Poppins, sans-serif', + } + }, + pane: { + startAngle: -180, + endAngle: 180, + background: [{ + innerRadius: '50%', + outerRadius: '110%', + shape: 'arc' + }] + }, + yAxis: { + min: 0, + max: this.maxValue, + stops: this.colorStops.length ? this.colorStops : [ + [0.1, '#55BF3B'], + [0.5, '#DDDF0D'], + [0.9, '#DF5353'] + ], + lineWidth: 0, + tickWidth: 0, + tickAmount: 2, + labels: { + enabled: false + } + }, + series: [{ + name: this.gaugeTitle, + data: [this.gaugeData], + tooltip: { + valueSuffix: this.satuanData + }, + dataLabels: { + enabled: true, + y: -10, + x: 0, + borderColor: 'transparent', + borderWidth: 0, + style: { + fontSize: '15px', + fontFamily: 'Poppins, sans-serif', + color: 'white', + backgroundColor: 'transparent', + border: 'none' + } + } + }] as Highcharts.SeriesSolidgaugeOptions[] + }; + } + +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html new file mode 100644 index 0000000..8e80e96 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -0,0 +1,16 @@ +
+ + + +
+ + + + \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss new file mode 100644 index 0000000..24b01c6 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -0,0 +1,44 @@ +.chart-container { + width: 100%; + max-width: 800px; + margin: auto; + text-align: center; + } + + canvas { + width: max-content; + height: 80%!important; + margin: 20px; + align-items: center; + } + + .form-select{ + width: max-content; + margin-top: 20px; + display: flexbox; + flex-direction: column; + margin-right: 20px; + } + + .container-graph{ + display: flex; + flex-wrap: wrap; + justify-content: left; + } + + + @media (max-width: 768px) { + canvas{ + display: flex; + width: max-content; + flex: 1 1 45%; + } + } + + @media (max-width: 576px) { + canvas{ + flex: 1 1 100%; + } + } + + \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.spec.ts new file mode 100644 index 0000000..99cc73b --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GraphComponent } from './graph.component'; + +describe('GraphComponent', () => { + let component: GraphComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GraphComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(GraphComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts new file mode 100644 index 0000000..7e472ac --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -0,0 +1,221 @@ +import { Component, OnInit } from '@angular/core'; +import { Chart, LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler } from 'chart.js'; + +@Component({ + selector: 'app-graph', + standalone: true, + imports: [], + templateUrl: './graph.component.html', + styleUrl: './graph.component.scss' +}) +export class GraphComponent implements OnInit { + chart: any; + humidityData = [65, 59, 80, 81, 56, 55, 40, 41, + 60, 65, 59, 80, 81, 56, 55, 40, + 41, 60, 65, 59, 80, 81, 56, 55 + ]; + temperatureData = [22, 23, 25, 24, 26, 27, 28, 29, + 25, 23, 22, 24, 26, 27, 28, 29, + 29, 28, 28, 25, 25, 25, 26, 27 + ]; + lightData = [200, 220, 230, 210, 250, 240, 260, 265, + 270, 200, 220, 230, 210, 250, 240, 260, + 265, 270, 200, 220, 230, 210, 250, 240 + ]; + + nitrogenData = [ + 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, + 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, + 1800, 1900, 2000 + ] + + humidityTanahData = [ + 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, + 100, 110, 120, 130, 140, 150, 160, 170, + 180, 190, 200 + ] + + pottasiumData = [ + 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, + 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, + 290, 300, 310, 320 + ] + + phosphorusData = [ + 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, + 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, + 290, 300, 310, 320 + ] + + soilData = [ + 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, + 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, + 290, 300, 310, 320 + ] + + + //data daily + dailyHumidityData = [65, 70, 75, 80, 85, 90, 95]; + dailyTemperatureData = [25, 26, 27, 28, 29, 30, 31]; + dailyLightData = [220, 230, 240, 250, 260, 270, 280]; + dailyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + dailyHumidityTanahData = [100, 110, 120, 130, 140, 150]; + dailyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + dailyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + dailySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + + //data weekly + weeklyHumidityData = [60, 65, 70, 75, 80, 85, 90]; + weeklyTemperatureData = [25, 26, 27, 28, 29, 30, 31]; + weeklyLightData = [220, 230, 240, 250, 260, 270, 280]; + weeklyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + weeklyHumidityTanahData = [100, 110, 120, 130, 140, 150]; + weeklyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + weeklyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + weeklySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; + + //data bulanan + monthlyHumidityData = [65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120]; + monthlyTemperatureData = [25, 26, 27, 28, 29, 30, 31, 32, 33, 33, 33, 33.5]; + monthlyLightData = [220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330]; + monthlyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; + monthlyHumidityTanahData = [100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210]; + monthlyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; + monthlyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; + monthlySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; + + + labelHourly = [ + '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', + '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', + '17.00', '18.00', '19.00', '20.00', '21.00', '22.00', '23.00', '24.00' + ] + labelDaily = ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu']; + labelWeekly = ['Minggu 1', 'Minggu 2', 'Minggu 3', 'Minggu 4', 'Minggu 5', 'Minggu 6', 'Minggu 7']; + labelMonthly = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember']; + + ngOnInit(): void { + Chart.register(LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler); + this.createChart(this.humidityData, 'Kelembapan', '#16423C', this.labelHourly); + } + + createChart(data: number[], label: string, borderColor: string, labels: string[]): void { + const canvas = document.getElementById('myChart') as HTMLCanvasElement; + const ctx = canvas.getContext('2d'); + + if (this.chart) { + this.chart.destroy(); + } + + if (ctx) { + this.chart = new Chart(ctx, { + type: 'line', + data: { + labels: labels, + datasets: [{ + label, + data, + borderColor, + borderWidth: 1.5, + fill: false, + backgroundColor: borderColor + '4D', + tension: 0.5, + pointRadius: 5, + pointHoverRadius: 8, + pointBackgroundColor: borderColor, + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + tooltip: { + enabled: true, + mode: 'nearest', + intersect: false, + callbacks: { + label: (tooltipItem: any) => { + const datasetLabel = tooltipItem.dataset.label.toLowerCase(); + const formattedValue = tooltipItem.formattedValue; + if (datasetLabel.includes('suhu')) { + return `${tooltipItem.dataset.label}: ${formattedValue}°C`; + } else if (datasetLabel.includes('cahaya')) { + return `${tooltipItem.dataset.label}: ${formattedValue} lux`; + } else if (datasetLabel.includes('nitrogen') || datasetLabel.includes('pottasium') || datasetLabel.includes('phosphorus') || datasetLabel.includes('soil')) { + return `${tooltipItem.dataset.label}: ${formattedValue} NPM`; + } else { + return `${tooltipItem.dataset.label}: ${formattedValue} %`; + } + } + } + + }, + legend: { + display: true + } + }, + scales: { + x: { + beginAtZero: true + }, + y: { + beginAtZero: true + } + } + } + }); + } else { + console.error('Failed to show chart'); + } + } + + + updateChart(): void { + const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value; + const timeframe = (document.getElementById('timeframeSelect') as HTMLSelectElement).value; + + let newData: number[]; + let newLabel: string; + let newColor: string; + let newLabels: string[]; + + const kelembapanColor = '#16423C'; + const suhuColor = '#8F5A62'; + const intensitasCahayaColor = '#DF9B55'; + const humidityTanahColor = '#493e30'; + + switch (parameter) { + case 'humidity': + newLabel = timeframe === 'hourly' ? 'Kelembapan Udara Per Jam' : (timeframe === 'daily' ? 'Kelembapan Harian' : 'Kelembapan Bulanan'); + newData = timeframe === 'hourly' ? this.humidityData : (timeframe === 'daily' ? this.dailyHumidityData : this.monthlyHumidityData); + newColor = kelembapanColor; + newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + break; + case 'temperature': + newLabel = timeframe === 'hourly' ? 'Suhu Per Jam' : (timeframe === 'daily' ? 'Suhu Harian' : 'Suhu Bulanan'); + newData = timeframe === 'hourly' ? this.temperatureData : (timeframe === 'daily' ? this.dailyTemperatureData : this.monthlyTemperatureData); + newColor = suhuColor; + newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + break; + case 'light': + newLabel = timeframe === 'hourly' ? 'Intensitas Cahaya Per Jam' : (timeframe === 'daily' ? 'Intensitas Cahaya Harian' : 'Intensitas Cahaya Bulanan'); + newData = timeframe === 'hourly' ? this.lightData : (timeframe === 'daily' ? this.dailyLightData : this.monthlyLightData); + newColor = intensitasCahayaColor; + newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + break; + case 'humidityTanah': + newLabel = timeframe === 'hourly' ? 'Kelembaban Tanah Per Jam' : (timeframe === 'daily' ? 'Kelembaban Tanah Harian' : 'Kelembaban Tanah Bulanan'); + newData = timeframe === 'hourly' ? this.humidityTanahData : (timeframe === 'daily' ? this.dailyHumidityTanahData : this.monthlyHumidityData); + newColor = humidityTanahColor; + newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + break; + default: + newLabel = 'Kelembapan Per Jam'; + newData = this.humidityData; + newColor = kelembapanColor; + newLabels = this.labelHourly; + } + + this.createChart(newData, newLabel, newColor, newLabels); + } +} diff --git a/agrilink_vocpro/src/index.html b/agrilink_vocpro/src/index.html new file mode 100644 index 0000000..9a70fad --- /dev/null +++ b/agrilink_vocpro/src/index.html @@ -0,0 +1,27 @@ + + + + + AgrilinkVocpro + + + + + + + + + + + + + + + + + + + diff --git a/agrilink_vocpro/src/main.ts b/agrilink_vocpro/src/main.ts new file mode 100644 index 0000000..35b00f3 --- /dev/null +++ b/agrilink_vocpro/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/agrilink_vocpro/src/styles.scss b/agrilink_vocpro/src/styles.scss new file mode 100644 index 0000000..b32d139 --- /dev/null +++ b/agrilink_vocpro/src/styles.scss @@ -0,0 +1,3 @@ +body{ + font-family: "Poppins", sans-serif; +} diff --git a/agrilink_vocpro/tsconfig.app.json b/agrilink_vocpro/tsconfig.app.json new file mode 100644 index 0000000..3775b37 --- /dev/null +++ b/agrilink_vocpro/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/agrilink_vocpro/tsconfig.json b/agrilink_vocpro/tsconfig.json new file mode 100644 index 0000000..a8bb65b --- /dev/null +++ b/agrilink_vocpro/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/agrilink_vocpro/tsconfig.spec.json b/agrilink_vocpro/tsconfig.spec.json new file mode 100644 index 0000000..5fb748d --- /dev/null +++ b/agrilink_vocpro/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} From a3412a36d58631df2ba3f64f9adbe60be28e8614 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 17 Sep 2024 15:14:28 +0700 Subject: [PATCH 02/53] feat: add slicing login --- agrilink_vocpro/src/app/app.routes.ts | 5 +++ .../src/app/pages/auth/auth.component.html | 43 +++++++++++++++++++ .../src/app/pages/auth/auth.component.scss | 29 +++++++++++++ .../src/app/pages/auth/auth.component.spec.ts | 23 ++++++++++ .../src/app/pages/auth/auth.component.ts | 12 ++++++ 5 files changed, 112 insertions(+) create mode 100644 agrilink_vocpro/src/app/pages/auth/auth.component.html create mode 100644 agrilink_vocpro/src/app/pages/auth/auth.component.scss create mode 100644 agrilink_vocpro/src/app/pages/auth/auth.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/auth/auth.component.ts diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index cce54bf..0899796 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -2,6 +2,7 @@ import { Routes } from '@angular/router'; import { DashboardComponent } from './pages/dashboard/dashboard.component'; import { LayoutsComponent } from './pages/dashboard/layouts/layouts.component'; import { GraphComponent } from './pages/dashboard/page/graph/graph.component'; +import { AuthComponent } from './pages/auth/auth.component'; export const routes: Routes = [ { @@ -9,6 +10,10 @@ export const routes: Routes = [ redirectTo:'dashboard', pathMatch:'full' }, + { + path: 'auth', + component: AuthComponent + }, { path: '', component: LayoutsComponent, diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.html b/agrilink_vocpro/src/app/pages/auth/auth.component.html new file mode 100644 index 0000000..91ad5d2 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.html @@ -0,0 +1,43 @@ +
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.scss b/agrilink_vocpro/src/app/pages/auth/auth.component.scss new file mode 100644 index 0000000..702fd45 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.scss @@ -0,0 +1,29 @@ +.login { + min-height: 100vh; + font-family: "Poppins", sans-serif; +} + +.bg-image { + background-image: url('https://www.verifiedmarketreports.com/images/blogs/05-24/top-7-trends-in-smart-farming.webp'); + background-size: cover; + background-position: left; +} + +.login-heading { + font-weight: 300; +} + +.btn-login { + font-size: 0.9rem; + letter-spacing: 0.05rem; + padding: 0.75rem 1rem; +} + +.color-btn{ + background-color: #16423C; + color: white; +} + +.forgot{ + color: #16423C; +} diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.spec.ts b/agrilink_vocpro/src/app/pages/auth/auth.component.spec.ts new file mode 100644 index 0000000..365dab2 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AuthComponent } from './auth.component'; + +describe('AuthComponent', () => { + let component: AuthComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AuthComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AuthComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.ts b/agrilink_vocpro/src/app/pages/auth/auth.component.ts new file mode 100644 index 0000000..470ce78 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-auth', + standalone: true, + imports: [], + templateUrl: './auth.component.html', + styleUrl: './auth.component.scss' +}) +export class AuthComponent { + +} From 4a77bab8f2362994c247a5c613ca9efa48d1ff6f Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 17 Sep 2024 16:06:10 +0700 Subject: [PATCH 03/53] fix: lazyload fixing --- .../src/app/pages/auth/auth.component.ts | 4 ++- .../gauge-chart/gauge-chart.component.html | 11 +++---- .../gauge-chart/gauge-chart.component.scss | 31 +++---------------- .../page/gauge-chart/gauge-chart.component.ts | 3 +- 4 files changed, 14 insertions(+), 35 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.ts b/agrilink_vocpro/src/app/pages/auth/auth.component.ts index 470ce78..5415454 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.ts +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.ts @@ -1,9 +1,11 @@ import { Component } from '@angular/core'; +import { RouterLink } from '@angular/router'; + @Component({ selector: 'app-auth', standalone: true, - imports: [], + imports: [RouterLink], templateUrl: './auth.component.html', styleUrl: './auth.component.scss' }) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html index 1773455..eb6e183 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html @@ -1,9 +1,8 @@ -
-
-
-
-
- + Loading... + + Date: Fri, 20 Sep 2024 14:59:54 +0700 Subject: [PATCH 04/53] fix: fix slicing parameter in dashboard --- .../pages/dashboard/dashboard.component.html | 56 +++++++++++-------- .../pages/dashboard/dashboard.component.scss | 6 +- .../pages/dashboard/dashboard.component.ts | 21 +++++++ .../dashboard/layouts/layouts.component.html | 7 ++- .../dashboard/layouts/layouts.component.scss | 22 +++++++- .../layouts/sidebar/sidebar.component.html | 6 +- .../layouts/sidebar/sidebar.component.scss | 4 ++ .../page/gauge-chart/gauge-chart.component.ts | 3 - .../dashboard/page/graph/graph.component.html | 4 +- .../dashboard/page/graph/graph.component.ts | 21 +++++++ 10 files changed, 112 insertions(+), 38 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 08c5d29..d16b5a4 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -8,6 +8,39 @@
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
- -
-
- - -
-
-
-
- - -
-
diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index c97271e..f57823a 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -34,7 +34,7 @@ padding: 20px 0px 20px 0px; border-radius: 8px; text-align: center; - flex: 1 1 40%; + flex: 1 1 30%; min-width: 200px; } @@ -55,13 +55,13 @@ } @media (max-width: 768px) { - .card-suhu, .card-cahaya, .card-kelembapan { + .card-parameter{ flex: 1 1 45%; } } @media (max-width: 576px) { - .card-suhu, .card-cahaya, .card-kelembapan { + .card-parameter{ flex: 1 1 100%; } } diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 77af7c5..8b75e2a 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -40,4 +40,25 @@ export class DashboardComponent{ kelembabanTanahSatuanData: string = '%'; kelembabanTanahTitle: string = 'Kelembapan Tanah'; + //nitrogen + nitrogenData: number = 1063; + nitrogenColorStops: [number, string][] = [[0, '#364732'], [1, '#364732']]; + nitrogenMaxValue: number = 2000; + nitrogenSatuanData: string = 'NPM'; + nitrogenTitle: string = 'Nitrogen'; + + //pottasium + pottasiumData: number = 1000; + pottasiumColorStops: [number, string][] = [[0, '#472e49'], [1, '#472e49']]; + pottasiumMaxValue: number = 2000; + pottasiumSatuanData: string = 'NPM'; + pottasiumTitle: string = 'Pottasium'; + + //phospor + phosphorusData: number = 1000; + phosphorusColorStops: [number, string][] = [[0, '#663440'], [1, '#663440']]; + phosphorusMaxValue: number = 2000; + phosphorusSatuanData: string = 'NPM'; + phosphorusTitle: string = 'Phosporus'; + } \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html index d33ba7c..2f0b8ac 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.html @@ -1,9 +1,10 @@
-
-
+
+ -
+ +
diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss index cbc9506..956b52f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss @@ -1,4 +1,22 @@ -.background{ +.background { background-color: #16423C; border-radius: 0px 15px 15px 0px; -} \ No newline at end of file +} + +.sidebar-fixed { + position: fixed; + top: 0; + bottom: 0; + left: 0; + width: 16.67%; + z-index: 1000; + overflow-y: auto; +} + +.content-area { + margin-left: 16.67%; + overflow-y: auto; + padding-left: 1rem; + padding-right: 1rem; + height: 100vh; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html index 0aca31c..25da2a1 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -13,13 +13,13 @@ -->
- +
\ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss index 4461e9e..387a63a 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss @@ -3,6 +3,10 @@ border-radius: 0px 15px 15px 0px; } +.container{ + font-family: 'Poppins', sans-serif; +} + .title{ color: white; } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts index 500d81c..6b09d64 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts @@ -88,9 +88,6 @@ export class GaugeChartComponent { style: { fontSize: '15px', fontFamily: 'Poppins, sans-serif', - color: 'white', - backgroundColor: 'transparent', - border: 'none' } } }] as Highcharts.SeriesSolidgaugeOptions[] diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 8e80e96..41611a9 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -1,9 +1,11 @@
- - - - - - - - - + +
- - - \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index dbced28..b4c4cdd 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,102 +1,62 @@ +import { CommonModule } from '@angular/common'; import { Component, OnInit } from '@angular/core'; import { Chart, LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler } from 'chart.js'; @Component({ selector: 'app-graph', standalone: true, - imports: [], + imports: [CommonModule], templateUrl: './graph.component.html', - styleUrl: './graph.component.scss' + styleUrls: ['./graph.component.scss'] }) export class GraphComponent implements OnInit { + selectedSensor: string | null = null; + parameters: string[] = []; + + sensorParameters: { [key: string]: string[] } = { + dht: ['Temperature', 'Humidity', 'Light'], + npk1: ['Temperature', 'Moisture', 'Conductivity', 'ph', 'Nitrogen', 'Phosphorus', 'Potassium'], + npk2: ['Temperature', 'Moisture', 'Conductivity', 'ph', 'Nitrogen', 'Phosphorus', 'Potassium'] + }; + + dhtData = { + humidity: [65, 59, 80, 81, 56, 55, 40, 41, 60, 65, 59, 80, 81, 56, 55, 40, 41, 60, 65, 59, 80, 81, 56, 55], + temperature: [22, 23, 25, 24, 26, 27, 28, 29, 25, 23, 22, 24, 26, 27, 28, 29, 29, 28, 28, 25, 25, 25, 26, 27], + light: [200, 220, 230, 210, 250, 240, 260, 265, 270, 200, 220, 230, 210, 250, 240, 260, 265, 270, 275, 280, 285, 290, 295, 300] + }; + + npk1Data = { + temperature: [23, 24, 26, 27, 28, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 23, 24, 26, 27, 28, 29, 28, 27], + moisture: [30, 35, 32, 36, 34, 37, 33, 31, 32, 30, 35, 32, 36, 34, 37, 33, 31, 32, 30, 35, 32, 36, 34, 37], + conductivity: [500, 550, 600, 520, 510, 530, 540, 580, 590, 500, 550, 600, 520, 510, 530, 540, 580, 590, 500, 550, 600, 520, 510, 530], + ph: [6.5, 6.7, 6.8, 7.0, 7.1, 6.9, 6.6, 6.8, 6.9, 6.5, 6.7, 6.8, 7.0, 7.1, 6.9, 6.6, 6.8, 6.9, 6.5, 6.7, 6.8, 7.0, 7.1, 6.9], + nitrogen: [300, 310, 320, 330, 340, 350, 355, 360, 365, 300, 310, 320, 330, 340, 350, 355, 360, 365, 300, 310, 320, 330, 340, 350], + phosphorus: [200, 210, 215, 220, 225, 220, 215, 210, 200, 210, 215, 220, 225, 220, 215, 210, 200, 210, 215, 220, 225, 220, 215, 210], + potassium: [180, 190, 200, 205, 210, 215, 220, 225, 230, 180, 190, 200, 205, 210, 215, 220, 225, 230, 180, 190, 200, 205, 210, 215], + }; + + npk2Data = { + temperature: [24, 25, 27, 28, 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 23, 24, 26, 27, 28, 29, 28, 26, 25, 24], + moisture: [31, 36, 33, 38, 35, 37, 34, 32, 33, 31, 36, 33, 38, 35, 37, 34, 32, 33, 31, 36, 33, 38, 35, 37], + conductivity: [520, 530, 540, 510, 550, 570, 580, 590, 600, 520, 530, 540, 510, 550, 570, 580, 590, 600, 520, 530, 540, 510, 550, 570], + ph: [6.6, 6.9, 7.1, 6.7, 6.8, 6.9, 6.6, 6.8, 6.9, 6.6, 6.9, 7.1, 6.7, 6.8, 6.9, 6.6, 6.8, 6.9, 6.6, 6.9, 7.1, 6.7, 6.8, 6.9], + nitrogen: [320, 330, 340, 350, 360, 400, 410, 420, 430, 320, 330, 340, 350, 360, 400, 410, 420, 430, 320, 330, 340, 350, 360, 400], + phosphorus: [210, 220, 225, 230, 235, 240, 245, 250, 255, 210, 220, 225, 230, 235, 240, 245, 250, 255, 210, 220, 225, 230, 235, 240], + potassium: [190, 195, 205, 210, 215, 220, 225, 230, 235, 190, 195, 205, 210, 215, 220, 225, 230, 235, 190, 195, 205, 210, 215, 220] + }; + chart: any; - humidityData = [65, 59, 80, 81, 56, 55, 40, 41, - 60, 65, 59, 80, 81, 56, 55, 40, - 41, 60, 65, 59, 80, 81, 56, 55 - ]; - temperatureData = [22, 23, 25, 24, 26, 27, 28, 29, - 25, 23, 22, 24, 26, 27, 28, 29, - 29, 28, 28, 25, 25, 25, 26, 27 - ]; - lightData = [200, 220, 230, 210, 250, 240, 260, 265, - 270, 200, 220, 230, 210, 250, 240, 260, - 265, 270, 200, 220, 230, 210, 250, 240 - ]; - - nitrogenData = [ - 0, 100, 200, 300, 400, 500, 600, 700, 800, 900, - 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, - 1800, 1900, 2000 - ] - - humidityTanahData = [ - 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, - 100, 110, 120, 130, 140, 150, 160, 170, - 180, 190, 200 - ] - - pottasiumData = [ - 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, - 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, - 290, 300, 310, 320 - ] - - phosphorusData = [ - 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, - 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, - 290, 300, 310, 320 - ] - - soilData = [ - 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, - 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, - 290, 300, 310, 320 - ] - - - //data daily - dailyHumidityData = [65, 70, 75, 80, 85, 90, 95]; - dailyTemperatureData = [25, 26, 27, 28, 29, 30, 31]; - dailyLightData = [220, 230, 240, 250, 260, 270, 280]; - dailyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - dailyHumidityTanahData = [100, 110, 120, 130, 140, 150]; - dailyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - dailyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - dailySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - - //data weekly - weeklyHumidityData = [60, 65, 70, 75, 80, 85, 90]; - weeklyTemperatureData = [25, 26, 27, 28, 29, 30, 31]; - weeklyLightData = [220, 230, 240, 250, 260, 270, 280]; - weeklyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - weeklyHumidityTanahData = [100, 110, 120, 130, 140, 150]; - weeklyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - weeklyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - weeklySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600]; - - //data bulanan - monthlyHumidityData = [65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120]; - monthlyTemperatureData = [25, 26, 27, 28, 29, 30, 31, 32, 33, 33, 33, 33.5]; - monthlyLightData = [220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330]; - monthlyNitrogenData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; - monthlyHumidityTanahData = [100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210]; - monthlyPottasiumData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; - monthlyPhosphorusData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; - monthlySoilData = [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]; - - labelHourly = [ - '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', - '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', + '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', + '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', '17.00', '18.00', '19.00', '20.00', '21.00', '22.00', '23.00', '24.00' - ] - labelDaily = ['Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu', 'Minggu']; - labelWeekly = ['Minggu 1', 'Minggu 2', 'Minggu 3', 'Minggu 4', 'Minggu 5', 'Minggu 6', 'Minggu 7']; - labelMonthly = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember']; + ]; ngOnInit(): void { Chart.register(LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler); - this.createChart(this.humidityData, 'Kelembapan', '#16423C', this.labelHourly); + this.selectedSensor = 'dht'; + this.parameters = this.sensorParameters[this.selectedSensor]; + this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); } createChart(data: number[], label: string, borderColor: string, labels: string[]): void { @@ -104,7 +64,7 @@ export class GraphComponent implements OnInit { const ctx = canvas.getContext('2d'); if (this.chart) { - this.chart.destroy(); + this.chart.destroy(); } if (ctx) { @@ -118,8 +78,8 @@ export class GraphComponent implements OnInit { borderColor, borderWidth: 1.5, fill: false, - backgroundColor: borderColor + '4D', - tension: 0.5, + backgroundColor: borderColor + '4D', + tension: 0.5, pointRadius: 5, pointHoverRadius: 8, pointBackgroundColor: borderColor, @@ -130,113 +90,87 @@ export class GraphComponent implements OnInit { maintainAspectRatio: false, plugins: { tooltip: { - enabled: true, - mode: 'nearest', - intersect: false, - callbacks: { - label: (tooltipItem: any) => { - const datasetLabel = tooltipItem.dataset.label.toLowerCase(); - const formattedValue = tooltipItem.formattedValue; - if (datasetLabel.includes('suhu')) { - return `${tooltipItem.dataset.label}: ${formattedValue}°C`; - } else if (datasetLabel.includes('cahaya')) { - return `${tooltipItem.dataset.label}: ${formattedValue} lux`; - } else if (datasetLabel.includes('nitrogen') || datasetLabel.includes('pottasium') || datasetLabel.includes('phosphorus') || datasetLabel.includes('soil')) { - return `${tooltipItem.dataset.label}: ${formattedValue} NPM`; - } else { - return `${tooltipItem.dataset.label}: ${formattedValue} %`; - } - } - } - + enabled: true, + mode: 'nearest', + intersect: false, }, legend: { display: true } - }, - scales: { + }, + scales: { x: { beginAtZero: true - }, + }, y: { beginAtZero: true } } } }); - } else { - console.error('Failed to show chart'); } } + + onSensorChange(event: Event): void { + const selectElement = event.target as HTMLSelectElement; + this.selectedSensor = selectElement.value; + this.parameters = this.sensorParameters[this.selectedSensor]; + + const defaultParameter = this.parameters[0]; + (document.getElementById('parameterSelect') as HTMLSelectElement).value = defaultParameter; + + this.updateChart(); + } updateChart(): void { - const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value; - const timeframe = (document.getElementById('timeframeSelect') as HTMLSelectElement).value; + const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value.toLowerCase(); - let newData: number[]; - let newLabel: string; - let newColor: string; - let newLabels: string[]; + let newData: number[] | undefined; + let newLabel: string = ''; + let newColor: string = ''; - const kelembapanColor = '#16423C'; - const suhuColor = '#8F5A62'; - const intensitasCahayaColor = '#DF9B55'; - const humidityTanahColor = '#493e30'; - const nitrogenColor = '#364732'; - const pottasiumColor = '#472e49'; - const phosphorusColor = '#663440'; + const humidity = '#16423C'; + const temperature = '#8F5A62'; + const light = '#DF9B55'; + const moisture = '#54909c'; + const conductivity = '#661311'; + const ph = '#664735'; + const nitrogen = '#3a6635'; + const phosphorus = '#3f3566'; + const potassium = '#5f3566'; - switch (parameter) { - case 'humidity': - newLabel = timeframe === 'hourly' ? 'Kelembapan Udara Per Jam' : (timeframe === 'daily' ? 'Kelembapan Harian' : 'Kelembapan Bulanan'); - newData = timeframe === 'hourly' ? this.humidityData : (timeframe === 'daily' ? this.dailyHumidityData : this.monthlyHumidityData); - newColor = kelembapanColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + switch (this.selectedSensor) { + case 'dht': + newData = this.dhtData[parameter as keyof typeof this.dhtData]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'humidity') ? humidity : + (parameter === 'temperature') ? temperature : light; break; - case 'temperature': - newLabel = timeframe === 'hourly' ? 'Suhu Per Jam' : (timeframe === 'daily' ? 'Suhu Harian' : 'Suhu Bulanan'); - newData = timeframe === 'hourly' ? this.temperatureData : (timeframe === 'daily' ? this.dailyTemperatureData : this.monthlyTemperatureData); - newColor = suhuColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + case 'npk1': + newData = this.npk1Data[parameter as keyof typeof this.npk1Data]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'temperature') ? temperature : + (parameter === 'moisture') ? moisture : + (parameter === 'conductivity') ? conductivity : + (parameter === 'ph') ? ph : + (parameter === 'nitrogen') ? nitrogen : + (parameter === 'phosphorus') ? phosphorus : potassium; break; - case 'light': - newLabel = timeframe === 'hourly' ? 'Intensitas Cahaya Per Jam' : (timeframe === 'daily' ? 'Intensitas Cahaya Harian' : 'Intensitas Cahaya Bulanan'); - newData = timeframe === 'hourly' ? this.lightData : (timeframe === 'daily' ? this.dailyLightData : this.monthlyLightData); - newColor = intensitasCahayaColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); + case 'npk2': + newData = this.npk2Data[parameter as keyof typeof this.npk2Data]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'temperature') ? temperature : + (parameter === 'moisture') ? moisture : + (parameter === 'conductivity') ? conductivity : + (parameter === 'ph') ? ph : + (parameter === 'nitrogen') ? nitrogen : + (parameter === 'phosphorus') ? phosphorus : potassium; break; - case 'humidityTanah': - newLabel = timeframe === 'hourly' ? 'Kelembaban Tanah Per Jam' : (timeframe === 'daily' ? 'Kelembaban Tanah Harian' : 'Kelembaban Tanah Bulanan'); - newData = timeframe === 'hourly' ? this.humidityTanahData : (timeframe === 'daily' ? this.dailyHumidityTanahData : this.monthlyHumidityData); - newColor = humidityTanahColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); - break; - case 'nitrogen': - newLabel = timeframe === 'hourly' ? 'Nitrogen Per Jam' : (timeframe === 'daily' ? 'Nitrogen Harian' : 'Nitrogen Bulanan'); - newData = timeframe === 'hourly' ? this.nitrogenData : (timeframe === 'daily' ? this.dailyNitrogenData : this.monthlyNitrogenData); - newColor = nitrogenColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); - break; - case 'pottasium': - newLabel = timeframe === 'hourly' ? 'Pottasium Per Jam' : (timeframe === 'daily' ? 'Pottasium Harian' : 'Pottasium Bulanan'); - newData = timeframe === 'hourly' ? this.pottasiumData : (timeframe === 'daily' ? this.dailyPottasiumData: this.monthlyPottasiumData); - newColor = pottasiumColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); - break; - case 'phosphorus': - newLabel = timeframe === 'hourly' ? 'Phosphorus Per Jam' : (timeframe === 'daily' ? 'Phosphorus Harian' : 'Phosphorus Bulanan'); - newData = timeframe === 'hourly' ? this.phosphorusData : (timeframe === 'daily' ? this.dailyPhosphorusData : this.monthlyPhosphorusData); - newColor = phosphorusColor; - newLabels = timeframe === 'hourly' ? this.labelHourly : (timeframe === 'daily' ? this.labelDaily : this.labelMonthly); - break; default: - newLabel = 'Kelembapan Per Jam'; - newData = this.humidityData; - newColor = kelembapanColor; - newLabels = this.labelHourly; + console.error('Sensor tidak ditemukan'); + return; } - - this.createChart(newData, newLabel, newColor, newLabels); + this.createChart(newData!, newLabel, newColor, this.labelHourly); } } From cd0e9e3e85d38889f5df2c0d0fa3d7767d33d710 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 27 Sep 2024 11:11:34 +0700 Subject: [PATCH 07/53] fix(dashboard): menambhakan satuan untuk parameter pada data grafik --- .../dashboard/page/graph/graph.component.ts | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index b4c4cdd..6ea353c 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -93,6 +93,37 @@ export class GraphComponent implements OnInit { enabled: true, mode: 'nearest', intersect: false, + callbacks: { + label: (tooltipItem: any) => { + const datasetLabel = tooltipItem.dataset.label.toLowerCase(); + const formattedValue = tooltipItem.formattedValue; + + let unit = ''; + switch (datasetLabel) { + case 'temperature': + unit = '°C'; + break; + case 'light': + unit = 'lux'; + break; + case 'moisture': + case 'humidity': + unit = '%'; + break; + case 'conductivity': + unit = 'mS/cm'; + break; + case 'nitrogen': + case 'phosphorus': + case 'potassium': + unit = 'NPM'; + break; + default: + unit = ''; + } + return `${tooltipItem.dataset.label}: ${formattedValue} ${unit}`; + }, + } }, legend: { display: true From 991da7be77467a4d5fd4440589ab4f5280c34cab Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 27 Sep 2024 13:53:18 +0700 Subject: [PATCH 08/53] fix(dashboard): adding color untuk interface grafik --- .../src/app/pages/dashboard/page/graph/graph.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 6ea353c..9dc44ea 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -77,11 +77,11 @@ export class GraphComponent implements OnInit { data, borderColor, borderWidth: 1.5, - fill: false, + fill: true, backgroundColor: borderColor + '4D', tension: 0.5, - pointRadius: 5, - pointHoverRadius: 8, + pointRadius: 0, + pointHoverRadius: 0, pointBackgroundColor: borderColor, }] }, @@ -126,7 +126,7 @@ export class GraphComponent implements OnInit { } }, legend: { - display: true + display: false } }, scales: { From e4780952357333667597211c0dd3aa948505650a Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 30 Sep 2024 13:37:12 +0700 Subject: [PATCH 09/53] fix(dashboard): fix responsive ui for data grafik --- .../dashboard/page/graph/graph.component.scss | 4 ++-- .../pages/dashboard/page/graph/graph.component.ts | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 24b01c6..25a147a 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -6,8 +6,8 @@ } canvas { - width: max-content; - height: 80%!important; + width: 100%; + height: 30vh; margin: 20px; align-items: center; } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 9dc44ea..9f541ee 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -57,6 +57,14 @@ export class GraphComponent implements OnInit { this.selectedSensor = 'dht'; this.parameters = this.sensorParameters[this.selectedSensor]; this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); + + window.addEventListener('resize', () => { + if (this.chart) { + this.chart.destroy(); + this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); + } + }); + } createChart(data: number[], label: string, borderColor: string, labels: string[]): void { @@ -131,9 +139,15 @@ export class GraphComponent implements OnInit { }, scales: { x: { + grid:{ + display: false + }, beginAtZero: true }, y: { + grid:{ + display: false + }, beginAtZero: true } } From 6aab9e1b71066cdd1647967649ab725efd4c2b1c Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 8 Oct 2024 10:07:28 +0700 Subject: [PATCH 10/53] fix(dashboard): fix lazy loading pada grafik sebelum data muncul --- .../dashboard/page/graph/graph.component.html | 9 +- .../dashboard/page/graph/graph.component.scss | 14 +- .../dashboard/page/graph/graph.component.ts | 129 ++++++++++-------- 3 files changed, 90 insertions(+), 62 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 9c0f2ee..607fd27 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -8,4 +8,11 @@
- + +
+ Loading... +
+ + + + diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 25a147a..7783e2b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -11,7 +11,7 @@ margin: 20px; align-items: center; } - + .form-select{ width: max-content; margin-top: 20px; @@ -24,6 +24,7 @@ display: flex; flex-wrap: wrap; justify-content: left; + height: max-content; } @@ -37,8 +38,17 @@ @media (max-width: 576px) { canvas{ - flex: 1 1 100%; + display: flex; + width: max-content; + flex: 1 1 100%; } } + + .loading{ + font-size: 18px; + text-align: center; + color: #888; +} + \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 9f541ee..6b8f35b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,7 +1,6 @@ import { CommonModule } from '@angular/common'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ElementRef, ViewChild } from '@angular/core'; import { Chart, LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler } from 'chart.js'; - @Component({ selector: 'app-graph', standalone: true, @@ -10,8 +9,10 @@ import { Chart, LineController, LineElement, PointElement, LinearScale, Title, C styleUrls: ['./graph.component.scss'] }) export class GraphComponent implements OnInit { + @ViewChild('myChart', { static: false }) chartElement!: ElementRef; selectedSensor: string | null = null; - parameters: string[] = []; + parameters: string[] = []; + isLoading: boolean = true; sensorParameters: { [key: string]: string[] } = { dht: ['Temperature', 'Humidity', 'Light'], @@ -46,6 +47,7 @@ export class GraphComponent implements OnInit { }; chart: any; + isChartLoaded = false; labelHourly = [ '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', @@ -56,19 +58,24 @@ export class GraphComponent implements OnInit { Chart.register(LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler); this.selectedSensor = 'dht'; this.parameters = this.sensorParameters[this.selectedSensor]; - this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); - - window.addEventListener('resize', () => { - if (this.chart) { - this.chart.destroy(); - this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); - } - }); } + ngAfterViewInit(): void { + this.isLoading = true; + setTimeout(() => { + this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); + this.isLoading = false; + }, 2000); + + + console.log(this.chartElement.nativeElement); + console.log(this.chart); + console.log(this.isLoading); + } + createChart(data: number[], label: string, borderColor: string, labels: string[]): void { - const canvas = document.getElementById('myChart') as HTMLCanvasElement; + const canvas = this.chartElement.nativeElement; const ctx = canvas.getContext('2d'); if (this.chart) { @@ -169,53 +176,57 @@ export class GraphComponent implements OnInit { updateChart(): void { - const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value.toLowerCase(); + this.isLoading= true; + setTimeout(() => { + const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value.toLowerCase(); - let newData: number[] | undefined; - let newLabel: string = ''; - let newColor: string = ''; - - const humidity = '#16423C'; - const temperature = '#8F5A62'; - const light = '#DF9B55'; - const moisture = '#54909c'; - const conductivity = '#661311'; - const ph = '#664735'; - const nitrogen = '#3a6635'; - const phosphorus = '#3f3566'; - const potassium = '#5f3566'; - - switch (this.selectedSensor) { - case 'dht': - newData = this.dhtData[parameter as keyof typeof this.dhtData]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'humidity') ? humidity : - (parameter === 'temperature') ? temperature : light; - break; - case 'npk1': - newData = this.npk1Data[parameter as keyof typeof this.npk1Data]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'temperature') ? temperature : - (parameter === 'moisture') ? moisture : - (parameter === 'conductivity') ? conductivity : - (parameter === 'ph') ? ph : - (parameter === 'nitrogen') ? nitrogen : - (parameter === 'phosphorus') ? phosphorus : potassium; - break; - case 'npk2': - newData = this.npk2Data[parameter as keyof typeof this.npk2Data]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'temperature') ? temperature : - (parameter === 'moisture') ? moisture : - (parameter === 'conductivity') ? conductivity : - (parameter === 'ph') ? ph : - (parameter === 'nitrogen') ? nitrogen : - (parameter === 'phosphorus') ? phosphorus : potassium; - break; - default: - console.error('Sensor tidak ditemukan'); - return; - } - this.createChart(newData!, newLabel, newColor, this.labelHourly); + let newData: number[] | undefined; + let newLabel: string = ''; + let newColor: string = ''; + + const humidity = '#16423C'; + const temperature = '#8F5A62'; + const light = '#DF9B55'; + const moisture = '#54909c'; + const conductivity = '#661311'; + const ph = '#664735'; + const nitrogen = '#3a6635'; + const phosphorus = '#3f3566'; + const potassium = '#5f3566'; + + switch (this.selectedSensor) { + case 'dht': + newData = this.dhtData[parameter as keyof typeof this.dhtData]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'humidity') ? humidity : + (parameter === 'temperature') ? temperature : light; + break; + case 'npk1': + newData = this.npk1Data[parameter as keyof typeof this.npk1Data]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'temperature') ? temperature : + (parameter === 'moisture') ? moisture : + (parameter === 'conductivity') ? conductivity : + (parameter === 'ph') ? ph : + (parameter === 'nitrogen') ? nitrogen : + (parameter === 'phosphorus') ? phosphorus : potassium; + break; + case 'npk2': + newData = this.npk2Data[parameter as keyof typeof this.npk2Data]; + newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); + newColor = (parameter === 'temperature') ? temperature : + (parameter === 'moisture') ? moisture : + (parameter === 'conductivity') ? conductivity : + (parameter === 'ph') ? ph : + (parameter === 'nitrogen') ? nitrogen : + (parameter === 'phosphorus') ? phosphorus : potassium; + break; + default: + console.error('Sensor tidak ditemukan'); + return; + } + this.createChart(newData, newLabel, newColor, this.labelHourly); + this.isLoading=false; + }, 2000); } } From d1d0c5498a4e0e3f9e4f078fdd520de16b3f316b Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 8 Oct 2024 10:29:38 +0700 Subject: [PATCH 11/53] fix(dashboard): fix responsive grafik data --- .../pages/dashboard/page/graph/graph.component.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 6b8f35b..27484b5 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -47,7 +47,6 @@ export class GraphComponent implements OnInit { }; chart: any; - isChartLoaded = false; labelHourly = [ '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', @@ -58,8 +57,8 @@ export class GraphComponent implements OnInit { Chart.register(LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler); this.selectedSensor = 'dht'; this.parameters = this.sensorParameters[this.selectedSensor]; - } + ngAfterViewInit(): void { this.isLoading = true; setTimeout(() => { @@ -67,10 +66,12 @@ export class GraphComponent implements OnInit { this.isLoading = false; }, 2000); - - console.log(this.chartElement.nativeElement); - console.log(this.chart); - console.log(this.isLoading); + window.addEventListener('resize', () => { + if (this.chart) { + this.chart.destroy(); + this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); + } + }); } From 2c7a2a4a0104f0c3cabfbf5c97063d70751cc722 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 8 Oct 2024 13:17:01 +0700 Subject: [PATCH 12/53] fix(dashoard): add lazy load untuk menampilkan card data --- .../pages/dashboard/dashboard.component.html | 91 ++++++++++------ .../pages/dashboard/dashboard.component.scss | 6 ++ .../pages/dashboard/dashboard.component.ts | 101 ++++++++---------- 3 files changed, 106 insertions(+), 92 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 9ee2c1b..41ecb4f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -8,122 +8,143 @@
- - - + + + +
-
-
-
-

3539 Lux

-
Intensitas Cahaya
+
+ Loading... +
+ +
+
+
+

{{sensorData.dht.lightIntensity}} Lux

+
Light Intensity
+
-
-
-
-

27 °C

-
Temperature
+
+
+

{{sensorData.dht.temperature}} °C

+
Temperature
+
-
-
-
-

80%

-
Kelembaban
+
+
+

{{sensorData.dht.humidity}}%

+
Humidity
+
-
-
+
-

28 °C

+

{{ sensorData.npk1.temperature }} °C

Temperature
-

99.9%

+

{{sensorData.npk1.moisture}}%

Moisture
-

1.5 mS/cm

+

{{sensorData.npk1.conductivity}}mS/cm

Conductivity
-

8.51

+

{{sensorData.npk1.ph}}

pH
-

500 PPM

+

{{sensorData.npk1.nitrogen}}PPM

Nitrogen
-

500 PPM

+

{{sensorData.npk1.phosphorus}}PPM

Phosphorus
-

500 PPM

+

{{sensorData.npk1.potassium}}PPM

Potassium
-
+
-

28.6 °C

+

{{ sensorData.npk2.temperature }}°C

Temperature
-

99.8%

+

{{ sensorData.npk1.moisture }}%

Moisture
-

1.4 mS/cm

+

{{ sensorData.npk1.conductivity }}mS/cm

Conductivity
-

8.55

+

{{ sensorData.npk1.ph }}

pH
-

510 PPM

+

{{ sensorData.npk1.nitrogen}}PPM

Nitrogen
-

512 PPM

+

{{ sensorData.npk2.phosphorus}}PPM

Phosphorus
-

500 PPM

+

{{ sensorData.npk2.potassium }}PPM

Potassium
+ +
Monitoring
diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index cc6ff62..88b06aa 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -85,3 +85,9 @@ button { background-color: #cad849; color: white; } + +.loading{ + font-size: 18px; + text-align: center; + color: #888; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 4013ac7..e791723 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { SidebarComponent } from './layouts/sidebar/sidebar.component'; import { GaugeChartComponent } from './page/gauge-chart/gauge-chart.component'; @@ -10,64 +10,51 @@ import { CommonModule } from '@angular/common'; standalone: true, imports: [RouterOutlet, SidebarComponent, GaugeChartComponent, GraphComponent, CommonModule], templateUrl: './dashboard.component.html', - styleUrl: './dashboard.component.scss' + styleUrls: ['./dashboard.component.scss'] }) -export class DashboardComponent{ +export class DashboardComponent implements OnInit { + isLoaded: boolean = false; + selectedButton: string = ''; + sensorData: any = { + dht: { + lightIntensity: '3539', + temperature: '27', + humidity: '80' + }, + npk1: { + temperature: '28', + moisture: '99.9', + conductivity: '1.5', + ph: '8.51', + nitrogen: '500', + phosphorus: '500', + potassium: '500' + }, + npk2: { + temperature: '28.6', + moisture: '99.8', + conductivity: '1.4', + ph: '8.55', + nitrogen: '510', + phosphorus: '512', + potassium: '500' + } + }; - selectedButton: string = 'dht'; - - // Fungsi untuk mengatur tombol yang dipilih - selectParameter(param: string) { - this.selectedButton = param; + ngOnInit(): void { + this.selectedButton = 'dht'; + this.loadData(); } - //kelembaban - kelembabanData: number = 90; - kelembabanColorStops: [number, string][] = [[0, '#16423C'], [1, '#16423C']]; - kelembabanMaxValue: number = 100; - kelembabanSatuanData: string = '%'; - kelembabanTitle: string = 'Kelembapan Udara'; + selectSensor(param: string): void { + this.selectedButton = param; + this.loadData(); + } - //suhu - suhuData: number = 35; - suhuColorStops: [number, string][] = [[0, '#663440'], [1, '#663440']]; - suhuMaxValue: number = 100; - suhuSatuanData: string = '°C'; - suhuTitle: string = 'Suhu'; - - //intensitas cahaya - intensitasCahayaData: number = 3469; - intensitasCahayaColorStops: [number, string][] = [[0, '#b35b03'], [1, '#b35b03']]; - intensitasCahayaMaxValue: number = 4000; - intensitasCahayaSatuanData: string = 'lux'; - intensitasCahayaTitle: string = 'Intensitas Cahaya'; - - //kelembaban tanah - kelembabanTanahData: number = 90; - kelembabanTanahColorStops: [number, string][] = [[0, '#493e30'], [1, '#493e30']]; - kelembabanTanahMaxValue: number = 100; - kelembabanTanahSatuanData: string = '%'; - kelembabanTanahTitle: string = 'Kelembapan Tanah'; - - //nitrogen - nitrogenData: number = 1063; - nitrogenColorStops: [number, string][] = [[0, '#364732'], [1, '#364732']]; - nitrogenMaxValue: number = 2000; - nitrogenSatuanData: string = 'NPM'; - nitrogenTitle: string = 'Nitrogen'; - - //pottasium - pottasiumData: number = 1000; - pottasiumColorStops: [number, string][] = [[0, '#472e49'], [1, '#472e49']]; - pottasiumMaxValue: number = 2000; - pottasiumSatuanData: string = 'NPM'; - pottasiumTitle: string = 'Pottasium'; - - //phospor - phosphorusData: number = 1000; - phosphorusColorStops: [number, string][] = [[0, '#663440'], [1, '#663440']]; - phosphorusMaxValue: number = 2000; - phosphorusSatuanData: string = 'NPM'; - phosphorusTitle: string = 'Phosporus'; - -} \ No newline at end of file + loadData(): void { + this.isLoaded = true; + setTimeout(() => { + this.isLoaded = false; + }, 1000); + } +} From 59e89aee7250b96f6d226c992b426bf8062bbc71 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 8 Oct 2024 13:59:56 +0700 Subject: [PATCH 13/53] fix(dashboard): fix responsive UI card section1 in dashboard --- .../src/app/pages/dashboard/dashboard.component.scss | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index 88b06aa..daddac4 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -23,7 +23,7 @@ .card-container { display: flex; flex-wrap: wrap; - gap: 20px; + gap: 30px; margin-top: 20px; justify-content: flex-start; } @@ -64,12 +64,20 @@ .card-parameter{ flex: 1 1 45%; } + + .card-container{ + justify-content: center; + } } @media (max-width: 576px) { .card-parameter{ flex: 1 1 100%; } + + .card-container{ + justify-content: center; + } } button { From 581ca5f35cd84dc87276aa91a57f5acc7075118d Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 11 Oct 2024 10:45:32 +0700 Subject: [PATCH 14/53] feat(dashboard): integration API in data graph and data latest --- agrilink_vocpro/src/app/app.config.ts | 7 +- .../src/app/cores/interface/sensor-data.ts | 54 +++- .../src/app/cores/services/api.service.ts | 23 +- .../pages/dashboard/dashboard.component.ts | 80 +++-- .../dashboard/page/graph/graph.component.html | 9 +- .../dashboard/page/graph/graph.component.ts | 296 ++++++++---------- 6 files changed, 265 insertions(+), 204 deletions(-) diff --git a/agrilink_vocpro/src/app/app.config.ts b/agrilink_vocpro/src/app/app.config.ts index a1e7d6f..74f4c3b 100644 --- a/agrilink_vocpro/src/app/app.config.ts +++ b/agrilink_vocpro/src/app/app.config.ts @@ -1,8 +1,13 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; +import { provideHttpClient } from '@angular/common/http'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), + provideHttpClient() + ] }; diff --git a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts index 4eeee95..f8256cd 100644 --- a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts +++ b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts @@ -1,8 +1,50 @@ -import { Timestamp } from "rxjs"; +export interface ParameterSensor { + hour: number; + + //for DHT sensor + vicitemperature_avg?: number; + vicihumidity_avg?: number; + viciluminosity_avg?: number; + + // for NPK1 & NPK2 sensor + soiltemperature_avg?: number; + soilhumidity_avg?: number; + soilconductivity_avg?: number; + soilph_avg?: number; + soilnitrogen_avg?: number; + soilphosphorus_avg?: number; + soilpotassium_avg?: number; +} + +export interface ApiResponse { + data: { + dht?: ParameterSensor[]; + npk1?: ParameterSensor[]; + npk2?: ParameterSensor[]; + }; + statusCode: number; + message: string; +} + +export interface DHTSensor { + lightIntensity: number; + temperature: number; + humidity: number; +} + +export interface NPKSensor { + temperature: number; + moisture: number; + conductivity: number; + ph: number; + nitrogen: number; + phosphorus: number; + potassium: number; +} export interface SensorData { - id: Timestamp; - humidity: number; - temperature: number; - soil_moisture: number; -} \ No newline at end of file + dht: DHTSensor; + npk1: NPKSensor; + npk2: NPKSensor; +} + diff --git a/agrilink_vocpro/src/app/cores/services/api.service.ts b/agrilink_vocpro/src/app/cores/services/api.service.ts index a992cae..4ae3657 100644 --- a/agrilink_vocpro/src/app/cores/services/api.service.ts +++ b/agrilink_vocpro/src/app/cores/services/api.service.ts @@ -1,16 +1,29 @@ import { Injectable } from '@angular/core'; -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ApiResponse } from '../interface/sensor-data'; @Injectable({ providedIn: 'root' }) export class ApiService { - private apiURL = 'https://jx027dj4-5000.asse.devtunnels.ms/api/sensor-data'; + private baseUrl = 'https://jx027dj4-3333.asse.devtunnels.ms/api/sensor/'; - constructor(private http: HttpClient) { } + constructor(private http: HttpClient) {} - get(){ - return this.http.get(this.apiURL); + getSensorData(sensor: string, metric: string, startDate: string, timeRange: string): Observable { + const url = `${this.baseUrl}getData`; + const params = new HttpParams() + .set('range[start]', startDate) + .set('range[time_range]', timeRange) + .set('sensor', sensor) + .set('metric', metric); + + return this.http.get(url, { params }); } + getLatestData(): Observable { + const url = `${this.baseUrl}getLatest`; + return this.http.get(url); + } } diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index e791723..a5541d9 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -4,43 +4,27 @@ import { SidebarComponent } from './layouts/sidebar/sidebar.component'; import { GaugeChartComponent } from './page/gauge-chart/gauge-chart.component'; import { GraphComponent } from './page/graph/graph.component'; import { CommonModule } from '@angular/common'; +import { ApiService } from '../../cores/services/api.service'; +import { SensorData } from '../../cores/interface/sensor-data'; @Component({ selector: 'app-dashboard', standalone: true, - imports: [RouterOutlet, SidebarComponent, GaugeChartComponent, GraphComponent, CommonModule], + imports: [RouterOutlet, SidebarComponent, GaugeChartComponent, CommonModule, GraphComponent], templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.scss'] }) export class DashboardComponent implements OnInit { isLoaded: boolean = false; selectedButton: string = ''; - sensorData: any = { - dht: { - lightIntensity: '3539', - temperature: '27', - humidity: '80' - }, - npk1: { - temperature: '28', - moisture: '99.9', - conductivity: '1.5', - ph: '8.51', - nitrogen: '500', - phosphorus: '500', - potassium: '500' - }, - npk2: { - temperature: '28.6', - moisture: '99.8', - conductivity: '1.4', - ph: '8.55', - nitrogen: '510', - phosphorus: '512', - potassium: '500' - } + sensorData: SensorData = { + dht: { lightIntensity: 0, temperature: 0, humidity: 0 }, + npk1: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 }, + npk2: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 } }; + constructor(private apiService: ApiService) {} + ngOnInit(): void { this.selectedButton = 'dht'; this.loadData(); @@ -53,8 +37,48 @@ export class DashboardComponent implements OnInit { loadData(): void { this.isLoaded = true; - setTimeout(() => { - this.isLoaded = false; - }, 1000); + + this.apiService.getLatestData().subscribe( + (response) => { + const data = response.data; + if (data.dht && data.dht.length > 0) { + this.sensorData.dht = { + lightIntensity: data.dht[0].viciluminosity_avg ?? 0, + temperature: data.dht[0].vicitemperature_avg ?? 0, + humidity: data.dht[0].vicihumidity_avg ?? 0 + }; + } + + if (data.npk1 && data.npk1.length > 0) { + this.sensorData.npk1 = { + temperature: data.npk1[0].soiltemperature_avg ?? 0, + moisture: data.npk1[0].soilhumidity_avg ?? 0, + conductivity: data.npk1[0].soilconductivity_avg ?? 0, + ph: data.npk1[0].soilph_avg ?? 0, + nitrogen: data.npk1[0].soilnitrogen_avg ?? 0, + phosphorus: data.npk1[0].soilphosphorus_avg ?? 0, + potassium: data.npk1[0].soilpotassium_avg ?? 0 + }; + } + + if (data.npk2 && data.npk2.length > 0) { + this.sensorData.npk2 = { + temperature: data.npk2[0].soiltemperature_avg ?? 0, + moisture: data.npk2[0].soilhumidity_avg ?? 0, + conductivity: data.npk2[0].soilconductivity_avg ?? 0, + ph: data.npk2[0].soilph_avg ?? 0, + nitrogen: data.npk2[0].soilnitrogen_avg ?? 0, + phosphorus: data.npk2[0].soilphosphorus_avg ?? 0, + potassium: data.npk2[0].soilpotassium_avg ?? 0 + }; + } + + this.isLoaded = false; + }, + (error) => { + console.error('Error fetching sensor data:', error); + this.isLoaded = false; + } + ); } } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 607fd27..14671f9 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -4,9 +4,10 @@ - + +
@@ -14,5 +15,3 @@
- - diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 27484b5..8a074c0 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,81 +1,107 @@ +import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core'; +import { Chart, registerables } from 'chart.js'; +import { ApiService } from '../../../../cores/services/api.service'; +import { ApiResponse, ParameterSensor} from '../../../../cores/interface/sensor-data'; import { CommonModule } from '@angular/common'; -import { Component, OnInit, ElementRef, ViewChild } from '@angular/core'; -import { Chart, LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler } from 'chart.js'; +import { FormsModule } from '@angular/forms'; + +Chart.register(...registerables); +const parameterColors: { [key: string]: string } = { + vicitemperature_avg: '#8F5A62', + vicihumidity_avg: '#16423C', + viciluminosity_avg: '#DF9B55', + soiltemperature_avg: '#8F5A62', + soilhumidity_avg: '#54909c', + soilconductivity_avg: '#661311', + soilph_avg: '#664735', + soilnitrogen_avg: '#3a6635', + soilphosphorus_avg: '#3f3566', + soilpotassium_avg: '#5f3566', +}; + @Component({ selector: 'app-graph', standalone: true, - imports: [CommonModule], + imports: [CommonModule, FormsModule], templateUrl: './graph.component.html', styleUrls: ['./graph.component.scss'] }) -export class GraphComponent implements OnInit { +export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { @ViewChild('myChart', { static: false }) chartElement!: ElementRef; - selectedSensor: string | null = null; + selectedSensor: string = ''; + selectedParameter: string = ''; parameters: string[] = []; - isLoading: boolean = true; + isLoading: boolean = true; sensorParameters: { [key: string]: string[] } = { - dht: ['Temperature', 'Humidity', 'Light'], - npk1: ['Temperature', 'Moisture', 'Conductivity', 'ph', 'Nitrogen', 'Phosphorus', 'Potassium'], - npk2: ['Temperature', 'Moisture', 'Conductivity', 'ph', 'Nitrogen', 'Phosphorus', 'Potassium'] + dht: ['vicitemperature_avg', 'vicihumidity_avg', 'viciluminosity_avg'], + npk1: ['soiltemperature_avg', 'soilhumidity_avg', 'soilconductivity_avg', 'soilph_avg', 'soilnitrogen_avg', 'soilphosphorus_avg', 'soilpotassium_avg'], + npk2: ['soiltemperature_avg', 'soilhumidity_avg', 'soilconductivity_avg', 'soilph_avg', 'soilnitrogen_avg', 'soilphosphorus_avg', 'soilpotassium_avg'], }; - dhtData = { - humidity: [65, 59, 80, 81, 56, 55, 40, 41, 60, 65, 59, 80, 81, 56, 55, 40, 41, 60, 65, 59, 80, 81, 56, 55], - temperature: [22, 23, 25, 24, 26, 27, 28, 29, 25, 23, 22, 24, 26, 27, 28, 29, 29, 28, 28, 25, 25, 25, 26, 27], - light: [200, 220, 230, 210, 250, 240, 260, 265, 270, 200, 220, 230, 210, 250, 240, 260, 265, 270, 275, 280, 285, 290, 295, 300] + parameterDisplayNames: { [key: string]: string } = { + vicitemperature_avg: 'Temperature (°C)', + vicihumidity_avg: 'Humidity (%)', + viciluminosity_avg: 'Luminosity (lx)', + soiltemperature_avg: 'Soil Temperature (°C)', + soilhumidity_avg: 'Soil Humidity (%)', + soilconductivity_avg: 'Conductivity (mS/cm)', + soilph_avg: 'pH', + soilnitrogen_avg: 'Nitrogen (PPM)', + soilphosphorus_avg: 'Phosphorus (PPM)', + soilpotassium_avg: 'Potassium (PPM)', }; - npk1Data = { - temperature: [23, 24, 26, 27, 28, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 23, 24, 26, 27, 28, 29, 28, 27], - moisture: [30, 35, 32, 36, 34, 37, 33, 31, 32, 30, 35, 32, 36, 34, 37, 33, 31, 32, 30, 35, 32, 36, 34, 37], - conductivity: [500, 550, 600, 520, 510, 530, 540, 580, 590, 500, 550, 600, 520, 510, 530, 540, 580, 590, 500, 550, 600, 520, 510, 530], - ph: [6.5, 6.7, 6.8, 7.0, 7.1, 6.9, 6.6, 6.8, 6.9, 6.5, 6.7, 6.8, 7.0, 7.1, 6.9, 6.6, 6.8, 6.9, 6.5, 6.7, 6.8, 7.0, 7.1, 6.9], - nitrogen: [300, 310, 320, 330, 340, 350, 355, 360, 365, 300, 310, 320, 330, 340, 350, 355, 360, 365, 300, 310, 320, 330, 340, 350], - phosphorus: [200, 210, 215, 220, 225, 220, 215, 210, 200, 210, 215, 220, 225, 220, 215, 210, 200, 210, 215, 220, 225, 220, 215, 210], - potassium: [180, 190, 200, 205, 210, 215, 220, 225, 230, 180, 190, 200, 205, 210, 215, 220, 225, 230, 180, 190, 200, 205, 210, 215], - }; + chart: Chart | undefined; + labelsHourly: string[] = []; + private resizeListener!: () => void; - npk2Data = { - temperature: [24, 25, 27, 28, 29, 28, 26, 25, 24, 23, 22, 21, 20, 19, 23, 24, 26, 27, 28, 29, 28, 26, 25, 24], - moisture: [31, 36, 33, 38, 35, 37, 34, 32, 33, 31, 36, 33, 38, 35, 37, 34, 32, 33, 31, 36, 33, 38, 35, 37], - conductivity: [520, 530, 540, 510, 550, 570, 580, 590, 600, 520, 530, 540, 510, 550, 570, 580, 590, 600, 520, 530, 540, 510, 550, 570], - ph: [6.6, 6.9, 7.1, 6.7, 6.8, 6.9, 6.6, 6.8, 6.9, 6.6, 6.9, 7.1, 6.7, 6.8, 6.9, 6.6, 6.8, 6.9, 6.6, 6.9, 7.1, 6.7, 6.8, 6.9], - nitrogen: [320, 330, 340, 350, 360, 400, 410, 420, 430, 320, 330, 340, 350, 360, 400, 410, 420, 430, 320, 330, 340, 350, 360, 400], - phosphorus: [210, 220, 225, 230, 235, 240, 245, 250, 255, 210, 220, 225, 230, 235, 240, 245, 250, 255, 210, 220, 225, 230, 235, 240], - potassium: [190, 195, 205, 210, 215, 220, 225, 230, 235, 190, 195, 205, 210, 215, 220, 225, 230, 235, 190, 195, 205, 210, 215, 220] - }; - - chart: any; - labelHourly = [ - '01.00', '02.00', '03.00', '04.00', '05.00', '06.00', '07.00', '08.00', - '09.00', '10.00', '11.00', '12.00', '13.00', '14.00', '15.00', '16.00', - '17.00', '18.00', '19.00', '20.00', '21.00', '22.00', '23.00', '24.00' - ]; + constructor(private sensorService: ApiService) {} ngOnInit(): void { - Chart.register(LineController, LineElement, PointElement, LinearScale, Title, CategoryScale, Tooltip, Filler); this.selectedSensor = 'dht'; - this.parameters = this.sensorParameters[this.selectedSensor]; + this.updateParameters(); + this.selectedParameter = 'vicitemperature_avg'; + this.updateChart(); + this.resizeListener = this.onResize.bind(this); + window.addEventListener('resize', this.resizeListener); } - + ngAfterViewInit(): void { - this.isLoading = true; - setTimeout(() => { - this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); - this.isLoading = false; - }, 2000); - - window.addEventListener('resize', () => { - if (this.chart) { - this.chart.destroy(); - this.createChart(this.dhtData.temperature, 'Temperature', '#8F5A62', this.labelHourly); - } - }); + this.updateChart(); } - - createChart(data: number[], label: string, borderColor: string, labels: string[]): void { + ngOnDestroy(): void { + window.removeEventListener('resize', this.resizeListener); + } + + onResize(): void { + if (this.chart) { + this.chart.destroy(); + this.updateChart(); + } + } + + getDataFromResponse(response: ApiResponse, sensor: string, parameter: string): { data: number[], labels: string[] } { + const sensorData = response.data[sensor as keyof typeof response.data]; + + const data: number[] = []; + const labels: string[] = []; + + if (sensorData) { + sensorData.forEach(item => { + data.push(item[parameter as keyof ParameterSensor] ?? 0); + labels.push(`${item.hour}.00`); + }); + } else { + console.error('No data found for sensor:', sensor); + } + + return { data, labels }; + } + + + createChart(data: number[], parameter: string, labels: string[]): void { const canvas = this.chartElement.nativeElement; const ctx = canvas.getContext('2d'); @@ -84,17 +110,21 @@ export class GraphComponent implements OnInit { } if (ctx) { + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; + this.chart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [{ - label, + label: displayName, data, borderColor, borderWidth: 1.5, fill: true, - backgroundColor: borderColor + '4D', + backgroundColor, tension: 0.5, pointRadius: 0, pointHoverRadius: 0, @@ -110,124 +140,72 @@ export class GraphComponent implements OnInit { mode: 'nearest', intersect: false, callbacks: { - label: (tooltipItem: any) => { - const datasetLabel = tooltipItem.dataset.label.toLowerCase(); - const formattedValue = tooltipItem.formattedValue; - - let unit = ''; - switch (datasetLabel) { - case 'temperature': - unit = '°C'; - break; - case 'light': - unit = 'lux'; - break; - case 'moisture': - case 'humidity': - unit = '%'; - break; - case 'conductivity': - unit = 'mS/cm'; - break; - case 'nitrogen': - case 'phosphorus': - case 'potassium': - unit = 'NPM'; - break; - default: - unit = ''; - } - return `${tooltipItem.dataset.label}: ${formattedValue} ${unit}`; - }, - } + label: (tooltipItem) => { + const paramLabel = displayName; + const value = tooltipItem.formattedValue; + return `${paramLabel}: ${value}`; + } + } }, - legend: { - display: false - } + legend: { display: false } }, scales: { - x: { - grid:{ - display: false - }, - beginAtZero: true - }, - y: { - grid:{ - display: false - }, - beginAtZero: true - } + x: { grid: { display: false }, beginAtZero: true }, + y: { grid: { display: false }, beginAtZero: true } } } }); } } + + + getParameterKey(displayName: string): string { + return Object.keys(this.parameterDisplayNames).find(key => this.parameterDisplayNames[key] === displayName) || ''; + } onSensorChange(event: Event): void { - const selectElement = event.target as HTMLSelectElement; - this.selectedSensor = selectElement.value; - this.parameters = this.sensorParameters[this.selectedSensor]; - - const defaultParameter = this.parameters[0]; - (document.getElementById('parameterSelect') as HTMLSelectElement).value = defaultParameter; - + const select = event.target as HTMLSelectElement; + this.selectedSensor = select.value; + this.updateParameters(); + if (this.selectedSensor === 'dht') { + this.selectedParameter = 'vicitemperature_avg'; + } else if (this.selectedSensor === 'npk1' || this.selectedSensor === 'npk2') { + this.selectedParameter = 'soiltemperature_avg'; + } this.updateChart(); } + + updateParameters(): void { + this.parameters = this.sensorParameters[this.selectedSensor].map(param => this.parameterDisplayNames[param]); + this.selectedParameter = this.parameters[1]; + } updateChart(): void { - this.isLoading= true; - setTimeout(() => { - const parameter = (document.getElementById('parameterSelect') as HTMLSelectElement).value.toLowerCase(); + this.isLoading = true; + + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, '0'); + const day = String(today.getDate()).padStart(2, '0'); + + const startDate = `${year}-${month}-${day}`; + const timeRange = 'HOURLY'; - let newData: number[] | undefined; - let newLabel: string = ''; - let newColor: string = ''; - - const humidity = '#16423C'; - const temperature = '#8F5A62'; - const light = '#DF9B55'; - const moisture = '#54909c'; - const conductivity = '#661311'; - const ph = '#664735'; - const nitrogen = '#3a6635'; - const phosphorus = '#3f3566'; - const potassium = '#5f3566'; - - switch (this.selectedSensor) { - case 'dht': - newData = this.dhtData[parameter as keyof typeof this.dhtData]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'humidity') ? humidity : - (parameter === 'temperature') ? temperature : light; - break; - case 'npk1': - newData = this.npk1Data[parameter as keyof typeof this.npk1Data]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'temperature') ? temperature : - (parameter === 'moisture') ? moisture : - (parameter === 'conductivity') ? conductivity : - (parameter === 'ph') ? ph : - (parameter === 'nitrogen') ? nitrogen : - (parameter === 'phosphorus') ? phosphorus : potassium; - break; - case 'npk2': - newData = this.npk2Data[parameter as keyof typeof this.npk2Data]; - newLabel = parameter.charAt(0).toUpperCase() + parameter.slice(1); - newColor = (parameter === 'temperature') ? temperature : - (parameter === 'moisture') ? moisture : - (parameter === 'conductivity') ? conductivity : - (parameter === 'ph') ? ph : - (parameter === 'nitrogen') ? nitrogen : - (parameter === 'phosphorus') ? phosphorus : potassium; - break; - default: - console.error('Sensor tidak ditemukan'); - return; + this.sensorService.getSensorData(this.selectedSensor, this.selectedParameter, startDate, timeRange).subscribe( + (response: ApiResponse) => { + if (response.statusCode === 200) { + const { data, labels } = this.getDataFromResponse(response, this.selectedSensor, this.selectedParameter); + this.createChart(data, this.selectedParameter, labels); + } else { + console.error('Error fetching data:', response.message); + } + this.isLoading = false; + }, + (error) => { + console.error('API Error:', error); + this.isLoading = false; } - this.createChart(newData, newLabel, newColor, this.labelHourly); - this.isLoading=false; - }, 2000); + ); } } From 141fc9bb5441a85cec6bb62cae9c66db44efb318 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 11 Oct 2024 11:02:04 +0700 Subject: [PATCH 15/53] feat(dashboard): integrate latest update in dashboard section 1 --- .../pages/dashboard/dashboard.component.html | 2 +- .../pages/dashboard/dashboard.component.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 41ecb4f..0f7b715 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -4,7 +4,7 @@

Welcome back to your management system

-

Latest Update: 06/09/2024 15:39:21

+

Latest Update: {{latestUpdate}}

diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index a5541d9..2348555 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -6,6 +6,7 @@ import { GraphComponent } from './page/graph/graph.component'; import { CommonModule } from '@angular/common'; import { ApiService } from '../../cores/services/api.service'; import { SensorData } from '../../cores/interface/sensor-data'; +import { interval } from 'rxjs'; @Component({ selector: 'app-dashboard', @@ -17,6 +18,8 @@ import { SensorData } from '../../cores/interface/sensor-data'; export class DashboardComponent implements OnInit { isLoaded: boolean = false; selectedButton: string = ''; + latestUpdate: string = ''; + intervalId: any; sensorData: SensorData = { dht: { lightIntensity: 0, temperature: 0, humidity: 0 }, npk1: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 }, @@ -27,9 +30,38 @@ export class DashboardComponent implements OnInit { ngOnInit(): void { this.selectedButton = 'dht'; + this.startClock(); this.loadData(); } + ngOnDestroy(): void { + if (this.intervalId) { + clearInterval(this.intervalId); + } + } + + startClock(): void { + this.updateLatestTime(); + + this.intervalId = setInterval(() => { + this.updateLatestTime(); + }, 1000); + } + + updateLatestTime(): void { + const now = new Date(); + const options: Intl.DateTimeFormatOptions = { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + }; + this.latestUpdate = now.toLocaleString('en-GB', options); // Update waktu ke format yang sesuai + } + + selectSensor(param: string): void { this.selectedButton = param; this.loadData(); @@ -73,6 +105,7 @@ export class DashboardComponent implements OnInit { }; } + this.updateLatestTime(); // Update waktu setelah data diambil this.isLoaded = false; }, (error) => { @@ -82,3 +115,4 @@ export class DashboardComponent implements OnInit { ); } } + From 879ad3dcde3216238166ef5cf566cf22ec195f10 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 14 Oct 2024 09:52:56 +0700 Subject: [PATCH 16/53] feat: update readme for documentation --- README.md | 127 +++++++++++++++++++++++++----------------------------- 1 file changed, 58 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index ae500f5..06107d4 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,82 @@ -# frontend-smartfarming +# Agrilink Vocpro (Smart Farming Web Application) + + +A Website application that using Angular 18 for monitoring greenhouse conditions with IoT device that have 2 NPK, DHT, and BH1750 sensors + + +## Overview + +This application enables user to monitor greenhouse conditions by IoT device that include 2 NPK, DHT, and BH1750 sensors. +The data that will display on the graph is 24 hour trend data and there will be last 1 hour data on the card interface -## Getting started +## Features -To make it easy for you to get started with GitLab, here's a list of recommended next steps. +- Monitor sensor data +- User authentication -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! -## Add your files -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: +## Technology Stack +- Angular 18 (Front-end Web Framework) +- REST API (Backend communication) +- GitLab for version control + + + +## Angular Dependency Stack +This project uses several packages to support various functionalities. Here is a list of the key dependencies: +- **[Chart.js](https://www.chartjs.org/)**: A powerful JavaScript library used for creating dynamic, interactive charts in the application. +- **[Bootstrap](https://getbootstrap.com/)**: A front-end framework for building responsive and mobile-first web designs, providing pre-designed components and utilities. +- **Event Listener**: Used to manage events like resizing the window, allowing the chart to adjust automatically to screen size changes. +- **[Angular FormsModule](https://angular.io/api/forms/FormsModule)**: Supports template-driven forms, enabling form handling and user input in the application. + + + +## Installation Guide + +1. Clone the repository: ``` -cd existing_repo -git remote add origin https://gitlab.com/profile-image/kedaireka/smartfarming/frontend-smartfarming.git -git branch -M main -git push -uf origin main +git clone https://gitlab.com/profile-image/kedaireka/smartfarming/frontend-smartfarming.git +``` +2. Navigate to the project directory: +``` +cd agrilink_vocpro +``` +3. Run the project: +``` +ng serve ``` -## Integrate with your tools -- [ ] [Set up project integrations](https://gitlab.com/profile-image/kedaireka/smartfarming/frontend-smartfarming/-/settings/integrations) -## Collaborate with your team +## Project Structure (Angular) -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) +- `src/app/`: Contains the Angular application source code. + - `cores/`: Contains all constants, interfaces, and services needed for the project. + - `interfaces/`: Contains TypeScript interfaces for data models and types used throughout the application. + - `services/`: Contains service files for managing API requests. + - `pages/`: Contains Angular components and views representing different pages of the application. -## Test and Deploy +- `angular.json`: Angular project configuration file. +- `package.json`: Contains project dependencies and scripts for building and running the project. -Use the built-in continuous integration in GitLab. -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) +## Progress Report -*** +| Date | Type | Description | +|------------|-------|-----------------------------------------------------------------------------------------------------| +| 2024-10-11 | feat | Completed the integration for sensor data by using REST API on graphic and card at dashboard. | +| 2024-10-08 | fix | Adding lazy load and fixing responsive UI for data sensor at card section | +| 2024-09-30 | fix | Fixing responsive UI for data sensor in graph | +| 2024-09-27 | fix | Fix default data on graphic if change into other sensor, adding different color for each parameters on sensor, adding information about data units for parameters on the graph | +| 2024-09-20 | fix | Fix slicing interface at dashboard | +| 2024-09-20 | feat | Initial commit for slicing dashboard and login interface | -# Editing this README -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template. -## Suggestions for a good README - -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. ## License For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. From 879151ea6ceee782d6d94f9e69ca67ede186b934 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 16 Oct 2024 17:13:13 +0700 Subject: [PATCH 17/53] feat(login+logout+register): integrate login logout register with REST API --- agrilink_vocpro/angular.json | 6 +- agrilink_vocpro/package-lock.json | 53 +++++----- agrilink_vocpro/package.json | 4 +- agrilink_vocpro/src/app/app.config.ts | 9 +- agrilink_vocpro/src/app/app.routes.ts | 22 +++-- .../app/cores/guard/guards/auth.guard.spec.ts | 17 ++++ .../src/app/cores/guard/guards/auth.guard.ts | 20 ++++ .../src/app/cores/interface/auth.ts | 14 +++ .../src/app/cores/interface/sensor-data.ts | 9 +- .../src/app/cores/services/api.service.ts | 24 +---- .../app/cores/services/auth.service.spec.ts | 16 +++ .../src/app/cores/services/auth.service.ts | 87 ++++++++++++++++ .../app/cores/services/sensor.service.spec.ts | 16 +++ .../src/app/cores/services/sensor.service.ts | 55 +++++++++++ .../src/app/pages/auth/auth.component.html | 67 ++++++------- .../src/app/pages/auth/auth.component.ts | 36 ++++++- .../pages/dashboard/dashboard.component.ts | 11 +-- .../layouts/sidebar/sidebar.component.html | 18 ++-- .../layouts/sidebar/sidebar.component.ts | 25 ++++- .../gauge-chart/gauge-chart.component.html | 10 -- .../gauge-chart/gauge-chart.component.scss | 11 --- .../page/gauge-chart/gauge-chart.component.ts | 99 ------------------- .../dashboard/page/graph/graph.component.ts | 8 +- .../pages/register/register.component.html | 41 ++++++++ .../pages/register/register.component.scss | 29 ++++++ .../register.component.spec.ts} | 12 +-- .../app/pages/register/register.component.ts | 44 +++++++++ 27 files changed, 515 insertions(+), 248 deletions(-) create mode 100644 agrilink_vocpro/src/app/cores/guard/guards/auth.guard.spec.ts create mode 100644 agrilink_vocpro/src/app/cores/guard/guards/auth.guard.ts create mode 100644 agrilink_vocpro/src/app/cores/interface/auth.ts create mode 100644 agrilink_vocpro/src/app/cores/services/auth.service.spec.ts create mode 100644 agrilink_vocpro/src/app/cores/services/auth.service.ts create mode 100644 agrilink_vocpro/src/app/cores/services/sensor.service.spec.ts create mode 100644 agrilink_vocpro/src/app/cores/services/sensor.service.ts delete mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.html delete mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.scss delete mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/gauge-chart/gauge-chart.component.ts create mode 100644 agrilink_vocpro/src/app/pages/register/register.component.html create mode 100644 agrilink_vocpro/src/app/pages/register/register.component.scss rename agrilink_vocpro/src/app/pages/{dashboard/page/gauge-chart/gauge-chart.component.spec.ts => register/register.component.spec.ts} (52%) create mode 100644 agrilink_vocpro/src/app/pages/register/register.component.ts diff --git a/agrilink_vocpro/angular.json b/agrilink_vocpro/angular.json index 752110a..e79b4ff 100644 --- a/agrilink_vocpro/angular.json +++ b/agrilink_vocpro/angular.json @@ -34,7 +34,8 @@ "styles": [ "src/styles.scss", "node_modules/bootstrap/dist/css/bootstrap.min.css", - "node_modules/bootstrap-icons/font/bootstrap-icons.css" + "node_modules/bootstrap-icons/font/bootstrap-icons.css", + "node_modules/ngx-toastr/toastr.css" ], "scripts": [ "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" @@ -97,7 +98,8 @@ "styles": [ "src/styles.scss", "node_modules/bootstrap/dist/css/bootstrap.min.css", - "node_modules/bootstrap-icons/font/bootstrap-icons.css" + "node_modules/bootstrap-icons/font/bootstrap-icons.css", + "node_modules/ngx-toastr/toastr.css" ], "scripts": [ "node_modules/bootstrap/dist/js/bootstrap.bundle.min.js" diff --git a/agrilink_vocpro/package-lock.json b/agrilink_vocpro/package-lock.json index 7c42a2f..7c65fad 100644 --- a/agrilink_vocpro/package-lock.json +++ b/agrilink_vocpro/package-lock.json @@ -8,7 +8,7 @@ "name": "agrilink-vocpro", "version": "0.0.0", "dependencies": { - "@angular/animations": "^18.2.0", + "@angular/animations": "^18.2.8", "@angular/common": "^18.2.0", "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", @@ -20,6 +20,8 @@ "bootstrap-icons": "^1.11.3", "chart.js": "^4.4.4", "highcharts-angular": "^4.0.1", + "jwt-decode": "^4.0.0", + "ngx-toastr": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" @@ -272,9 +274,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.4.tgz", - "integrity": "sha512-ajjXpLD+SyxbHnmhj2ZvYpXneviOjcBgU9L2UX4OVS0jVWxCNHLhJrcMqtqFHA6U5fPnhPNR9cmnt6tmqri0rA==", + "version": "18.2.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.8.tgz", + "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -283,7 +285,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.4" + "@angular/core": "18.2.8" } }, "node_modules/@angular/build": { @@ -3862,17 +3864,6 @@ "node": ">=14" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", @@ -7632,13 +7623,6 @@ "node": ">= 0.4" } }, - "node_modules/highcharts": { - "version": "11.4.8", - "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.8.tgz", - "integrity": "sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA==", - "license": "https://www.highcharts.com/license", - "peer": true - }, "node_modules/highcharts-angular": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/highcharts-angular/-/highcharts-angular-4.0.1.tgz", @@ -8633,6 +8617,15 @@ ], "license": "MIT" }, + "node_modules/jwt-decode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/karma": { "version": "6.4.4", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", @@ -10063,6 +10056,20 @@ "dev": true, "license": "MIT" }, + "node_modules/ngx-toastr": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-19.0.0.tgz", + "integrity": "sha512-6pTnktwwWD+kx342wuMOWB4+bkyX9221pAgGz3SHOJH0/MI9erLucS8PeeJDFwbUYyh75nQ6AzVtolgHxi52dQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0-0", + "@angular/core": ">=16.0.0-0", + "@angular/platform-browser": ">=16.0.0-0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", diff --git a/agrilink_vocpro/package.json b/agrilink_vocpro/package.json index 0b57c3c..d8d8a65 100644 --- a/agrilink_vocpro/package.json +++ b/agrilink_vocpro/package.json @@ -10,7 +10,7 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.2.0", + "@angular/animations": "^18.2.8", "@angular/common": "^18.2.0", "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", @@ -22,6 +22,8 @@ "bootstrap-icons": "^1.11.3", "chart.js": "^4.4.4", "highcharts-angular": "^4.0.1", + "jwt-decode": "^4.0.0", + "ngx-toastr": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" diff --git a/agrilink_vocpro/src/app/app.config.ts b/agrilink_vocpro/src/app/app.config.ts index 74f4c3b..7e40e44 100644 --- a/agrilink_vocpro/src/app/app.config.ts +++ b/agrilink_vocpro/src/app/app.config.ts @@ -1,13 +1,16 @@ -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { ApplicationConfig, provideZoneChangeDetection, importProvidersFrom } from '@angular/core'; import { provideRouter } from '@angular/router'; import { provideHttpClient } from '@angular/common/http'; - +import { provideAnimations } from '@angular/platform-browser/animations'; +import { ToastrModule } from 'ngx-toastr'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), - provideHttpClient() + provideHttpClient(), + provideAnimations(), + importProvidersFrom(ToastrModule.forRoot()), ] }; diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index 0899796..d797d16 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -3,28 +3,36 @@ import { DashboardComponent } from './pages/dashboard/dashboard.component'; import { LayoutsComponent } from './pages/dashboard/layouts/layouts.component'; import { GraphComponent } from './pages/dashboard/page/graph/graph.component'; import { AuthComponent } from './pages/auth/auth.component'; +import { AuthGuard } from './cores/guard/guards/auth.guard'; +import { RegisterComponent } from './pages/register/register.component'; export const routes: Routes = [ { path: '', - redirectTo:'dashboard', - pathMatch:'full' + redirectTo: 'auth', + pathMatch: 'full' }, { - path: 'auth', + path: 'auth', component: AuthComponent }, { - path: '', + path: 'register', + component: RegisterComponent + }, + { + path: '', component: LayoutsComponent, - children:[ + children: [ { path: 'dashboard', component: DashboardComponent, - }, + canActivate: [AuthGuard] + }, { path: 'graph', - component: GraphComponent + component: GraphComponent, + canActivate: [AuthGuard] }, ] } diff --git a/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.spec.ts b/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.spec.ts new file mode 100644 index 0000000..4ae275e --- /dev/null +++ b/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.spec.ts @@ -0,0 +1,17 @@ +import { TestBed } from '@angular/core/testing'; +import { CanActivateFn } from '@angular/router'; + +import { authGuard } from './auth.guard'; + +describe('authGuard', () => { + const executeGuard: CanActivateFn = (...guardParameters) => + TestBed.runInInjectionContext(() => authGuard(...guardParameters)); + + beforeEach(() => { + TestBed.configureTestingModule({}); + }); + + it('should be created', () => { + expect(executeGuard).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.ts b/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.ts new file mode 100644 index 0000000..489e713 --- /dev/null +++ b/agrilink_vocpro/src/app/cores/guard/guards/auth.guard.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, Router } from '@angular/router'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthGuard implements CanActivate { + + constructor(private router: Router) {} + + canActivate(): boolean { + const token = localStorage.getItem('accessToken'); + if (token) { + return true; + } else { + this.router.navigate(['auth']); + return false; + } + } +} diff --git a/agrilink_vocpro/src/app/cores/interface/auth.ts b/agrilink_vocpro/src/app/cores/interface/auth.ts new file mode 100644 index 0000000..6be4345 --- /dev/null +++ b/agrilink_vocpro/src/app/cores/interface/auth.ts @@ -0,0 +1,14 @@ +export interface LoginData { + email: string; + password: string; + rememberMe?: boolean; +} + +export interface RegistrationData { + username: string; + pwd: string; + email: string; + google_id: string; + fullname: string; + avatar?: string; +} diff --git a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts index f8256cd..f087e6c 100644 --- a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts +++ b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts @@ -18,13 +18,14 @@ export interface ParameterSensor { export interface ApiResponse { data: { - dht?: ParameterSensor[]; - npk1?: ParameterSensor[]; - npk2?: ParameterSensor[]; + dht: Array; + npk1: Array; + npk2: Array; }; statusCode: number; message: string; -} + } + export interface DHTSensor { lightIntensity: number; diff --git a/agrilink_vocpro/src/app/cores/services/api.service.ts b/agrilink_vocpro/src/app/cores/services/api.service.ts index 4ae3657..b3c8267 100644 --- a/agrilink_vocpro/src/app/cores/services/api.service.ts +++ b/agrilink_vocpro/src/app/cores/services/api.service.ts @@ -1,29 +1,11 @@ import { Injectable } from '@angular/core'; -import { HttpClient, HttpParams } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { ApiResponse } from '../interface/sensor-data'; +import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root' }) export class ApiService { - private baseUrl = 'https://jx027dj4-3333.asse.devtunnels.ms/api/sensor/'; + protected baseUrl = 'https://jx027dj4-3333.asse.devtunnels.ms/'; - constructor(private http: HttpClient) {} - - getSensorData(sensor: string, metric: string, startDate: string, timeRange: string): Observable { - const url = `${this.baseUrl}getData`; - const params = new HttpParams() - .set('range[start]', startDate) - .set('range[time_range]', timeRange) - .set('sensor', sensor) - .set('metric', metric); - - return this.http.get(url, { params }); - } - - getLatestData(): Observable { - const url = `${this.baseUrl}getLatest`; - return this.http.get(url); - } + constructor(protected http: HttpClient) {} } diff --git a/agrilink_vocpro/src/app/cores/services/auth.service.spec.ts b/agrilink_vocpro/src/app/cores/services/auth.service.spec.ts new file mode 100644 index 0000000..f1251ca --- /dev/null +++ b/agrilink_vocpro/src/app/cores/services/auth.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AuthService } from './auth.service'; + +describe('AuthService', () => { + let service: AuthService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(AuthService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/cores/services/auth.service.ts b/agrilink_vocpro/src/app/cores/services/auth.service.ts new file mode 100644 index 0000000..a8d8855 --- /dev/null +++ b/agrilink_vocpro/src/app/cores/services/auth.service.ts @@ -0,0 +1,87 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { ApiService } from './api.service'; +import { LoginData } from '../interface/auth'; +import {jwtDecode}from 'jwt-decode'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService extends ApiService { + private authUrl = `${this.baseUrl}auth/login`; + private logoutUrl = `${this.baseUrl}auth/logout`; + private registerUrl = `${this.baseUrl}auth/register`; + + constructor(http: HttpClient) { + super(http); + } + + + login(data: LoginData): Observable { + const headers = new HttpHeaders({ + Authorization: 'Basic ' + btoa(`${data.email}:${data.password}`) + }); + + const formData = new FormData(); + formData.append('remember_me', data.rememberMe ? 'true' : 'false'); + + return this.http.post(this.authUrl, formData, { headers }).pipe( + tap(response => { + const accessToken = response.data.token; + this.saveTokens(accessToken); + + const jwtToken = response.data.jwtToken; + const decodedToken: any = jwtDecode(jwtToken); + + this.saveUserDataToStorage(decodedToken.user.fullname, decodedToken.user.avatar); + }) + ); + } + + saveTokens(token: string) { + localStorage.setItem('accessToken', token); + } + + logout(): Observable { + const token = localStorage.getItem('accessToken'); + const headers = new HttpHeaders({ + Authorization: `Bearer ${token}` + }); + + return this.http.post(this.logoutUrl, {}, { headers }).pipe( + tap(() => { + localStorage.removeItem('accessToken'); + this.clearUserDataFromStorage(); + }) + ); + } + + register(data: any): Observable { + const headers = new HttpHeaders({}); + return this.http.post(this.registerUrl, data, { headers }).pipe( + // tap(response => { + // console.log('Registration response:', response); + // }) + ); + } + + getUserFullName(): string | null { + return localStorage.getItem('userFullName'); + } + + getAvatar(): string | null { + return localStorage.getItem('avatar'); + } + + private saveUserDataToStorage(fullName: string | null, avatar: string | null) { + localStorage.setItem('userFullName', fullName || ''); + localStorage.setItem('avatar', avatar || ''); + } + + private clearUserDataFromStorage() { + localStorage.removeItem('userFullName'); + localStorage.removeItem('avatar'); + } +} diff --git a/agrilink_vocpro/src/app/cores/services/sensor.service.spec.ts b/agrilink_vocpro/src/app/cores/services/sensor.service.spec.ts new file mode 100644 index 0000000..1a2cdc0 --- /dev/null +++ b/agrilink_vocpro/src/app/cores/services/sensor.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SensorService } from './sensor.service'; + +describe('SensorService', () => { + let service: SensorService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SensorService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/cores/services/sensor.service.ts b/agrilink_vocpro/src/app/cores/services/sensor.service.ts new file mode 100644 index 0000000..4a39720 --- /dev/null +++ b/agrilink_vocpro/src/app/cores/services/sensor.service.ts @@ -0,0 +1,55 @@ +import { Injectable } from '@angular/core'; +import { HttpParams, HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http'; +import { catchError, Observable, throwError, tap } from 'rxjs'; +import { ApiService } from './api.service'; +import { ApiResponse } from '../interface/sensor-data'; + +@Injectable({ + providedIn: 'root' +}) +export class SensorService extends ApiService { + constructor(http: HttpClient) { + super(http); + } + + getSensorData(sensor: string, metric: string, startEnd: string, timeRange: string): Observable { + const url = `${this.baseUrl}api/sensor/getData`; + const params = new HttpParams() + .set('range[end]', startEnd) + .set('range[time_range]', timeRange) + .set('sensor', sensor) + .set('metric', metric); + + const token = localStorage.getItem('accessToken'); + const headers = new HttpHeaders({ + Authorization: 'Bearer ' + token, + }); + + return this.http.get(url, { params, headers }).pipe( + catchError((error: HttpErrorResponse) => { + if (error.error instanceof ErrorEvent) { + console.error('An error occurred:', error.error.message); + } else { + console.error(`Backend returned code ${error.status}, body was: ${error.error}`); + } + return throwError('Something went wrong; please try again later.'); + }) + ); + } + + getLatestData(): Observable { + const url = `${this.baseUrl}api/sensor/getLatest`; + const headers = new HttpHeaders({ + Authorization: 'Bearer ' + localStorage.getItem('accessToken'), + + }); + + return this.http.get(url, { headers }).pipe( + catchError(error => { + console.error('API Error:', error); + return throwError(error); + }) + ); + + } +} diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.html b/agrilink_vocpro/src/app/pages/auth/auth.component.html index 91ad5d2..7a76fec 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.html +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.html @@ -1,43 +1,40 @@
-
-
-
-
- + - +
@@ -33,7 +33,7 @@
-

{{sensorData.dht.humidity}}%

+

{{sensorData.dht.humidity}} %RH

Humidity
@@ -48,13 +48,13 @@
-

{{sensorData.npk1.moisture}}%

+

{{sensorData.npk1.moisture}} %RH

Moisture
-

{{sensorData.npk1.conductivity}}mS/cm

+

{{sensorData.npk1.conductivity}} μS/cm

Conductivity
@@ -66,19 +66,19 @@
-

{{sensorData.npk1.nitrogen}}PPM

+

{{sensorData.npk1.nitrogen}} PPM

Nitrogen
-

{{sensorData.npk1.phosphorus}}PPM

+

{{sensorData.npk1.phosphorus}} PPM

Phosphorus
-

{{sensorData.npk1.potassium}}PPM

+

{{sensorData.npk1.potassium}} PPM

Potassium
@@ -93,13 +93,13 @@
-

{{ sensorData.npk1.moisture }}%

+

{{ sensorData.npk1.moisture }} %RH

Moisture
-

{{ sensorData.npk1.conductivity }}mS/cm

+

{{ sensorData.npk1.conductivity }} μS/cm

Conductivity
@@ -111,39 +111,35 @@
-

{{ sensorData.npk1.nitrogen}}PPM

+

{{ sensorData.npk1.nitrogen}} PPM

Nitrogen
-

{{ sensorData.npk2.phosphorus}}PPM

+

{{ sensorData.npk2.phosphorus}} PPM

Phosphorus
-

{{ sensorData.npk2.potassium }}PPM

+

{{ sensorData.npk2.potassium }} PPM

Potassium
- +
+
Monitoring
diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index daddac4..44ca4c0 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -99,3 +99,11 @@ button { text-align: center; color: #888; } + +.status-on { + color: #16423C; +} + +.status-off { + color: rgb(144, 6, 6); +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 9d1beb9..5a47b28 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -4,7 +4,7 @@ import { SidebarComponent } from './layouts/sidebar/sidebar.component'; import { GraphComponent } from './page/graph/graph.component'; import { CommonModule } from '@angular/common'; import { SensorService } from '../../cores/services/sensor.service'; -import { SensorData } from '../../cores/interface/sensor-data'; +import { SensorData, StatusRelay } from '../../cores/interface/sensor-data'; import { interval } from 'rxjs'; @Component({ @@ -24,6 +24,7 @@ export class DashboardComponent implements OnInit { npk1: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 }, npk2: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 } }; + relayStatus: StatusRelay[] = []; constructor(private apiService: SensorService) {} @@ -63,7 +64,11 @@ export class DashboardComponent implements OnInit { selectSensor(param: string): void { this.selectedButton = param; - this.loadData(); + if(param==='relay'){ + this.loadRelayData(); + }else{ + this.loadData(); + } } loadData(): void { @@ -72,35 +77,36 @@ export class DashboardComponent implements OnInit { this.apiService.getLatestData().subscribe( (response) => { const data = response.data; + console.log('Data:', data); if (data.dht && data.dht.length > 0) { this.sensorData.dht = { - lightIntensity: data.dht[0].viciluminosity_avg ?? 0, - temperature: data.dht[0].vicitemperature_avg ?? 0, - humidity: data.dht[0].vicihumidity_avg ?? 0 + lightIntensity: data.dht[0].viciluminosity ?? 0, + temperature: data.dht[0].vicitemperature ?? 0, + humidity: data.dht[0].vicihumidity ?? 0 }; } if (data.npk1 && data.npk1.length > 0) { this.sensorData.npk1 = { - temperature: data.npk1[0].soiltemperature_avg ?? 0, - moisture: data.npk1[0].soilhumidity_avg ?? 0, - conductivity: data.npk1[0].soilconductivity_avg ?? 0, - ph: data.npk1[0].soilph_avg ?? 0, - nitrogen: data.npk1[0].soilnitrogen_avg ?? 0, - phosphorus: data.npk1[0].soilphosphorus_avg ?? 0, - potassium: data.npk1[0].soilpotassium_avg ?? 0 + temperature: data.npk1[0].soiltemperature ?? 0, + moisture: data.npk1[0].soilhumidity ?? 0, + conductivity: data.npk1[0].soilconductivity ?? 0, + ph: data.npk1[0].soilph ?? 0, + nitrogen: data.npk1[0].soilnitrogen ?? 0, + phosphorus: data.npk1[0].soilphosphorus ?? 0, + potassium: data.npk1[0].soilpotassium ?? 0 }; } if (data.npk2 && data.npk2.length > 0) { this.sensorData.npk2 = { - temperature: data.npk2[0].soiltemperature_avg ?? 0, - moisture: data.npk2[0].soilhumidity_avg ?? 0, - conductivity: data.npk2[0].soilconductivity_avg ?? 0, - ph: data.npk2[0].soilph_avg ?? 0, - nitrogen: data.npk2[0].soilnitrogen_avg ?? 0, - phosphorus: data.npk2[0].soilphosphorus_avg ?? 0, - potassium: data.npk2[0].soilpotassium_avg ?? 0 + temperature: data.npk2[0].soiltemperature ?? 0, + moisture: data.npk2[0].soilhumidity ?? 0, + conductivity: data.npk2[0].soilconductivity ?? 0, + ph: data.npk2[0].soilph ?? 0, + nitrogen: data.npk2[0].soilnitrogen ?? 0, + phosphorus: data.npk2[0].soilphosphorus ?? 0, + potassium: data.npk2[0].soilpotassium ?? 0 }; } @@ -113,5 +119,31 @@ export class DashboardComponent implements OnInit { } ); } + + loadRelayData(): void { + this.isLoaded = true; + + this.apiService.getRelayStatus().subscribe( + (response) => { + if (Array.isArray(response.data)) { + this.relayStatus = response.data.map((relay) => ({ + id: relay.id, + number: relay.number, + enabled_at: relay.enabled_at, + disabled_at: relay.disabled_at, + created_at: relay.created_at, + current_status: relay.current_status + })); + } + console.log('Relay Data:', response); + this.isLoaded = false; + }, + (error) => { + console.error('Error fetching relay data:', error); + this.isLoaded = false; + } + ); + } + } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 14671f9..90d7ea4 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -1,6 +1,6 @@
diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index b278b65..4fbf721 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -7,16 +7,16 @@ import { FormsModule } from '@angular/forms'; Chart.register(...registerables); const parameterColors: { [key: string]: string } = { - vicitemperature_avg: '#8F5A62', - vicihumidity_avg: '#16423C', - viciluminosity_avg: '#DF9B55', - soiltemperature_avg: '#8F5A62', - soilhumidity_avg: '#54909c', - soilconductivity_avg: '#661311', - soilph_avg: '#664735', - soilnitrogen_avg: '#3a6635', - soilphosphorus_avg: '#3f3566', - soilpotassium_avg: '#5f3566', + vicitemperature: '#8F5A62', + vicihumidity: '#16423C', + viciluminosity: '#DF9B55', + soiltemperature: '#8F5A62', + soilhumidity: '#54909c', + soilconductivity: '#661311', + soilph: '#664735', + soilnitrogen: '#3a6635', + soilphosphorus: '#3f3566', + soilpotassium: '#5f3566', }; @Component({ @@ -34,22 +34,22 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { isLoading: boolean = true; sensorParameters: { [key: string]: string[] } = { - dht: ['vicitemperature_avg', 'vicihumidity_avg', 'viciluminosity_avg'], - npk1: ['soiltemperature_avg', 'soilhumidity_avg', 'soilconductivity_avg', 'soilph_avg', 'soilnitrogen_avg', 'soilphosphorus_avg', 'soilpotassium_avg'], - npk2: ['soiltemperature_avg', 'soilhumidity_avg', 'soilconductivity_avg', 'soilph_avg', 'soilnitrogen_avg', 'soilphosphorus_avg', 'soilpotassium_avg'], + dht: ['vicitemperature', 'vicihumidity', 'viciluminosity'], + npk1: ['soiltemperature', 'soilhumidity', 'soilconductivity', 'soilph', 'soilnitrogen', 'soilphosphorus', 'soilpotassium'], + npk2: ['soiltemperature', 'soilhumidity', 'soilconductivity', 'soilph', 'soilnitrogen', 'soilphosphorus', 'soilpotassium'], }; parameterDisplayNames: { [key: string]: string } = { - vicitemperature_avg: 'Temperature (°C)', - vicihumidity_avg: 'Humidity (%)', - viciluminosity_avg: 'Luminosity (lx)', - soiltemperature_avg: 'Soil Temperature (°C)', - soilhumidity_avg: 'Soil Humidity (%)', - soilconductivity_avg: 'Conductivity (mS/cm)', - soilph_avg: 'pH', - soilnitrogen_avg: 'Nitrogen (PPM)', - soilphosphorus_avg: 'Phosphorus (PPM)', - soilpotassium_avg: 'Potassium (PPM)', + vicitemperature: 'Temperature (°C)', + vicihumidity: 'Humidity (%)', + viciluminosity: 'Luminosity (lux)', + soiltemperature: 'Soil Temperature (°C)', + soilhumidity: 'Soil Humidity (%)', + soilconductivity: 'Conductivity (μS/cm)', + soilph: 'pH', + soilnitrogen: 'Nitrogen (PPM)', + soilphosphorus: 'Phosphorus (PPM)', + soilpotassium: 'Potassium (PPM)', }; chart: Chart | undefined; @@ -61,7 +61,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { ngOnInit(): void { this.selectedSensor = 'dht'; this.updateParameters(); - this.selectedParameter = 'vicitemperature_avg'; + this.selectedParameter = 'vicitemperature'; this.updateChart(); this.resizeListener = this.onResize.bind(this); window.addEventListener('resize', this.resizeListener); @@ -168,9 +168,9 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { this.selectedSensor = select.value; this.updateParameters(); if (this.selectedSensor === 'dht') { - this.selectedParameter = 'vicitemperature_avg'; + this.selectedParameter = 'vicitemperature'; } else if (this.selectedSensor === 'npk1' || this.selectedSensor === 'npk2') { - this.selectedParameter = 'soiltemperature_avg'; + this.selectedParameter = 'soiltemperature'; } this.updateChart(); } From ee463ec174dbaeba9af0463748c7665702f05c9f Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 25 Oct 2024 10:55:52 +0700 Subject: [PATCH 20/53] fix(login+register+dashboard): adding interceptor handling error, changing interface graphs --- agrilink_vocpro/src/app/app.config.ts | 4 +- agrilink_vocpro/src/app/app.routes.ts | 6 - .../src/app/cores/guards/auth.guard.ts | 10 +- .../http-error-interceptor.service.ts | 43 ++ .../src/app/cores/interface/sensor-data.ts | 4 +- .../src/app/cores/services/auth.service.ts | 24 +- .../src/app/cores/services/sensor.service.ts | 8 +- .../src/app/pages/auth/auth.component.html | 40 +- .../src/app/pages/auth/auth.component.scss | 35 +- .../src/app/pages/auth/auth.component.ts | 32 +- .../pages/dashboard/dashboard.component.html | 210 +++++----- .../pages/dashboard/dashboard.component.scss | 5 +- .../pages/dashboard/dashboard.component.ts | 118 ++++-- .../dashboard/page/graph/graph.component.html | 69 +++- .../dashboard/page/graph/graph.component.scss | 114 +++--- .../dashboard/page/graph/graph.component.ts | 369 +++++++++++------- .../pages/register/register.component.html | 31 +- .../pages/register/register.component.scss | 19 + .../app/pages/register/register.component.ts | 26 +- agrilink_vocpro/src/index.html | 1 + 20 files changed, 755 insertions(+), 413 deletions(-) create mode 100644 agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts diff --git a/agrilink_vocpro/src/app/app.config.ts b/agrilink_vocpro/src/app/app.config.ts index 7e40e44..0ceb76d 100644 --- a/agrilink_vocpro/src/app/app.config.ts +++ b/agrilink_vocpro/src/app/app.config.ts @@ -1,9 +1,10 @@ import { ApplicationConfig, provideZoneChangeDetection, importProvidersFrom } from '@angular/core'; import { provideRouter } from '@angular/router'; -import { provideHttpClient } from '@angular/common/http'; +import { provideHttpClient, withInterceptors } from '@angular/common/http'; import { provideAnimations } from '@angular/platform-browser/animations'; import { ToastrModule } from 'ngx-toastr'; import { routes } from './app.routes'; +import { httpErrorInterceptor } from './cores/interceptors/http-error-interceptor.service'; export const appConfig: ApplicationConfig = { providers: [ @@ -12,5 +13,6 @@ export const appConfig: ApplicationConfig = { provideHttpClient(), provideAnimations(), importProvidersFrom(ToastrModule.forRoot()), + provideHttpClient(withInterceptors([httpErrorInterceptor])) // Register your HttpErrorInterceptor ] }; diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index 3a062f9..31b6cf6 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -1,7 +1,6 @@ import { Routes } from '@angular/router'; import { DashboardComponent } from './pages/dashboard/dashboard.component'; import { LayoutsComponent } from './pages/dashboard/layouts/layouts.component'; -import { GraphComponent } from './pages/dashboard/page/graph/graph.component'; import { AuthComponent } from './pages/auth/auth.component'; import { AuthGuard } from './cores/guards/auth.guard'; import { RegisterComponent } from './pages/register/register.component'; @@ -29,11 +28,6 @@ export const routes: Routes = [ component: DashboardComponent, canActivate: [AuthGuard] }, - { - path: 'graph', - component: GraphComponent, - canActivate: [AuthGuard] - }, ] } ]; diff --git a/agrilink_vocpro/src/app/cores/guards/auth.guard.ts b/agrilink_vocpro/src/app/cores/guards/auth.guard.ts index 8ed90a3..255cf26 100644 --- a/agrilink_vocpro/src/app/cores/guards/auth.guard.ts +++ b/agrilink_vocpro/src/app/cores/guards/auth.guard.ts @@ -1,16 +1,20 @@ import { Injectable } from '@angular/core'; import { CanActivate, Router } from '@angular/router'; import { ToastrService } from 'ngx-toastr'; - +import { StorageService } from '../services/storage.service'; @Injectable({ providedIn: 'root' }) export class AuthGuard implements CanActivate { - constructor(private router: Router, private toast: ToastrService) {} + constructor( + private router: Router, + private toast: ToastrService, + private storageService: StorageService + ) {} canActivate(): boolean { - const token = localStorage.getItem('accessToken'); + const token = this.storageService.getToken(); if (token) { return true; } else { diff --git a/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts b/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts new file mode 100644 index 0000000..eb2420a --- /dev/null +++ b/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts @@ -0,0 +1,43 @@ +import { HttpInterceptorFn } from '@angular/common/http'; +import { ToastrService } from 'ngx-toastr'; +import { inject } from '@angular/core'; +import { catchError, throwError } from 'rxjs'; +import { HttpErrorResponse } from '@angular/common/http'; + +export const httpErrorInterceptor: HttpInterceptorFn = (req, next) => { + const toast = inject(ToastrService); + + return next(req).pipe( + catchError((error: HttpErrorResponse) => { + let errorMessage = ''; + + if (error.error instanceof ErrorEvent) { + errorMessage = `Client error: ${error.error.message}`; + } else { + switch (error.status) { + case 0: + errorMessage = 'Network error: Please check your internet connection.'; + break; + case 401: + errorMessage = 'Unauthorized: Please log in again.'; + break; + case 403: + errorMessage = 'Forbidden: You do not have permission to access this resource.'; + break; + case 404: + errorMessage = 'Resource not found: The requested resource does not exist.'; + break; + case 500: + errorMessage = 'Server error: Please try again later.'; + break; + default: + errorMessage = `Unexpected error: ${error.message}`; + } + } + + toast.error(errorMessage, 'Error', { timeOut: 3000 }); + + return throwError(() => new Error(errorMessage)); + }) + ); +}; diff --git a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts index 6474dff..165a711 100644 --- a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts +++ b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts @@ -24,9 +24,7 @@ export interface ApiResponse { }; statusCode: number; message: string; - } - - +} export interface DHTSensor { lightIntensity: number; temperature: number; diff --git a/agrilink_vocpro/src/app/cores/services/auth.service.ts b/agrilink_vocpro/src/app/cores/services/auth.service.ts index 376456b..a68eca2 100644 --- a/agrilink_vocpro/src/app/cores/services/auth.service.ts +++ b/agrilink_vocpro/src/app/cores/services/auth.service.ts @@ -1,12 +1,10 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Observable } from 'rxjs'; -import { catchError, tap } from 'rxjs/operators'; +import { Observable, tap } from 'rxjs'; import { ApiService } from './api.service'; import { LoginData } from '../interface/auth'; -import {jwtDecode}from 'jwt-decode'; +import { jwtDecode } from 'jwt-decode'; import { StorageService } from './storage.service'; -import { ToastrService } from 'ngx-toastr'; @Injectable({ providedIn: 'root' @@ -16,9 +14,10 @@ export class AuthService extends ApiService { private logoutUrl = `${this.baseUrl}auth/logout`; private registerUrl = `${this.baseUrl}auth/register`; - constructor(http: HttpClient, + constructor( + http: HttpClient, private storageService: StorageService, - private toast: ToastrService) { + ) { super(http); } @@ -44,7 +43,7 @@ export class AuthService extends ApiService { } logout(): Observable { - const token = localStorage.getItem('accessToken'); + const token = this.storageService.getToken(); const headers = new HttpHeaders({ Authorization: `Bearer ${token}` }); @@ -54,21 +53,12 @@ export class AuthService extends ApiService { this.storageService.clearToken(); this.storageService.clearUserData(); }), - catchError(error => { - this.toast.error('Failed to logout'); - return error; - }) ); } register(data: any): Observable { const headers = new HttpHeaders({}); - return this.http.post(this.registerUrl, data, { headers }).pipe( - catchError(error => { - this.toast.error('Failed to register'); - return error; - }) - ); + return this.http.post(this.registerUrl, data, { headers }); } getUserFullName(): string | null { diff --git a/agrilink_vocpro/src/app/cores/services/sensor.service.ts b/agrilink_vocpro/src/app/cores/services/sensor.service.ts index 239ac8b..3988c74 100644 --- a/agrilink_vocpro/src/app/cores/services/sensor.service.ts +++ b/agrilink_vocpro/src/app/cores/services/sensor.service.ts @@ -18,7 +18,7 @@ export class SensorService extends ApiService { private getDataUrl = `${this.baseUrl}api/sensor/getData`; private getLatestUrl = `${this.baseUrl}api/sensor/getLatest`; - private getStatusRelay = `${this.baseUrl}api/get-relay`; + private getStatusRelay = `${this.baseUrl}api/relay/get-relay`; private createAuthHeaders(): HttpHeaders { const token = this.storageService.getToken(); @@ -38,7 +38,7 @@ export class SensorService extends ApiService { return this.http.get(this.getDataUrl, { params, headers }).pipe( catchError(error => { - this.toast.error('Failed to get sensor data, please try again'); + // this.toast.error('Failed to get sensor data for graphic, please try again'); return throwError(error); }) ); @@ -49,7 +49,7 @@ export class SensorService extends ApiService { return this.http.get(this.getLatestUrl, { headers }).pipe( catchError(error => { - this.toast.error('Failed to get sensor data, please try again'); + // this.toast.error('Failed to get latest sensor data, please try again'); return throwError(error); }) ); @@ -60,7 +60,7 @@ export class SensorService extends ApiService { return this.http.get(this.getStatusRelay, { headers }).pipe( catchError(error => { - this.toast.error('Failed to get relay status, please try again'); + // this.toast.error('Failed to get relay status, please try again'); return throwError(error); }) ); diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.html b/agrilink_vocpro/src/app/pages/auth/auth.component.html index 7a76fec..94994ac 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.html +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.html @@ -8,24 +8,52 @@
-
- +
- + + +
- - + +
- + diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.scss b/agrilink_vocpro/src/app/pages/auth/auth.component.scss index b701036..a35f4ec 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.scss +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.scss @@ -1,5 +1,5 @@ .login { - min-height: 100vh; + min-height: 100vh; font-family: "Onest", sans-serif; } @@ -19,11 +19,40 @@ padding: 0.75rem 1rem; } -.color-btn{ +.color-btn { background-color: #16423C; color: white; } -.forgot{ +.forgot { color: #16423C; } + +.form-floating { + position: relative; + + .btn-link { + position: absolute; + top: 50%; + right: 10px; + transform: translateY(-50%); + border: none; + background: transparent; + cursor: pointer; + color: #16423C; + + &:hover { + color: #16423C; + } + } +} + +.form-check-input:checked { + background-color: #16423C; + border-color: #16423C; +} + +.form-check-input:checked::before { + color: white; +} + diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.ts b/agrilink_vocpro/src/app/pages/auth/auth.component.ts index ec21a19..b0f0364 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.ts +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.ts @@ -5,11 +5,13 @@ import { StorageService } from '../../cores/services/storage.service'; import { FormsModule } from '@angular/forms'; import { LoginData } from '../../cores/interface/auth'; import { ToastrService } from 'ngx-toastr'; +import { CommonModule } from '@angular/common'; +import { catchError } from 'rxjs'; @Component({ selector: 'app-auth', standalone: true, - imports: [FormsModule, RouterModule], + imports: [FormsModule, RouterModule, CommonModule], templateUrl: './auth.component.html', styleUrls: ['./auth.component.scss'] }) @@ -17,25 +19,43 @@ export class AuthComponent { email: string = ''; password: string = ''; rememberMe: boolean = false; + loading: boolean = false; + passwordVisible: boolean = false; - constructor(private authService: AuthService, private storageService: StorageService, private router: Router, private toastr: ToastrService) {} + constructor(private authService: AuthService, + private storageService: StorageService, + private router: Router, + private toast: ToastrService) {} onSubmit() { + this.loading = true; + if (!this.email || !this.password) { + this.loading = false; + this.toast.error('Please fill in all fields.'); + return; + } + const loginData: LoginData = { email: this.email, password: this.password, rememberMe: this.rememberMe }; - + this.authService.login(loginData).subscribe( (response) => { this.storageService.saveToken(response.data.token); this.router.navigate(['/dashboard']); - this.toastr.success('Login successful'); + this.toast.success('Login successful'); + this.loading = false; }, (error) => { - this.toastr.error(error.error.message); + this.loading = false; + this.toast.error(error.error.message); } ); } -} + + togglePasswordVisibility() { + this.passwordVisible = !this.passwordVisible; // Toggle password visibility + } +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 2e00c12..fdab7c1 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -1,150 +1,124 @@
-

Hello there

-

Welcome back to your management system

+

{{ greeting }}

+

Welcome back to your management system

-

Latest Update: {{latestUpdate}}

+

Latest Update: {{latestUpdate}}

- +
-
- Loading... +
+
-
-
-
-

{{sensorData.dht.lightIntensity}} Lux

-
Light Intensity
+ +
No available data
+
+ +
+
+
+
+
+

{{sensorData.dht.lightIntensity}} Lux

+
Cahaya
+
-
-
-
-

{{sensorData.dht.temperature}} °C

-
Temperature
+
+
+

{{sensorData.dht.temperature}} °C

+
Temperatur
+
-
-
-
-

{{sensorData.dht.humidity}} %RH

-
Humidity
+
+
+

{{sensorData.dht.humidity}} %RH

+
Kelembaban Udara
+
-
- -
-
-
-

{{ sensorData.npk1.temperature }} °C

-
Temperature
-
-
-
-
-

{{sensorData.npk1.moisture}} %RH

-
Moisture
-
-
-
-
-

{{sensorData.npk1.conductivity}} μS/cm

-
Conductivity
-
-
-
-
-

{{sensorData.npk1.ph}}

-
pH
-
-
-
-
-

{{sensorData.npk1.nitrogen}} PPM

-
Nitrogen
-
-
-
-
-

{{sensorData.npk1.phosphorus}} PPM

-
Phosphorus
-
-
-
-
-

{{sensorData.npk1.potassium}} PPM

-
Potassium
-
-
-
-
-

{{ sensorData.npk2.temperature }}°C

-
Temperature
-
-
-
-
-

{{ sensorData.npk1.moisture }} %RH

-
Moisture
-
-
-
-
-

{{ sensorData.npk1.conductivity }} μS/cm

-
Conductivity
-
-
-
-
-

{{ sensorData.npk1.ph }}

-
pH
-
-
-
-
-

{{ sensorData.npk1.nitrogen}} PPM

-
Nitrogen
-
-
-
-
-

{{ sensorData.npk2.phosphorus}} PPM

-
Phosphorus
-
-
-
-
-

{{ sensorData.npk2.potassium }} PPM

-
Potassium
+
+
+
+
+
+

{{sensorData.npk1.temperature}} °C

+
Temperature
+
+
+
+
+

{{sensorData.npk1.moisture}} %RH

+
Kelembaban Tanah
+
+
+
+
+

{{sensorData.npk1.conductivity}} μS/cm

+
Conductivity
+
+
+
-
-
-
-

- {{ relay.current_status ? 'ON' : 'OFF' }} -

-
Relay {{ relay.number }}
+
+
+
+
+
+

{{sensorData.npk2.temperature}} °C

+
Temperature
+
+
+
+
+

{{sensorData.npk2.moisture}} %RH

+
Kelembaban Tanah
+
+
+
+
+

{{sensorData.npk2.conductivity}} μS/cm

+
Conductivity
+
+
+ +
+
+
+ +
+
+
+
+
+

+ {{ relay.current_status ? 'ON' : 'OFF' }} +

+
Relay {{ relay.number }}
+
+
-
-
Monitoring
-
- -
+
Monitoring Graphs
+
+ +
+ diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index 44ca4c0..4da6bbb 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -97,7 +97,6 @@ button { .loading{ font-size: 18px; text-align: center; - color: #888; } .status-on { @@ -107,3 +106,7 @@ button { .status-off { color: rgb(144, 6, 6); } + +.spinner { + color: #16423C +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 5a47b28..0564e1c 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -5,7 +5,7 @@ import { GraphComponent } from './page/graph/graph.component'; import { CommonModule } from '@angular/common'; import { SensorService } from '../../cores/services/sensor.service'; import { SensorData, StatusRelay } from '../../cores/interface/sensor-data'; -import { interval } from 'rxjs'; +import { ToastrService } from 'ngx-toastr'; @Component({ selector: 'app-dashboard', @@ -16,9 +16,12 @@ import { interval } from 'rxjs'; }) export class DashboardComponent implements OnInit { isLoaded: boolean = false; + hasError: boolean = false; + noData: boolean = false; selectedButton: string = ''; latestUpdate: string = ''; intervalId: any; + greeting: string = ''; sensorData: SensorData = { dht: { lightIntensity: 0, temperature: 0, humidity: 0 }, npk1: { temperature: 0, moisture: 0, conductivity: 0, ph: 0, nitrogen: 0, phosphorus: 0, potassium: 0 }, @@ -26,11 +29,12 @@ export class DashboardComponent implements OnInit { }; relayStatus: StatusRelay[] = []; - constructor(private apiService: SensorService) {} + constructor(private apiService: SensorService, private toast: ToastrService) {} ngOnInit(): void { this.selectedButton = 'dht'; this.startClock(); + this.updateGreeting(); this.loadData(); } @@ -61,68 +65,88 @@ export class DashboardComponent implements OnInit { this.latestUpdate = now.toLocaleString('en-GB', options); } + updateGreeting(): void { + const hour = new Date().getHours(); + if (hour < 12) { + this.greeting = 'Good Morning'; + } else if (hour < 18) { + this.greeting = 'Good Afternoon'; + } else { + this.greeting = 'Good Evening'; + } + } selectSensor(param: string): void { this.selectedButton = param; - if(param==='relay'){ + if(param === 'relay'){ this.loadRelayData(); - }else{ - this.loadData(); + } else { + this.loadData(); } } loadData(): void { this.isLoaded = true; - + this.hasError = false; + this.noData = false; + this.apiService.getLatestData().subscribe( (response) => { const data = response.data; console.log('Data:', data); - if (data.dht && data.dht.length > 0) { - this.sensorData.dht = { - lightIntensity: data.dht[0].viciluminosity ?? 0, - temperature: data.dht[0].vicitemperature ?? 0, - humidity: data.dht[0].vicihumidity ?? 0 - }; - } - - if (data.npk1 && data.npk1.length > 0) { - this.sensorData.npk1 = { - temperature: data.npk1[0].soiltemperature ?? 0, - moisture: data.npk1[0].soilhumidity ?? 0, - conductivity: data.npk1[0].soilconductivity ?? 0, - ph: data.npk1[0].soilph ?? 0, - nitrogen: data.npk1[0].soilnitrogen ?? 0, - phosphorus: data.npk1[0].soilphosphorus ?? 0, - potassium: data.npk1[0].soilpotassium ?? 0 - }; - } - - if (data.npk2 && data.npk2.length > 0) { - this.sensorData.npk2 = { - temperature: data.npk2[0].soiltemperature ?? 0, - moisture: data.npk2[0].soilhumidity ?? 0, - conductivity: data.npk2[0].soilconductivity ?? 0, - ph: data.npk2[0].soilph ?? 0, - nitrogen: data.npk2[0].soilnitrogen ?? 0, - phosphorus: data.npk2[0].soilphosphorus ?? 0, - potassium: data.npk2[0].soilpotassium ?? 0 - }; + + if ((!data.dht || data.dht.length === 0) && + (!data.npk1 || data.npk1.length === 0) && + (!data.npk2 || data.npk2.length === 0)) { + this.noData = true; + } else { + if (data.dht && data.dht.length > 0) { + this.sensorData.dht = { + lightIntensity: data.dht[0].viciluminosity ?? 0, + temperature: data.dht[0].vicitemperature ?? 0, + humidity: data.dht[0].vicihumidity ?? 0 + }; + } + + if (data.npk1 && data.npk1.length > 0) { + this.sensorData.npk1 = { + temperature: data.npk1[0].soiltemperature ?? 0, + moisture: data.npk1[0].soilhumidity ?? 0, + conductivity: data.npk1[0].soilconductivity ?? 0, + ph: data.npk1[0].soilph ?? 0, + nitrogen: data.npk1[0].soilnitrogen ?? 0, + phosphorus: data.npk1[0].soilphosphorus ?? 0, + potassium: data.npk1[0].soilpotassium ?? 0 + }; + } + + if (data.npk2 && data.npk2.length > 0) { + this.sensorData.npk2 = { + temperature: data.npk2[0].soiltemperature ?? 0, + moisture: data.npk2[0].soilhumidity ?? 0, + conductivity: data.npk2[0].soilconductivity ?? 0, + ph: data.npk2[0].soilph ?? 0, + nitrogen: data.npk2[0].soilnitrogen ?? 0, + phosphorus: data.npk2[0].soilphosphorus ?? 0, + potassium: data.npk2[0].soilpotassium ?? 0 + }; + } } this.updateLatestTime(); this.isLoaded = false; }, (error) => { - console.error('Error fetching sensor data:', error); this.isLoaded = false; + this.handleError(error); } ); } loadRelayData(): void { this.isLoaded = true; - + this.hasError = false; + this.apiService.getRelayStatus().subscribe( (response) => { if (Array.isArray(response.data)) { @@ -134,16 +158,26 @@ export class DashboardComponent implements OnInit { created_at: relay.created_at, current_status: relay.current_status })); + this.relayStatus.sort((a, b) => a.number - b.number); } - console.log('Relay Data:', response); this.isLoaded = false; }, (error) => { - console.error('Error fetching relay data:', error); + this.toast.error('Failed to get relay status, please try again'); + this.hasError = true; this.isLoaded = false; } ); } - -} + handleError(error: any): void { + if (this.selectedButton === 'dht') { + this.toast.error('Error fetching DHT sensor data. Please try again.', 'Error', { timeOut: 3000 }); + } else if (this.selectedButton === 'npk1') { + this.toast.error('Error fetching NPK1 sensor data. Please try again.', 'Error', { timeOut: 3000 }); + } else if (this.selectedButton === 'npk2') { + this.toast.error('Error fetching NPK2 sensor data. Please try again.', 'Error', { timeOut: 3000 }); + } + this.hasError = true; + } +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 90d7ea4..b4d0e0e 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -1,17 +1,58 @@
- - - -
+ +
No available data
+
-
- Loading... -
+ +
+
Sensor BHT
+ +
+ +
+
+ + +

No available data

+
+
- +
+
+
Sensor NPK 1
+ +
+ +
+ +
+
+ + +

No available data

+
+
+ +
+
+
Sensor NPK 2
+ +
+ +
+ +
+
+ + +

No available data

+
+
+
+
diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 7783e2b..5d34e0f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -1,54 +1,74 @@ -.chart-container { - width: 100%; - max-width: 800px; - margin: auto; - text-align: center; - } - - canvas { - width: 100%; - height: 30vh; - margin: 20px; - align-items: center; - } +.container-graph { + display: flex; + flex-direction: column; + justify-content: flex-start; + height: max-content; - .form-select{ - width: max-content; - margin-top: 20px; - display: flexbox; - flex-direction: column; - margin-right: 20px; - } - - .container-graph{ + .sensor-wrapper { display: flex; - flex-wrap: wrap; - justify-content: left; - height: max-content; - } - - - @media (max-width: 768px) { - canvas{ - display: flex; - width: max-content; - flex: 1 1 45%; - } - } - - @media (max-width: 576px) { - canvas{ - display: flex; - width: max-content; - flex: 1 1 100%; + flex-direction: column; + align-items: center; + margin-bottom: 35px; + background-color: #f1f1f1; + border-radius: 10px; + + h2 { + font-size: 18px; + margin-bottom: 10px; } } - .loading{ - font-size: 18px; - text-align: center; - color: #888; + .title-with-dropdown { + display: flex; + align-items: center; + justify-content: center; + width: 50%; + + .title { + flex: 0 0 25%; + text-align: center; + } + + .form-select { + flex: 0 0 25%; + margin: 18px 0px 0px 15px; + } + } } - - \ No newline at end of file +.title { + text-align: center; + font-size: 20px; + margin: 18px 0px 0px 0px; +} + +canvas { + height: 500px !important; + width: 100%; + max-width: 2000px; + padding-bottom: 20px; + padding-top: 20px; +} + +@media (max-width: 768px) { + canvas { + height: 300px !important; + } +} + +.loading { + font-size: 18px; + text-align: center; +} + +.spinner { + color: #16423C +} + +.no-data { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + font-size: 18px; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 4fbf721..3b11f7f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,22 +1,23 @@ import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core'; import { Chart, registerables } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; -import { ApiResponse, ParameterSensor} from '../../../../cores/interface/sensor-data'; +import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; Chart.register(...registerables); + const parameterColors: { [key: string]: string } = { vicitemperature: '#8F5A62', vicihumidity: '#16423C', viciluminosity: '#DF9B55', - soiltemperature: '#8F5A62', - soilhumidity: '#54909c', - soilconductivity: '#661311', - soilph: '#664735', - soilnitrogen: '#3a6635', - soilphosphorus: '#3f3566', - soilpotassium: '#5f3566', + soiltemperature: '#FF6347', + soilhumidity: '#00BFFF', + soilconductivity: '#A52A2A', + soilph: '#228B22', + soilnitrogen: '#FEDC56', + soilphosphorus: '#B80F0A', + soilpotassium: '#6F2DA8', }; @Component({ @@ -27,11 +28,19 @@ const parameterColors: { [key: string]: string } = { styleUrls: ['./graph.component.scss'] }) export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { - @ViewChild('myChart', { static: false }) chartElement!: ElementRef; - selectedSensor: string = ''; - selectedParameter: string = ''; - parameters: string[] = []; - isLoading: boolean = true; + @ViewChild('myChartDHT', { static: false }) dhtChartElement!: ElementRef; + @ViewChild('myChartNPK1', { static: false }) npk1ChartElement!: ElementRef; + @ViewChild('myChartNPK2', { static: false }) npk2ChartElement!: ElementRef; + + isLoadingDHT: boolean = true; + isLoadingNPK1: boolean = true; + isLoadingNPK2: boolean = true; + + isNoDataDHT: boolean = false; + isNoDataNPK1: boolean = false; + isNoDataNPK2: boolean = false; + + allNoData: boolean = false; sensorParameters: { [key: string]: string[] } = { dht: ['vicitemperature', 'vicihumidity', 'viciluminosity'], @@ -47,28 +56,32 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { soilhumidity: 'Soil Humidity (%)', soilconductivity: 'Conductivity (μS/cm)', soilph: 'pH', - soilnitrogen: 'Nitrogen (PPM)', - soilphosphorus: 'Phosphorus (PPM)', - soilpotassium: 'Potassium (PPM)', + soilnitrogen: 'Nitrogen (mg/l)', + soilphosphorus: 'Phosphorus (mg/l)', + soilpotassium: 'Potassium (mg/l)', }; - chart: Chart | undefined; - labelsHourly: string[] = []; + charts: { [key: string]: Chart | undefined } = { + dht: undefined, + npk1: undefined, + npk2: undefined, + }; + + selectedNPK1: string = 'npk'; + selectedNPK2: string = 'npk'; + private resizeListener!: () => void; constructor(private sensorService: SensorService) {} ngOnInit(): void { - this.selectedSensor = 'dht'; - this.updateParameters(); - this.selectedParameter = 'vicitemperature'; - this.updateChart(); this.resizeListener = this.onResize.bind(this); window.addEventListener('resize', this.resizeListener); + this.updateCharts(); } ngAfterViewInit(): void { - this.updateChart(); + this.onResize(); } ngOnDestroy(): void { @@ -76,12 +89,204 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { } onResize(): void { - if (this.chart) { - this.chart.destroy(); - this.updateChart(); - } + Object.values(this.charts).forEach(chart => { + if (chart) { + chart.destroy(); + } + }); + this.updateCharts(); } + updateCharts(): void { + this.isLoadingDHT = this.isLoadingNPK1 = this.isLoadingNPK2 = true; + + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, '0'); + const day = String(today.getDate()).padStart(2, '0'); + + const startEnd = `${year}-${month}-${day}`; + // const startEnd = '2024-10-24'; + const timeRange = 'HOURLY'; + + // Fetch data for DHT + this.sensorService.getSensorData('dht', '', startEnd, timeRange).subscribe({ + next: (response) => { + if (response.statusCode === 200 && response.data.dht?.length > 0) { + this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); + this.isNoDataDHT = false; + this.allNoData = false; + } else { + this.isNoDataDHT = true; + } + this.isLoadingDHT = false; + }, + error: () => { + this.isLoadingDHT = false; + this.isNoDataDHT = true; + } + }); + + // Fetch data for NPK1 + this.sensorService.getSensorData('npk1', '', startEnd, timeRange).subscribe({ + next: (response) => { + if (response.statusCode === 200 && response.data.npk1?.length > 0) { + this.createChart(this.npk1ChartElement.nativeElement, response, 'npk1', this.selectedNPK1); + this.isNoDataNPK1 = false; + this.allNoData = false; + } else { + this.isNoDataNPK1 = true; + } + this.isLoadingNPK1 = false; + }, + error: () => { + this.isLoadingNPK1 = false; + this.isNoDataNPK1 = true; + } + }); + + // Fetch data for NPK2 + this.sensorService.getSensorData('npk2', '', startEnd, timeRange).subscribe({ + next: (response) => { + if (response.statusCode === 200 && response.data.npk2?.length > 0) { + this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); + this.isNoDataNPK2 = false; + this.allNoData = false; + } else { + this.isNoDataNPK2 = true; + } + this.isLoadingNPK2 = false; + }, + error: () => { + this.isLoadingNPK2 = false; + this.isNoDataNPK2 = true; + } + }); + } + + createChart(canvas: HTMLCanvasElement, response: ApiResponse, sensor: string, selectedOption: string): void { + const ctx = canvas.getContext('2d'); + const parameters = this.sensorParameters[sensor]; + + if (!ctx) { + console.error('Failed to get canvas context for sensor:', sensor); + return; + } + + let datasets: any[] = []; + + if (sensor === 'dht') { + // Handle DHT parameters directly + datasets = ['vicitemperature', 'vicihumidity', 'viciluminosity'].map(parameter => { + const { data, labels } = this.getDataFromResponse(response, sensor, parameter); + + if (data.length === 0) { + console.warn(`No data found for parameter: ${parameter}`); + return null; + } + + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; + + return { + label: displayName, + data, + borderColor, + borderWidth: 1.5, + fill: true, + backgroundColor, + tension: 0.5, + pointRadius: 0, + pointHoverRadius: 0, + }; + }).filter(dataset => dataset !== null); + } else { + // Handle NPK1 and NPK2 as before + datasets = parameters.map(parameter => { + const { data, labels } = this.getDataFromResponse(response, sensor, parameter); + + if (data.length === 0) { + console.warn(`No data found for parameter: ${parameter}`); + return null; + } + + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; + + // Filter datasets based on the selected option + if (selectedOption === 'npk' && ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter)) { + return { + label: displayName, + data, + borderColor, + borderWidth: 1.5, + fill: true, + backgroundColor, + tension: 0.5, + pointRadius: 0, + pointHoverRadius: 0, + }; + } else if (selectedOption === 'others' && !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter)) { + return { + label: displayName, + data, + borderColor, + borderWidth: 1.5, + fill: true, + backgroundColor, + tension: 0.5, + pointRadius: 0, + pointHoverRadius: 0, + }; + } + + return null; + }).filter(dataset => dataset !== null); + } + + if (datasets.length === 0) { + console.warn('No valid datasets to render for sensor:', sensor); + return; + } + + if (this.charts[sensor]) { + this.charts[sensor]?.destroy(); + } + + this.charts[sensor] = new Chart(ctx, { + type: 'line', + data: { + labels: this.getLabels(response, sensor), + datasets, + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + tooltip: { + enabled: true, + mode: 'nearest', + intersect: false, + callbacks: { + label: (tooltipItem) => { + const paramLabel = tooltipItem.dataset.label; + const value = tooltipItem.formattedValue; + return `${paramLabel}: ${value}`; + } + } + }, + legend: { display: true } + }, + scales: { + x: { grid: { display: false }, beginAtZero: true }, + y: { grid: { display: false }, beginAtZero: true } + } + } + }); + } + getDataFromResponse(response: ApiResponse, sensor: string, parameter: string): { data: number[], labels: string[] } { const sensorData = response.data[sensor as keyof typeof response.data]; @@ -100,112 +305,8 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { return { data, labels }; } - - createChart(data: number[], parameter: string, labels: string[]): void { - const canvas = this.chartElement.nativeElement; - const ctx = canvas.getContext('2d'); - - if (this.chart) { - this.chart.destroy(); - } - - if (ctx) { - const displayName = this.parameterDisplayNames[parameter] || parameter; - const borderColor = parameterColors[parameter] || '#000000'; - const backgroundColor = `${borderColor}4D`; - - this.chart = new Chart(ctx, { - type: 'line', - data: { - labels: labels, - datasets: [{ - label: displayName, - data, - borderColor, - borderWidth: 1.5, - fill: true, - backgroundColor, - tension: 0.5, - pointRadius: 0, - pointHoverRadius: 0, - pointBackgroundColor: borderColor, - }] - }, - options: { - responsive: true, - maintainAspectRatio: false, - plugins: { - tooltip: { - enabled: true, - mode: 'nearest', - intersect: false, - callbacks: { - label: (tooltipItem) => { - const paramLabel = displayName; - const value = tooltipItem.formattedValue; - return `${paramLabel}: ${value}`; - } - } - }, - legend: { display: false } - }, - scales: { - x: { grid: { display: false }, beginAtZero: true }, - y: { grid: { display: false }, beginAtZero: true } - } - } - }); - } - } - - - getParameterKey(displayName: string): string { - return Object.keys(this.parameterDisplayNames).find(key => this.parameterDisplayNames[key] === displayName) || ''; - } - - onSensorChange(event: Event): void { - const select = event.target as HTMLSelectElement; - this.selectedSensor = select.value; - this.updateParameters(); - if (this.selectedSensor === 'dht') { - this.selectedParameter = 'vicitemperature'; - } else if (this.selectedSensor === 'npk1' || this.selectedSensor === 'npk2') { - this.selectedParameter = 'soiltemperature'; - } - this.updateChart(); - } - - - updateParameters(): void { - this.parameters = this.sensorParameters[this.selectedSensor].map(param => this.parameterDisplayNames[param]); - this.selectedParameter = this.parameters[1]; - } - - updateChart(): void { - this.isLoading = true; - - const today = new Date(); - const year = today.getFullYear(); - const month = String(today.getMonth() + 1).padStart(2, '0'); - const day = String(today.getDate()).padStart(2, '0'); - - const startEnd= `${year}-${month}-${day}`; - const timeRange = 'HOURLY'; - - this.sensorService.getSensorData(this.selectedSensor, this.selectedParameter, startEnd, timeRange).subscribe( - (response: ApiResponse) => { - if (response.statusCode === 200) { - const { data, labels } = this.getDataFromResponse(response, this.selectedSensor, this.selectedParameter); - this.createChart(data, this.selectedParameter, labels); - } else { - console.error('Error fetching data:', response.message); - } - this.isLoading = false; - }, - (error) => { - console.error('API Error:', error); - this.isLoading = false; - } - ); + getLabels(response: ApiResponse, sensor: string): string[] { + const sensorData = response.data[sensor as keyof typeof response.data]; + return sensorData ? sensorData.map(item => `${item.hour}.00`) : []; } } diff --git a/agrilink_vocpro/src/app/pages/register/register.component.html b/agrilink_vocpro/src/app/pages/register/register.component.html index 29127e1..c89efc2 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.html +++ b/agrilink_vocpro/src/app/pages/register/register.component.html @@ -10,25 +10,44 @@
- +
- +
- +
- + + +
- +
diff --git a/agrilink_vocpro/src/app/pages/register/register.component.scss b/agrilink_vocpro/src/app/pages/register/register.component.scss index b701036..0511563 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.scss +++ b/agrilink_vocpro/src/app/pages/register/register.component.scss @@ -27,3 +27,22 @@ .forgot{ color: #16423C; } + +.form-floating { + position: relative; + + .btn-link { + position: absolute; + top: 50%; + right: 10px; + transform: translateY(-50%); + border: none; + background: transparent; + cursor: pointer; + color: #16423C; + + &:hover { + color: #16423C; + } + } +} diff --git a/agrilink_vocpro/src/app/pages/register/register.component.ts b/agrilink_vocpro/src/app/pages/register/register.component.ts index 279450b..c1767c7 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.ts +++ b/agrilink_vocpro/src/app/pages/register/register.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; // Import OnInit import { Router, RouterModule } from '@angular/router'; import { AuthService } from '../../cores/services/auth.service'; import { FormsModule } from '@angular/forms'; @@ -13,15 +13,35 @@ import { CommonModule } from '@angular/common'; templateUrl: './register.component.html', styleUrls: ['./register.component.scss'] }) -export class RegisterComponent { +export class RegisterComponent implements OnInit { username: string = ''; password: string = ''; email: string = ''; fullname: string = ''; + loading: boolean = false; + passwordVisible: boolean = false; constructor(private authService: AuthService, private router: Router, private toast: ToastrService) {} + ngOnInit(): void { + this.username = ''; + this.password = ''; + this.email = ''; + this.fullname = ''; + } + + togglePasswordVisibility() { + this.passwordVisible = !this.passwordVisible; + } + onSubmit() { + this.loading = true; + if (!this.username || !this.password || !this.email || !this.fullname) { + this.loading = false; + this.toast.error('Please fill in all fields.'); + return; + } + const registrationData: RegistrationData = { username: this.username, pwd: this.password, @@ -33,10 +53,12 @@ export class RegisterComponent { this.authService.register(registrationData).subscribe( (response) => { + this.loading = false; this.toast.success('Registration successful'); this.router.navigate(['/auth']); }, (error) => { + this.loading = false; this.toast.error(error.error.message); } ); diff --git a/agrilink_vocpro/src/index.html b/agrilink_vocpro/src/index.html index 42cbd9d..07b7a5c 100644 --- a/agrilink_vocpro/src/index.html +++ b/agrilink_vocpro/src/index.html @@ -17,6 +17,7 @@ + From e0b74fd1357dd8ca5f103f57a17faf92b3589e29 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 25 Oct 2024 15:44:28 +0700 Subject: [PATCH 21/53] fix(dashboard): fix toastr handling error if no dat ain relay --- .../app/pages/dashboard/dashboard.component.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 0564e1c..b5e02a3 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -149,7 +149,7 @@ export class DashboardComponent implements OnInit { this.apiService.getRelayStatus().subscribe( (response) => { - if (Array.isArray(response.data)) { + if (Array.isArray(response.data) && response.data.length > 0) { this.relayStatus = response.data.map((relay) => ({ id: relay.id, number: relay.number, @@ -159,16 +159,22 @@ export class DashboardComponent implements OnInit { current_status: relay.current_status })); this.relayStatus.sort((a, b) => a.number - b.number); + this.noData = false; // Data available + } else { + // Throw an error if relay data is empty + this.handleError({ message: 'No available relay data.' }); + this.noData = true; } this.isLoaded = false; }, (error) => { - this.toast.error('Failed to get relay status, please try again'); - this.hasError = true; this.isLoaded = false; + this.handleError(error); + this.hasError = true; } ); - } +} + handleError(error: any): void { if (this.selectedButton === 'dht') { @@ -177,6 +183,8 @@ export class DashboardComponent implements OnInit { this.toast.error('Error fetching NPK1 sensor data. Please try again.', 'Error', { timeOut: 3000 }); } else if (this.selectedButton === 'npk2') { this.toast.error('Error fetching NPK2 sensor data. Please try again.', 'Error', { timeOut: 3000 }); + } else if (this.selectedButton === 'relay') { + this.toast.error('Error fetching relay status. Please try again.', 'Error', { timeOut: 3000 }); } this.hasError = true; } From 8e0de242b0901eb2888bd32e2f6598627f9909d1 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 29 Oct 2024 14:46:02 +0700 Subject: [PATCH 22/53] fix(dashboard): fix nama pottasium into kalium --- .../pages/dashboard/dashboard.component.html | 50 ++++++++++++++++++- .../dashboard/page/graph/graph.component.ts | 2 +- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index fdab7c1..ab65bfa 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -68,7 +68,30 @@
Conductivity
- +
+
+

{{sensorData.npk1.ph}}

+
pH
+
+
+
+
+

{{sensorData.npk1.nitrogen}} PPM

+
Nitrogen
+
+
+
+
+

{{sensorData.npk1.phosphorus}} PPM

+
Phosphorus
+
+
+
+
+

{{sensorData.npk1.potassium}} PPM

+
Kalium
+
+
@@ -94,7 +117,30 @@
Conductivity
- +
+
+

{{sensorData.npk2.ph}}

+
pH
+
+
+
+
+

{{sensorData.npk2.nitrogen}} PPM

+
Nitrogen
+
+
+
+
+

{{sensorData.npk2.phosphorus}} PPM

+
Phosphorus
+
+
+
+
+

{{sensorData.npk2.potassium}} PPM

+
Kalium
+
+
diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 3b11f7f..e1d1dea 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -58,7 +58,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { soilph: 'pH', soilnitrogen: 'Nitrogen (mg/l)', soilphosphorus: 'Phosphorus (mg/l)', - soilpotassium: 'Potassium (mg/l)', + soilpotassium: 'Kalium (mg/l)', }; charts: { [key: string]: Chart | undefined } = { From 50bd5c0ebf835d0d0b5ba83f7150fb163a60c2c2 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 1 Nov 2024 15:52:54 +0700 Subject: [PATCH 23/53] fix(API+dashbard): fix url api BE dan nama satuan --- .../src/app/cores/services/api.service.ts | 2 +- .../pages/dashboard/dashboard.component.html | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/agrilink_vocpro/src/app/cores/services/api.service.ts b/agrilink_vocpro/src/app/cores/services/api.service.ts index b3c8267..95aef5a 100644 --- a/agrilink_vocpro/src/app/cores/services/api.service.ts +++ b/agrilink_vocpro/src/app/cores/services/api.service.ts @@ -5,7 +5,7 @@ import { HttpClient } from '@angular/common/http'; providedIn: 'root' }) export class ApiService { - protected baseUrl = 'https://jx027dj4-3333.asse.devtunnels.ms/'; + protected baseUrl = 'http://54.196.58.97:3333/'; constructor(protected http: HttpClient) {} } diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index ab65bfa..85890ab 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -39,7 +39,7 @@
-

{{sensorData.dht.humidity}} %RH

+

{{sensorData.dht.humidity}} %

Kelembaban Udara
@@ -58,7 +58,7 @@
-

{{sensorData.npk1.moisture}} %RH

+

{{sensorData.npk1.moisture}} %

Kelembaban Tanah
@@ -76,19 +76,19 @@
-

{{sensorData.npk1.nitrogen}} PPM

+

{{sensorData.npk1.nitrogen}} mg/L

Nitrogen
-

{{sensorData.npk1.phosphorus}} PPM

+

{{sensorData.npk1.phosphorus}} mg/L

Phosphorus
-

{{sensorData.npk1.potassium}} PPM

+

{{sensorData.npk1.potassium}} mg/L

Kalium
@@ -107,7 +107,7 @@
-

{{sensorData.npk2.moisture}} %RH

+

{{sensorData.npk2.moisture}} %

Kelembaban Tanah
@@ -125,19 +125,19 @@
-

{{sensorData.npk2.nitrogen}} PPM

+

{{sensorData.npk2.nitrogen}} mg/L

Nitrogen
-

{{sensorData.npk2.phosphorus}} PPM

+

{{sensorData.npk2.phosphorus}} mg/L

Phosphorus
-

{{sensorData.npk2.potassium}} PPM

+

{{sensorData.npk2.potassium}} mg/L

Kalium
From cc4f40b05eb0721ecb876ca5b2be7b7476d1035a Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 4 Nov 2024 08:27:44 +0700 Subject: [PATCH 24/53] fix(dashboard): fix card relay dan nama relay --- .../pages/dashboard/dashboard.component.html | 34 +++++++++++++------ .../pages/dashboard/dashboard.component.scss | 15 ++++++++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 85890ab..87b35db 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -147,18 +147,32 @@
-
-
-
-

- {{ relay.current_status ? 'ON' : 'OFF' }} -

-
Relay {{ relay.number }}
-
+
+
+
+

+ {{ relay.current_status ? 'ON' : 'OFF' }} +

+
+ + Katup Nutrisi + + + + Katup Air + + + + Relay {{ relay.number }} + +
+
+
-
-
+
+ +
Monitoring Graphs
diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index 4da6bbb..f0d512d 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -60,6 +60,21 @@ margin-top: 22px; } +.relay-container { + padding: 20px 0px 20px 0px; + display: flex; + flex-wrap: wrap; + gap: 30px; + justify-content: flex-start; +} + +.relay-card { + border-radius: 8px; + flex: 1 1 30%; + max-width: 30%; + min-width: 200px; +} + @media (max-width: 768px) { .card-parameter{ flex: 1 1 45%; From a2befa29504187b9b06fee73fc5b75fd4547afc1 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 4 Nov 2024 11:09:04 +0700 Subject: [PATCH 25/53] fix(graph): fixing bug grafik --- .../dashboard/page/graph/graph.component.html | 4 +- .../dashboard/page/graph/graph.component.scss | 30 ++++-- .../dashboard/page/graph/graph.component.ts | 102 +++++++++--------- 3 files changed, 72 insertions(+), 64 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index b4d0e0e..31fe216 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -20,7 +20,7 @@
Sensor NPK 1
- @@ -39,7 +39,7 @@
Sensor NPK 2
- diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 5d34e0f..0571895 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -4,19 +4,33 @@ justify-content: flex-start; height: max-content; + .sensor-wrapper { + position: relative; + width: 100%; display: flex; flex-direction: column; align-items: center; margin-bottom: 35px; - background-color: #f1f1f1; + border: 1px solid #E5E5E5; + padding: 0px 20px 0px 20px; + background-color: white; border-radius: 10px; h2 { font-size: 18px; margin-bottom: 10px; } + + canvas { + position: relative; + width: 100%; + height: auto; + aspect-ratio: 2 / 1; + max-height: 300px; + } } + .title-with-dropdown { display: flex; @@ -42,17 +56,11 @@ margin: 18px 0px 0px 0px; } -canvas { - height: 500px !important; - width: 100%; - max-width: 2000px; - padding-bottom: 20px; - padding-top: 20px; -} - @media (max-width: 768px) { canvas { - height: 300px !important; + height: auto; + width: 100%; + max-width: 100%; } } @@ -62,7 +70,7 @@ canvas { } .spinner { - color: #16423C + color: #16423C; } .no-data { diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index e1d1dea..c6e0114 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -12,12 +12,12 @@ const parameterColors: { [key: string]: string } = { vicihumidity: '#16423C', viciluminosity: '#DF9B55', soiltemperature: '#FF6347', - soilhumidity: '#00BFFF', + soilhumidity: '#0389b5', soilconductivity: '#A52A2A', soilph: '#228B22', - soilnitrogen: '#FEDC56', + soilnitrogen: '#fece48', soilphosphorus: '#B80F0A', - soilpotassium: '#6F2DA8', + soilpotassium: '#4c1f74', }; @Component({ @@ -105,39 +105,45 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { const month = String(today.getMonth() + 1).padStart(2, '0'); const day = String(today.getDate()).padStart(2, '0'); + const startEnd = `${year}-${month}-${day}`; - // const startEnd = '2024-10-24'; const timeRange = 'HOURLY'; + + Object.keys(this.charts).forEach(key => { + if (this.charts[key]) { + this.charts[key]?.destroy(); + this.charts[key] = undefined; + } + }); // Fetch data for DHT this.sensorService.getSensorData('dht', '', startEnd, timeRange).subscribe({ next: (response) => { - if (response.statusCode === 200 && response.data.dht?.length > 0) { - this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); - this.isNoDataDHT = false; - this.allNoData = false; - } else { - this.isNoDataDHT = true; - } - this.isLoadingDHT = false; + this.isLoadingDHT = false; + if (response.statusCode === 200 && response.data.dht?.length > 0) { + this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); + this.isNoDataDHT = false; + } else { + this.isNoDataDHT = true; + } }, error: () => { - this.isLoadingDHT = false; - this.isNoDataDHT = true; + this.isLoadingDHT = false; + this.isNoDataDHT = true; } - }); + }); + // Fetch data for NPK1 this.sensorService.getSensorData('npk1', '', startEnd, timeRange).subscribe({ next: (response) => { + this.isLoadingNPK1 = false; if (response.statusCode === 200 && response.data.npk1?.length > 0) { this.createChart(this.npk1ChartElement.nativeElement, response, 'npk1', this.selectedNPK1); this.isNoDataNPK1 = false; - this.allNoData = false; } else { this.isNoDataNPK1 = true; } - this.isLoadingNPK1 = false; }, error: () => { this.isLoadingNPK1 = false; @@ -148,14 +154,14 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { // Fetch data for NPK2 this.sensorService.getSensorData('npk2', '', startEnd, timeRange).subscribe({ next: (response) => { + this.isLoadingNPK2 = false; if (response.statusCode === 200 && response.data.npk2?.length > 0) { + console.log(this.selectedNPK2); this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); this.isNoDataNPK2 = false; - this.allNoData = false; } else { this.isNoDataNPK2 = true; } - this.isLoadingNPK2 = false; }, error: () => { this.isLoadingNPK2 = false; @@ -163,6 +169,8 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { } }); } + + createChart(canvas: HTMLCanvasElement, response: ApiResponse, sensor: string, selectedOption: string): void { const ctx = canvas.getContext('2d'); @@ -176,8 +184,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { let datasets: any[] = []; if (sensor === 'dht') { - // Handle DHT parameters directly - datasets = ['vicitemperature', 'vicihumidity', 'viciluminosity'].map(parameter => { + datasets = ['vicitemperature', 'viciluminosity', 'vicihumidity'].map(parameter => { const { data, labels } = this.getDataFromResponse(response, sensor, parameter); if (data.length === 0) { @@ -202,21 +209,27 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { }; }).filter(dataset => dataset !== null); } else { - // Handle NPK1 and NPK2 as before - datasets = parameters.map(parameter => { - const { data, labels } = this.getDataFromResponse(response, sensor, parameter); - - if (data.length === 0) { - console.warn(`No data found for parameter: ${parameter}`); - return null; - } + datasets = parameters + .filter(parameter => { + if (selectedOption === 'npk') { + return ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); + } else if (selectedOption === 'others') { + return !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); + } + return true; + }) + .map(parameter => { + const { data, labels } = this.getDataFromResponse(response, sensor, parameter); + + if (data.length === 0) { + console.warn(`No data found for parameter: ${parameter}`); + return null; + } - const displayName = this.parameterDisplayNames[parameter] || parameter; - const borderColor = parameterColors[parameter] || '#000000'; - const backgroundColor = `${borderColor}4D`; + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; - // Filter datasets based on the selected option - if (selectedOption === 'npk' && ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter)) { return { label: displayName, data, @@ -228,22 +241,8 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { pointRadius: 0, pointHoverRadius: 0, }; - } else if (selectedOption === 'others' && !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter)) { - return { - label: displayName, - data, - borderColor, - borderWidth: 1.5, - fill: true, - backgroundColor, - tension: 0.5, - pointRadius: 0, - pointHoverRadius: 0, - }; - } - - return null; - }).filter(dataset => dataset !== null); + }) + .filter(dataset => dataset !== null); } if (datasets.length === 0) { @@ -264,6 +263,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { options: { responsive: true, maintainAspectRatio: false, + aspectRatio: 2, plugins: { tooltip: { enabled: true, @@ -285,7 +285,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { } } }); - } + } getDataFromResponse(response: ApiResponse, sensor: string, parameter: string): { data: number[], labels: string[] } { const sensorData = response.data[sensor as keyof typeof response.data]; From 948899a5ef40153d4e94ee7a58e5a35fc67b1b8e Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 4 Nov 2024 11:13:08 +0700 Subject: [PATCH 26/53] fix(graph+dashboard): delete console log --- agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts | 1 - .../src/app/pages/dashboard/page/graph/graph.component.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index b5e02a3..82dd575 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -93,7 +93,6 @@ export class DashboardComponent implements OnInit { this.apiService.getLatestData().subscribe( (response) => { const data = response.data; - console.log('Data:', data); if ((!data.dht || data.dht.length === 0) && (!data.npk1 || data.npk1.length === 0) && diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index c6e0114..805907b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -156,7 +156,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { next: (response) => { this.isLoadingNPK2 = false; if (response.statusCode === 200 && response.data.npk2?.length > 0) { - console.log(this.selectedNPK2); this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); this.isNoDataNPK2 = false; } else { From 2864560c5638c8eb0b070c93d03719144e441d32 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 4 Nov 2024 11:25:16 +0700 Subject: [PATCH 27/53] fix(dashboard+graph): fix nama card parameter sensor --- .../src/app/pages/dashboard/dashboard.component.html | 8 ++++---- .../app/pages/dashboard/page/graph/graph.component.ts | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 87b35db..db1c89f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -28,13 +28,13 @@

{{sensorData.dht.lightIntensity}} Lux

-
Cahaya
+
Intensitas Cahaya

{{sensorData.dht.temperature}} °C

-
Temperatur
+
Temperatur Udara
@@ -53,7 +53,7 @@

{{sensorData.npk1.temperature}} °C

-
Temperature
+
Temperatur Tanah
@@ -102,7 +102,7 @@

{{sensorData.npk2.temperature}} °C

-
Temperature
+
Temperatur Tanah
diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 805907b..dc13980 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -49,11 +49,11 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { }; parameterDisplayNames: { [key: string]: string } = { - vicitemperature: 'Temperature (°C)', - vicihumidity: 'Humidity (%)', - viciluminosity: 'Luminosity (lux)', - soiltemperature: 'Soil Temperature (°C)', - soilhumidity: 'Soil Humidity (%)', + vicitemperature: 'Temperatur Udara (°C)', + vicihumidity: 'Kelembaban Udara (%)', + viciluminosity: 'Intensitas Cahaya (lux)', + soiltemperature: 'Temperatur Tanah (°C)', + soilhumidity: 'Kelembaban Tanah (%)', soilconductivity: 'Conductivity (μS/cm)', soilph: 'pH', soilnitrogen: 'Nitrogen (mg/l)', From 4bb2c107d34947600217a2fb45de6d9938e91f0d Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 6 Nov 2024 05:42:46 +0700 Subject: [PATCH 28/53] feat(historygraphs): adding history graph in hourly and daily --- agrilink_vocpro/src/app/app.routes.ts | 6 + .../src/app/cores/interface/sensor-data.ts | 1 + .../layouts/sidebar/sidebar.component.html | 8 +- .../layouts/sidebar/sidebar.component.ts | 4 +- .../dashboard/page/graph/graph.component.ts | 321 +++++++++++------- .../historygraph/historygraph.component.html | 19 ++ .../historygraph/historygraph.component.scss | 137 ++++++++ .../historygraph.component.spec.ts | 23 ++ .../historygraph/historygraph.component.ts | 81 +++++ 9 files changed, 465 insertions(+), 135 deletions(-) create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index 31b6cf6..b31b1b4 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -4,6 +4,7 @@ import { LayoutsComponent } from './pages/dashboard/layouts/layouts.component'; import { AuthComponent } from './pages/auth/auth.component'; import { AuthGuard } from './cores/guards/auth.guard'; import { RegisterComponent } from './pages/register/register.component'; +import { HistorygraphComponent } from './pages/dashboard/page/historygraph/historygraph.component'; export const routes: Routes = [ { @@ -28,6 +29,11 @@ export const routes: Routes = [ component: DashboardComponent, canActivate: [AuthGuard] }, + { + path: 'historygraph', + component: HistorygraphComponent, + canActivate: [AuthGuard], + } ] } ]; diff --git a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts index 165a711..51a219c 100644 --- a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts +++ b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts @@ -1,5 +1,6 @@ export interface ParameterSensor { hour: number; + day: number; //for DHT sensor vicitemperature?: number; diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html index eb16a82..879e7fa 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -7,10 +7,10 @@ Dashboard - +
  • + + History Graph +

  • diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts index 898c5d0..5d6289c 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.ts @@ -1,11 +1,13 @@ import { Component } from '@angular/core'; import { AuthService } from '../../../../cores/services/auth.service'; -import { Router } from '@angular/router'; +import { Router, RouterModule } from '@angular/router'; import { ToastrService } from 'ngx-toastr'; + @Component({ selector: 'app-sidebar', standalone: true, + imports: [RouterModule], templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.scss'] }) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index dc13980..5cc5a37 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy } from '@angular/core'; +import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy, OnChanges, Input, SimpleChanges, ChangeDetectorRef } from '@angular/core'; import { Chart, registerables } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; @@ -27,10 +27,12 @@ const parameterColors: { [key: string]: string } = { templateUrl: './graph.component.html', styleUrls: ['./graph.component.scss'] }) -export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { +export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges{ @ViewChild('myChartDHT', { static: false }) dhtChartElement!: ElementRef; @ViewChild('myChartNPK1', { static: false }) npk1ChartElement!: ElementRef; @ViewChild('myChartNPK2', { static: false }) npk2ChartElement!: ElementRef; + @Input() interval: string = 'hourly'; + selectedInterval: string = 'HOURLY'; isLoadingDHT: boolean = true; isLoadingNPK1: boolean = true; @@ -72,14 +74,23 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { private resizeListener!: () => void; - constructor(private sensorService: SensorService) {} + constructor(private sensorService: SensorService, private cdr: ChangeDetectorRef) {} ngOnInit(): void { this.resizeListener = this.onResize.bind(this); window.addEventListener('resize', this.resizeListener); - this.updateCharts(); + this.updateCharts(); } + + ngOnChanges(changes: SimpleChanges): void { + if (changes['interval'] && !changes['interval'].firstChange) { + this.selectedInterval = changes['interval'].currentValue; + this.updateCharts(); + } + } + + ngAfterViewInit(): void { this.onResize(); } @@ -97,45 +108,37 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { this.updateCharts(); } - updateCharts(): void { - this.isLoadingDHT = this.isLoadingNPK1 = this.isLoadingNPK2 = true; - + getDate(): string { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, '0'); const day = String(today.getDate()).padStart(2, '0'); - - const startEnd = `${year}-${month}-${day}`; - const timeRange = 'HOURLY'; + return `${year}-${month}-${day}`; + } - Object.keys(this.charts).forEach(key => { - if (this.charts[key]) { - this.charts[key]?.destroy(); - this.charts[key] = undefined; - } - }); - - // Fetch data for DHT - this.sensorService.getSensorData('dht', '', startEnd, timeRange).subscribe({ + fetchDHTData(timeRange: string): void { + const startEnd = this.getDate(); + this.sensorService.getSensorData('dht', 'npk', startEnd, timeRange).subscribe({ next: (response) => { - this.isLoadingDHT = false; - if (response.statusCode === 200 && response.data.dht?.length > 0) { - this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); - this.isNoDataDHT = false; - } else { - this.isNoDataDHT = true; - } + this.isLoadingDHT = false; + if (response.statusCode === 200 && response.data.dht?.length > 0) { + this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); + this.isNoDataDHT = false; + } else { + this.isNoDataDHT = true; + } }, error: () => { - this.isLoadingDHT = false; - this.isNoDataDHT = true; + this.isLoadingDHT = false; + this.isNoDataDHT = true; } - }); + }); + } - - // Fetch data for NPK1 - this.sensorService.getSensorData('npk1', '', startEnd, timeRange).subscribe({ + fetchNPK1Data(timeRange: string): void { + const startEnd = this.getDate(); + this.sensorService.getSensorData('npk1', this.selectedNPK1, startEnd, timeRange).subscribe({ next: (response) => { this.isLoadingNPK1 = false; if (response.statusCode === 200 && response.data.npk1?.length > 0) { @@ -150,10 +153,14 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { this.isNoDataNPK1 = true; } }); + } - // Fetch data for NPK2 - this.sensorService.getSensorData('npk2', '', startEnd, timeRange).subscribe({ + fetchNPK2Data(savedTimeRange: string): void { + const startEnd = this.getDate(); + const timeRange = this.interval; + this.sensorService.getSensorData('npk2', this.selectedNPK2, startEnd, savedTimeRange).subscribe({ next: (response) => { + console.log(savedTimeRange); this.isLoadingNPK2 = false; if (response.statusCode === 200 && response.data.npk2?.length > 0) { this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); @@ -169,123 +176,155 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { }); } + updateCharts(): void { + const interval = this.selectedInterval; + + Object.keys(this.charts).forEach(key => { + if (this.charts[key]) { + this.charts[key]?.destroy(); + this.charts[key] = undefined; + } + }); + + this.fetchDHTData(interval); + this.fetchNPK1Data(interval); + this.fetchNPK2Data(interval); + } + createChart(canvas: HTMLCanvasElement, response: ApiResponse, sensor: string, selectedOption: string): void { const ctx = canvas.getContext('2d'); const parameters = this.sensorParameters[sensor]; - + if (!ctx) { - console.error('Failed to get canvas context for sensor:', sensor); - return; + console.error('Failed to get canvas context for sensor:', sensor); + return; } - + let datasets: any[] = []; - + if (sensor === 'dht') { - datasets = ['vicitemperature', 'viciluminosity', 'vicihumidity'].map(parameter => { - const { data, labels } = this.getDataFromResponse(response, sensor, parameter); - - if (data.length === 0) { - console.warn(`No data found for parameter: ${parameter}`); - return null; - } - - const displayName = this.parameterDisplayNames[parameter] || parameter; - const borderColor = parameterColors[parameter] || '#000000'; - const backgroundColor = `${borderColor}4D`; - - return { - label: displayName, - data, - borderColor, - borderWidth: 1.5, - fill: true, - backgroundColor, - tension: 0.5, - pointRadius: 0, - pointHoverRadius: 0, - }; - }).filter(dataset => dataset !== null); + datasets = ['vicitemperature', 'viciluminosity', 'vicihumidity'].map(parameter => { + const { data, labels } = this.getDataFromResponse(response, sensor, parameter); + + if (data.length === 0) { + console.warn(`No data found for parameter: ${parameter}`); + return null; + } + + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; + + const pointRadius = data.length === 1 ? 5 : 0; + const pointHoverRadius = data.length === 1 ? 7 : 0; + + return { + label: displayName, + data, + borderColor, + borderWidth: 1.5, + fill: true, + backgroundColor, + tension: 0.5, + pointRadius, + pointHoverRadius, + }; + }).filter(dataset => dataset !== null); } else { - datasets = parameters - .filter(parameter => { - if (selectedOption === 'npk') { - return ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); - } else if (selectedOption === 'others') { - return !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); - } - return true; - }) - .map(parameter => { - const { data, labels } = this.getDataFromResponse(response, sensor, parameter); - - if (data.length === 0) { - console.warn(`No data found for parameter: ${parameter}`); - return null; - } - - const displayName = this.parameterDisplayNames[parameter] || parameter; - const borderColor = parameterColors[parameter] || '#000000'; - const backgroundColor = `${borderColor}4D`; - - return { - label: displayName, - data, - borderColor, - borderWidth: 1.5, - fill: true, - backgroundColor, - tension: 0.5, - pointRadius: 0, - pointHoverRadius: 0, - }; - }) - .filter(dataset => dataset !== null); + datasets = parameters + .filter(parameter => { + if (selectedOption === 'npk') { + return ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); + } else if (selectedOption === 'others') { + return !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); + } + return true; + }) + .map(parameter => { + const { data, labels } = this.getDataFromResponse(response, sensor, parameter); + + if (data.length === 0) { + console.warn(`No data found for parameter: ${parameter}`); + return null; + } + + const displayName = this.parameterDisplayNames[parameter] || parameter; + const borderColor = parameterColors[parameter] || '#000000'; + const backgroundColor = `${borderColor}4D`; + + const pointRadius = data.length === 1 ? 5 : 0; + const pointHoverRadius = data.length === 1 ? 7 : 0; + + return { + label: displayName, + data, + borderColor, + borderWidth: 1.5, + fill: true, + backgroundColor, + tension: 0.5, + pointRadius, + pointHoverRadius, + }; + }) + .filter(dataset => dataset !== null); } - + if (datasets.length === 0) { - console.warn('No valid datasets to render for sensor:', sensor); - return; + console.warn('No valid datasets to render for sensor:', sensor); + return; } - + if (this.charts[sensor]) { - this.charts[sensor]?.destroy(); + this.charts[sensor]?.destroy(); } - + + this.charts[sensor] = new Chart(ctx, { type: 'line', data: { - labels: this.getLabels(response, sensor), - datasets, + labels: this.getLabels(response, sensor), + datasets, }, options: { - responsive: true, - maintainAspectRatio: false, - aspectRatio: 2, - plugins: { - tooltip: { - enabled: true, - mode: 'nearest', - intersect: false, - callbacks: { - label: (tooltipItem) => { - const paramLabel = tooltipItem.dataset.label; - const value = tooltipItem.formattedValue; - return `${paramLabel}: ${value}`; - } - } + responsive: true, + maintainAspectRatio: false, + aspectRatio: 2, + plugins: { + tooltip: { + enabled: true, + mode: 'nearest', + intersect: false, + callbacks: { + label: (tooltipItem) => { + const paramLabel = tooltipItem.dataset.label; + const value = tooltipItem.formattedValue; + return `${paramLabel}: ${value}`; + } + } + }, + legend: { display: true } }, - legend: { display: true } - }, - scales: { - x: { grid: { display: false }, beginAtZero: true }, - y: { grid: { display: false }, beginAtZero: true } - } + scales: { + x: { + grid: { display: false }, + beginAtZero: true, + ticks: { + callback: (value, index, values) => { + const labels = this.getLabels(response, sensor); + return labels[index] || value; + } + } + }, + y: { grid: { display: false }, beginAtZero: true } + } } - }); - } + }); + } + getDataFromResponse(response: ApiResponse, sensor: string, parameter: string): { data: number[], labels: string[] } { const sensorData = response.data[sensor as keyof typeof response.data]; @@ -295,7 +334,12 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { if (sensorData) { sensorData.forEach(item => { data.push(item[parameter as keyof ParameterSensor] ?? 0); - labels.push(`${item.hour}.00`); + if(this.interval === 'HOURLY') { + labels.push(`${item.hour}.00`); + } + else if (this.interval === 'DAILY') { + labels.push(item.day); + } }); } else { console.error('No data found for sensor:', sensor); @@ -306,6 +350,23 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy { getLabels(response: ApiResponse, sensor: string): string[] { const sensorData = response.data[sensor as keyof typeof response.data]; - return sensorData ? sensorData.map(item => `${item.hour}.00`) : []; + + return sensorData.map(item => { + if (this.interval === 'HOURLY' || this.selectedInterval === 'HOURLY') { + return `${item.hour}.00`; + } else if (this.interval === 'DAILY') { + const day = item.day; + return this.convertDateToDay(day); + } else { + return ''; + } + }); } + + convertDateToDay(dateString: string): string { + const date = new Date(dateString); + const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thrusday', 'Friday', 'Saturday']; + return days[date.getDay()]; + } + } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html new file mode 100644 index 0000000..05ad280 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html @@ -0,0 +1,19 @@ +
    +
    +

    {{ greeting }}

    +

    View your historical data with customizable time ranges

    +
    +
    +

    Latest Update: {{ latestUpdate }}

    +
    + +
    + + +
    + + +
    + +
    +
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss new file mode 100644 index 0000000..5f1aca4 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss @@ -0,0 +1,137 @@ +.container { + font-family: "Onest", sans-serif; +} + +.title { + color: #49473C; + font-size: 30px; + margin-top: 10px; +} + +.description { + color: #49473C; + font-size: 15px; + margin-top: 10px; +} + +.update{ + color: #49473C; + font-size: 15px; + margin-top: 18px; +} + +.card-container { + display: flex; + flex-wrap: wrap; + gap: 30px; + margin-top: 20px; + justify-content: flex-start; +} + +.card-parameter{ + border: 1px solid #16423C; + color: #16423C; + padding: 20px 0px 20px 0px; + border-radius: 8px; + text-align: center; + flex: 1 1 30%; + max-width: 30%; + min-width: 200px; +} + +.card-parameter:hover{ + background-color: #16423C; + color: white; +} + +.card-content{ + text-align: center; + margin:auto; +} + +.title-graph{ + color: #49473C; + font-size: 23px; + font-weight: 400; + margin-top: 45px; +} + +.graph{ + margin-top: 22px; +} + +.relay-container { + padding: 20px 0px 20px 0px; + display: flex; + flex-wrap: wrap; + gap: 30px; + justify-content: flex-start; +} + +.relay-card { + border-radius: 8px; + flex: 1 1 30%; + max-width: 30%; + min-width: 200px; +} + +@media (max-width: 768px) { + .card-parameter{ + flex: 1 1 45%; + } + + .card-container{ + justify-content: center; + } +} + +@media (max-width: 576px) { + .card-parameter{ + flex: 1 1 100%; + } + + .card-container{ + justify-content: center; + } +} + +button { + border: none; + border-radius: 10px; + padding: 5px 10px; + font-size: 15px; + cursor: pointer; + margin-right: 20px; +} + + +button { + border: none; + border-radius: 10px; + padding: 5px 10px; + font-size: 15px; + cursor: pointer; + margin-right: 20px; +} + +.active-button { + background-color: #cad849; + color: white; +} + +.loading{ + font-size: 18px; + text-align: center; +} + +.status-on { + color: #16423C; +} + +.status-off { + color: rgb(144, 6, 6); +} + +.spinner { + color: #16423C +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.spec.ts new file mode 100644 index 0000000..c80b804 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HistorygraphComponent } from './historygraph.component'; + +describe('HistorygraphComponent', () => { + let component: HistorygraphComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [HistorygraphComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(HistorygraphComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts new file mode 100644 index 0000000..ba07afd --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts @@ -0,0 +1,81 @@ +import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core'; +import { GraphComponent } from '../graph/graph.component'; +import { CommonModule } from '@angular/common'; +import { ChangeDetectorRef } from '@angular/core'; + +@Component({ + selector: 'app-historygraph', + standalone: true, + imports: [GraphComponent, CommonModule], + templateUrl: './historygraph.component.html', + styleUrls: ['./historygraph.component.scss'] +}) +export class HistorygraphComponent implements OnInit, OnDestroy { + selectedButton: string = ''; + selectedInterval: string = ''; + latestUpdate: string = ''; + intervalId: any; + greeting: string = ''; + + constructor(private cdr: ChangeDetectorRef) {} + + @ViewChild(GraphComponent) graphComponent!: GraphComponent; + + ngOnInit(): void { + this.startClock(); + this.updateGreeting(); + this.selectedButton = 'hourly'; + this.selectedInterval = 'HOURLY'; + } + + + private debounceTimeout: any; + + updateInterval(interval: string): void { + clearTimeout(this.debounceTimeout); + this.debounceTimeout = setTimeout(() => { + if (this.selectedInterval !== interval) { + this.selectedInterval = interval; + this.selectedButton = interval.toLowerCase(); + this.cdr.detectChanges(); + this.graphComponent.updateCharts(); + } + }, 300); + } + + + ngOnDestroy(): void { + if (this.intervalId) { + clearInterval(this.intervalId); + } + } + + startClock(): void { + this.updateLatestTime(); + this.intervalId = setInterval(() => this.updateLatestTime(), 1000); + } + + updateLatestTime(): void { + const now = new Date(); + this.latestUpdate = now.toLocaleString('en-GB', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit' + }); + } + + updateGreeting(): void { + const hour = new Date().getHours(); + if (hour < 12) { + this.greeting = 'Good Morning'; + } else if (hour < 18) { + this.greeting = 'Good Afternoon'; + } else { + this.greeting = 'Good Evening'; + } + } +} + From cff1e7983720864dfb144e1e81d397b1d697ee46 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 6 Nov 2024 08:18:26 +0700 Subject: [PATCH 29/53] fix(auth): fix login if using remember me --- agrilink_vocpro/src/app/app.routes.ts | 10 ++++----- .../src/app/cores/guards/auth.guard.ts | 11 +++++----- .../src/app/cores/services/auth.service.ts | 22 ++++++++++++------- .../src/app/cores/services/storage.service.ts | 14 +++++++++--- .../src/app/pages/auth/auth.component.ts | 10 +++++++-- 5 files changed, 43 insertions(+), 24 deletions(-) diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index b31b1b4..c90f077 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -9,8 +9,8 @@ import { HistorygraphComponent } from './pages/dashboard/page/historygraph/histo export const routes: Routes = [ { path: '', - redirectTo: 'auth', - pathMatch: 'full' + component: AuthComponent, + }, { path: 'auth', @@ -27,12 +27,12 @@ export const routes: Routes = [ { path: 'dashboard', component: DashboardComponent, - canActivate: [AuthGuard] + canActivate: [AuthGuard] }, { - path: 'historygraph', + path: 'historygraph', component: HistorygraphComponent, - canActivate: [AuthGuard], + canActivate: [AuthGuard] } ] } diff --git a/agrilink_vocpro/src/app/cores/guards/auth.guard.ts b/agrilink_vocpro/src/app/cores/guards/auth.guard.ts index 255cf26..cc05fb1 100644 --- a/agrilink_vocpro/src/app/cores/guards/auth.guard.ts +++ b/agrilink_vocpro/src/app/cores/guards/auth.guard.ts @@ -14,13 +14,12 @@ export class AuthGuard implements CanActivate { ) {} canActivate(): boolean { - const token = this.storageService.getToken(); - if (token) { - return true; - } else { + if(this.storageService.getToken()) { + return true; + }else{ + this.router.navigate(['/auth']); this.toast.error('You need to login first'); - this.router.navigate(['auth']); - return false; + return false; } } } diff --git a/agrilink_vocpro/src/app/cores/services/auth.service.ts b/agrilink_vocpro/src/app/cores/services/auth.service.ts index a68eca2..9af9e87 100644 --- a/agrilink_vocpro/src/app/cores/services/auth.service.ts +++ b/agrilink_vocpro/src/app/cores/services/auth.service.ts @@ -1,10 +1,11 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; -import { Observable, tap } from 'rxjs'; +import { Observable, tap, catchError } from 'rxjs'; import { ApiService } from './api.service'; import { LoginData } from '../interface/auth'; import { jwtDecode } from 'jwt-decode'; import { StorageService } from './storage.service'; +import { ToastrService } from 'ngx-toastr'; @Injectable({ providedIn: 'root' @@ -17,6 +18,7 @@ export class AuthService extends ApiService { constructor( http: HttpClient, private storageService: StorageService, + private toast: ToastrService, ) { super(http); } @@ -25,19 +27,23 @@ export class AuthService extends ApiService { const headers = new HttpHeaders({ Authorization: 'Basic ' + btoa(`${data.email}:${data.password}`) }); - + const formData = new FormData(); formData.append('remember_me', data.rememberMe ? 'true' : 'false'); - + return this.http.post(this.authUrl, formData, { headers }).pipe( tap(response => { - const accessToken = response.data.token; - this.storageService.saveToken(accessToken); - + const accessToken = response.data.token; + this.storageService.saveToken(accessToken, data.rememberMe ?? false); + const jwtToken = response.data.jwtToken; - const decodedToken: any = jwtDecode(jwtToken); - + const decodedToken: any = jwtDecode(jwtToken); + this.storageService.saveUserData(decodedToken.user.fullname, decodedToken.user.avatar); + }), + catchError(error => { + this.toast.error('Login failed, please try again'); + throw error; }) ); } diff --git a/agrilink_vocpro/src/app/cores/services/storage.service.ts b/agrilink_vocpro/src/app/cores/services/storage.service.ts index ab0ea84..1aa78e2 100644 --- a/agrilink_vocpro/src/app/cores/services/storage.service.ts +++ b/agrilink_vocpro/src/app/cores/services/storage.service.ts @@ -4,16 +4,24 @@ import { Injectable } from '@angular/core'; providedIn: 'root' }) export class StorageService { - saveToken(token: string): void { - localStorage.setItem('accessToken', token); + saveToken(token: string, rememberMe: boolean): void { + if (rememberMe) { + localStorage.setItem('accessToken', token); + localStorage.setItem('rememberMe', 'true'); + } else { + sessionStorage.setItem('accessToken', token); + localStorage.removeItem('rememberMe') + } } getToken(): string | null { - return localStorage.getItem('accessToken'); + return localStorage.getItem('accessToken') || sessionStorage.getItem('accessToken'); } clearToken(): void { localStorage.removeItem('accessToken'); + sessionStorage.removeItem('accessToken'); + localStorage.removeItem('rememberMe'); } saveUserData(fullName: string | null, avatar: string | null): void { diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.ts b/agrilink_vocpro/src/app/pages/auth/auth.component.ts index b0f0364..3cb841c 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.ts +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.ts @@ -27,6 +27,12 @@ export class AuthComponent { private router: Router, private toast: ToastrService) {} + ngOnInit(): void { + if (this.storageService.getToken()) { + this.router.navigate(['/dashboard']); + } + } + onSubmit() { this.loading = true; if (!this.email || !this.password) { @@ -43,7 +49,7 @@ export class AuthComponent { this.authService.login(loginData).subscribe( (response) => { - this.storageService.saveToken(response.data.token); + this.storageService.saveToken(response.data.token, this.rememberMe); this.router.navigate(['/dashboard']); this.toast.success('Login successful'); this.loading = false; @@ -56,6 +62,6 @@ export class AuthComponent { } togglePasswordVisibility() { - this.passwordVisible = !this.passwordVisible; // Toggle password visibility + this.passwordVisible = !this.passwordVisible; } } From 50c3ce7497e0a7e67ea4823aa8ecf35517f4f27f Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 6 Nov 2024 09:28:54 +0700 Subject: [PATCH 30/53] fix: clean code --- .../pages/dashboard/page/graph/graph.component.html | 4 ++-- .../app/pages/dashboard/page/graph/graph.component.ts | 11 +++-------- .../page/historygraph/historygraph.component.html | 1 - .../page/historygraph/historygraph.component.ts | 1 - 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 31fe216..a1ef947 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -20,7 +20,7 @@
    Sensor NPK 1
    - @@ -39,7 +39,7 @@
    Sensor NPK 2
    - diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 5cc5a37..3929da9 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -82,15 +82,12 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.updateCharts(); } - ngOnChanges(changes: SimpleChanges): void { - if (changes['interval'] && !changes['interval'].firstChange) { - this.selectedInterval = changes['interval'].currentValue; - this.updateCharts(); + if (changes['interval'] && changes['interval'].previousValue !== changes['interval'].currentValue) { + this.selectedInterval = changes['interval'].currentValue; } } - ngAfterViewInit(): void { this.onResize(); } @@ -157,7 +154,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang fetchNPK2Data(savedTimeRange: string): void { const startEnd = this.getDate(); - const timeRange = this.interval; this.sensorService.getSensorData('npk2', this.selectedNPK2, startEnd, savedTimeRange).subscribe({ next: (response) => { console.log(savedTimeRange); @@ -177,7 +173,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } updateCharts(): void { - const interval = this.selectedInterval; + const interval = this.selectedInterval; Object.keys(this.charts).forEach(key => { if (this.charts[key]) { @@ -191,7 +187,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.fetchNPK2Data(interval); } - createChart(canvas: HTMLCanvasElement, response: ApiResponse, sensor: string, selectedOption: string): void { const ctx = canvas.getContext('2d'); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html index 05ad280..d6cec24 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html @@ -11,7 +11,6 @@
    -
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts index ba07afd..0f2846b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts @@ -42,7 +42,6 @@ export class HistorygraphComponent implements OnInit, OnDestroy { } }, 300); } - ngOnDestroy(): void { if (this.intervalId) { From 2c6123c54c86e76265b7ecd55eddd72d973375b8 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 6 Nov 2024 13:38:20 +0700 Subject: [PATCH 31/53] fix(graph); change time range start and end --- .../src/app/cores/services/sensor.service.ts | 23 ++- .../dashboard/page/graph/graph.component.ts | 162 +++++++++++++----- 2 files changed, 140 insertions(+), 45 deletions(-) diff --git a/agrilink_vocpro/src/app/cores/services/sensor.service.ts b/agrilink_vocpro/src/app/cores/services/sensor.service.ts index 3988c74..ac599ac 100644 --- a/agrilink_vocpro/src/app/cores/services/sensor.service.ts +++ b/agrilink_vocpro/src/app/cores/services/sensor.service.ts @@ -27,9 +27,28 @@ export class SensorService extends ApiService { }); } - getSensorData(sensor: string, metric: string, startEnd: string, timeRange: string): Observable { + getSensorDataHourly(sensor: string, metric: string, start: string, end: string, timeRange: string): Observable { const params = new HttpParams() - .set('range[end]', startEnd) + .set('range[start]', start) + .set('range[end]', end) + .set('range[time_range]', timeRange) + .set('sensor', sensor) + .set('metric', metric); + + const headers= this.createAuthHeaders(); + + return this.http.get(this.getDataUrl, { params, headers }).pipe( + catchError(error => { + // this.toast.error('Failed to get sensor data for graphic, please try again'); + return throwError(error); + }) + ); + } + + getSensorDataDaily(sensor: string, metric: string, start: string, end: string, timeRange: string): Observable { + const params = new HttpParams() + .set('range[start]', start) + .set('range[end]', end) .set('range[time_range]', timeRange) .set('sensor', sensor) .set('metric', metric); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 3929da9..22d18a5 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -114,62 +114,138 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang return `${year}-${month}-${day}`; } + getDateAgo():string{ + const today = new Date(); + today.setDate(today.getDate() - 7); + + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, '0'); + const day = String(today.getDate()).padStart(2, '0'); + + return `${year}-${month}-${day}`; + } + fetchDHTData(timeRange: string): void { - const startEnd = this.getDate(); - this.sensorService.getSensorData('dht', 'npk', startEnd, timeRange).subscribe({ - next: (response) => { - this.isLoadingDHT = false; - if (response.statusCode === 200 && response.data.dht?.length > 0) { - this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); - this.isNoDataDHT = false; - } else { + const hEnd = this.getDate(); + const hStart = this.getDate(); + const dEnd = this.getDate(); + const dStart = this.getDateAgo(); + + if(timeRange === 'HOURLY'){ + this.sensorService.getSensorDataHourly('dht', 'npk', hStart, hEnd, timeRange).subscribe({ + next: (response) => { + this.isLoadingDHT = false; + if (response.statusCode === 200 && response.data.dht?.length > 0) { + this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); + this.isNoDataDHT = false; + } else { + this.isNoDataDHT = true; + } + }, + error: () => { + this.isLoadingDHT = false; this.isNoDataDHT = true; } - }, - error: () => { - this.isLoadingDHT = false; - this.isNoDataDHT = true; - } - }); + }); + } else if(timeRange === 'DAILY'){ + this.sensorService.getSensorDataDaily('dht', 'npk', dStart, dEnd, timeRange).subscribe({ + next: (response) => { + this.isLoadingDHT = false; + if (response.statusCode === 200 && response.data.dht?.length > 0) { + this.createChart(this.dhtChartElement.nativeElement, response, 'dht', 'npk'); + this.isNoDataDHT = false; + } else { + this.isNoDataDHT = true; + } + }, + error: () => { + this.isLoadingDHT = false; + this.isNoDataDHT = true; + } + }); + } } fetchNPK1Data(timeRange: string): void { - const startEnd = this.getDate(); - this.sensorService.getSensorData('npk1', this.selectedNPK1, startEnd, timeRange).subscribe({ - next: (response) => { - this.isLoadingNPK1 = false; - if (response.statusCode === 200 && response.data.npk1?.length > 0) { - this.createChart(this.npk1ChartElement.nativeElement, response, 'npk1', this.selectedNPK1); - this.isNoDataNPK1 = false; - } else { + const hEnd = this.getDate(); + const hStart = this.getDate(); + const dEnd = this.getDate(); + const dStart = this.getDateAgo(); + + if(timeRange === 'HOURLY'){ + this.sensorService.getSensorDataHourly('npk1', this.selectedNPK1, hEnd, hStart, timeRange).subscribe({ + next: (response) => { + this.isLoadingNPK1 = false; + if (response.statusCode === 200 && response.data.npk1?.length > 0) { + this.createChart(this.npk1ChartElement.nativeElement, response, 'npk1', this.selectedNPK1); + this.isNoDataNPK1 = false; + } else { + this.isNoDataNPK1 = true; + } + }, + error: () => { + this.isLoadingNPK1 = false; this.isNoDataNPK1 = true; } - }, - error: () => { - this.isLoadingNPK1 = false; - this.isNoDataNPK1 = true; - } - }); + }) + }else if(timeRange === 'DAILY'){ + this.sensorService.getSensorDataDaily('npk1', this.selectedNPK1, dStart, dEnd, timeRange).subscribe({ + next: (response) => { + this.isLoadingNPK1 = false; + if (response.statusCode === 200 && response.data.npk1?.length > 0) { + this.createChart(this.npk1ChartElement.nativeElement, response, 'npk1', this.selectedNPK1); + this.isNoDataNPK1 = false; + } else { + this.isNoDataNPK1 = true; + } + }, + error: () => { + this.isLoadingNPK1 = false; + this.isNoDataNPK1 = true; + } + }); + } } fetchNPK2Data(savedTimeRange: string): void { - const startEnd = this.getDate(); - this.sensorService.getSensorData('npk2', this.selectedNPK2, startEnd, savedTimeRange).subscribe({ - next: (response) => { - console.log(savedTimeRange); - this.isLoadingNPK2 = false; - if (response.statusCode === 200 && response.data.npk2?.length > 0) { - this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); - this.isNoDataNPK2 = false; - } else { + const hEnd = this.getDate(); + const hStart = this.getDate(); + const dEnd = this.getDate(); + const dStart = this.getDateAgo(); + + if(savedTimeRange === 'HOURLY'){ + this.sensorService.getSensorDataHourly('npk2', this.selectedNPK2, hStart, hEnd, savedTimeRange).subscribe({ + next: (response) => { + this.isLoadingNPK2 = false; + if (response.statusCode === 200 && response.data.npk2?.length > 0) { + this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); + this.isNoDataNPK2 = false; + } else { + this.isNoDataNPK2 = true; + } + }, + error: () => { + this.isLoadingNPK2 = false; this.isNoDataNPK2 = true; } - }, - error: () => { - this.isLoadingNPK2 = false; - this.isNoDataNPK2 = true; - } - }); + }); + } else if(savedTimeRange === 'DAILY'){ + this.sensorService.getSensorDataDaily('npk2', this.selectedNPK2, dStart, dEnd, savedTimeRange).subscribe({ + next: (response) => { + this.isLoadingNPK2 = false; + if (response.statusCode === 200 && response.data.npk2?.length > 0) { + this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); + this.isNoDataNPK2 = false; + } else { + this.isNoDataNPK2 = true; + } + }, + error: () => { + this.isLoadingNPK2 = false; + this.isNoDataNPK2 = true; + } + }); + } } updateCharts(): void { From 6ad595141328e23431c64cfeaff53ffaf403eced Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 8 Nov 2024 10:32:18 +0700 Subject: [PATCH 32/53] fix: fix copywrite dan responsivenes --- .../pages/dashboard/dashboard.component.html | 74 +++++++++---------- .../pages/dashboard/dashboard.component.scss | 44 +++++++++-- .../dashboard/layouts/layouts.component.scss | 3 +- .../layouts/sidebar/sidebar.component.html | 3 +- .../layouts/sidebar/sidebar.component.scss | 18 ++++- .../dashboard/page/graph/graph.component.scss | 8 ++ .../historygraph/historygraph.component.scss | 9 ++- 7 files changed, 107 insertions(+), 52 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index db1c89f..31c74f1 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -8,7 +8,7 @@
    - + @@ -50,6 +50,24 @@
    +
    +
    +

    {{sensorData.npk1.nitrogen}} mg/L

    +
    Nitrogen
    +
    +
    +
    +
    +

    {{sensorData.npk1.phosphorus}} mg/L

    +
    Phosphorus
    +
    +
    +
    +
    +

    {{sensorData.npk1.potassium}} mg/L

    +
    Kalium
    +
    +

    {{sensorData.npk1.temperature}} °C

    @@ -74,24 +92,6 @@
    pH
    -
    -
    -

    {{sensorData.npk1.nitrogen}} mg/L

    -
    Nitrogen
    -
    -
    -
    -
    -

    {{sensorData.npk1.phosphorus}} mg/L

    -
    Phosphorus
    -
    -
    -
    -
    -

    {{sensorData.npk1.potassium}} mg/L

    -
    Kalium
    -
    -
    @@ -99,6 +99,24 @@
    +
    +
    +

    {{sensorData.npk2.nitrogen}} mg/L

    +
    Nitrogen
    +
    +
    +
    +
    +

    {{sensorData.npk2.phosphorus}} mg/L

    +
    Phosphorus
    +
    +
    +
    +
    +

    {{sensorData.npk2.potassium}} mg/L

    +
    Kalium
    +
    +

    {{sensorData.npk2.temperature}} °C

    @@ -123,24 +141,6 @@
    pH
    -
    -
    -

    {{sensorData.npk2.nitrogen}} mg/L

    -
    Nitrogen
    -
    -
    -
    -
    -

    {{sensorData.npk2.phosphorus}} mg/L

    -
    Phosphorus
    -
    -
    -
    -
    -

    {{sensorData.npk2.potassium}} mg/L

    -
    Kalium
    -
    -
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index f0d512d..ad03ede 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -1,5 +1,10 @@ .container { font-family: "Onest", sans-serif; + + .active-button { + background-color: #cad849; + color: white; + } } .title { @@ -80,17 +85,45 @@ flex: 1 1 45%; } - .card-container{ + .active-button { + background-color: #cad849; + color: white; + } + + button { + color: black; + margin-bottom: 20px; + } + + .card-container { + display: flex; + flex-wrap: wrap; + gap: 30px; + margin-top: 20px; justify-content: center; } } -@media (max-width: 576px) { +@media (max-width: 344px) { .card-parameter{ flex: 1 1 100%; } - .card-container{ + button { + color: black; + margin-bottom: 20px; + } + + .active-button { + background-color: #cad849; + color: white; + } + + .card-container { + display: flex; + flex-wrap: wrap; + gap: 30px; + margin-top: 20px; justify-content: center; } } @@ -104,11 +137,6 @@ button { margin-right: 20px; } -.active-button { - background-color: #cad849; - color: white; -} - .loading{ font-size: 18px; text-align: center; diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss index 956b52f..b3f4195 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/layouts.component.scss @@ -9,11 +9,12 @@ bottom: 0; left: 0; width: 16.67%; - z-index: 1000; + z-index: 1; overflow-y: auto; } .content-area { + z-index: 0; margin-left: 16.67%; overflow-y: auto; padding-left: 1rem; diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html index 879e7fa..6e2623d 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -22,6 +22,5 @@ -
    - +
    \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss index 4784aa9..64b23d8 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.scss @@ -21,8 +21,24 @@ color: white; font-size: 15px; padding-left: 10px; + z-index: 9999; } .container-sidebar{ display: block; -} \ No newline at end of file +} + +@media (max-width: 430px) { + .dropdown-menu{ + position: absolute; + z-index: 9999; + overflow: visible; + } + + .dropdown-menu{ + a{ + font-size: 11.5px; + padding: 0px 0px 0px 10px + } + } +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 0571895..4fa00d6 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -64,6 +64,14 @@ } } +@media (max-width: 344px) { + canvas { + height: auto; + width: 100%; + max-width: 100%; + } +} + .loading { font-size: 18px; text-align: center; diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss index 5f1aca4..ca447bb 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss @@ -85,16 +85,19 @@ } } -@media (max-width: 576px) { +@media (min-width: 344px) { .card-parameter{ flex: 1 1 100%; } - .card-container{ - justify-content: center; + button { + color: #49473C; + margin-right: 20px; + margin-bottom: 20px; } } + button { border: none; border-radius: 10px; From a68c0f045b2a83d52424ac224b57baf99f34aa1a Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 11 Nov 2024 22:29:57 +0700 Subject: [PATCH 33/53] feat(historygraph+actualgraph): adding date range & actual range, fix interface --- agrilink_vocpro/package-lock.json | 985 +++++++++++++++++- agrilink_vocpro/package.json | 5 +- agrilink_vocpro/src/app/app.routes.ts | 6 + .../src/app/cores/interface/sensor-data.ts | 1 + .../pages/dashboard/dashboard.component.html | 16 +- .../pages/dashboard/dashboard.component.scss | 16 +- .../pages/dashboard/dashboard.component.ts | 34 +- .../layouts/sidebar/sidebar.component.html | 4 + .../actualgraph/actualgraph.component.html | 20 + .../actualgraph/actualgraph.component.scss | 94 ++ .../actualgraph/actualgraph.component.spec.ts | 23 + .../page/actualgraph/actualgraph.component.ts | 201 ++++ .../dashboard/page/graph/graph.component.html | 12 + .../dashboard/page/graph/graph.component.scss | 43 +- .../dashboard/page/graph/graph.component.ts | 112 +- .../historygraph/historygraph.component.html | 4 - .../historygraph/historygraph.component.scss | 8 +- .../historygraph/historygraph.component.ts | 19 - agrilink_vocpro/src/index.html | 1 + agrilink_vocpro/src/styles.scss | 27 + 20 files changed, 1492 insertions(+), 139 deletions(-) create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.spec.ts create mode 100644 agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts diff --git a/agrilink_vocpro/package-lock.json b/agrilink_vocpro/package-lock.json index 7c65fad..353c784 100644 --- a/agrilink_vocpro/package-lock.json +++ b/agrilink_vocpro/package-lock.json @@ -8,17 +8,19 @@ "name": "agrilink-vocpro", "version": "0.0.0", "dependencies": { - "@angular/animations": "^18.2.8", + "@angular/animations": "^18.2.4", "@angular/common": "^18.2.0", "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", "@angular/forms": "^18.2.0", + "@angular/material": "^17.3.6", "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", "chart.js": "^4.4.4", + "date-fns": "^4.1.0", "highcharts-angular": "^4.0.1", "jwt-decode": "^4.0.0", "ngx-toastr": "^19.0.0", @@ -30,6 +32,7 @@ "@angular-devkit/build-angular": "^18.2.4", "@angular/cli": "^18.2.4", "@angular/compiler-cli": "^18.2.0", + "@types/date-fns": "^2.5.3", "@types/jasmine": "~5.1.0", "jasmine-core": "~5.2.0", "karma": "~6.4.0", @@ -274,9 +277,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.8", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.8.tgz", - "integrity": "sha512-dMSn2hg70siv3lhP+vqhMbgc923xw6XBUvnpCPEzhZqFHvPXfh/LubmsD5RtqHmjWebXtgVcgS+zg3Gq3jB2lg==", + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.4.tgz", + "integrity": "sha512-ajjXpLD+SyxbHnmhj2ZvYpXneviOjcBgU9L2UX4OVS0jVWxCNHLhJrcMqtqFHA6U5fPnhPNR9cmnt6tmqri0rA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -285,7 +288,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.8" + "@angular/core": "18.2.4" } }, "node_modules/@angular/build": { @@ -357,6 +360,24 @@ } } }, + "node_modules/@angular/cdk": { + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-17.3.6.tgz", + "integrity": "sha512-7eKrC61/6pmMAxllU/vYKadZRF7x7GxUYpA5G70fNaQsIUUiZvxx/SJN9AuZEoPGAtF6atKlJD8QVmFoDzv/Lw==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/cli": { "version": "18.2.4", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.4.tgz", @@ -490,6 +511,71 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/material": { + "version": "17.3.6", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-17.3.6.tgz", + "integrity": "sha512-sttN0JNvd2QvCCFIsxb5noiy7tgQdWrwvmrkJ+3KguHh5X84jDliA/d8N7Xgy2IBLnS/q/Hl9DdRCOiItWG1bw==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/auto-init": "15.0.0-canary.7f224ddd4.0", + "@material/banner": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/card": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/chips": "15.0.0-canary.7f224ddd4.0", + "@material/circular-progress": "15.0.0-canary.7f224ddd4.0", + "@material/data-table": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dialog": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/drawer": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/fab": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/form-field": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/image-list": "15.0.0-canary.7f224ddd4.0", + "@material/layout-grid": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/radio": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/segmented-button": "15.0.0-canary.7f224ddd4.0", + "@material/select": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/slider": "15.0.0-canary.7f224ddd4.0", + "@material/snackbar": "15.0.0-canary.7f224ddd4.0", + "@material/switch": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "@material/tab-bar": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", + "@material/textfield": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tooltip": "15.0.0-canary.7f224ddd4.0", + "@material/top-app-bar": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^17.0.0 || ^18.0.0", + "@angular/cdk": "17.3.6", + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "@angular/forms": "^17.0.0 || ^18.0.0", + "@angular/platform-browser": "^17.0.0 || ^18.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/platform-browser": { "version": "18.2.4", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.4.tgz", @@ -3437,6 +3523,808 @@ "win32" ] }, + "node_modules/@material/animation": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-1GSJaPKef+7HRuV+HusVZHps64cmZuOItDbt40tjJVaikcaZvwmHlcTxRIqzcRoCdt5ZKHh3NoO7GB9Khg4Jnw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/auto-init": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-t7ZGpRJ3ec0QDUO0nJu/SMgLW7qcuG2KqIsEYD1Ej8qhI2xpdR2ydSDQOkVEitXmKoGol1oq4nYSBjTlB65GqA==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/banner": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-g9wBUZzYBizyBcBQXTIafnRUUPi7efU9gPJfzeGgkynXiccP/vh5XMmH+PBxl5v+4MlP/d4cZ2NUYoAN7UTqSA==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-I9KQOKXpLfJkP8MqZyr8wZIzdPHrwPjFvGd9zSK91/vPyE4hzHRJc/0njsh9g8Lm9PRYLbifXX+719uTbHxx+A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-BHB7iyHgRVH+JF16+iscR+Qaic+p7LU1FOLgP8KucRlpF9tTwIxQA6mJwGRi5gUtcG+vyCmzVS+hIQ6DqT/7BA==", + "license": "MIT", + "dependencies": { + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/card": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-kt7y9/IWOtJTr3Z/AoWJT3ZLN7CLlzXhx2udCLP9ootZU2bfGK0lzNwmo80bv/pJfrY9ihQKCtuGTtNxUy+vIw==", + "license": "MIT", + "dependencies": { + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/checkbox": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-rURcrL5O1u6hzWR+dNgiQ/n89vk6tdmdP3mZgnxJx61q4I/k1yijKqNJSLrkXH7Rto3bM5NRKMOlgvMvVd7UMQ==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/chips": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-AYAivV3GSk/T/nRIpH27sOHFPaSMrE3L0WYbnb5Wa93FgY8a0fbsFYtSH2QmtwnzXveg+B1zGTt7/xIIcynKdQ==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/circular-progress": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-DJrqCKb+LuGtjNvKl8XigvyK02y36GRkfhMUYTcJEi3PrOE00bwXtyj7ilhzEVshQiXg6AHGWXtf5UqwNrx3Ow==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/data-table": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-/2WZsuBIq9z9RWYF5Jo6b7P6u0fwit+29/mN7rmAZ6akqUR54nXyNfoSNiyydMkzPlZZsep5KrSHododDhBZbA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/checkbox": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/linear-progress": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/select": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-o9EXmGKVpiQ6mHhyV3oDDzc78Ow3E7v8dlaOhgaDSXgmqaE8v5sIlLNa/LKSyUga83/fpGk3QViSGXotpQx0jA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-u0XpTlv1JqWC/bQ3DavJ1JguofTelLT2wloj59l3/1b60jv42JQ6Am7jU3I8/SIUB1MKaW7dYocXjDWtWJakLA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-mQ1HT186GPQSkRg5S18i70typ5ZytfjL09R0gJ2Qg5/G+MLCGi7TAjZZSH65tuD/QGOjel4rDdWOTmYbPYV6HA==", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-qyO0W0KBftfH8dlLR0gVAgv7ZHNvU8ae11Ao6zJif/YxcvK4+gph1z8AO4H410YmC2kZiwpSKyxM1iQCCzbb4g==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-tV6s4/pUBECedaI36Yj18KmRCk1vfue/JP/5yYRlFNnLMRVISePbZaKkn/BHXVf+26I3W879+XqIGlDVdmOoMA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/fab": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-4h76QrzfZTcPdd+awDPZ4Q0YdSqsXQnS540TPtyXUJ/5G99V6VwGpjMPIxAsW0y+pmI9UkLL/srrMaJec+7r4Q==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-SAjtxYh6YlKZriU83diDEQ7jNSP2MnxKsER0TvFeyG1vX/DWsUyYDOIJTOEa9K1N+fgJEBkNK8hY55QhQaspew==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-0KMo5ijjYaEHPiZ2pCVIcbaTS2LycvH9zEhEMKwPPGssBCX7iz5ffYQFk7e5yrQand1r3jnQQgYfHAwtykArnQ==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Jmg1nltq4J6S6A10EGMZnvufrvU3YTi+8R8ZD9lkSbun0Fm2TVdICQt/Auyi6An9zP66oQN6c31eqO6KfIPsDg==", + "license": "MIT", + "dependencies": { + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0" + } + }, + "node_modules/@material/form-field": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-fEPWgDQEPJ6WF7hNnIStxucHR9LE4DoDSMqCsGWS2Yu+NLZYLuCEecgR0UqQsl1EQdNRaFh8VH93KuxGd2hiPg==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-DcK7IL4ICY/DW+48YQZZs9g0U1kRaW0Wb0BxhvppDMYziHo/CTpFdle4gjyuTyRxPOdHQz5a97ru48Z9O4muTw==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/image-list": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-voMjG2p80XbjL1B2lmF65zO5gEgJOVKClLdqh4wbYzYfwY/SR9c8eLvlYG7DLdFaFBl/7gGxD8TvvZ329HUFPw==", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/layout-grid": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-veDABLxMn2RmvfnUO2RUmC1OFfWr4cU+MrxKPoDD2hl3l3eDYv5fxws6r5T1JoSyXoaN+oEZpheS0+M9Ure8Pg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-f60hVJhIU6I3/17Tqqzch1emUKEcfVVgHVqADbU14JD+oEIz429ZX9ksZ3VChoU3+eejFl+jVdZMLE/LrAuwpg==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-pRDEwPQielDiC9Sc5XhCXrGxP8wWOnAO8sQlMebfBYHYqy5hhiIzibezS8CSaW4MFQFyXmCmpmqWlbqGYRmiyg==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/progress-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Is0NV91sJlXF5pOebYAtWLF4wU2MJDbYqztML/zQNENkQxDOvEXu3nWNb3YScMIYJJXvARO0Liur5K4yPagS1Q==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-D11QU1dXqLbh5X1zKlEhS3QWh0b5BPNXlafc5MXfkdJHhOiieb7LC9hMJhbrHtj24FadJ7evaFW/T2ugJbJNnQ==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-7RZHvw0gbwppaAJ/Oh5SWmfAKJ62aw1IMB3+3MRwsb5PLoV666wInYa+zJfE4i7qBeOn904xqT2Nko5hY0ssrg==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/notched-outline": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-Yg2usuKB2DKlKIBISbie9BFsOVuffF71xjbxPbybvqemxqUBd+bD5/t6H1fLE+F8/NCu5JMigho4ewUU+0RCiw==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-UPbDjE5CqT+SqTs0mNFG6uFEw7wBlgYmh+noSkQ6ty/EURm8lF125dmi4dv4kW0+octonMXqkGtAoZwLIHKf/w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-wR1X0Sr0KmQLu6+YOFKAI84G3L6psqd7Kys5kfb8WKBM36zxO5HQXC5nJm/Y0rdn22ixzsIz2GBo0MNU4V4k1A==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-JqOsWM1f4aGdotP0rh1vZlPZTg6lZgh39FIYHFMfOwfhR+LAikUJ+37ciqZuewgzXB6iiRO6a8aUH6HR5SJYPg==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-UVf14qAtmPiaaZjuJtmN36HETyoKWmsZM/qn1L5ciR2URb8O035dFWnz4ZWFMmAYBno/L7JiZaCkPurv2ZNrGA==", + "license": "MIT", + "dependencies": { + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/segmented-button": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-LCnVRUSAhELTKI/9hSvyvIvQIpPpqF29BV+O9yM4WoNNmNWqTulvuiv7grHZl6Z+kJuxSg4BGbsPxxb9dXozPg==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/touch-target": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-WioZtQEXRpglum0cMSzSqocnhsGRr+ZIhvKb3FlaNrTaK8H3Y4QA7rVjv3emRtrLOOjaT6/RiIaUMTo9AGzWQQ==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/list": "15.0.0-canary.7f224ddd4.0", + "@material/menu": "15.0.0-canary.7f224ddd4.0", + "@material/menu-surface": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-8z8l1W3+cymObunJoRhwFPKZ+FyECfJ4MJykNiaZq7XJFZkV6xNmqAVrrbQj93FtLsECn9g4PjjIomguVn/OEw==", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/slider": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-QU/WSaSWlLKQRqOhJrPgm29wqvvzRusMqwAcrCh1JTrCl+xwJ43q5WLDfjYhubeKtrEEgGu9tekkAiYfMG7EBw==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-sm7EbVKddaXpT/aXAYBdPoN0k8yeg9+dprgBUkrdqGzWJAeCkxb4fv2B3He88YiCtvkTz2KLY4CThPQBSEsMFQ==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/icon-button": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-lEDJfRvkVyyeHWIBfoxYjJVl+WlEAE2kZ/+6OqB1FW0OV8ftTODZGhHRSzjVBA1/p4FPuhAtKtoK9jTpa4AZjA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-E1xGACImyCLurhnizyOTCgOiVezce4HlBFAI6YhJo/AyVwjN2Dtas4ZLQMvvWWqpyhITNkeYdOchwCC1mrz3AQ==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/focus-ring": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-p1Asb2NzrcECvAQU3b2SYrpyJGyJLQWR+nXTYzDKE8WOpLIRCXap2audNqD7fvN/A20UJ1J8U01ptrvCkwJ4eA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "@material/tab-indicator": "15.0.0-canary.7f224ddd4.0", + "@material/tab-scroller": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-h9Td3MPqbs33spcPS7ecByRHraYgU4tNCZpZzZXw31RypjKvISDv/PS5wcA4RmWqNGih78T7xg4QIGsZg4Pk4w==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-LFeYNjQpdXecwECd8UaqHYbhscDCwhGln5Yh+3ctvcEgvmDPNjhKn/DL3sWprWvG8NAhP6sHMrsGhQFVdCWtTg==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/tab": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-AExmFvgE5nNF0UA4l2cSzPghtxSUQeeoyRjFLHLy+oAaE4eKZFrSy0zEpqPeWPQpEMDZk+6Y+6T3cOFYBeSvsw==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/density": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/floating-label": "15.0.0-canary.7f224ddd4.0", + "@material/line-ripple": "15.0.0-canary.7f224ddd4.0", + "@material/notched-outline": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-hs45hJoE9yVnoVOcsN1jklyOa51U4lzWsEnQEuJTPOk2+0HqCQ0yv/q0InpSnm2i69fNSyZC60+8HADZGF8ugQ==", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-r9TDoicmcT7FhUXC4eYMFnt9TZsz0G8T3wXvkKncLppYvZ517gPyD/1+yhuGfGOxAzxTrM66S/oEc1fFE2q4hw==", + "license": "MIT", + "dependencies": { + "@material/elevation": "15.0.0-canary.7f224ddd4.0" + } + }, + "node_modules/@material/tooltip": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-8qNk3pmPLTnam3XYC1sZuplQXW9xLn4Z4MI3D+U17Q7pfNZfoOugGr+d2cLA9yWAEjVJYB0mj8Yu86+udo4N9w==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/button": "15.0.0-canary.7f224ddd4.0", + "@material/dom": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/tokens": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-SARR5/ClYT4CLe9qAXakbr0i0cMY0V3V4pe3ElIJPfL2Z2c4wGR1mTR8m2LxU1MfGKK8aRoUdtfKaxWejp+eNA==", + "license": "MIT", + "dependencies": { + "@material/animation": "15.0.0-canary.7f224ddd4.0", + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/elevation": "15.0.0-canary.7f224ddd4.0", + "@material/ripple": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/shape": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "@material/typography": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-BJo/wFKHPYLGsRaIpd7vsQwKr02LtO2e89Psv0on/p0OephlNIgeB9dD9W+bQmaeZsZ6liKSKRl6wJWDiK71PA==", + "license": "MIT", + "dependencies": { + "@material/base": "15.0.0-canary.7f224ddd4.0", + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/rtl": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "15.0.0-canary.7f224ddd4.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.7f224ddd4.0.tgz", + "integrity": "sha512-kBaZeCGD50iq1DeRRH5OM5Jl7Gdk+/NOfKArkY4ksBZvJiStJ7ACAhpvb8MEGm4s3jvDInQFLsDq3hL+SA79sQ==", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.7f224ddd4.0", + "@material/theme": "15.0.0-canary.7f224ddd4.0", + "tslib": "^2.1.0" + } + }, "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", @@ -3864,6 +4752,17 @@ "node": ">=14" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", @@ -4314,6 +5213,13 @@ "@types/node": "*" } }, + "node_modules/@types/date-fns": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@types/date-fns/-/date-fns-2.5.3.tgz", + "integrity": "sha512-4KVPD3g5RjSgZtdOjvI/TDFkLNUHhdoWxmierdQbDeEg17Rov0hbBYtIzNaQA67ORpteOhvR9YEMTb6xeDCang==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -5928,9 +6834,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -6266,6 +7172,16 @@ "dev": true, "license": "MIT" }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -6585,9 +7501,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dev": true, "license": "MIT", "dependencies": { @@ -6596,7 +7512,7 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -6647,7 +7563,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, + "devOptional": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -6959,9 +7875,9 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6970,7 +7886,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -7002,9 +7918,9 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", "engines": { @@ -7623,6 +8539,13 @@ "node": ">= 0.4" } }, + "node_modules/highcharts": { + "version": "11.4.8", + "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.8.tgz", + "integrity": "sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA==", + "license": "https://www.highcharts.com/license", + "peer": true + }, "node_modules/highcharts-angular": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/highcharts-angular/-/highcharts-angular-4.0.1.tgz", @@ -10855,7 +11778,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "entities": "^4.4.0" @@ -11753,6 +12676,12 @@ "dev": true, "license": "MIT" }, + "node_modules/safevalues": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", + "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==", + "license": "Apache-2.0" + }, "node_modules/sass": { "version": "1.77.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", @@ -12245,9 +13174,9 @@ } }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", "dev": true, "license": "MIT", "dependencies": { @@ -12255,7 +13184,7 @@ "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -13990,9 +14919,9 @@ } }, "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/agrilink_vocpro/package.json b/agrilink_vocpro/package.json index d8d8a65..96794cb 100644 --- a/agrilink_vocpro/package.json +++ b/agrilink_vocpro/package.json @@ -10,17 +10,19 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.2.8", + "@angular/animations": "^18.2.4", "@angular/common": "^18.2.0", "@angular/compiler": "^18.2.0", "@angular/core": "^18.2.0", "@angular/forms": "^18.2.0", + "@angular/material": "^17.3.6", "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "bootstrap": "^5.3.3", "bootstrap-icons": "^1.11.3", "chart.js": "^4.4.4", + "date-fns": "^4.1.0", "highcharts-angular": "^4.0.1", "jwt-decode": "^4.0.0", "ngx-toastr": "^19.0.0", @@ -32,6 +34,7 @@ "@angular-devkit/build-angular": "^18.2.4", "@angular/cli": "^18.2.4", "@angular/compiler-cli": "^18.2.0", + "@types/date-fns": "^2.5.3", "@types/jasmine": "~5.1.0", "jasmine-core": "~5.2.0", "karma": "~6.4.0", diff --git a/agrilink_vocpro/src/app/app.routes.ts b/agrilink_vocpro/src/app/app.routes.ts index c90f077..9306af8 100644 --- a/agrilink_vocpro/src/app/app.routes.ts +++ b/agrilink_vocpro/src/app/app.routes.ts @@ -5,6 +5,7 @@ import { AuthComponent } from './pages/auth/auth.component'; import { AuthGuard } from './cores/guards/auth.guard'; import { RegisterComponent } from './pages/register/register.component'; import { HistorygraphComponent } from './pages/dashboard/page/historygraph/historygraph.component'; +import { ActualgraphComponent } from './pages/dashboard/page/actualgraph/actualgraph.component'; export const routes: Routes = [ { @@ -33,6 +34,11 @@ export const routes: Routes = [ path: 'historygraph', component: HistorygraphComponent, canActivate: [AuthGuard] + }, + { + path: 'actualgraph', + component: ActualgraphComponent, + canActivate: [AuthGuard] } ] } diff --git a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts index 51a219c..23043a8 100644 --- a/agrilink_vocpro/src/app/cores/interface/sensor-data.ts +++ b/agrilink_vocpro/src/app/cores/interface/sensor-data.ts @@ -1,6 +1,7 @@ export interface ParameterSensor { hour: number; day: number; + date: number; //for DHT sensor vicitemperature?: number; diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 31c74f1..70fad21 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -3,10 +3,7 @@

    {{ greeting }}

    Welcome back to your management system

    -
    -

    Latest Update: {{latestUpdate}}

    -
    - +
    @@ -158,10 +155,15 @@ Katup Nutrisi - + Katup Air + + + Pompa Air + + Relay {{ relay.number }} @@ -170,9 +172,7 @@
    -
    - - +
    Monitoring Graphs
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss index ad03ede..a33e66b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.scss @@ -16,13 +16,7 @@ .description { color: #49473C; font-size: 15px; - margin-top: 10px; -} - -.update{ - color: #49473C; - font-size: 15px; - margin-top: 18px; + margin: 10px 0px 15px 0px; } .card-container { @@ -102,6 +96,10 @@ margin-top: 20px; justify-content: center; } + + .relay-container{ + justify-content: center; + } } @media (max-width: 344px) { @@ -126,6 +124,10 @@ margin-top: 20px; justify-content: center; } + + .relay-container{ + justify-content: center; + } } button { diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts index 82dd575..8d6b696 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.ts @@ -33,7 +33,6 @@ export class DashboardComponent implements OnInit { ngOnInit(): void { this.selectedButton = 'dht'; - this.startClock(); this.updateGreeting(); this.loadData(); } @@ -44,26 +43,6 @@ export class DashboardComponent implements OnInit { } } - startClock(): void { - this.updateLatestTime(); - - this.intervalId = setInterval(() => { - this.updateLatestTime(); - }, 1000); - } - - updateLatestTime(): void { - const now = new Date(); - const options: Intl.DateTimeFormatOptions = { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - }; - this.latestUpdate = now.toLocaleString('en-GB', options); - } updateGreeting(): void { const hour = new Date().getHours(); @@ -131,8 +110,6 @@ export class DashboardComponent implements OnInit { }; } } - - this.updateLatestTime(); this.isLoaded = false; }, (error) => { @@ -157,10 +134,10 @@ export class DashboardComponent implements OnInit { created_at: relay.created_at, current_status: relay.current_status })); - this.relayStatus.sort((a, b) => a.number - b.number); - this.noData = false; // Data available + this.relayStatus.sort((a, b) => b.number - a.number); + + this.noData = false; } else { - // Throw an error if relay data is empty this.handleError({ message: 'No available relay data.' }); this.noData = true; } @@ -172,9 +149,8 @@ export class DashboardComponent implements OnInit { this.hasError = true; } ); -} - - + } + handleError(error: any): void { if (this.selectedButton === 'dht') { this.toast.error('Error fetching DHT sensor data. Please try again.', 'Error', { timeOut: 3000 }); diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html index 6e2623d..669dde6 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -11,6 +11,10 @@ History Graph +
  • + + Actual Graph +

  • diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html new file mode 100644 index 0000000..ddca21a --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html @@ -0,0 +1,20 @@ +
    +
    +

    {{ greeting }}

    +

    Compare your actual data with the standard data

    +
    +
    + + +
    + +
    +
    Actual Graph Sensor NPK 1
    +
    Actual Graph Sensor NPK 2
    +
    + + +

    No available data

    +
    +
    +
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss new file mode 100644 index 0000000..1231928 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss @@ -0,0 +1,94 @@ +.container { + font-family: "Onest", sans-serif; +} + +.title { + color: #49473C; + font-size: 30px; + margin-top: 10px; +} + +.description { + color: #49473C; + font-size: 15px; + margin: 10px 0px 15px 0px; +} + +.graph { + width: 100%; + height: 400px; + position: relative; + max-width: 100%; + border-radius: 10px; + border: 1px solid #E5E5E5; + padding: 20px 20px 0px 20px; + + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + text-align: center; + margin-top: 20px; +} + +.title-graph { + color: #49473C; + font-size: 20px; + font-weight: 400; + margin-top: 15px; + margin-bottom: 20px; + position: relative; +} + +.graph-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} + +.spinner { + font-size: 30px; + color: #16423C; + position: absolute; +} + +@media (max-width: 768px) { + .graph { + height: 300px; + } + + .title-graph { + margin: auto; + font-size: 15px; + } +} + +@media (max-width: 344px) { + button { + color: #49473C; + margin-right: 20px; + margin-bottom: 20px; + } + + .title-graph { + font-size: 15px; + margin: auto; + } +} + +button { + border: none; + border-radius: 10px; + padding: 5px 10px; + font-size: 15px; + cursor: pointer; + margin-right: 20px; +} + +.active-button { + background-color: #cad849; + color: white; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.spec.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.spec.ts new file mode 100644 index 0000000..4042944 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ActualgraphComponent } from './actualgraph.component'; + +describe('ActualgraphComponent', () => { + let component: ActualgraphComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ActualgraphComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ActualgraphComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts new file mode 100644 index 0000000..8799923 --- /dev/null +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -0,0 +1,201 @@ +import { Component, OnInit, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core'; +import { Chart, registerables } from 'chart.js'; +import { SensorService } from '../../../../cores/services/sensor.service'; +import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; +import { CommonModule } from '@angular/common'; + +Chart.register(...registerables); + +@Component({ + selector: 'app-actualgraph', + standalone: true, + imports: [CommonModule], + templateUrl: './actualgraph.component.html', + styleUrls: ['./actualgraph.component.scss'] +}) +export class ActualgraphComponent implements OnInit { + @ViewChild('chartCanvas', { static: false }) chartCanvas?: ElementRef; + private chart: Chart | undefined; + selectedButton: string = 'npk1'; + isLoading: boolean = true; + isNoData: boolean = false; + greeting = ''; + + constructor( + private sensorService: SensorService, + private cdr: ChangeDetectorRef + ) {} + + ngOnInit(): void { + this.updateGreeting(); + this.loadData('npk1'); + } + + loadData(sensorType: string): void { + console.log('Loading data for sensor:', sensorType); + this.selectedButton = sensorType; + this.isLoading = true; + this.isNoData = false; + + this.sensorService.getLatestData().subscribe( + (response: ApiResponse) => { + console.log('Data received:', response); + if (response.statusCode === 200) { + const selectedData = (response.data as { [key: string]: any[] })[sensorType]; + + if (selectedData && selectedData.length > 0) { + const npkData: ParameterSensor = selectedData[0]; + + if (sensorType === 'npk1' || sensorType === 'npk2') { + const actualData = [ + { x: npkData.soilnitrogen ?? 0, y: 0 }, + { x: npkData.soilphosphorus ?? 0, y: 1 }, + { x: npkData.soilpotassium ?? 0, y: 2 } + ]; + + this.chartData.datasets[0].data = actualData; + this.isLoading = false; + this.cdr.detectChanges(); + + setTimeout(() => { + this.initializeChart(); + }); + } + } else { + this.isNoData = true; + this.isLoading = false; + this.cdr.detectChanges(); + } + } else { + console.error('Error loading data: ', response.message); + this.isLoading = false; + this.cdr.detectChanges(); + } + }, + (error) => { + console.error('Error loading data:', error); + this.isLoading = false; + this.cdr.detectChanges(); + } + ); + } + + // Initialize Chart + private initializeChart(): void { + if (this.chartCanvas?.nativeElement) { + console.log('Initializing chart...'); + const ctx = this.chartCanvas.nativeElement.getContext('2d'); + if (ctx) { + this.chart = new Chart(ctx, { + type: 'bar', + data: this.chartData, + options: this.chartOptions + }); + } + } else { + console.warn('Chart canvas is not available'); + } + } + + updateGreeting(): void { + const hour = new Date().getHours(); + this.greeting = hour < 12 ? 'Good Morning' : hour < 18 ? 'Good Afternoon' : 'Good Evening'; + } + + public chartData = { + labels: ['Nitrogen', 'Phosphor', 'Kalium'], + datasets: [ + { + label: 'Actual Data', + data: [], + backgroundColor: 'rgb(18, 55, 42)', + borderColor: 'rgb(18, 55, 42)', + borderWidth: 1, + type: 'bubble' + }, + { + label: 'Start Data Range', + data: [ + { x: 100, y: 0 }, + { x: 90, y: 1 }, + { x: 220, y: 2 } + ], + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + type: 'bar', + stack: 'range', + }, + { + label: 'Standard Data Range', + data: [ + { x: 100, y: 0 }, + { x: 35, y: 1 }, + { x: 200, y: 2 } + ], + backgroundColor: 'rgb(212, 231, 197)', + borderWidth: 1, + type: 'bar', + stack: 'range' + } + ] + }; + + public chartOptions = { + responsive: true, + maintainAspectRatio: false, + indexAxis: 'y', + scales: { + x: { + title: { + display: true, + text: 'Value (mg/L)', + }, + min: 0, + max: 300, + type: 'linear', + }, + y: { + title: { + display: true, + text: 'Sensor Parameter', + }, + stacked: true, + }, + }, + plugins: { + tooltip: { + callbacks: { + title: function (tooltipItem: any) { + // Display the label (Nitrogen, Phosphorus, or Kalium) + return tooltipItem[0].label; + }, + label: function (tooltipItem: any) { + const dataset = tooltipItem.dataset; + const dataIndex = tooltipItem.dataIndex; + const data = dataset.data[dataIndex]; + + let tooltipText = `Actual Value: ${data.x} mg/L`; + + if (dataset.type === 'bar') { + const startRangeDataset = tooltipItem.chart.data.datasets.find((ds: any) => ds.label === 'Start Data Range'); + const standardRangeDataset = tooltipItem.chart.data.datasets.find((ds: any) => ds.label === 'Standard Data Range'); + + const startRangeValue = startRangeDataset?.data.find((point: any) => point.y === data.y)?.x; + const standardRangeValue = standardRangeDataset?.data.find((point: any) => point.y === data.y)?.x; + + if (startRangeValue !== undefined && standardRangeValue !== undefined) { + const minValue = startRangeValue; + const maxValue = startRangeValue + standardRangeValue; + tooltipText = `(Standard Range: ${minValue} - ${maxValue} mg/L)`; + } + } + + return tooltipText; + }, + }, + }, + }, + }; + + +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index a1ef947..70f8098 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -4,6 +4,18 @@ +
    + + Enter a date range + + + + + MM/DD/YYYY – MM/DD/YYYY + + + +
    Sensor BHT
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index 4fa00d6..dd618a1 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -1,9 +1,26 @@ .container-graph { display: flex; flex-direction: column; - justify-content: flex-start; + position: relative; height: max-content; + .date-picker{ + display: flex; + justify-content: flex-end; + padding: 10px 20px; + } + + .mat-form-field{ + font-family: 'Onest', sans-serif; + } + + mat-datepicker-toggle, mat-date-range-input{ + color: #16423C; + } + + .mat-form-field.mat-focused .mat-date-range-input { + color: #16423C; + } .sensor-wrapper { position: relative; @@ -62,6 +79,17 @@ width: 100%; max-width: 100%; } + + .date-picker{ + display: flex; + justify-content: center; + padding: 10px 20px; + } + + mat-hint{ + font-size: 10px; + align-items: center; + } } @media (max-width: 344px) { @@ -70,6 +98,17 @@ width: 100%; max-width: 100%; } + + .date-picker{ + display: flex; + justify-content: center; + padding: 10px 20px; + } + + mat-hint{ + font-size: 10px; + align-items: center; + } } .loading { @@ -88,3 +127,5 @@ height: 100%; font-size: 18px; } + + diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 22d18a5..ad65e0a 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -2,8 +2,13 @@ import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy, OnC import { Chart, registerables } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; -import { CommonModule } from '@angular/common'; +import { CommonModule, formatDate } from '@angular/common'; import { FormsModule } from '@angular/forms'; +import { provideNativeDateAdapter} from '@angular/material/core'; +import { MatDatepickerModule} from '@angular/material/datepicker'; +import { MatFormFieldModule} from '@angular/material/form-field'; +import { format } from 'date-fns'; +import { ToastrService } from 'ngx-toastr'; Chart.register(...registerables); @@ -23,7 +28,8 @@ const parameterColors: { [key: string]: string } = { @Component({ selector: 'app-graph', standalone: true, - imports: [CommonModule, FormsModule], + imports: [CommonModule, FormsModule, MatDatepickerModule, MatFormFieldModule], + providers: [provideNativeDateAdapter()], templateUrl: './graph.component.html', styleUrls: ['./graph.component.scss'] }) @@ -34,6 +40,9 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang @Input() interval: string = 'hourly'; selectedInterval: string = 'HOURLY'; + startDate: Date | null = null; + endDate: Date | null = null; + isLoadingDHT: boolean = true; isLoadingNPK1: boolean = true; isLoadingNPK2: boolean = true; @@ -73,14 +82,15 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang selectedNPK2: string = 'npk'; private resizeListener!: () => void; + private updateTimeout: any; - constructor(private sensorService: SensorService, private cdr: ChangeDetectorRef) {} + constructor(private sensorService: SensorService, private toast: ToastrService) {} ngOnInit(): void { this.resizeListener = this.onResize.bind(this); window.addEventListener('resize', this.resizeListener); - this.updateCharts(); } + ngOnChanges(changes: SimpleChanges): void { if (changes['interval'] && changes['interval'].previousValue !== changes['interval'].currentValue) { @@ -92,6 +102,18 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.onResize(); } + dateChange(): void { + if(!this.startDate || !this.endDate){ + this.toast.warning('Select both start and end dates'); + return; + } else { + clearTimeout(this.updateTimeout); + this.updateTimeout = setTimeout(() => { + this.updateCharts(); + }, 500); + } + } + ngOnDestroy(): void { window.removeEventListener('resize', this.resizeListener); } @@ -105,13 +127,21 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.updateCharts(); } + formatDate(date: Date): string { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + } + getDate(): string { const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, '0'); const day = String(today.getDate()).padStart(2, '0'); - return `${year}-${month}-${day}`; + const hasil = `${year}-${month}-${day}`; + return hasil; } getDateAgo():string{ @@ -125,13 +155,13 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang return `${year}-${month}-${day}`; } - fetchDHTData(timeRange: string): void { - const hEnd = this.getDate(); - const hStart = this.getDate(); - const dEnd = this.getDate(); - const dStart = this.getDateAgo(); + fetchDHTData(timeRange: string, startDate?: Date, endDate?: Date): void { + const hStart = startDate ? this.formatDate(startDate) : this.getDate(); + const hEnd = endDate ? this.formatDate(endDate) : this.getDate(); + const dStart= startDate ? this.formatDate(startDate) : this.getDateAgo(); + const dEnd = endDate ? this.formatDate(endDate) : this.getDate(); - if(timeRange === 'HOURLY'){ + if (timeRange === 'HOURLY') { this.sensorService.getSensorDataHourly('dht', 'npk', hStart, hEnd, timeRange).subscribe({ next: (response) => { this.isLoadingDHT = false; @@ -147,7 +177,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.isNoDataDHT = true; } }); - } else if(timeRange === 'DAILY'){ + } else if (timeRange === 'DAILY') { this.sensorService.getSensorDataDaily('dht', 'npk', dStart, dEnd, timeRange).subscribe({ next: (response) => { this.isLoadingDHT = false; @@ -166,14 +196,14 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } } - fetchNPK1Data(timeRange: string): void { - const hEnd = this.getDate(); - const hStart = this.getDate(); - const dEnd = this.getDate(); - const dStart = this.getDateAgo(); + fetchNPK1Data(timeRange: string, startDate?: Date, endDate?: Date): void { + const hStart = startDate ? this.formatDate(startDate) : this.getDate(); + const hEnd = endDate ? this.formatDate(endDate) : this.getDate(); + const dStart = startDate ? this.formatDate(startDate) : this.getDateAgo(); + const dEnd= endDate ? this.formatDate(endDate) : this.getDate(); if(timeRange === 'HOURLY'){ - this.sensorService.getSensorDataHourly('npk1', this.selectedNPK1, hEnd, hStart, timeRange).subscribe({ + this.sensorService.getSensorDataHourly('npk1', this.selectedNPK1, hStart, hEnd, timeRange).subscribe({ next: (response) => { this.isLoadingNPK1 = false; if (response.statusCode === 200 && response.data.npk1?.length > 0) { @@ -187,7 +217,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.isLoadingNPK1 = false; this.isNoDataNPK1 = true; } - }) + }); }else if(timeRange === 'DAILY'){ this.sensorService.getSensorDataDaily('npk1', this.selectedNPK1, dStart, dEnd, timeRange).subscribe({ next: (response) => { @@ -207,17 +237,18 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } } - fetchNPK2Data(savedTimeRange: string): void { - const hEnd = this.getDate(); - const hStart = this.getDate(); - const dEnd = this.getDate(); - const dStart = this.getDateAgo(); + fetchNPK2Data(savedTimeRange: string, startDate?: Date, endDate?: Date): void { + const hStart = startDate ? this.formatDate(startDate) : this.getDate(); + const hEnd = endDate ? this.formatDate(endDate) : this.getDate(); + const dStart = startDate ? this.formatDate(startDate) : this.getDateAgo(); + const dEnd = endDate ? this.formatDate(endDate) : this.getDate(); if(savedTimeRange === 'HOURLY'){ this.sensorService.getSensorDataHourly('npk2', this.selectedNPK2, hStart, hEnd, savedTimeRange).subscribe({ next: (response) => { this.isLoadingNPK2 = false; if (response.statusCode === 200 && response.data.npk2?.length > 0) { + console.log('NPK2 Data:', response); this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); this.isNoDataNPK2 = false; } else { @@ -254,13 +285,20 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang Object.keys(this.charts).forEach(key => { if (this.charts[key]) { this.charts[key]?.destroy(); + this.charts[key].data.labels = []; + this.charts[key].data.datasets = []; this.charts[key] = undefined; } }); - - this.fetchDHTData(interval); - this.fetchNPK1Data(interval); - this.fetchNPK2Data(interval); + if (this.startDate && this.endDate) { + this.fetchDHTData(interval, this.startDate, this.endDate); + this.fetchNPK1Data(interval, this.startDate, this.endDate); + this.fetchNPK2Data(interval, this.startDate, this.endDate); + } else { + this.fetchDHTData(interval); + this.fetchNPK1Data(interval); + this.fetchNPK2Data(interval); + } } @@ -369,7 +407,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang mode: 'nearest', intersect: false, callbacks: { - label: (tooltipItem) => { + label: (tooltipItem: any) => { const paramLabel = tooltipItem.dataset.label; const value = tooltipItem.formattedValue; return `${paramLabel}: ${value}`; @@ -383,7 +421,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang grid: { display: false }, beginAtZero: true, ticks: { - callback: (value, index, values) => { + callback: (value: string | number, index: number, values: any) => { const labels = this.getLabels(response, sensor); return labels[index] || value; } @@ -406,7 +444,8 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang sensorData.forEach(item => { data.push(item[parameter as keyof ParameterSensor] ?? 0); if(this.interval === 'HOURLY') { - labels.push(`${item.hour}.00`); + labels.push(item.date); + labels.push(item.hour); } else if (this.interval === 'DAILY') { labels.push(item.day); @@ -423,11 +462,14 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang const sensorData = response.data[sensor as keyof typeof response.data]; return sensorData.map(item => { + const formatDate = format(new Date(item.date), 'MMM dd'); + if (this.interval === 'HOURLY' || this.selectedInterval === 'HOURLY') { - return `${item.hour}.00`; + return `${formatDate}, ${item.hour}.00`; } else if (this.interval === 'DAILY') { - const day = item.day; - return this.convertDateToDay(day); + const day = item.date; + const convertDateToDay = this.convertDateToDay(day); + return `${convertDateToDay}, ${formatDate}`; } else { return ''; } @@ -436,7 +478,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang convertDateToDay(dateString: string): string { const date = new Date(dateString); - const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thrusday', 'Friday', 'Saturday']; + const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat']; return days[date.getDay()]; } diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html index d6cec24..39226a9 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.html @@ -3,10 +3,6 @@

    {{ greeting }}

    View your historical data with customizable time ranges

    -
    -

    Latest Update: {{ latestUpdate }}

    -
    -
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss index ca447bb..40ba899 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.scss @@ -11,13 +11,7 @@ .description { color: #49473C; font-size: 15px; - margin-top: 10px; -} - -.update{ - color: #49473C; - font-size: 15px; - margin-top: 18px; + margin: 10px 0px 15px 0px; } .card-container { diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts index 0f2846b..14343b5 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/historygraph/historygraph.component.ts @@ -13,7 +13,6 @@ import { ChangeDetectorRef } from '@angular/core'; export class HistorygraphComponent implements OnInit, OnDestroy { selectedButton: string = ''; selectedInterval: string = ''; - latestUpdate: string = ''; intervalId: any; greeting: string = ''; @@ -22,7 +21,6 @@ export class HistorygraphComponent implements OnInit, OnDestroy { @ViewChild(GraphComponent) graphComponent!: GraphComponent; ngOnInit(): void { - this.startClock(); this.updateGreeting(); this.selectedButton = 'hourly'; this.selectedInterval = 'HOURLY'; @@ -49,23 +47,6 @@ export class HistorygraphComponent implements OnInit, OnDestroy { } } - startClock(): void { - this.updateLatestTime(); - this.intervalId = setInterval(() => this.updateLatestTime(), 1000); - } - - updateLatestTime(): void { - const now = new Date(); - this.latestUpdate = now.toLocaleString('en-GB', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - }); - } - updateGreeting(): void { const hour = new Date().getHours(); if (hour < 12) { diff --git a/agrilink_vocpro/src/index.html b/agrilink_vocpro/src/index.html index 07b7a5c..b8fcee3 100644 --- a/agrilink_vocpro/src/index.html +++ b/agrilink_vocpro/src/index.html @@ -18,6 +18,7 @@ + diff --git a/agrilink_vocpro/src/styles.scss b/agrilink_vocpro/src/styles.scss index 90e18ea..0b134c7 100644 --- a/agrilink_vocpro/src/styles.scss +++ b/agrilink_vocpro/src/styles.scss @@ -1,3 +1,30 @@ +@import '@angular/material/prebuilt-themes/indigo-pink.css'; body{ font-family: "Onest", sans-serif; + +} +.mat-form-field .mat-input-element:focus { + border-color: #16423C !important; + box-shadow: 0 1px 5px rgba(0, 128, 0, 0.3) !important; +} + +.mat-form-field .mat-label.mat-focus-indicator { + color: #16423C !important; +} + +.mat-form-field .mat-input-element:focus { + caret-color: #16423C !important; +} + +.mat-form-field .mat-icon { + color: #16423C !important; +} + + +.mat-datepicker-toggle.mat-accent { + color: #16423C !important; +} + +.mat-calendar .mat-calendar-body-selected { +background-color: #16423C !important; } From 5ffd7fc241fd73d2ffd783a14e8d24b5c05939eb Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 11 Nov 2024 22:31:49 +0700 Subject: [PATCH 34/53] delete(actualgraph): console log --- .../dashboard/page/actualgraph/actualgraph.component.ts | 5 ----- .../src/app/pages/dashboard/page/graph/graph.component.ts | 1 - 2 files changed, 6 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 8799923..41b2575 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -32,14 +32,12 @@ export class ActualgraphComponent implements OnInit { } loadData(sensorType: string): void { - console.log('Loading data for sensor:', sensorType); this.selectedButton = sensorType; this.isLoading = true; this.isNoData = false; this.sensorService.getLatestData().subscribe( (response: ApiResponse) => { - console.log('Data received:', response); if (response.statusCode === 200) { const selectedData = (response.data as { [key: string]: any[] })[sensorType]; @@ -80,10 +78,8 @@ export class ActualgraphComponent implements OnInit { ); } - // Initialize Chart private initializeChart(): void { if (this.chartCanvas?.nativeElement) { - console.log('Initializing chart...'); const ctx = this.chartCanvas.nativeElement.getContext('2d'); if (ctx) { this.chart = new Chart(ctx, { @@ -166,7 +162,6 @@ export class ActualgraphComponent implements OnInit { tooltip: { callbacks: { title: function (tooltipItem: any) { - // Display the label (Nitrogen, Phosphorus, or Kalium) return tooltipItem[0].label; }, label: function (tooltipItem: any) { diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index ad65e0a..02ec289 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -248,7 +248,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang next: (response) => { this.isLoadingNPK2 = false; if (response.statusCode === 200 && response.data.npk2?.length > 0) { - console.log('NPK2 Data:', response); this.createChart(this.npk2ChartElement.nativeElement, response, 'npk2', this.selectedNPK2); this.isNoDataNPK2 = false; } else { From 10dff91778e291753413dc1838449752796a0acc Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 08:06:28 +0700 Subject: [PATCH 35/53] fix(graph): fix copywriting nama hari --- .../src/app/pages/dashboard/page/graph/graph.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 02ec289..14ca4cc 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -477,7 +477,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang convertDateToDay(dateString: string): string { const date = new Date(dateString); - const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat']; + const days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thrus', 'Fri', 'Sat']; return days[date.getDay()]; } From 47b90ec2ca9129e2342516eed312419133f237e7 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 08:44:17 +0700 Subject: [PATCH 36/53] fix(actualgraph): fix copywriting --- .../pages/dashboard/page/actualgraph/actualgraph.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 41b2575..2b684a4 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -99,7 +99,7 @@ export class ActualgraphComponent implements OnInit { } public chartData = { - labels: ['Nitrogen', 'Phosphor', 'Kalium'], + labels: ['Nitrogen', 'Phosphorus', 'Kalium'], datasets: [ { label: 'Actual Data', From 40b0e21e185f5440e65cb13ae70a60727e666ba2 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 12:39:19 +0700 Subject: [PATCH 37/53] fix(actualgraph): fix chart --- .../page/actualgraph/actualgraph.component.ts | 89 +++++++++---------- 1 file changed, 43 insertions(+), 46 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 2b684a4..09fbafe 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core'; +import { Component, OnInit, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core'; import { Chart, registerables } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; @@ -51,7 +51,23 @@ export class ActualgraphComponent implements OnInit { { x: npkData.soilpotassium ?? 0, y: 2 } ]; + // Data untuk standar (contoh: Start dan End Range) + const startDataRange = [ + { x: 100, y: 0 }, + { x: 90, y: 1 }, + { x: 220, y: 2 } + ]; + + const endDataRange = [ + { x: 100, y: 0 }, + { x: 35, y: 1 }, + { x: 200, y: 2 } + ]; + this.chartData.datasets[0].data = actualData; + this.chartData.datasets[1].data = startDataRange; + this.chartData.datasets[2].data = endDataRange; + this.isLoading = false; this.cdr.detectChanges(); @@ -82,14 +98,18 @@ export class ActualgraphComponent implements OnInit { if (this.chartCanvas?.nativeElement) { const ctx = this.chartCanvas.nativeElement.getContext('2d'); if (ctx) { + // If chart already exists, destroy it before creating a new one + if (this.chart) { + this.chart.destroy(); + } this.chart = new Chart(ctx, { - type: 'bar', + type: 'bubble', data: this.chartData, options: this.chartOptions }); } } else { - console.warn('Chart canvas is not available'); + console.warn('Chart canvas is not available'); } } @@ -103,7 +123,7 @@ export class ActualgraphComponent implements OnInit { datasets: [ { label: 'Actual Data', - data: [], + data: [] as { x: number; y: number; }[], backgroundColor: 'rgb(18, 55, 42)', borderColor: 'rgb(18, 55, 42)', borderWidth: 1, @@ -111,23 +131,15 @@ export class ActualgraphComponent implements OnInit { }, { label: 'Start Data Range', - data: [ - { x: 100, y: 0 }, - { x: 90, y: 1 }, - { x: 220, y: 2 } - ], + data: [], backgroundColor: 'rgba(0,0,0,0)', borderWidth: 0, type: 'bar', stack: 'range', }, { - label: 'Standard Data Range', - data: [ - { x: 100, y: 0 }, - { x: 35, y: 1 }, - { x: 200, y: 2 } - ], + label: 'End Data Range', + data: [], backgroundColor: 'rgb(212, 231, 197)', borderWidth: 1, type: 'bar', @@ -136,10 +148,10 @@ export class ActualgraphComponent implements OnInit { ] }; - public chartOptions = { + public chartOptions: Partial = { responsive: true, maintainAspectRatio: false, - indexAxis: 'y', + indexAxis: 'y' as const, scales: { x: { title: { @@ -156,41 +168,26 @@ export class ActualgraphComponent implements OnInit { text: 'Sensor Parameter', }, stacked: true, + ticks: { + display: true, + callback: function (value: number) { + const labels = ['Nitrogen', 'Phosphorus', 'Kalium']; + return labels[value as number]; + } + } }, }, plugins: { tooltip: { callbacks: { - title: function (tooltipItem: any) { - return tooltipItem[0].label; - }, label: function (tooltipItem: any) { - const dataset = tooltipItem.dataset; - const dataIndex = tooltipItem.dataIndex; - const data = dataset.data[dataIndex]; - - let tooltipText = `Actual Value: ${data.x} mg/L`; - - if (dataset.type === 'bar') { - const startRangeDataset = tooltipItem.chart.data.datasets.find((ds: any) => ds.label === 'Start Data Range'); - const standardRangeDataset = tooltipItem.chart.data.datasets.find((ds: any) => ds.label === 'Standard Data Range'); - - const startRangeValue = startRangeDataset?.data.find((point: any) => point.y === data.y)?.x; - const standardRangeValue = standardRangeDataset?.data.find((point: any) => point.y === data.y)?.x; - - if (startRangeValue !== undefined && standardRangeValue !== undefined) { - const minValue = startRangeValue; - const maxValue = startRangeValue + standardRangeValue; - tooltipText = `(Standard Range: ${minValue} - ${maxValue} mg/L)`; - } + if (tooltipItem.datasetIndex === 0) { + return `Value: ${tooltipItem.raw.x} mg/L`; } - - return tooltipText; - }, - }, - }, - }, + return ''; + } + } + } + } }; - - } From e770c97f91541dc0b12ab6b987ce2a0cc8706da1 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 13:49:09 +0700 Subject: [PATCH 38/53] fix(actualgraph): changing from graph into table --- .../layouts/sidebar/sidebar.component.html | 2 +- .../actualgraph/actualgraph.component.html | 31 +++- .../actualgraph/actualgraph.component.scss | 9 +- .../page/actualgraph/actualgraph.component.ts | 135 ++---------------- 4 files changed, 51 insertions(+), 126 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html index 669dde6..9342561 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/layouts/sidebar/sidebar.component.html @@ -13,7 +13,7 @@
  • - Actual Graph + Actual Data

  • diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html index ddca21a..3522f96 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html @@ -12,7 +12,36 @@
    Actual Graph Sensor NPK 1
    Actual Graph Sensor NPK 2
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #ParameterActual DataStandard Data
    1Nitrogen{{ actualDataValues.nitrogen }} mg/L100-200 mg/L
    2Phosphorus{{ actualDataValues.phosphorus }} mg/L90-125 mg/L
    3Kalium{{ actualDataValues.kalium }} mg/L220-240 mg/L

    No available data

    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss index 1231928..53014d0 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss @@ -31,22 +31,27 @@ margin-top: 20px; } +.table th, +.table td { + color: #49473C; +} + .title-graph { color: #49473C; font-size: 20px; font-weight: 400; margin-top: 15px; - margin-bottom: 20px; position: relative; } .graph-content { display: flex; flex-direction: column; - justify-content: center; align-items: center; width: 100%; height: 100%; + padding-top: 30px; + color: #49473C; } .spinner { diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 09fbafe..461e5ca 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -20,6 +20,12 @@ export class ActualgraphComponent implements OnInit { isLoading: boolean = true; isNoData: boolean = false; greeting = ''; + + actualDataValues = { + nitrogen: 0, + phosphorus: 0, + kalium: 0 + }; constructor( private sensorService: SensorService, @@ -44,37 +50,14 @@ export class ActualgraphComponent implements OnInit { if (selectedData && selectedData.length > 0) { const npkData: ParameterSensor = selectedData[0]; - if (sensorType === 'npk1' || sensorType === 'npk2') { - const actualData = [ - { x: npkData.soilnitrogen ?? 0, y: 0 }, - { x: npkData.soilphosphorus ?? 0, y: 1 }, - { x: npkData.soilpotassium ?? 0, y: 2 } - ]; + this.actualDataValues = { + nitrogen: npkData.soilnitrogen ?? 0, + phosphorus: npkData.soilphosphorus ?? 0, + kalium: npkData.soilpotassium ?? 0 + }; - // Data untuk standar (contoh: Start dan End Range) - const startDataRange = [ - { x: 100, y: 0 }, - { x: 90, y: 1 }, - { x: 220, y: 2 } - ]; - - const endDataRange = [ - { x: 100, y: 0 }, - { x: 35, y: 1 }, - { x: 200, y: 2 } - ]; - - this.chartData.datasets[0].data = actualData; - this.chartData.datasets[1].data = startDataRange; - this.chartData.datasets[2].data = endDataRange; - - this.isLoading = false; - this.cdr.detectChanges(); - - setTimeout(() => { - this.initializeChart(); - }); - } + this.isLoading = false; + this.cdr.detectChanges(); } else { this.isNoData = true; this.isLoading = false; @@ -94,100 +77,8 @@ export class ActualgraphComponent implements OnInit { ); } - private initializeChart(): void { - if (this.chartCanvas?.nativeElement) { - const ctx = this.chartCanvas.nativeElement.getContext('2d'); - if (ctx) { - // If chart already exists, destroy it before creating a new one - if (this.chart) { - this.chart.destroy(); - } - this.chart = new Chart(ctx, { - type: 'bubble', - data: this.chartData, - options: this.chartOptions - }); - } - } else { - console.warn('Chart canvas is not available'); - } - } - updateGreeting(): void { const hour = new Date().getHours(); this.greeting = hour < 12 ? 'Good Morning' : hour < 18 ? 'Good Afternoon' : 'Good Evening'; } - - public chartData = { - labels: ['Nitrogen', 'Phosphorus', 'Kalium'], - datasets: [ - { - label: 'Actual Data', - data: [] as { x: number; y: number; }[], - backgroundColor: 'rgb(18, 55, 42)', - borderColor: 'rgb(18, 55, 42)', - borderWidth: 1, - type: 'bubble' - }, - { - label: 'Start Data Range', - data: [], - backgroundColor: 'rgba(0,0,0,0)', - borderWidth: 0, - type: 'bar', - stack: 'range', - }, - { - label: 'End Data Range', - data: [], - backgroundColor: 'rgb(212, 231, 197)', - borderWidth: 1, - type: 'bar', - stack: 'range' - } - ] - }; - - public chartOptions: Partial = { - responsive: true, - maintainAspectRatio: false, - indexAxis: 'y' as const, - scales: { - x: { - title: { - display: true, - text: 'Value (mg/L)', - }, - min: 0, - max: 300, - type: 'linear', - }, - y: { - title: { - display: true, - text: 'Sensor Parameter', - }, - stacked: true, - ticks: { - display: true, - callback: function (value: number) { - const labels = ['Nitrogen', 'Phosphorus', 'Kalium']; - return labels[value as number]; - } - } - }, - }, - plugins: { - tooltip: { - callbacks: { - label: function (tooltipItem: any) { - if (tooltipItem.datasetIndex === 0) { - return `Value: ${tooltipItem.raw.x} mg/L`; - } - return ''; - } - } - } - } - }; } From 9ed54990421caa5c4dd607af980ffbb54b41d353 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 13:57:05 +0700 Subject: [PATCH 39/53] fix(actualgraph): fix responsiveness --- .../page/actualgraph/actualgraph.component.html | 2 +- .../page/actualgraph/actualgraph.component.scss | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html index 3522f96..663c0db 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html @@ -8,7 +8,7 @@
    -
    +
    Actual Graph Sensor NPK 1
    Actual Graph Sensor NPK 2
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss index 53014d0..11cec80 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss @@ -29,6 +29,7 @@ align-items: center; text-align: center; margin-top: 20px; + overflow-x: auto; } .table th, @@ -69,6 +70,10 @@ margin: auto; font-size: 15px; } + + .table{ + font-size: 10px; + } } @media (max-width: 344px) { @@ -82,6 +87,10 @@ font-size: 15px; margin: auto; } + + .table{ + font-size: 10px; + } } button { From c405a9d815bcec608a6437886bece833cf1eb38d Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Tue, 12 Nov 2024 23:27:30 +0700 Subject: [PATCH 40/53] fix(actual graph): change to bar and scatter chart --- .../actualgraph/actualgraph.component.html | 35 +----- .../actualgraph/actualgraph.component.scss | 46 ++++--- .../page/actualgraph/actualgraph.component.ts | 112 ++++++++++++++---- 3 files changed, 119 insertions(+), 74 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html index 663c0db..e76c358 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.html @@ -12,38 +12,9 @@
    Actual Graph Sensor NPK 1
    Actual Graph Sensor NPK 2
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #ParameterActual DataStandard Data
    1Nitrogen{{ actualDataValues.nitrogen }} mg/L100-200 mg/L
    2Phosphorus{{ actualDataValues.phosphorus }} mg/L90-125 mg/L
    3Kalium{{ actualDataValues.kalium }} mg/L220-240 mg/L
    - -

    No available data

    + +
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss index 11cec80..a23cfdc 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss @@ -1,4 +1,4 @@ -.container { +.container { font-family: "Onest", sans-serif; } @@ -14,22 +14,27 @@ margin: 10px 0px 15px 0px; } -.graph { - width: 100%; - height: 400px; - position: relative; - max-width: 100%; - border-radius: 10px; - border: 1px solid #E5E5E5; - padding: 20px 20px 0px 20px; +.graph { + position: relative; + width: 100%; display: flex; flex-direction: column; - justify-content: flex-start; align-items: center; - text-align: center; + margin-bottom: 35px; + border: 1px solid #E5E5E5; + padding: 0px 20px 0px 20px; + background-color: white; + border-radius: 10px; margin-top: 20px; - overflow-x: auto; + + canvas { + position: relative; + width: 100%; + height: auto; + aspect-ratio: 2 / 1; + max-height: 300px; + } } .table th, @@ -51,7 +56,7 @@ align-items: center; width: 100%; height: 100%; - padding-top: 30px; + padding-top: 20px; color: #49473C; } @@ -64,16 +69,20 @@ @media (max-width: 768px) { .graph { height: 300px; + padding: 10px; } .title-graph { - margin: auto; font-size: 15px; } - .table{ + .table { font-size: 10px; } + + canvas { + max-width: 300px; + } } @media (max-width: 344px) { @@ -85,12 +94,15 @@ .title-graph { font-size: 15px; - margin: auto; } - .table{ + .table { font-size: 10px; } + + canvas { + max-width: 250px; + } } button { diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 461e5ca..290557c 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -1,10 +1,9 @@ import { Component, OnInit, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core'; -import { Chart, registerables } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; import { CommonModule } from '@angular/common'; - -Chart.register(...registerables); +import { Chart } from 'chart.js'; +import { max } from 'date-fns'; @Component({ selector: 'app-actualgraph', @@ -14,17 +13,16 @@ Chart.register(...registerables); styleUrls: ['./actualgraph.component.scss'] }) export class ActualgraphComponent implements OnInit { - @ViewChild('chartCanvas', { static: false }) chartCanvas?: ElementRef; - private chart: Chart | undefined; + @ViewChild('barChart') barChart!: ElementRef; selectedButton: string = 'npk1'; - isLoading: boolean = true; - isNoData: boolean = false; greeting = ''; - actualDataValues = { - nitrogen: 0, - phosphorus: 0, - kalium: 0 + chart: any; + actualDataValues = { nitrogen: 0, phosphorus: 0, kalium: 0 }; + standardDataValues = { + nitrogen: { min: 100, max: 200 }, + phosphorus: { min: 90, max: 125 }, + kalium: { min: 220, max: 240 } }; constructor( @@ -37,10 +35,71 @@ export class ActualgraphComponent implements OnInit { this.loadData('npk1'); } + ngAfterViewInit(): void { + this.initChart(); + } + + initChart(): void { + const minStandard = [ + this.standardDataValues.nitrogen.min, + this.standardDataValues.phosphorus.min, + this.standardDataValues.kalium.min + ]; + + const maxStandard = [ + this.standardDataValues.nitrogen.max, + this.standardDataValues.phosphorus.max, + this.standardDataValues.kalium.max + ]; + + this.chart = new Chart(this.barChart.nativeElement, { + type: 'bar', + data: { + labels: ['Nitrogen', 'Phosphorus', 'Kalium'], + datasets: [ + { + label: 'Min Standard', + backgroundColor: 'rgba(0, 0, 0, 0)', + data: minStandard, + borderWidth: 0 + }, + { + label: 'Max Standard', + backgroundColor: 'rgba(212, 231, 197)', + data: maxStandard, + borderWidth: 1 + }, + { + label: 'Actual Data', + type: 'scatter', + backgroundColor: 'rgba(18, 55, 42)', + borderColor: 'rgba(18, 55, 10)', + pointRadius: 5, + pointHoverRadius: 7, + data: [ + { x: 'Nitrogen', y: this.actualDataValues.nitrogen }, + { x: 'Phosphorus', y: this.actualDataValues.phosphorus }, + { x: 'Kalium', y: this.actualDataValues.kalium } + ], + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + x: { stacked: true }, + y: { + stacked: true, + beginAtZero: false, + } + } + } + }); + } + loadData(sensorType: string): void { - this.selectedButton = sensorType; - this.isLoading = true; - this.isNoData = false; + this.selectedButton = sensorType; this.sensorService.getLatestData().subscribe( (response: ApiResponse) => { @@ -48,35 +107,38 @@ export class ActualgraphComponent implements OnInit { const selectedData = (response.data as { [key: string]: any[] })[sensorType]; if (selectedData && selectedData.length > 0) { - const npkData: ParameterSensor = selectedData[0]; + const npkData: ParameterSensor = selectedData[0]; this.actualDataValues = { nitrogen: npkData.soilnitrogen ?? 0, phosphorus: npkData.soilphosphorus ?? 0, kalium: npkData.soilpotassium ?? 0 }; - - this.isLoading = false; - this.cdr.detectChanges(); - } else { - this.isNoData = true; - this.isLoading = false; - this.cdr.detectChanges(); + this.updateChart(); + } else { } } else { console.error('Error loading data: ', response.message); - this.isLoading = false; - this.cdr.detectChanges(); } }, (error) => { console.error('Error loading data:', error); - this.isLoading = false; this.cdr.detectChanges(); } ); } + updateChart(): void { + if (this.chart) { + this.chart.data.datasets[2].data = [ + { x: 'Nitrogen', y: this.actualDataValues.nitrogen }, + { x: 'Phosphorus', y: this.actualDataValues.phosphorus }, + { x: 'Kalium', y: this.actualDataValues.kalium } + ]; + this.chart.update(); + } + } + updateGreeting(): void { const hour = new Date().getHours(); this.greeting = hour < 12 ? 'Good Morning' : hour < 18 ? 'Good Afternoon' : 'Good Evening'; From bac7a0a36cc5caf6a7c9153ee7141722c6d2f340 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 13 Nov 2024 08:18:32 +0700 Subject: [PATCH 41/53] fix(actualgraph): fix responsive for button --- .../page/actualgraph/actualgraph.component.scss | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss index a23cfdc..f432e99 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.scss @@ -83,6 +83,12 @@ canvas { max-width: 300px; } + + .active-button { + background-color: #cad849; + color: white; + } + } @media (max-width: 344px) { @@ -103,6 +109,12 @@ canvas { max-width: 250px; } + + .active-button { + background-color: #cad849; + color: white; + } + } button { From a5318426f4787a766ecee17b05b173153885fc3a Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Wed, 13 Nov 2024 09:39:05 +0700 Subject: [PATCH 42/53] fix(actualgraph): changing type data actual --- .../dashboard/page/actualgraph/actualgraph.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 290557c..2fe0ff3 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -77,9 +77,9 @@ export class ActualgraphComponent implements OnInit { pointRadius: 5, pointHoverRadius: 7, data: [ - { x: 'Nitrogen', y: this.actualDataValues.nitrogen }, - { x: 'Phosphorus', y: this.actualDataValues.phosphorus }, - { x: 'Kalium', y: this.actualDataValues.kalium } + this.actualDataValues.nitrogen, + this.actualDataValues.phosphorus, + this.actualDataValues.kalium ], } ] From 703c5229273b60c68bc7d19f5a4d7aa19a65ccf9 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Thu, 28 Nov 2024 13:18:41 +0700 Subject: [PATCH 43/53] fix(dashboard+graph): fix dropdown in sesnor npk --- .../src/app/pages/dashboard/dashboard.component.html | 2 +- .../pages/dashboard/page/graph/graph.component.html | 12 +++++++++--- .../pages/dashboard/page/graph/graph.component.ts | 8 ++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html index 70fad21..fb261c5 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/dashboard.component.html @@ -5,7 +5,7 @@
    - + diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 70f8098..59c787f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -17,7 +17,7 @@
    -
    Sensor BHT
    +
    Sensor DHT
    @@ -34,7 +34,10 @@
    Sensor NPK 1
    @@ -53,7 +56,10 @@
    Sensor NPK 2
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 14ca4cc..d727f09 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -347,6 +347,14 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang return ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); } else if (selectedOption === 'others') { return !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); + } else if (selectedOption === 'temperature') { + return ['soiltemperature'].includes(parameter); + } else if (selectedOption === 'humidity') { + return ['soilhumidity'].includes(parameter); + } else if (selectedOption === 'conductivity') { + return ['soilconductivity'].includes(parameter); + } else if (selectedOption === 'ph') { + return ['soilph'].includes(parameter); } return true; }) From da65fdf819e5377b40cc7937feb5abab946f087d Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Thu, 28 Nov 2024 15:27:27 +0700 Subject: [PATCH 44/53] fix(auth+register):adding copywrite and changing pict --- .../src/app/pages/auth/auth.component.html | 7 +++-- .../src/app/pages/auth/auth.component.scss | 26 ++++++++++++++++-- .../dashboard/page/graph/graph.component.html | 4 +-- .../dashboard/page/graph/graph.component.ts | 8 +++--- .../pages/register/register.component.html | 4 +++ .../pages/register/register.component.scss | 17 +++++++++++- agrilink_vocpro/src/assets/images/bg-auth.jpg | Bin 0 -> 741759 bytes 7 files changed, 54 insertions(+), 12 deletions(-) create mode 100644 agrilink_vocpro/src/assets/images/bg-auth.jpg diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.html b/agrilink_vocpro/src/app/pages/auth/auth.component.html index 94994ac..deaf7a4 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.html +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.html @@ -7,7 +7,6 @@
    -
    +
    diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.scss b/agrilink_vocpro/src/app/pages/auth/auth.component.scss index a35f4ec..cfa512b 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.scss +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.scss @@ -1,12 +1,17 @@ .login { - min-height: 100vh; + min-height: 100vh; font-family: "Onest", sans-serif; + display: flex; + flex-direction: column; + justify-content: space-between; } .bg-image { - background-image: url('../../../assets/images/auth.png'); + background-image: url('../../../assets/images/bg-auth.jpg'); background-size: cover; - background-position: left; + background-position: right; + height: 100vh; + border-radius: 0px 10px 10px 0px; } .login-heading { @@ -56,3 +61,18 @@ color: white; } +.text-center { + margin-bottom: 20px; +} + +.text-center-copyright { + text-align: center; + font-size: 0.85rem; + color: #636363; + padding: 15px 0; + background-color: #f8f9fa; +} + +.container{ + padding-top: 50px; +} \ No newline at end of file diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html index 59c787f..de84f2b 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.html @@ -31,7 +31,7 @@
    -
    Sensor NPK 1
    +
    Sensor NPK1
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index d727f09..fc19de7 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -16,10 +16,10 @@ const parameterColors: { [key: string]: string } = { vicitemperature: '#8F5A62', vicihumidity: '#16423C', viciluminosity: '#DF9B55', - soiltemperature: '#FF6347', - soilhumidity: '#0389b5', - soilconductivity: '#A52A2A', - soilph: '#228B22', + soiltemperature: '#8c2d1c', + soilhumidity: '#3d7b8f', + soilconductivity: '#f2b8b8', + soilph: '#459645', soilnitrogen: '#fece48', soilphosphorus: '#B80F0A', soilpotassium: '#4c1f74', diff --git a/agrilink_vocpro/src/app/pages/register/register.component.html b/agrilink_vocpro/src/app/pages/register/register.component.html index c89efc2..f2e6c54 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.html +++ b/agrilink_vocpro/src/app/pages/register/register.component.html @@ -54,6 +54,10 @@
    +
    diff --git a/agrilink_vocpro/src/app/pages/register/register.component.scss b/agrilink_vocpro/src/app/pages/register/register.component.scss index 0511563..f906153 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.scss +++ b/agrilink_vocpro/src/app/pages/register/register.component.scss @@ -1,10 +1,13 @@ .login { min-height: 100vh; font-family: "Onest", sans-serif; + display: flex; + flex-direction: column; + justify-content: space-between; } .bg-image { - background-image: url('../../../assets/images/auth.png'); + background-image: url('../../../assets/images/bg-auth.jpg'); background-size: cover; background-position: left; } @@ -46,3 +49,15 @@ } } } + +.text-center-copyright { + text-align: center; + font-size: 0.85rem; + color: #636363; + padding: 15px 0; + background-color: #f8f9fa; +} + +.container{ + padding-top: 50px; +} \ No newline at end of file diff --git a/agrilink_vocpro/src/assets/images/bg-auth.jpg b/agrilink_vocpro/src/assets/images/bg-auth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f897505e48127f5fe8aa4f8fe6930faa773c7eb GIT binary patch literal 741759 zcmbTdX;>54);3&@IANRsM`DYLf|y1@6oIr&D{Jdw^+$uf+#$%?8q$FvXbH4<-Wq5DXw3uvpm`giMgO!R$bR0Y|Fm7^?fUmM^C4*d z+W%f3;RP-H_x0eJ{~X8v{r`V`s{9Q>D&Wk*U-#|Pe?0GB?RoPTKrjF2y#BAhzMS{p zC%&BjKTllv?&X62X)pdQW%0kS`KObgZ%W?$U6$tN#M5VOj#-{O3e5xKpTGX%wQE;? z4$0?g!1c2hzi&N%!C|Y)$iJlfdDlf(|7%B1pFa7s{Xd^S+y6bp9Y1FRf?D-{K5GI= zjyib9qS7b7%qFCJJ?_8P{r|R>U3T+#1>Y#Z>sQxn*8{+u?g8!7K>^o(wke>!?m8G0 zXoIPN)_MG^o$|AN>0j;l|6FtKtU0*m3ute3^}Ki)v?oA&&!zu$-s69@eXa!l?DyyK zbM!0RuG-mx&voFn8TteAg8ZRt&=u$+M25CPr=k7-hwBagx!xS|1y_@y>)<{Q$P)?x z_Z$Idem=nsv@M~lkSnwo+5_7ApkKjj-_Lml_ku&*{_pwQ^WSsfTnI8{DV53(|2=nt z1wlDR5VWlLzvp%xgrL>SA?S1QwTss;{`0t>x;ft+XxCIa1gTztpta559!G!o{rmp; ze%^}TA!t#bQaQa7s8lorA%82C^4Cfwk_x!8>q+6V?Ov>Fn|911q&B| zW8tEOKaWL=7yWZA{`aBs&#~m^vGhO3KX=cczYzQ_UA$=Vf6o73Hc1I+&~LgFIw}9{*lFN&suV_t#204^J;||A4?7LBZsZ@Y{FpM%=p} z`6T*jOl;h<=kc$TQ&Q8?-@MJp&C4$+EP7vDQc+n|T~qtHuD+$Ut-XWO+0{M38yp%Q z;eQ_;6HQIe%!=nEQW@CM{}Knh|4X9(CC_Rg&-{f87c5lyDbKw5K|h6Ey>QVl`is{b zIiqsXZ|$~yHv|P z*$u5&Fb^!)g4GZnLZcO%gz2@KyID%;_6MH$t#+c3jIqf^G8s z%b2dbFLJ4UXLkK<*-#`=YeKP%dC^Ew(%Zp*(nn7XSTDas`#~8CS4VHfeU{_rr%mk+ z-H;G^`qsQFzv|4WD$w^U1)?fr%RGBdnqLx=eU>fBB}Oy%N*R&WF?JVTE#Dhk583Tvz3rOv%x z9UIH>fnh#A@*XQkB_zK{e0R;}V86u$|4%B3J2;AhG9?7gTT|YYX0$|#-Dmu+-$XAF z!I<0|{lzCFv^SJ($V-LZ&IdfxeKyiiWa4bK5;DD%9!Cs?;JbJp!Ren%g zhoyFiyAt|zm8wszNIE3Z^%FV{nmitNIh;F<&&B5{A#z}v73j^KInadN9L%WfSVJ)@ zDW%ojvXQzG_2@z+l#dJ<6whtA;iGx{d)Q4zaP33~-kq~ue)Wz4y(AiS=pj6nG<;%# zZY-6MGe(j7L`NuJJ}xkpBOXX#c5OwHE=xG0pxK8ABRk8Ob}ewT7RNyM9zQPuIro^bA?%{~u{im{nT(L#NxB)Mr=2zv z=;QH(E}Cpl;6zY~%|)kd#w+$UEw(Iv?oG!*T}@rN+zV|dxrq8F*LMcr#Y}uVVY6+j zv}W!^1R6rvJ+z!ODIL^Pdw1>af@SB6&pZ~J#bmIP*+_!FOSFb8URpVzgreYlJkKH< z&Qe0LXF04-N=Wl7r{2}`#0%Pu7|&BG{sY9-U`cu}jU(1!swv~w9N}8#CIYhTRWH?8IY|7?MMQDn!yA3B zjeJX&h5@455r5OdRInUA+uky64eb-xwz{lr_xPF~jU97mW>PmRek=c4aQ=tS)$O^l zOHFz%`~v2}PDqVm9Px9h9%z{CweWZBC%i*? znNqgs;{we~v{9l>uOp8YOIr{;qJ%0-vdUA_oXAFh;}h1!$T{+Z)V6qyTKr0jwDDXE zH{Ri0N+?uAF{6aiatIUT#eRa9R8o@Ln%l+wVU}{bcYQo*iwPl8LK`f*SVy)!GxBK&PT@R1*LUAauA^#<$sLWM55eqjq$3N}xgvqZV>}p23uA4{ zJtdUkXZNT4=*K2c^jk~5r&&Xw_6yy6?Ir|M#nx@g2``#Fn?l0IeMP$3WkUEVzw#~1R@lms@CS&bIO6XV-ttEE(o_$&N z7Di|yiDBvOlY9#+byM?Zo1%#;&Da*=lXIHRp1-~BB;=wqXZ)D^|d&K8LUU%7;!DVuR-|zSE!`CajJErHb*a>;Tf5PESMqcS}`%?)$b4!<5E9l}H9fc{9 z4EL9rX%)r~nj=XHQ|#SsO6X-$mb^j6&*9#wI1z&V%6?#CIe?ESUl(1)T~*+S$Be#% z8=7AE4-*C_Yw40ba3yxW`OfEZ)9*xK^fzEUaNYUzi|?32{6T^sU4$LPMrNBh4<=qx zLRGRj#mt8%M4j>gk#-F&vgFaD>Z0eHS4rX0$d>f6wWjq3?`F(QZMrABZP8^$B7V&( z7YB-q$hzv+Ml|mvSf(TI9-z<3`h=l~d*!<&(bcwaRg~pcVB2HQTA@X#f>UQSm*>5< zPW)E)yYsG1_srVS4^5f6Zh7g7BTC5If7Ir8+G9K&N%!9#4Sa#=4q&95hG$j!7?^OK|6=Ts(uS}yEGa#*AbgC!F4en-~Cq-^OJ_WJ?soXi1j#d}~S+u0LX z`5q*}wpjuCU+Vq=qo`Jxqlq}M@J^(eOJNQd6d#CEH`P#yNt(aO3zxtX*v08n0-*}3 z`o7h`Q>z1rg3(0fD1~B*MLS|yUS`XH=Q{vjWd9Yb4_Exszr{@a10$ujvs$xRQ+i=9 z9j^3WdVKe2nChOS15SJz;V`qW`XQBf*pb+4j*-2|xKp+8_uYR?qhpCC9mrnY){16v zsHU|;T7de{OtP~u>CPZ)*_ft^NRLHN8@n;(;M9I!3Gu&M9*ttSUNLJGgPoMNjb?Ia z^&_2JV7p*EeKX4)2lgg3>!laia0nLw??*Nf@@aEtj{-OA#(ZHS(Tn=y1z~o_qS*;e zkFHDEXE7@z`}pT*j>hUVU^&?~6XV1K;B5?#5z;uP}A(6c7O zW9RdMMiG)uh{b&)6K5LGP%C0Hd>6$AFR0{VCd$>kV$oyaE9pq|Fx;v$y0t9fJRR|n zMTQGj!Ct*yDjKm#AlATD+?8H< z)Ap<()CLKq&M6@a!pMf$<(-!<$ZD2r2;S6qeA<{r1IjWuQV_scVju;xGP_GLDJ7{D z+z8=!`V_b74NU{j$3&tCgn5?|aOUz{I=H)$J$!*z}l@QS-D967sT2oJI^PZ?m>qGCQ; zQZ3K2K*7e6%h0ZZgIlNHkrb1G#KN(SSnjQ2HtpZvwAy?SztLZ-=x+lznS9* z`#meKHzsT_l650SDyo<-E0j=gSh7S3g>7+3Bd0OKQV6G2mC(_*8Bg(^1<3-7mJ%p$ zQCS&F5o%Xoe|HeEYt-)fVIp(+sOo)7#+}1{&uORiI)>@)-Gq_Ko>;z_uT#eFk#z)g zh|MTL8YX1?Ov}q8aYauwv`4-isoa@k*z(LdvHNZ=F4=kSz9 z^w~~@n&jpiDJ*;<=@>+dy*kb~D539MV|q@+^rF44TpZ=XtDYl?v-L!Zy>KKEqo9)2 zMp(iovz70$B9qc~L%eJpjOBj86e+VAU8&e61QU7RBO+75m65Q|l~6JX=dplz>3SR& ztJvhLqPVR$l7N=j+tF$mVSm6?xqUoe*`SYJsAARmPWbb_zJstJ@#qi+Z`gD-I9<%A z&C;cdy+AnNyaQ>sRzgdHs>_bSGmM7AIK=~(Vl?JdCCvWiH%)Vu3RBzDbW}TOH;ayz znJ~P;PFaQ>ApAhv(_!FITOEscJSn^Wd?X%fY6-xr28UqsJVV0Do)Ty3@jBUD_RYwo z$nWCQ3wB8dQL|*msw47yV=$MEFR*s%|7SpY>rO8)Nw#?%x$=4$fuUvtVP>9hUpLR9 z&ex_T{Q!tfNA1U|q08iLwC%R6FnOu%F5~&n4Gd(uFZmmWHzrK1tH0bzIMjSZu7sq4 zG(&u+P5P+ibel^+n@S;O=lu*{gEq53-IqHbWUZ<^Ep6ZPYeP#hW6MHr`4;_SWxRtF z-G1UK3G0gz`r9QgG)M_iUr&=9(bbLD`#mP62#wsLFAn?)V&`EV>p`~b6E?a%=)hx3 z9D;{mb5uQ!+0sgjjNch(?^b9_dBKrzJ`ql}kdLN3acFKi%-N-#G>AID4aO6ha2sck zVr^%GwNHO8zkI`D46j(tt@xXS6`tWj-{9tbrWU88(Jlv$c!2+#J9E$Ju_o@=nt38Cxh?uhOgKyEb?a&~ zeP~K|9XJ@Vm*J4{0#gF#>mgp$)3fjO&{| z(Y!wlp@WF?x%jG{GZR(@{q%L@#`ErE!Pwj+=^D;_E@I$RTIJ98mn&o+7XDn&GiQ#J zt(lnvDot}B3eF61G_pzYgou2`BY&s&QT0vr_yZ#sE>FFV)KM%(@>u=vmC#Cx>LUJ4 zCFJ%!S!9-sW;kD;L{0PuErjzZDtroFDOTn=O_mEf@B3r+}%|w~AL>k_^jFP@E-mg9+@l!TbxQBC`*8 zSwjL#>IR(lE2jE8VNf>?ZRcH}NC7;Iwc|QuZ(3?oO0$n$@kyk8PvIt7Zuee2*K(*) zd-C$M?u&@Zc+JFxv9Ay91hIe2`0H8${yX}d-4@!x2v%7~*M9#7M(~1KN zP9+%O$Kc@@mz;9B;Y@77SoC+e$3#jjp2oKmy2`bb(5=(dZgiz&krGlp#G70&7UB`% z_pFaN`_&wnX1BZV5!#_LHk&DMCfKZT_PkCV@xqgRaI&|$MYlq?xMT81lROZ^2Pm1K z8+OTn3}Wlo*+J+Uh5&z#X4{JQ$Dt1+ODXP4W`)5`=0)#YUQP>1QSGd+G#RUx!ytEK zBdK5gU%?I7+1R#NF>eU*G_-MeG@g&0ZgQAnzgzYSQbEm9vKU|Qm~XUm zTkyjQo}tZ@bia#NJyw2M0*mH{83)gp+91}UZq>D2rDZ2LsgzXj{kLh?qi?gR&9ila z(gwO*t`@?NFmZL2fAHNuXE>F)k>9rduhk(^c z23|I-7f4kTMMc94<99UH$|fbV)1)DRZqAV{cvOm>e{gIvgR z^f~uiyuo-2(@50X2GfVVvkDoI*h%~4c#X3bD-4GRNfj?vMxLYL-;1_P(#0eOEO)b1 zd6>`eDsOyC`v$WeMscNXDLwA3CxP=CfwQu&tFGZz;YIrkkT2yPlOQUJJxkyR`n{+7 zOng6_B-r@t5W>?&zcv5BB^L_6z`$vz#Vl=6*!hL+X!@`no~dUNy@+62ADvP{{+6zO zzUfEM2Wp`%_4(4US9L#d1F!F(F)3qM(d>xbq}GW7&_SRTVm#tImX(C-CZNmP2Z+nb@g5Vy z1Cug7LlU8cye@F2i$zKZU8X8OfwqEl+< zxwt)TwHWGcz{$EO%x?smjY_w>+&*=CT)BmeDIIpav9<|VJ7)m7Q<+C4j>5HrDm9au z=OrrrefNWSR>;xe17h)N>0k34wVtHw4`NyG*X!GVdlVJCMOStUNr3x%*jq@e9LMPe zw1=+E+iE8b9<4=o@~4@-m|JwAC0n9R|7aBoOO8>oj^nb2*eQgEnHeQzv}?aUM(ucN zOy`5Xmkn0M-v*$rc}9N!b-c|tvVMae{2TV2kz$p_AXvFZ9X1am*hKad4pwN;%OY!0 zS0jCxgO$1xyW449`K0wTjVqh_>es{V)n1#=96fClcHpH}G1oa@s_UGDeIVNlBfUX; z3j8XrGg)kpLD=$@Xlu&sl%cNcQ8MteB?;v`C z;A8Cf>o0dhb!jucW@+){D_f)bMouKu<-WgbYSEAp^wGw!%)8*vE9AbT@lL&Ew(@nF zL9!B}_FTJ_?Oj-UBPmV4qwbl#_H^1btG%5(k_+grmaCNaUKbVu|!= zbEn(O?TYyu-`R-anFL=c$qtu|%j$o^7ht6;v&d#g*P35ASe+oZ)viKU2!m?ycS33_ zm>Q`3lxWe5$G~WxOa(Krk05lFyDA_N_9H&Bgk8bBXHPwq?4}(vQvH*c9Nc4vOrG5N zKEBt{l1L*89hhD9@*4b#d{#H6@_=7oLmD}RT0Bxa0s{!puqj?4kIW_EyiOv^Z%^Z- z*We{d2b+~pPC=a>=}s+jfSH5pNc>L}PaEnob_1d@`z)b8t{J%n=XdwiE~18nNeT}F zNJ4wY5+sJH_6zJc*DOpr**={bin%%YvJgAE&tC1;&AEub0?+FyKExv+LvTx%;#Vdi zi_*^{Nwak(iCPz;>wy(2q?fhA;*n)2rBp8rWz50TP328Oqx-nhr9iDPl;2x@P3~WO z|KL#!obo_leDKbiX$q_7VlU=L6ROEG=8fD1@l^yDTe?NGf1v!4Naahd zI59n84{^Glk2)T8Vm+i9NDfyd3pS>Hxj~%mu+d??x?a88!c{uC`q(-C=MdTxok!K> zAq2LNa=D{Gjx7lGIL0b{fQB4(3*2t^G>{u5`}m~CTG$p#oN4(n(t$&=3`2}8@CK}> zvYlQp3rEjsw+AG6>Wkxr=P6r6v@?9Cb^|$1Har5LXN_lgf94#1YO`p^5O;QT^BEYx zC`PZo_^c@v-W=>}T~ynx`?OqAJz#AFI68QeGfCQ3+3)+8!FPOnFMu}IJBs6g4I>+N zb}DovZa%}k-#o?BfFQDl$yVJT*1|HdhY!^zUN9n z*2ccW&ilF#!sAZ^jk;|L{9f}yz3KAb2V3HDbUPDq3JROH?+rQz7_of!blB5T*19?* z@)h!O7uvjTo~hcR>Kd~%mcB!@8AgUGa^ItFT?|I?PHvN6GxcZz_8k1xdseM!-pL19 z_Qj*;zAv~G$+XvfF&`ke^aOgy-Ovs4I!F06@!~8u=Rh^r30r{eY?=UTwPf-h5dZHT zFQTo^m%KC2u@JOzjdPiT(jx;tIJp&XMJyFtt0;&a*~J4GImtSh38l z4a#m1MEmUme);P;&Znlo5nv0S%9ab(Dxnv4IOB3P5mBKAqf283T3@lEdk>U z`Y2HgxHWV+N3Je$AnQ@I24J<|a6oC0TYUiKgPGpqPy79)|$9>5>)(gELbmhUj z+%JWaP@(%gu(*ak=V5`4L<#X!6q^m@#Bnn>=ItwrwF5NSpqt(dORAph^GPoF19b2f zq0BR_>a}oIjk`PhcHk$)>lcY)47rj$wE~3qVv8-Wpbx}XCub6NWs-)uo2lQh`Eb>G zvj&k0&*;%CQ#Q`9x^RwRgHoenEpa3GuUJAi&d?J7GJ^(S66!DI3Qsw! zVxN zG@)P|w?;vDYhFN?NF|Bs-+?%7W(_vXPmdRNMy5=Gjt*wB^0A5!x8#qct}7$Pitgk4 zvw#^iid0dYD%Y1}`^r4L{PnUZ+(B%2IxoGZVbdc_HM&oPy|)L%W+@JjCUUEZ8x!}+ z2IIxpW$p~@8d0L30p|)Ob;-CIEUUB$ZKx}uV@l; zc|hSdh!85e&xN=rZ1%Sb#VddjPP60Vh4~6sc|+pf!=X6i?BGEw`ssF8^b4YdWTv() zrHiu0G@Y}uo+kMs`mTB+-h2Y7Gd7RTDa0SqLefi0O<7!T-u`S0bog?z;tU38ftZ?9hYN(l|^?m>W= zJH|=BH}K`?4teJb%|7B6n(`}JIWTUYOEO*`x{Th$d}p>f&pKh!ZbL?}=a$O4H~2QY z$wP13RGrwDPQ6TL&l1HQEaUVd5jN7J<^wJoqnOIh-hw$HoWXmwY9Vt! z6K_cc#ikGE_H)=H38TV z<+~MRQCWJW5(;<0e&EcKnp_K82d4qJwI+?|PPZYwD+RQbNezMpi_3?Qzw!Nv^n8vW zE2EYq3_lhv-?jnYTF_`QXRqFltU{|`;Sr)r@WC#H6;d#%)sbC0=_<^oYs(fAXAwR4 zXwt@a%?iDN2HcWh3!9>rnFqTR4AQ3KrHu2hv%hGbzBai3ysZQSTz980x^%f*2d!Ck zK~g@}hu3e^MHq+%9}ZZGJ}R!XpFJK%4IUVqD%65`MOXbqC~d01a&TjyV`wW2V|pF=bf# z24bU!KpdqA~|DD?88wg_1#+-~VI0ORk@()RMrqY+%g^i?0$C==P2?a$*^;5RF_ zi<({ur)xLb)x^CSy-qedP~;~)TfN7QZ+wp1$@$vb-CMVaGO~ZK8C~V!(BtoUon8cW zJlI09`w5uPi{jwzaszlww{tRIcZ=)C4woG*llZXE?T?+Re(C;c6he_bxu;nh;P9% z;pAdT1;`aAPZSZyNIi;shWFt7{Cd$hP0J)&!NdNLh`W;lg=`K`JM5G(klgaZe>Gzd zlkKKVZ_7R8h9L)Hvb{@!y3j_ff=m@V1bRL{V-}IL#KhE9?C41AmD0hEIsB2kdgSZN zqE-rscQpO$T(Cy>`rEF6jy?~@vr&iY5qpk!IHo3A?D&Qy$hvkx^QL(C&g?@#Ua+RQ z2q79QF(|xPJnHWlobknrUJQ0l%rxz0solka0nO)r+oQ?csh08-Vfy{8ZN6Ev`Ytzq z*@O$0v5>_h*csw%{-rQucqV@M3a)-Js=B=&~IjxZNQB`$qY@Fw*5c{ClJ zuOK&r=h=WPSi@nx8};~^abJX?7E=3^Bu$j)iu~<_H;UY{z6a4=+b%}Woh3|iKeD4- zHc2@BTmgP|V_BR6b|g$3+6%K6OifH{#cY`VC~m;cL_Im%sM6JFwGcloxIoq7tfZwN zX=A&0PNziTz7ZG?zLdQ%O<}Kmw5F=LeaY5vz?EATKPmq3jZp1C>knbXnebi7s}+Qm*%) zalbi$5_cW}rdsOPa(UVZ*p%#|nD1Yc_p4bXS&XKrR2zQ*K(%>d9K?#4AGVaw!^xt0t-@`Uf5b_wy1t+iu@j}l9WIdsLU1o2zsCCUaO zJ^-vq#d~2sw`|&QNokK1KOU19=rou~)i`qTrr6N|(L!Qb{ZHY-2*ICPZKY}hyA8^g zFMQ_#BUkXw|gz0s3+ap6_Z96zVtn))$vBo4X1&f#6ai z1;wRH8wjrt>I@Dn5N;B?0RKg0xv_4)>kf_!p6C>Y`czPE^r zd`eeiE5lSO#2fcM#wbFMrt~0pt-SF3l(RkL{pPrqGS4R@V=qQ$MZeY-+L}UFdk?(< z*0N4Xh>AKVXpTNR7plibA7ypA-zC%0XYKXjO={!X{#8ErFB~v~A7i^o4tWE2i^7{b zZ($3iEny4~WdG|6l=~UM?#Nu%n`wsC_`7u=&a>X)7|#~0YLS{zzA9$O%~H0HWy8D8 z^u!fPXmpcF{9TeR-k7$NSXgE~0vt0=P2eMZF%&~L__e3O;Q--pC*Q)t)G62xeS9{( ze&XZZ^B2S2ss)LUp&d>o&-T~(_-yepH$0bn%eT-b@=cd> zUKDfd6De1_Yw%54!o;k9qv48omHe>R8JOgQ)lWb9EOUYz9EzC|-%5C0>Fzfa15uUl zfyY@F>bycVkbO@WmHdFNGue#AiALR5iFMf~E*jm{Rf11EB++iaL=(v>hsNmh$_;~~ z`y(El`4WF+>gc*k)PXac{xE=^$93|G)8~j`kasSY9C@X%Y@Wf0~cg%f- z8!qU{wDHo( zodrouN3JWPo@4Yf?5Ge_XZ-D0d3En)W?t!`q2P!U(I-JqdnsS@W? zHvZ#HTT5-#W}8kMI&C^qHKHqPys$JkB6U@z>idUII|4JtI2MQgD&+N~+5^kSm=0j{ zoh0^V)4l#Y^x;`r^2F%4^STPGmRdrA&*(AB{|=> z=i!Uy?&bJoP>vJ{J&=7ZKIM&0hB;3K#ou8@JGIARPRn%wx9a4fo8u2e+7HTAB^$Z; zRi&iY!7y5(QCL`j22u|qg{X<&(-;?CAuPmN2?ndxx!UNvSu?t(eH#vXQa?`3-cr&wAF>g8gZasooQQ;N(G zgIw7vS_OPL=^&W2NL16a@1n#@=sg8sw|7aVKA|cJ559Pygh;C9z+K%ouRxay*$7e| z%X)rDL6gju(3%+YE4ZlhU}iaM8NA3)8jqZ!O<{AetML6rbm3_h82oFvqA_eAR(8v) zqtH-9e+c_xx*KX;+?Wr_cL%d=BTzC-vQneO85q5$0mWou;?Kni&mJpfHLOilh0gEC21eTew{A?NX6Dt=MU_`p8CI1%1 zA`?*lX$gTl{OyD5>06qZ9{WE}Dr|T*S`+juQ$N|ICgg+N`*A-%Knd#3Onzbsk7Fgf zxDTULDiW{OZ(t3lz1nP#mmMfi6fzZ?0K_AY?*}Giiu)U|B#1$q;d%i7zq$lo&ot9Y zUS27v!-gO0BZ2fgiGL~knZ;xD!Dcd`48U`J;v#?i36LS{frHCW0wq7ucnn0@$E1cc ztO$I6FRP0P6!$TUhq*V4m(3IvB#0dH&sjdtV7n{E`9iQDM1t*e?TY$xfDHEwiE)-N8}`z{o=*ttOF82JP+0 zV{^9f(AY?)t%9G{>M=c@E96$NH%royO_j!WBk4wnv7?n9oXWaGU4%AqF&O^rnl|Pt% z7r^gxXzjh3s?Ey)K!PA6k5Em_ag**c#+srO)aYUX3CqFcL*6YUKp0R`= zeJek`FS$e~RLuIIyY|6Dj>r&Peoz!s8_DWtYU*()titMnxF_ddE1`FqF)l8y8|-bx zPfE|(qz}BXb7&_X{!Y~hCYaNY<^ZCDkWOCfc)ricUNhQYK0Nbm{B?V&{E;eJhm}o! zBMf%!#PqnYN*@U;EyR~$Bs<^=Kxmi(t)VFN3QC&um5^YIl?Cl|@e@bSlvqpO)M?Vp zG1XJfCYQQ*0q!qbpFpSV6$W5csjDPL1L-yri+t6?prGg@>HMYa&#PY$1pCrA6d9Dz z9}=?c{X^oh-SLSZ0iz$0!5!sJx6Y*7k!z0WvNH!x?xHJO(2DZjK33`(WMX#Vfvo{q zC3D~DE7#eD-16$jPPLS+PH~xL>?K!l8sL0iL85Sh_(Ds0yU5l#YI$)o((&9&-XJAO z9gt#te-7Xs_00YH0au?3S7^Mlmeb#LTaIx5iCDAa*R32oZ+Q|KL*C*08T5H94=wTl zM%4wbaOBaYqSh3oorwg*vmQ@&*NQ>BD3YI$)Z0j`W-W0rKNj@ESneQIp8-XZn|=i9 zM&tnV1n|}c&zziyW48|b>;pF1X7$5l^SJ=CX-;zZuF3&+zRk{5p4awxhjvih>rnWs zxz9B`nB6vxB@(kJ|0{3g&?`{*UNEhe^Kjshr?0V_=oTqYrJA3 zUzU>Q<+x#)E*B5sFR~@SfK&mCc8kl?5NsL&zU(%4O0WkO9V(AxWzxF1;)@cDd{^)$ zRBiGjUe)m@z1UzypDiNbXFA5b#TS_A?-LNWBjPc!*Pq3h`09~%@9$Pa_P5o=voWeO zgHi2xIzVu`g|$x_y+0QvZMy2sidJ==+Jur@=I_t=6rihXFFM!JYT@IvIl2*)m#STL zL zt*Kx|K~(IRYhw*(?z7MfKKNzB>@yROt#nq= zv|b=?7C%*A+-Uo|{CMPe1JmyvC~m$}l#Rrl%!^WWZ9v-K>6TKill(?v7!voEaA(pV zd+dewg6dfx9V$M^$)MR$Iy<9>#w_+5Aw2hvKeq+nMo2xD!?*i1wfUi8hlEgVD+wX1 z$j0@ZCVp*evp?`UOqXx|<`a^hW?vYc&Gs>&doz`xt`xSTFctZSu1;df_LUJ&Jah8e=Old$R^Miyj_{jq?Q}0OETR4(c{QLc zjc3L&n~7wuXirhp2FAUy&KcEZGBD3rqPV`yc7Xlxs)67tzJNNiAq5#GyF7L8*pmVZ zG2a+GpS+`lx~{@)fR0IN#-^d0I35~bd*GoH;^Vm55XCnk_hCV!8QRyuLC@Fzbh`o@ zRY~^p`-4oC4dFw^o*jI{Kh+PQIyCe=p;>72xOTF1Oo}dVedAK=Ptuk}&IojrkU9_C z%~5mBe%|XimgmJOC3NDKpoZf~i#U4})&mLbol^~n6Md@wID_|0TmA>uy*NX5>O<&& zfG|-`{6YGlThnyAiQ>LS4Koh+(`#%ND*}W=)Sb;KQ4MFqQ9SrD#?t~pkXU_V3`=ox zFp3oqhtt<9?1XdG_9#wxhaVk;L1a&K(A#FKDbB+58rEU}Z>xdue`r|u0>G|jeIZhE$JJhz8on(FaQ+BWSDogS4(r16Zp~xo->%8~y6XxJ? zeBfrg(XZ8Cfe-Y! z;ATx;WicWj?fTostoY3*Kz&Vl(Pukyul|x#TolzYHrP}v>wFzupT(6VjHxT3sirsV z0qdP3JbizU%|GisElC@DN7|mQyh>(fYom_x#PYCb)aHa z7cC|iM1E>OUA6>}+23t{a_e`9OAQVxtVM9u0jg$R!k4L(l4!(@dKhhC30;_7i~;wj zGLH#qvQzLlsN9GR+6QX(JC73UaJBUA!9kk9IlJzygmt0KdR^=|g zcnbVfV{fVa3U|65_wA_TjwM^3di^G+iGfSKMMpvCP>?^TUcOhPS1a~?F3;Kz1U&YR zd244&fg>F!Kf$vEHQ!IqSsQhw$@Q4BXZUtI&&6*uZN!eg`@|PgvK|+g`M&*>{z>fU zIlfqKAJ6kft|HMO9=OLXoD*1hdGPdX|Db)Mu1}x~u&byOQv6K)XTl6wZUlc?z`8{H zt0k>SWF>&t%-*x;ZNq=fv_RfHpiQ@AB&zIw5u<s1SefGr2fmzfAvs}X3Y~mpXRr+lu)vTNONO9P{R^;$mg^VzZ3}mTPz!;Om*gIxe zuNzcs>nrSsf>yy`;RE4nKf+vD$TLb=GJo8|YC>z!rYjCzDw1!Z)}BTf{XyaV&W@-9 zDI`J`2;y5bPDbD~`WeZjqiOxUl_>38DSd|JExso4tk&G(-|8Ht#SRYKD>MK;z;-Z*5; z?kV%e8o#jna?j$iuj$%P_wX&=7g3s_8Brpxb`~!%?yIS7lAns7IlAcYea>XK3@E~r zbHcM+vUKDvF7)ZjOXn%lBw9}8Lc@j4V=h6m{Zf4^TXduXI|I+2<}kCKoaAr)YAvXK z8ie(jqK4#F&y7VEt7H_k+gt> zgh|PBM0L*s;=*eu}MV|3`G?EvrP^(+|mpJarcp z3hMs3B8A~Cw5)ty!}xtGzdSSwT+phsNPFggHthdf+kIn4FOmcX2v1Iz2I6EoD@(|#AK?d>k7gD*$;d=Diu~vl#q+-S55; zbCsWYrDL_uYiAgrHV)NPbdQYTjXk$V5p{4fH)5-XVvWk69V@DQgQREx(*x?rBo+k+ zXP0AT!ZuL-XW8$oHdcN^59YW?{TyMA19BV);Y0}nlWZkF@7dj#uC1_Cm~W2{Lf$)} zV_5mLX&6pru+bUE^??#F#Ks4n`uYpK zj&-lKUh%81RM!ZB?1N%p==ZSnhmd#ud|NKpk+&>snXB#n;PS`^qm# zXz~lxFYsdi6Fx7!in!7fXfXQ_^U@Qdd|HjNT%?6A50@_pCLkIoI|5m2;m(}^Ig*^o z21s`N#J=HaSSJ zyds5$zqm$p{0XOG<79-1mJ<4N90vkmP@ht)?q*T^{Y;%sC)%1B4~XRMnrXro9_t>A zQ7j#Cru;72NgDu0ZHY^@&(B(Zg~B8ZAfiP`y4jAUDplAAF1l@i`h04%rn?$cdys}q zZEJ-j0^qtG;2t-?B*g`pxw#S!q>5Ep?*_$Ph*wC)0)Zg7MWZI~ChO2c-3Jj$=8ZG;p1+~V0n_ zC}zj4>!~C83_7o^Ac`@qS+2~A-6LgfCM!)+Fk0yYskS$N&JuR=o zyr=3=dx4m~)vI^Z0^w2J4z~pKf_Z4*I=iVM^q_DUurS_j$sfw%&=BXk5yFDS_YK)G z&MWT-$E#g_p-+@-iK(7M_T|$WvqPT8crkW1jRm-uEJV#fJYj8gDryO9G&9KuP=dDs zZUu2EUOuN57A|ClKjvm%sEOTT zE~(FHUHod{?`1}xxGL1G!F)vHW4UIV;ak=i)@M%vdXv5cO!ZSx$b5=@%Us~HK|=C) z`weLN+`a8_wy~_=0^aJC>Za7b4&K&nx(^h1+IKug;&F;Q&N$t`0~U0`;mXQ>0=|*^ z5mbmUdk8$cnGlb=)b+tpo}dagHn+>lM=gvqU?bVe6o@j{PYjpJi^@J z14UU*aBX8{$HgR4INN*t!nz4p$NMaPFJ{Q&6J6*-tCiFDj`K8VrH4T5(YmX&XOuMI z8-W#G#ZOFwGbsu?Nlex_afWS^8(G78_54+a%kk`t4f}y{ntf6%wE|slBP!MsDp;b~ z0X-WBzzN*V!l5lwq;b{)Y8CcfdL_~kw|*o+w;42xUHr4 zu%-7(2;O5~~;)+t;?gwq{A;4nSG@Rx!C z_fD?IG3INt@!Q|!Po8^JhMdHf&NmigZ#&)$*`S5SYnX3KwDr`}2N3@8@|vuh;8oLEZ7`pL4F9qNk}^Mq{FqI~O}C4$0xjNKZ;$ zpj-|4!Vk?8REx=tr&-4eXbN55f1SHvHS3QxQ2zbKRsYr$t@&D^^P?H9(XD8WGZQs` z*z^T6gq$cktBM$+Y)Eng z@l8dTV3T=7#_g(iLuhq46xi*Wt=M5H_B@;*<1(@t?S7E+41YxzH^;-{(*Uo_atrHX zO#8&-_)UN?x5#K>y?QZ682!>M*!C~@5f{rB^pPpJf2UreqPEfa=(KpG?ijy<@m}2{ev?leGEHvW?mctri6bf9`s*LZ$n@x|*j!zZYic zP0ko;J2khzt?kL&DNDdH(<1XI0RD1q=wD)a&yy;XY}CG#)TkOm z=*a!>Q{du2`o*NoWbUN1(;^B%_!G3VH>+}~8Xn4xve_(7K56Zb1@J+sB~9=hT+ign zpyIrh4iR=YOBby|bz>d0yziSX&HjYmE^tAHvk}2Vrb?;&QiCnx;# z{I#d|Ktfk=vev_-kA2U4uPVcISB}z5Hk)x~By~|+`cy{aAe4My1o8jk_=Y?h*&zRS z>>#Y^T6e8^c}C1JuZUTef9Q_|${i=eTqDePPW84Uf-E_sxP3fJsbP!$lHX775D0PW z&{eAR8vY9SL_#3?dh9r4(u7v!)M$wb&j{+!riyV7ckaT`%m04C-wKtfPm8Hr_g% zOO!DCjX!DU_L*_2x(~eh>K*Dz=L0pQuF|zS)*=hZaBGhUz7)FkPbs}-_xOZv$ttrfR+YL%dB-`9n-AstaZsqz)y3`5dL--KV!f5BPi^Om+$L}QSfFO=_%cjal{llveZbn)ynU+Rd?dcer;ROXn_@$s zfrOVCByg~+WS7j=zH19X?it_)Gd>e=ml&CIsW_=WaS)eA?mCPvLqxICgHuZF%;8z; zA#vW+)P5wjf_6P!=)-_5C`^4O!BhH%$y9oMH8P2T1I9&m71|sEb0Ax^2y< zn`Qldj9NY|DWCIzdAL6Mge$lE+qcm*lvALu3@Es6Ei&n3P@D7T5?;?i%zc&r@Mg#B z35!5SS-Tk5w<@Mfb=(lY{k1Kcv&$<1b+Lu_GZbH_uT)>6-J*04kn%<|r)MT*($a#c z-mEGllBi{Rf{sB~%OGK>DQ9*J@$rw&Ecp42s(9??P~cd?22)bN+#hX%d&*t?wEHeX z`W@44-q-VeXBlX;9|@Zrw4JH?1N}r4`LiDdy-L+q6`5LMBmCKI(QE&n61;`b@$Dbl zM@{r!#GBl?TZ>&mYS%de~lFM>fF^X zZ|&VO7Q+1>W+ACk780)|KN$%BFX>C_0C0tt<|p>FH0a{b*$O@UXmg}9=Z9hgYTLH| z;<3dRvr78@Y>!UWn}66788&Z?3@Lk6sU_Ci^S+!78_9XvO-^xXbt2F1a)^KX6J{dk zS$9wc->1{soZw&vh z^}|T+CdIZUNsdXna8)=x8oYMl@3ly_!uV`Qm09srcqaZZ zh#IZkG9*HFS2`$dDUO|%SAUA_u3kLbS>XF{{eG9QCO22A;7cy=>Fc@G-&`vxY7eP@ z$Tq)w6`osDe#a9{1Zv03?^VpSYWuu@LgEJAObJ<(oXwpx^=GBYiDQG!;;24;4Q7UX z$3rt_Gky*QUF7q8KZDN68tNan%xwD@_xC^tB_ls;BHz#Ts2<^L=o!uKU8?6w^>pm` zcN1zB#YFkKSS1V)`O%BLYqAS7JFR-74?`gXKq4cp*kEDs;rAf>Ki26wk^mKSJ$_H= zf2kO4mCom>+=J)roAw^8d@_A4R;2cxUD1N>7~7!r>syHDsiz$$<%GMS8hCGJQoWbs z1($VtK54wT{ys98qBHSNW=h*Vsb#psX-(5rZr@stOf7$+mF{oP_YLu$5Eh&oX}>b} zV}W@5$Aa>F5@XwAN*mGt@oBi6xYOc{d{{(P@c6oU`$}{Y2%KgW`fd%xk5Q2(+b!klmT>nebwjGeAUwOSgYAw}<>bM#^}M zmfR_A<_bL=`)Sei73P|ML7B~7H6q`QlYlmX$G!#L0(_Apu}iJ5UHOo`iizl;;l-1B z#{pOS=qPrat!=n|ij6k6^gohLqanU)Y{T_KgA8jP>AD#z$I*Tij&qeai2v>tee(0` zOH|@P#_?4@qm03we83i6E{)L7JC9w)+V~yP4ZW00(%+vm2AvcfEp2dFaBLN*iXso> zBLFzW&hhR*sb4m|GXYIPrDaIzi)+Z)#+!A=>!YPbR7> zw1zxf@tJ1)5>}0^P7R?C^jTJ93~HG$U;LjYGrto~Vn+yTD7e{CR*ejP>7prB5zDw? z6X;9YYvfOH)9vH-Jg9E?BYrbcy^s@b&Q}BlN1;anVmoTOQ)W0sIr67YToVo z^9xq9)$|;kL@)!0_*A*Y)mmpVSFVr+0w(YU#CjVisD?_&#!5nVLRP{o$Yc~#w;)wN zL#dyVx_D}$0*}3~bcIh{&et_iO#3Y|YT2R8GKMBNb_=&>LS1(zz&+wF5Viyy6Mkpv zlCKO&;(R&p5>yN**l-S*luZ6itwLUvzGu(ru$P7%gn(h^^;&V2Ju4sk!pOdQaJwjo z24z%!dh>1o-cw!xAUK>envu|!^ffiyZ4$FG0mn7yO;D~`jxO6IKE?@r9`<|NINTSh zNp}KBPmlo@)q?pFY6*|p$*bA>P1X-RqC4!7xbNeokiHM-qK$$!$zI6)*I1uI7zNz% zNcv}Z{=DU=`#ba>6q1jsVwasMM%Muy0Z8)LjGYePbGF9e%{_?hSGsboYZavQL-an} z+IraP#_F&hKD;V*Du)ZW+S}8i(LoL$)BI21g*hrN&GaXDY0yHrg@o;x;@m`61qY(# zzU%q(Xu;$mR#9XARb&}_!UdTXzInzOy5MwwjZ!o+A5(nV+^%rMz2)`jNrld0w-0&f z!PnLj_e+9$#ql^S&vJk8uh8#j7-|?_%`uW%>DSS{G+f6yyv#QW;XIVbZQtQuekH_akc(2Q?eZhjrO!Ehc{=IjAA(!b;`17xhJZq%i%w4K#F2#*;YN`UQEXz34tui*Gf}9?Oe?cbx9m zoSt${_s{9ko)HV%gvkOUv(3>brn<56u^nf*{qzL@4spJed4u5W#kAfPPA@AC9`DzN zWnVCgYmwz|w=Q=pxvknTyDl`$YFhnNCWWosk-7z{sbdq9z{QPjiCZQ1R?20egk8CBB=Jk0(%u3Y-+uahV>h@*i*Oq`2bCYBi2^0an?_`%)2ES$Sq& zap_LJ^dkQl6&q|Mp2rU9DkiOgkvPfj0rYQ${~WWiK<{ZQ(vz90(cIHea2E(*dXXhw zcTfkHgIY#ET4u3bAVWVK{u2K(*b1`fhG$ym_xZ&DZ$}rsVrnhcu7P@E>rk2Wlkq_^ zs5j&jHq!><^fkc|^(b60C8r=m(4DyWtHNmGl-Q%;BDb@;vw4}(KWFi0mqbU~jN%WG z*n=5CPKF)f^zl-NMk0^ORjqfK$Z@2Qqg+MqCEmPvQAt#Ie8N7EOiI`tAz`VGcR*T8p7SSGdTbW)?W%klH8x8&bl+>v$kao zoHn#L&HAQGE?rjL@p-8a*fr6NzK;JHqxICT>3O`%Bigy2DJ^tX#uUjnZ_(p9<15)H z)X3(3wZ`PAB3XoEnJD7@W&_zVplD%&TH1VA- zBl$5dVxsIsSfJPs-N9DJ^__v^t8YvJbR6`-b(+IU6VcCng%fUr(y;=7O*-MW%FUjG z-h@5pmN(XY@mIl!RmlzQx-g6=>xj(HG$}rLdqQ~yUp$@t9i1ArnOPnj{PR#L>ofB4 zrFqrXz^%H4&k5G$%@aoYSH2vsKir|rO(vb2J{PkK8GIV2gcn-{*FevmSeZTF0ZjAG zC0kXBCblOyi$1CbN_5Z=9zg=B@^0$M|p@M(-ip#ODj+;02!+tF3;%Oo33 ziQB%U@kXAy(e^ClG>nac6-O6r+hIk$-5 z5DrRghZvmPOFxWXn6i|9%67xDMpLZg>txitqI_T?1l5>XJQ0W9R3#1}T{hw_mEQPt zc>LQHpY=k+ru+hrw0k!TYVFteby%NNvc+?5k|&Mf%X=#?1N6sh&lzzU*W@I?<@^uh z!EWRFXw5JJTSl(A?Dp5z)>kSa#rRcN#I-dH^N7ywmF)-6&t+3e-nVw3h{_%FsCHrE zwBSb=^TRn(ypUh)+&88Qy7K6?fzS2Expr*D)OzkiipJW|M!))^G%uJ+v8o~Rhf z70{Liqy2a`xb4zDCZirm5YZ0pui20DZARMK%^Fk>T4g^g+!`twi33Qpi@e`vnz?*Z z?k5eIEAZQh^lFrrH*3>o_o7qf4E5llY6S-8qng2$<>?lL-|jKLCn_lO3^a-gAO3A|I@Z1g8Z<-UdECUb1fFyJiWaV zPEBe8QZbb)Pm|s3nT+_cV5_NmfM~i;qcp`EjE4VZw{-znVs?&E&%Hwg@^6=RzxRi5 zi(bx+8JeM0^Y(Y*MX$q?YBJ5xt=sk z^^{HG^WG8@tW_yWY&c`b+d2F1R@hk5231g!3tGZHPnVf=N!?`Iq{Q{qM#It?+$!PF z&L!&Gu|78hV(k&)TdmDarp7%fJF&}x4eXdr#fraG-)cKzeY16;U;CTNjY&g5%;Qi+d$WCNNF#<@udBuR*C%0{{>yH z+^V8i?0^o*QrVU2>X6G-tDXP;ZKc)qgiQ%z#?d!#YA?iGQV-YKyyQ78sn&DUv7^k0 z?~`;tEcrg}YtG}n%ThP7xa!vqobjO;*nR$#mgATn_G@Y#uDI=LGm^_V63yH7M^3P6 z%8i^GmrM~*aKn*Sj*Obe(mzUVT!O zJBREb?MREZd3I;j+$tp9_4L(_FnVeq??J`n_jXI>zKoNXFg(K(tE$P?#smA;6G>$u zpVzyjR0?=|F6kZ1l@w<9W{hzUf3nG1VQ#tb6IhDPu5R)ex$G+iCR*uXWp+;7^E~MR zRkjUzPTfjTI#p5rRqk}GqFH|kZGi9`Z{#t0&51ueyN_U{ea%`kJmAmp2)gu>u)upd zd-~xVf&&NP7*X{R8RgSqn1?db4XWzW~fIV1{ zhQ=a;Nc+azM(0ggT!-&gDXtqf)z5mjnrn+`5n*O(()iMBj`s@V=_REKhYr~-WE_9T z#h4!j8Tm-F>NHWxV;0jp3Gbxs{I1l46>r6t81rd9Swfs0s#Ms#F8z8DS9G;LH255R z{QwJWoCXQwg}v!EFgp~+@$A9yHun+aRyF!pa4TF8?xPe%Jwu`LDD6RRV3(R}a#a}_ zBWRF72?+{Zll30A6_efWq*V7auTn!FscQ`I9iG?Dv6~L${aElD`TMu;ZU{f8{+1k} z3->vG1Es#h+4!AFh&c}GshsSF2;Q%pj8m!0w_0S$J9IJTa{joK_w;Gyf@7x1vOT!s zbXvpRF+IheS-3HdzA1|M#cPwG)jtawk{~8%reG@+$5ZXr ze$gL%X^>f3rqS&Kw>T~2(-f{K3&re=?_vxRE^bQ&_mxi$!lRET50B40_GnO4d29lc zxEHE8>f(`oZc0b7l$HsSn&LV5k^{QR0$CZ*3g%P^VO!2K!35SgC%9x1rNV+Y`uhz9 zls(&Tm4ByB_qZxp)+KVn@CdzHZ$&0-#Rkp&-HA#%y zN+Nkje0pYh=C0r3aox4MiBolKSLy+zs+tHXaO9mN@0$!G_F@3%O^a>G#orOAkb9G{ z_nXm{RJGQyfIh!Z24U8V2k5+ca$A0x0zY}SoKgSg_BU0poQ}Eje&tQsNRI5V6Ffh$ zn__&8ZvlXff6$I_{eJ!B(3Cvh{($eQN_ykdf3W9jxm!eqa&Ic;6^D2#_;AhT@bWKh zJp8xzDs(e+0+5ZkH}`zyxm86Cinqk?bH@GsRKwP)@$l9(=MnS05hrD&0_*LXQp}UJzI2w*ug-T?adfPioI)lvl|LX3@=ikSJpRG(yrg8*n!*QCNFmt zmtk~F2L=SV=w$Vk(jEvTIjogvEwMO@Q&uF3syf7fz#b`}d+mNgkYhna4~WP)gPWIk zl)h)&D_^vx3QDbgUE$?pfK<3sS|uC0(1!C#{x2VGgmeZO9h>1%g3jb~zl;Se)(~mS zPRXpGBv+z*{;Dh*y2gJwUgQSgg==LLh-`Rs&F#bd>Pgvtnr-tC4c%Z;OICP2KZ6MU za?t0qnpsB1UA8+Sy1b(Z4|G*`sPf`epZZmNw z+k(0!Y@2MC$mtg$Yn4pzPZ39TySU3ag8_wQJbx6j_>8r7>Tf{%z&IN3aP-i23Nz5{ zZ~3EC#p#vfjEV$3>($-ipL4! zic3Ly<3qx|nv^UL`yL!|az2wub!48K2CVwct@o6avyB3%#hgd)<(uE_?M(?hSpZ@CaQ&lSCgJ%RZia%YYq@}48ukmNqkFp3{4 zlyG@!Qa6z(R$;{{2}Ifr_PdDP!4Z0~Vzn$Zini)I{8+o5Z+~u*73yJ^Y+vWAy0108 z_+Hs%q>s|)euONaiJa$g&>S*FS@+VTb0Tb>$|?8#DeE z4vcl+IRFZObsG(rA0e)?wJ~=cM|HUy6|fX(XP~Av0lt}qzE_m@RTKl z?7R+(!pk4D%T(v90cYMwM7TDUuzr@^^dAehm4U#y{L>&oyr~c0MV6L{@j%b+&-XwS z;qkh2^=`6BG3^X&F#3J+(EJ;<)xS*Wle=C?dHM!FH-ua~No{5?ES`J-Qb9_A@0v5V z&%aTKq=eb{QuEWq%BhN+wjT@beFO(EKZF^a%;A|mabMZ}JhKzNsJ=jUGfYihwi7mW+&PTK*mYnkornn;m?s<41B}t?o2oEBx(F7f zlYyVNSG{Y>m$VK2o?FKx%JdU%Lp?X3)|-o0_yy`C2CJN9^M+*!M)OPL{v}q#=v(rd z+Iq#5E+51uyI&1_h@X0*in4l*`%eh)0HNw>22$lk-G|f{y!D1E z-OWFD%AV76RR%5nN1?nKL|wU3_T(ku?B6ABL-+n}1`$yLfU0C%i;$)(=eDpj_K8{UW=IlbhTM0*KLW z4{RO)HrVZsGv;>za-^sVf_}mEdGCyXe{FZ=8^RS&X{~h~Gd!eW^T#;VmCDC%?Gba| z1mLL%)XYot~68cYTS=|L)q=BKzTRAy$v@o$eUO^O;G}#Y%$Y{)%PF6YztfqAUGJ;97PM z&Hnbio*2vTN*XLp%vME@=k?G~mpKozYK}3UCEW}wV5eMCriu$&*iYZ$SFYsI?i<7R={NPZ4})ptYw-Ca^VT<877b%PD?H%caX^#1i0YGfUvm(+HD; zH04@W=vnYpS_$WjI+)LvU6(|&m0_~@FIf3t<{Vq$LYI1Z+8i9*Blyv()V~w;C@$L+ zc4ixH1UHsDjOipxtw0n-2p+;M3|rawq6HxEAq5a_Xi&$n^Kl&x=r3ZCiPS}beMHrr z0|W}xw`~)+ndO_1kv7fWd$J5&m}!=wg5HF2xE~k!!iU+bXnh+#&w25+Rnp;TzP#iUG5iT9Qts&A)qZ`oCp*e&)V=E zTS_0#nR_A8d)Z7Hj*j3vh`wb&Gzv>;0+X*&m!VI zh*b$=Zvc*-Pm%UTfJTK8ytx;8+Eh*FPkz12aor67LYeIQH016EN8(IIUasSSk!c^N zm-CRdgA$VPA(UH4YKA=JHz{3bf-M}KsvN5hIT6<@Txo`}C;~^|de!NZwS$%f|B1aW ztwU{smpD?RZbYYGCcB3%Nk`2q3vD~@7Yeu|%IrPnLJM+$a_0jMul!nG&eXamPM3<= zora^@DqWk@rT>*;LF8+#w8A}+GK#2z&kXFQ#3PBL_ErvFiyx&7xwZGh=`%!^T8aqL z*(P#WV9)td5x4e$z6|z6tIH^0RHJOy|89k!hyBQxICgf7IBA;5!M!rKD&2)iLVISY zrQ`T1XH_P00g1vDAvK5D_dvZfb8u!W`9xS{ManM>LlN$gQLYcJS5sU=ABM|0C+2s^ zMEvxTY>ZH#_&IDn9LU?seSm*y_c^kq-uK7Z1DL*FJVDJ|n9zlWS`r0k71xj|GnNUp zhQI#2j4V#Djah|+dS*kQ)+&E$fx5Wb3P(JI7qO)iYi+EoV_EaFj_leB+a%!6czUnlb0YSq-Xq59*G1!rJ3PeynWNk9KQ?NjQ@5tqTr5Bk27 z_iN<$;?QU}nazhF(pGFWZ4Khh)sd!z#z*vTRzJ5Clc?ayVr^0}htZwav1QYG9m=t- zTEW7ggE(RSwbryR0ZqA{W0Na`b3*THGs?idnn$SR|6Flat0=L##gFiFf?tJ^!+S2gt3{09+QSR=`zCLg>!6)qk!GWj3bs&h8=Bw$VV~JA zjN!Lc$f}BM;)wT7$SQN}x2W&?B?o?Ed)A4+=4`<1RJtuJ8QCGb4Zxhz_SoG141(g}9*;u$#eV117=kDVsO26*jH^(3TlInQX(&tI^ zM}>(HJyorwb-RdP-4)8-GOCTb7avpd6$<^U4)4GCU&-Gf z84h%+<#>+Djt{MtmQPJ$m1kuEqLTM^c#h^ED-okIj$vI%u11&bqDtG!VoEP^_>SDU$@(3^v9{U0#quIXog(9dOwPYMkUGva5*B}PX3pmtd z`VIYxUCq+V^ORCWr{yUx;7Z*V?x$Mv9zL!&vBIl=SAPrJ2eZ+`H^2`1HQ)8%Ke38$ zQNmKSU$VNSv^~6G0-^LNaiTRrqPn^-!!EoMj}u|4kqBT&{}X#$7MkHY^0)yl{q(4E z0p7S~p1Js7{4|Uni90)VUmIT((b03($2rM z5BIGtVtq9)7amCq-doEk%*g3N%}8mAQ&~R;OAepW#TJME7oO0RJI9xP$hvLOYK)no z+jM;+Zem7yTy4Y@&G$m|a|hToT&edsLGee`4$cSKeV*F}2)3UM@v%b4QfG(S*jVa8 zfG$G3A`<-+e*`Z_%Y4zjvA|GM*1Aayj~U$E>g<-8#~q&7x@XpTTHil^fI&lz(Qc%W zINoYp%cz}%&ph-HH@%{HKoJBf$y_A+A!gp%C{f{xHc`D8HCU`~Ac;M*0^&~JnX^Rt z2CeO_L7N6zg#N;DWGq2`96InWQ+pHNj)rs`kI|9XiL23-Tbj6uY3OGy$S~gwmF=MF zDPbqvN~gACH=|}6kRU>8nbr z4T|2ztU@7gRnzK2j5SKT)`~zxhj(cYs0rFsStnyZGjv;ZSo3#4w&|#xCJj`@;7B-{ z%eQA*j1}* zeDU&-Q8;stg`!K9jw6w8(~I2iGC4JeKlQ$CQF32*)M681@y=7Z*iELp6i37MmdX-( zmxt1Hgd5h!SY98b6xKt1<(4b+Rh8iU4IUs&jF6vmCRjmu`?k^8>_~ST@16Bv_`SB# z-@PK+*kE&@O?adOJ={p@3SWB)?p%zS3kT()qrNI_eJ&+y{OjDr+3JAwzqr|o9ruCo z2HAK#-)FkpC6#1X0RZmm77r5R)vZF&@o?{YaLmCa&k74q&ar*w6L^VZ#cJ(yx9X5N zZ$)R!EzRt&L3&+adYczFA9kRC{jp$Zlk_cLK2s8J^CeUFkMGG% z8HQPjD@k6jfbAMrZ_$Te&9BCG7VEL)V?jIe^X(N@HK8}7T%-5YqbMH{Cnb8Xdc?uE z>TYek6$k;O<*!BUt3KTy`xy&HnJ1yjw`nt8${xr1Yd~tNm7PajGjiw-fCuGGOfx*n zn!NOav7Wu^lfjjpEw5<;FFS%$Q!#la<;qld-8Lwi&rjt%itDE>8T%Ozu5!kVxiM9W zKlorpGMpoNU+}_kq~gXIl_8pB>A%h~r4PSWX(+n-v!IVaGium357L$X(Y~0foo(Et zlVSCnX}7|?)gKwy)SD03#@LR0Ae$y--9xqjy~zv3P;7N zq0Qola<1xjUp(u8n5JBxCAAQ-69H#PxIF=Ow4@-)I>!ja9!%Fj12QJJ($9Q9X96beLn$a z9a0sHyXYS5c_gO!Xat(#FSMhy7S&m$*+%%$TXrUhLOSfE`6lnBC|N0q@A?ckz;Es3 z@Lt-wVc<2|kN!crhRn1bdmhPtz}<*c!6RK{Z?XHet->>#CijwdBGQCd;=xh2mib;; z7HW~yP$TJU>$3@`ok&>uW5HousXw{@`gmo}+yGMy&QZVGVdNe8+ZA@f*WnoV{0H)& z(&{lR+|g#UIkq=uF?W-2mX3rU4zZwQrZy zY?+(c-zZ%|mhHBx0>$4tbF2s4l;CK~o2m>%mwO}W$n#;3rA^zCQQjxwP1ah~Gu%b; z0|M-!_l7;h)!o2%Ar{)MgYZb)$@)Ieep-~HVn~vMC&KJ9&d5SxH$jrb^9Z_7RM*_m zuFzYKPm?%7yj}cMl_sJ8L85y@22$YkmGE?wEpkA3Sv9MWkM-BpQ~|MdjK9FVWeoug zj6ZkpYJ#FV)9Hz=$6y9hwcAwR|3g+^GFRcH;i<~Fzh8R5b2`^e1zC>|d5gFp_}&y5 zjHs^|6E}|H#FCd>V`_slQgwi(MruS}bQ9rw1GJe_sJe$P@M%Pzcm9vIamnvVdp_*7 zz;8+;dNozA1vi-9A__Yoj^-#sx;`0G6+XyMtSvs>js+29AgSp!&*1J5y#d;}a5un2 zRg~W0^wLY%dmIh=M@2_<{cvJox(C6*Q?W8ESd39tSKRlLpL``d+hZx|_P%;h-vpWDC1)VqA`wSE>C9Qj0s z$0*l2^hOuM@W3&XwXhXUpFgVn86(?%QIiXnu#_ZlJ)eFFAw*Sw%SWHnS^QBr&K`S6 zbv%V0ni&?Q36Q+kxbJm{0B7&CocZLpZy6j*xA!7-qkfIh4I!p|!aLJDjv1vd}V1S48y07fLSb zS2wFJ&YXtnhIeg07TDj6C`kx>uCU`MC0R~kYdxPhRGVa+^|+%x-1bCSgjCfe4Sq;d z{2BJUEOZEY`E@?`4I(z^-{tTOEL&TtLbz_3z7T1^OPQ#+8h z+K1Lk$-@14jv<8}wJyIXMTM4*s)jc&Qp1@;r(KeJF+bYS*XAq3eiNy^V=r_CEs$f{ z85!~yY)nT_5;o2w^S?)NCrGp>G@E-%#UB|t>3_@Wn6@+g9hEqnAd@e?6Z^JWdbi#6 zx4OK!q41?Iuzj7(VF+f&x{+|j{w{>55D0+tI&QatN<&t?k zrl6z4x$7^j#7wKLPho1uBkXre4VNi@)$jSvEl=l1dy1zC|4a+h`m*OT3pSx&-O!ra zZ}}%wvrN1+(8>Hu_tVO%?Sxz3QsdI4TITJ8=(^hUs*@tIS{m)mO^&+eB3SNW^D;0W|^e$?- zn&Z1Q*CWjZxWR;22mB)KsFxL^Ti{b;{XKfCxfP=K@}2|r>EV_EVu0z3nrlB#DPj@MmLTA92-bm<~T zvTO(L16HQv{m`>qe3jm1zP!ylX6ssFl$JY3weKxQo|rpT{Z8w*+ts`mAs5Oni$;oY zlenOvb|Frop1F4Oxta}9jCBDJ77X54PDI-GfTBQ!8^DU z&WRvP$%J=Nz?|aqt_B!Ny*nM#oM^khq<=79*HmDTI%Zcm;Ts>< zcX(2bLVr7*Hw2~z9x3J#o-YBeC&`XX9qdg;=TQ}x`VNI*dxpze(_F_UyV{D>)*-_Y zG;U%;+o7x{Q7@H~-AKLWV37Z^<%r=L;5OfW*<)U(I}wqC_czD2)Gt2#F?FFv!`g-g z$-nO)Ln`ev{kIAd(w5!JmS@q ze&(YASO*A>aU+@@Z`G6`-w9mlp?paVe+FD?obsh*;r?noVeSX#!0ho$zAS2VPM0e4 z7|QXu*}v6E9ao(|pXwTSLN9`mGb^C6!qJRXwzc&$eGC?vG5K30bacRY_x{E6Wz4Dh z`G%o0x~W@Tto|EiuP$cXV|VaU^60#fi`{NbAPsvPp2>>7efkF9D$q~y-~!`rg0xGN)21WowArVg>vRmhKcboJlK%t)n!lKGeHC;m zL6u!$A;Q*L*uTPrrukacw_N2P!42j)&QW@;(XZiX^p4OEaiLO}afr0Fbzbn^y*rQO zs;1d^IZ<^n*r66gg>nCN%J}a#{5*T25(aKBYku}SLqL}vQ{@HWZ?JyrQq+H62Do~2 z9#D84RSScO;QjOPsx7iP_~@ja*I5ySk6fjiy>6`+Rpy=l9aaTM$N4T9VIyNw~R@(+L)u$*USr znpMgQh5m#tSu&-1p52L}rP2A<8^3IR+>K<@gjjw$>eA9Q*BX`M7qaJOMv5Oej(pjO z3*8=rPUvAg;EWUmXWH0+7E#V#yP6b54FuDyvVC%nEryTODpxAAl!{R8(& z9`1Z_m_;@xP+>WifZ`HV*tI% zXk4@q{Dsn3xnB(Sm~^@Q5BiFKI%*S0RiKrNCy?LM$IXu??B`GMvMtnSm2W9mM=Fw@ zTKuc6P&&GN^q6@cdYG^Ma~gJd`X4K6;|iETI@p4H!`!&fk@NYlX4K3xyJFsp;t;R5%WsOSIpr4;ud6Am^|vdaWSs|4R^ogR*@3L; z^00kA^rD0t6^ZO&gT6A{jN>y$n)J@0tyf=Nd7{#*BAao3!+{|;ZVS?rhAlK0Zyh4h zS5*Xh@6S+ER?XmN;J_;H5^IUVO^|W_p<=K})-RgPb%VPcT4pA}6%P;@JS;H(-`u`~ z%Cmh%L$0J$j|7bBkQJDGkPyTp{Njf(hsKOJ3n9G~fr-cmpw`?+qW@&NkemtRg56AH zEiAWiW3G5%KU=x3OIj+MTan})js7|olJbl{w%Z^0t!IfTjjmmig2-wcR*OM8vsu4l z#9P%G+!}CYBBc0b_4qaeCU^C>U(ou&5kRM!Umyw>7lF^bn#oj78Z|!hg*8M(Y%y>SeMsy`=PZ9BEPu=1SROF`RiO z!VL3^U{{>e3zG68YW8a(y9`1Y0WD`AL%a=S+h>K}71mW+89lV0h@JD2>(92XfQx#S z4(cO;#0AJXTIWLPx!dFXh04X5r0dAEYB%B!@15OlEb*p?f>)Al`}uvH*3@YWZg$EM zY&Gs*{0)#vCPd7P{bG#c>Gb^_`x)2fEW5y8hyp4hm?Mm1-ZNx7plvtS^KJEfH6^OI zZJFqWPLhz^(DJ{*#sUL*68%$BIce}!gu|EIl-AT*|2^I6n{8-+HwuN&z=TB2pR^%v z18kYsJ5$ewlcjzX+{lZ#q7^u5cSsWXQ1?cZyRaVo3V(SIJd+c}Lk_oo_ntzVU4E|n zHcIC?@yGn^ozLc!>;yA7H#ctN`=Cn&H}&xY5$JMbv8JMySkjgzBG$AuQCQe!ZS->t zc1|>v2KB8UVLC`mdr$A=<$utdRiG<3w@tFt(Jrc%jGNh2(b({UG|#7KwmlQ3Seh%I z>?23)2CGh2C#eaA;jqF@VEO>~N4-MW$%J3&-?~2o$E*52b`V_KZym z|J9xsfjba2MqKiys{*88tsiEBgs1zQ`mP40KG~`;@hWQ}$me}a+xQzLwkbCK-1z19 zE4rZfxXy!+Ol&b32U}nts)i~J)eKHP{^pUNnXj!+(1GW0YoGGH#v-6J#sIGGQm&N# zpfte(b+uB|sYt2_Q@GaG*VzRgk5U;{Z=n0d;N^ZBCeJdcQPMCbW(k`e;w}Hp_en74 z)c>kR9aZHgjeOh8U`+oK#^87Ns;myE*bMdyek^#{7RMJ__PW|Fsdp)_U>3(rb?asS z2D6x>K1X%4yu_v8W$`{_88_gCTi%VU(*}z}*j*jbvF3Uz_pF9O$x@k`cp-r<)J(X4 z3BGi}>RNwg#b_hBGvTk)u5n&NJ#_S2YhEL!gnp!EQl=}oKl5XOp$2|){r1@CI%iL$J z)NRx+)b+_ij~!zF8}m7_(lfYT+Arhu0S?hrpacK(niAJ@NWh`p*W}8bvR+!dvByp; zQuw2vSF5sRxl$l-D9z9)G9cn4Kr4>>O>gcKDA!lN?_LZp%9~_bP17Io-H4AbZmJD0 zA0&cIT$DFF9-TavkhjT~#hB3>)@~vX)MeQZO{uhEj zWc3akaiLuI;MEc>WG3h@G_gzHFPukk)>Q^*nPpHou_-}%?d}LprA$|-Rnw>YLG7}m zpw4uc;g{UnRI6U{J=kTD>}AE1yMvSa_Gbgh?2M%!D4zh1KU_60@aTxGV!40G%J4;X z642+G^XS@~u{>@u>#jdez9$8M80si6i0h%RJ3Csr<9#M}?2LFxoI;mcJI@_?jIGA6 zM7o?&xa=}Kfjg9Ucxv- zmYwyYwXTuZ?i$)$B&PmH=l+i!CwQhGA-5w=Z(|sCY3Fu48^FO*r3QJ=wq7FL&~Qm8 z)qMVcEPZ<*RQdn@?sm~8>4p-fQYn%xNeO4Gl|`B)rrf5Igs_s_#+*%}D6=IL%Opv1 zndBB>a<9bXI_|?v?zb72F=OVO{l0vDzdzfJX3lxPU+?Gryq?$dSPUf$d0$HI&UQ~<-@>r3s@7|qb?4gr)yT-kP!yB~=woYn3Jg$#BA*&0lo~`&)*!YGn%RCueKqDE9p$#z!bdp}f=ICnlxzUJDIr0pn3E;kD-bdl_QFTa^EY zcLXS}O{JSME4z|E;^|e&*HYhDz;elyJW60bC5ZH`&D;E7B6vgjE>Qx}U`BOAH(b}5 zMK&1OlAOVL@<eA!nl<<3e@G$qoHpQnCryPFkI{_R62PhtI=(r)(#$tA|Y z0^gTUO#fr!pY~o#Q1LOd)tZox(3s7*{%STeXq)zh|K&ehV!gNS?7D6na-C#kl@jl` z!gw`{Ay+Ocej89{6H`TAmc=Z5eMg#@eTLlYcAF#Y#_cUkwnGq(eXa3Pe)^q5&-GXv zolITUC~*HF3aoi55KgAM6Ox>VVNVba)`3xr1&GDurMZzM^p#SD=6p{tM1^t!@Kab~ z4Kj=Q<8Rq`DNy)vdXueNZmJOONag!E;c*+>%Gc%1faMs(2e$V*K+QFBN%)xP6rQnU zX#JQJ_Djd5vmT9Z70w;!jZY`HzC+*YrF$D|{kw*lhs8%e$(LLiUr@L!A1T%LeG5ys z+sSNriMc^wAm_ukubc402Ite%Z*TC8`pVFcoHH`GKG&eT(7dG3{zAug1Zrn{@4W^Or@pD#I^l!YU+K!y+XPR3+p4+t6iR{*8pNCOLr{1t~rYe zb6|(g*cF(}zRp%o-BIUyb+IvhpRHZUzc=fBd~~K#Powo_yBJ@PE)^tl~Urqf+geNHAe@Ce<#b(c&3wZ)!2*^ z0=#BGU%Hl{Ib0n?#|}oafSh|9P=&9CGkN(e7H-H|L#?F#$`l+fbHR&hgYuI}&vhU; z?vqXzO_(8otA?3i$1J!TmYuL9TD30m5sPo&*(O_&+FdAG2EM{rmim_D6Mc;j07K=| zt2uY@y`nas9O^fG!v}tRm@!Mmw#%h=x;qVHOAE3X%S6%M@~quy9xDEY{*Un)%~{zk z1BF1^@f(=a(B>oOHkZ11E|0g{lyA%3Z4x*}-1p>R!;k%)1OvqNQQmWoM9dGyPUxv*Q$KGf zEJYMub@A@RYa)jPQ*<{~Wx5hb_Xj=@u5GZPZSeR9bs;q>s}&nT&Yah)oMDNr>>bsd zbcgeQIf2V-@<1oqBhG*gz90b0e4W}ZbCIYMMjzZLk}owThwKXcU0U*Ei&)H3WP|_U zb&U0#e4*m4d~Z*;nWRg+I7f7PJZYzv`CEAm{*2AxK%j(YHs07Z(o*o-LizgEA2kg{ z(#0=uz8xS9DQ0jFcxPVhwPU~T;2bwR&=WZ~v!?HY+r@vy(T*yokIIi%nYYd{HeD}N z+r@9F_Al|9pxz+;*4pRYIWESrDCUhM>we^cOsJtxx%aPQ#MyKykS{IYsBIG7`sRW} zS#*Qj6VpJsAJiM?YBZ)^MKW)E74R9G776!V18p2stxx1pI2_V3E^(^}`LuXGffL1; zocnwUgj)MR2S4+WQ;^1dNGa0?WlS%`Faao}kEBZU!cgIYcF6vX+L_h^(eyjBjNgpQ zXCt}^lRA>OGt38QzEUMIJkRuXK>YcdVQF4&!T+-a>!@+sV7yjJ6{QY2NUsTKLZ>8s zX{Dhq{s^qR_YX20MJQiufK_!|=)G+8HXmhy4T%FhD$iFrbzv{*W!fKA8nalMa5uo4 z$(tx2$>Ajm%rM}K1|{~`ASAozMP`mL-`mDyx#y0fYI+t-RVTFd1aa;Hb3FE6oB6tq zq1p1L!8AES*X8V#$R7^*`Nu7O-7@9kW~UZ0AVJ@cJT`S*1vmQ5(R;YjbRnxR&GJVT zviN&Y7}}E866t8-w$Abg57Piw-zuDX7$$^zn*&>5UahIl+;9SYWm|Z3d|ksZm^Qb+ zR6Un1MrNna(vB^l*Q4_vhMij)yo{&sPr+)6nse&c=*cJ9pZfj$Srao!;(cnpubu1Z zXUC0Li_cQv@$Y1oL>fqIur#zk8-;%TMBR{ET=}*b?#hpNrbM?2!XeRegzR#j|{v4LB2%O-BDrl6!X_oUqK95Y%|t>;gXfc;uG4_4$(`?TcK0ThII4d zv1@WwJ>P}==jV`Iovy9;+Lc&x>6)D_$ThkwSu{3_qaaIJ0FBAi&?u)b#2dR#yYJtR@S61*J6>y=W>2I_({0e4@sfLB zANl-;7-Y>9#{7F2BT38B*#>hf?D!h$BWfecH=}ib6ecPL#ov+2`MabztpQHK106YR z7;Hu^=j73)TmATq$`;ccYP-{cnCh03@BujTw0Cf(bpwMbWAn}El^eZoK0G4ijiuW2 zH0aI(H#gHr=&L7Zpz!nSorO~DMV5N&q*PTS{Lq7NYB$%-xY}oqF=gHFJ&`UsNd0Eu z5ad50?$=hY+8{;+61k%1A+Tn>1~DvTt6t4yg~YNtwt3_X)s#Lj3b`w0ir_?BIY9ZD z@7*zvbRDZL!nI2YZg#{4M*>`*!1vg_#BnIGl`Vz+vQU zT+%+f=}%?CeJrfDZheo4U|!k^O%Nyec&FY);oTNaHa9rGuKLh3o*LiwxT7N2*>_n_ z_n-4onGV;fYA_1YKEJ9z0#EodXmd>GSITL@E!NF0+G97UygQnmp-(X5HB?;Yk8hFm z7c>b752eR1uTAa9Rem%ooW1%5(_&Q%RMe&F&6QWJkvN9v=*?eCUD5)SxJqH*k#Abo zJaub2zut2nxvZdM)n zbOk=O&Xg&&`7Sl}4H0JF=5hnGUcn=MZ?TIqm<=RNW(gyEzJY{qSatP7N%WsO+pxB8 z=kW2bjCj3z+37wzK&q?xZfa@gHv3)nbQY5J@r&%24Ln-@b%1a)RbLou!wHjH@GqWr zEywY@syS&sDsbmU4wfDAP4>+>?(>FX3eb!+N}N!A+mL#ko9JkPABT7i9qd+IcO%wD zIo6M^4e+ip)-00PJOzU|da1-AnS>vYET0x>uff-1IXn5rX&O`4qKBGm_n>~8tjv_U zQf4wUw~%^{{`R!^2X%fFDNqWR+N50^AzyzoOUf&X)}rt3x=8tQ1#5*?{4l8?fFQKN z(x`f3e*?lDAnV?vEXxx|Z+&J?1D=Z^zhm+(H}`t^uKiw_tf22KaqKlHcZASV{095>JGq=$Fb}Il* zyNOTyIJK>*ag6m>c9Xu}f^m2y{ErZ27F-f@teOrNg`md!Uu7{Sw~Xnt2FNBSHLI*8 z8jnc_GLL#WNKSm$vpO<*UX%IQkwdzZG-t4yaq%|?qDM^)IW%Cu=EM~xRg;yR$=}st zjWjyh%~9L-G`w202`umRtTSg~DU+s)D?ZP?tZo1PHDQt4fo8r`J>RodldP$nX7o^1 zbMLc@%I`wxWeO~OakX39Zh)k;#2{+xwb)G~evXT23oANT3nXf%1v*{m)-#lpNwt{0iiNUtsXC*ce|Q4@!AuM zIge*kgGLSk?VMNIU_OTQblQLM*THUr8di>kul);SfUIxDfcNr?Xm>$tK`p3}0PA}( zANdy%w z9n?<;|W9YaHf#`b4{GAxyU1C9`SA|OJqjX z5*_@EviACoum10+LlxO$T{Y8PInK03XvAZ$Uxa#ZppH-E;u8F#i7>$^M-8m_4&v4K zijeQ>)gT>XiZo~ujGRLa7Tos7`Z2KGQ%m4&G@T{w{qHAvGOVUs@Fx>Qw6_%z)u8l$ z1k_^BV4>%kMifv~{oboNyej8fC(TgH+wB%1iY)x187Se<(fC;6mWLIUgzI}2rw+BHzj`m4x93-sp{2ZCGj|O2+pmxIpbJo=Tx@?qY0{|;6hV3XtL=5I2>D7;E$J+j2-pC zzU!Uvld0W1a5X*?f%#p`GJ3aOI(Jge%nB=!*P!bxAZ1T9tH$qB(g4(or*^+xV7J&G z*AU+D`JW7=l+$bCpdUFwv3Vmu!72<~*8o@Dl+3Qv%Gu2LlrjHg{}?jiQKQzGysDO{ zc_a5Df8O+MNLW-^e4PT{SK$zxAs+BK;hy)FIPpeC`ms*(K+ATsaXlzh%T_qe+)uEe zYhix3o9fF6ZW(ox%;C-zr33&Mw1jrxoS0y+m?l|K#?+gz`tjQL!0zISy;bRuxO}dA zlvDy^$@^}SsyX=_=_U)I3-)xNv_(&AT4Z5p<$~w^*#gj!=DoNGU2-cqKi+|Sw@=OC ztFzr^tWA56%Nr~37>HpG0-IG$X)E@I*`KvEzJ{$BisEL~$Y_NXRgc;l%BxaN;+mwO^+xK%S09z8D{Nh%v#GgV&7)oat2|r6(8bGu zy^3p-eBm#{f8|M3@EU{j)FT2ko=4o&NnMZ-Z6Q-xXDN`qktxz5Nfje1OZ4wd;ucbyUAX;^n zo{PZApko<)%9Na9CK9`8`0AsQ->F^r0lY^PpYuiU--BrCbv`~;S<5t}n7th<-`3`} zzW|n(WpxAncD`Ojf4XwI-d1B;LU1M8@ZGQ3iv1isqEF}bw z8glAolhP;%{p|Xlak#UsYh3}MOy@$XxVWmvNOd$HeQlVl@Wu@!n)^lqJrE>2i}py7dm04iSe7N26{ zooIdVSNsL@3PS_|4or!D2)zzbF=h#rYRdCW{`+Y|z4zjvjI;pi7-{kVOB!q^{tKV} zn)B`OFKIS`BY}b8e&%XFL&|B^(sa+^Tbfmzw;Yz4-hVBbw>S=>V2-8Ki=@J)31NobL2pwi@ z0sw!_(M&Sp(KMk)?m@4)pCi==nMr<=*f6H9F&w{3%~qz!2(P98Pl7evRJal6VJ^2y z7~vBXzmy((N05O)e|cAc3+;hM%dkYdAvpf7-^J4DIfmGC*G(J7p_>L8H4v+Dl#4{< znP#{#XS%_g3E(tOF*}ulNVM70rHM5CC5A8;R4tl!&Dsr*?tbn^RvDwOb!}l}-^-^L zCoaIGgqrMua80$w;(q7fd{g%a$@Ea=M6{GK#RHFIwX^agm(Q<4ugeU@PYP)k*1SQKT}@Vnhmrk zS=BBg&$ackmak;E)y_r=Wc!B#7~^wAyJ&SB`5QcuZQnN9Y5w43os?4VDWp%ZpkEum zsF-PN+~(($G07wB!%Zpu=OjprK!Two%@0V9g z!)m|t`j+W5?PTM59^4J>9p@N6+TxFw{u$uTn1};cU&s|EmU44DvHjj zlJgEoOUYI)4ZFRobi$$KMZ`qA6x=!hCVTG>{W(HOL0f1<@cdbErAh(~ig3L9!|ocW z8)^l&Yg^94zM%#CCvN)DObQOEu}N*b@|K%|!SfVMt5OIOOV~SSkt^Pv-jm8oQKi;| z2c_0B()vEYKxaPAYKcE!SxEnYPM1D+-3NZ%gxFQ4N?V;UGma-^fw-sdpVrbK$)1G3 z(`m(+m(&A$Vf-uJNZlG!!%-`>PZwQb<@?{H3Za$mhL^ibH(_Z=KbH{hq*N4Rfjy?| z+MTB_&1;id;8AdT-N@Dw?-$fnPpe4H1v`_E2>d2%rcw`~OCb{Zy%ul;x+K`m(hX#v zi@4qriIb;Y^H|W+n~P_Su_bkWe;T1cX3{=no2Zz#6+6@DE%pf~z8m#HyEkX{j~3Wt zrkLUwu@`0O%v+rswS(al_uSD0m(my~Cwyqn057D0`m@|#>KTS0Fw}d|Q+<5TShm|o0vBG0^@$gv2uuKn(!W~VXeD9S zr1We0im-)QZZRApTSVTc%41IItKClh?)s@q@K!s& zP6*lb9zJ-C?@lT)-pSk9SFn{-h&MFt<24I_Do024PvRXl4(ZWe#tI@u`AOEp#R(K( zd0fyv)^ljiU%_euthpMTSx z+y}1?v)7BL1Tiet78P|PQNVhZ+&T+_|6`c6VwbirC}#I6DczB)-_ zF0}}?aMV4E*FeK9**13O!neiXGp;QI2X&_CO~i+K)18_9yO`3Q93{$0SK$YA@Ktk2 z;gZ9U1v!36T~~mvk{;8mjps+43Wm|^A#xuq^~WCKF###E)R~uLYiVKq;X^Ax?d11g zoa*>d!k@5oW8=Uedf1`8+naZTyg0+1Fw(xB^p*WB-CA^g!Oi6mh|x3vY(2xjFF>PO zyDfXL`nPcs-6O7U@?gD$qmOw8^c4#r^|1Q+l%7`R=LyJ@z4{Ix2SScLQ8Y0Ko4`cm zn{js@Fi4)_Y-8Ahsf#C{P zwZG&(d*j=~s~HYBeYkEW1BU(o63y}$a^uJbfL_XNdWh`tG`JbLxs!avRw41&4UP-& zZZl;f8-Ds3QC+&!sI@@OyWuXWuq7>KqRBqc$%Y*}B<`cM;pvNiH&dKboC3Di2nBtk z%1Qsmf%9^DAd=p8WidLAHgLHctR%E#C{7h8XG)!uyY{rvQ;?w z*~u;6F$H)$K-pAi_>n~#MG=R*A1+?YL>|o1Hj=-%Wtj<|UzKRLQP%`K3DF!1sLB5K zFO<`X&UvD*!B{~hz*qPm)Zb9FQ{;MX2D06eutUA4YR#B~vC_DI98Z#m$^^sxuZ#G3 zHFn_<8Fjm!b~#qZ#UCIk+}Lu#ymUB%Oho7!Qo&nLZ-Z#=EbOE=(eJ4h2>rZY@*v;$ zkI?SwIJU84h@RlE1YgH_GXG?z6%GvO4QhOZBz#Fp`>Za`FvYB(96gHR99V67_`#fRSA&S!NE9!A(F(3=vEocFQKSV<+ryR2S<=MxHP}{mma$kv02ui(Qw=_qTcC4AKO8zLvA;A7@7V zE>u;SAyv_m_>Aj@#8)aKp@+aJJH3N3?Y~q3yJ;%sAg4eu7s+QViCRzcH{|9lH+%Z7MQ*4|Crv1vU?}2 zNU| zr5O8`Lmt6T`b%D_|b}0Wn<0k=0s$wG1v-j!u{zXKy2G+26 zM=oPf4V4@5M`l=!@%6A8p0ou@_omrbXms9^poirbT}_3L(a!Hk>LXu#t!9~;tB~;b ztuh_FQkm9;&XHosM*?{GT2(9$Z3e^9lmKfBSm6J3Iy$hqrqkK|F&KElfx>F}#tsK@ z9P$lPSE zL%a9xh%B`p0DvM8Ft|2gnZ+mCIaTuY&7vTuD3K zqWg1_d@W<*d8tSMKdFrjCwUwnwntO#df;XM-6ko30ZS%u%9=4hIevRbT!IfqJI$el9x(Ec8BC*e%Fg!rI*dqBf`c)&{`7_Qkvf=yi(QHJ8{f8?0SUbdqL9KT)1!ab!$tsnob1;~ z4)F2_?nL|vG5XV}pDOwy=P^81;8{W)Ve`&zu;AAZLupwxxR4~IYnlt?|29w+2;wqw(E6mv^rKDe zg5S>*1v>k3C5$k&&7mv{T0?xp`z7-=RF}iIliv)fD9p{JM*Qi4^l<6Xfnydd`I$S7|K6Z+M!JoSGd#v&@g~#)HH~HnSJKWRvqR1V5-(+H{hqedzb5^@K zt!vqDICAUbkx4_Acy!PNFH91S)26|a5IY#XL9u8rzwJXP@)=#xCkMX<0A9rzKX9%P z{Z64Ty7<58fXs!?%=SrmQhy_SYi*Ufj4qMKA7zPnAnM&g67~+ui$~4O`oA#?=S1tJ z$LJyen5&(+veN|~CH@iH65MvineA%N_88?XgWp{Q{Fq#MtlD!fIKqf_d?iTGV#fG; zPMHRM@`6oj-=5kyKb=9-|C&I!*XRA%*0{1S*0#Lw-o}Blj5IjPktR(>k^@BMs0WZf z6&`RHk5@b00&e8_lUKX9Ng`wm`9)QJANt%;KL7 zS@eZ5^SkEX`&(Y%-z0y;oP@8B{WXFt?yZ21O)g z$cyHi4#BV>$ASzOib5T!VpMHV*n-n~jIO`q|6cSNBUsRFT5XmB52C1r zI#$Vs&qdBhe`fYS<}54!S>%O8GK-WRXb;V(&$_g1kNFC^lfpdGU1}4P@5qo7ZG@tA zPe<~r$em;IJu7u4yCC?ZcQ4wV{jW`D=w}yX;n5Bsp6>M)TrEpt4*@3|Gld7Rd(xw> zV6B_az9BuH1EW_U{4R=z(D*7*X3iI`oPYfcIOqlHB$8J`719?hDh>N@np8)sF)S(P#LadwQ%*ecdB=o=G*6gX7Ta*hIYwj*>xsnJ}QU zez=Qt?+_x3z8sB%*wuCrEU`-|N+NB62d^&5Q~EPM<|LCnZ(r_QSU~&s(`sxKqb=1W zbTf6==wbW__Et|`bUc5$x8BovP+Y=NzziuXAroUIUav?}CQL{M#u53^7CVzo$s{SI zr+!nO*^om6>CPvcYIhcLpux=wk!N0EiMGk#lgcfp>R<&0tL80O^N&Ry#29Q7%5LaI zPdOU2j>ThUx;G+A@r{O2;fAJso=SA7U!a@3z=1Z^;;$ZAwRh4Cy{|wrUWO2Jq1qB zP)~|Ok)SSo=ZAJfxeN!iI-MLqZ6u2awW)#6 z24_;WQs*5$9(Z)ULmXw(oaMLKxK*8@TAoWM(sz{q+m?TnIoM^+yVMLdVeXMGj*+&H zCF_Iwwr$j(a zbkvJ{1(`MIPxGJWjC>cqivf7mn`8GxHiGmj`i4?ftT+Y7H*1MY+xy!*vyi;~%+^k1 z8ptvrtJ^^YQbd#b@M9cNr7z1~c z+^NlzUd#|li7>$T{@~qA*WAG&vC%#k^+i}AVLlPA0N1Y-Nfg9vP=>Uf6}^>3?h=$3 zhU1?pAM&F{(ZO`g04^7n9&>L!E_X4}`dKvV_?dlD*<)XKg=c=z-5r_dyRYh(u2OGq zQ7to+^UGX@9xEE(*#gmHgJS0B%_~HSt6Y$lCs8wY%eVOp*WS#_CLw<`dl{N?J?cZY znuQ{LP8<+}r$T*x&z|*^`~lWm#&S*lrA^3Hj_j^!fStNB_Ypr20$6P~Lfi`qag=*> zCS@gO#_3&TC5o9p?+7{=Tfm;mzy3dMWWDt!&Zm&w^1IL({*ukobx{9IPk8g~v>Igl zD~SS~>cb~7m-NNMwDkbvi;`pp$=}G65wNQgv24Ws{(eJUlq)~cAdCNth`<%8L#80ttnarWV%*B)dKNUvPfhS=t> zI?w^0P^0iB3Y*wtqzU*g%cHP-^hS#-m$*E@agMz9v@X>Al|}eHXW&#L7R8y1|6nml zKZnu5?mx7CoUWEkj0~EV&U~azbU6U6`px>@`TPSJ=MYbNZTiHpWDB(wDaa}EPQh8p ztC<3Q%&>+Kdl?SU()fjS?74fA1AzJR220C)g*5`k6J$hYfQDthsVBD`j(K(6coTm< zJ+ySYi}!1{!#?7}?Y56iJUxNRe|@&bZe3Qnw|UVSODEw`cOE+2IWs)LmTaYd<-E6i z8iY?G zym{^^r}FQpuX+j9EaMfPceEi!?Ah3}{MIRre;mYrRmr(dwos3Il;=lM1Q)PGcWRW<7ezjm^&9*ul0g{# zasjLZh%QSgw-dlAe@voBQAtKNjM;?+CBvFVkn#TwcZ&xFBz!fGdyJNEPubp-+JcM@ z*@?eh3*41w^j5`?+BAOq=UWf-bRrX`W8|gzH2ioWc$w*N8ptY3roEvN)OvK~1o;G? z7N60Fvb2c3a2132w4hQSK|L?N_UJ4ZyEY}+E#DcPEcKTywO%ejrIRkU9F)O8n%1lh$*L0itxnO$m#3 zPLvs__FR6c$s0e;kjyGjS#IP`W5s4?J}dmjVf@veM`GC&KHiBanvK4_h*&jt;&m7Q%7ws(F*_wm0-ER9E5V7~UB?)^x z_;pJ;hx^@})I?^fktk3y4GGsGFpbEWJ;{R6a=5dS zy@d?%WwI4ZukJo&>l?SbaB7?=k~qW)H12tqHyP4DN|dBCPwWlmVr*S(N(A* z&=BfJ7qC_ZCZEo;uklyHO6mt;=mD&I_Cm3PLJD@7L5i`jMci3(8T@6(r$vViZpSP& zK%($q$H3o6&42aztd^-47+Yz!|3JtZ3EZJIfqoIf?XVuk#gPJ*R3*C~+Z+-<5MQ-5 zs*^bwFYJRQnSVoz%Z#M+oj`U`cX&oVqRaUCztP!6Yb9IfMH92RKr0G3#o<@)O%%{&#_I5{i z<2YGe^aQ<+A8kVm41IEXJkB-X?;THAWKLt6$)#U=%>AqeXu6UKFar<7YstSFvP2h9 zMd<+-7_t1S#VN9Yfj&>lm?)|a;XATA2o>e7LKx3L6#x6F{6KgYy5fTq69uWVxN8m`hBN3sE0nigv(&IIY?cZd)Hhz>CjaIhyX_fOl`yB|D#z`LTR)cjlW0VYaW8 z#2fRQ1!?7tHZs26NV9Jh-T*WuHvFXFv4~zh1J~oe)Iqp@P(3e&#|yo- z4dUHZ{>c5$hn^Y!Yu8-||Kn|73f_1Z4ehf0-JyY zPi*TWG+N=vHs@p|Bx5$8GcxL)cduFSy@63yVZdV<`liD*#rkGyD=FW-1%_gAv$M6-tzDu zw%q{Tx3h2D$5-k*mu137?M@)Y#8`8zwR-|3C!5`;qTiyx33xxVbLO zcx`|+UeY_7OGZc0B=R2tAlH|dY9icc{KCht(GG*J|9ki(tD_CqDu`n~9qjSgV@X8m z&LGBPA^BiNNV$FV{uRi2fyrVYQ`n_MBLu&1A>Xb(V7LtbUvm>n_^r zy%ow|dsMd8dqOfYpC@BvMh^t5Y6h#+PMiU&9;uu`n2Gg^xjFiGiFnTDAl)V6U<%6@~A;dK{ z3qA5fnzf$tjScy}ust2GGFrVwJ7w-(65RzPufms0YbaVIMDSYuis72}y0D#D%=nV| z>u{~dqAL7L6e^)13va@WL>Yc+JNV!+s@?)^)tn->&6g^Vg;FfW=v#NsOV(IUWbO}} zAc>tlJ^9#*O*S-*1-&k%Kh*wwm8sxV`gUX=`d>3%c8$HQ=|yo#>yPMFml^b7L0z=* zUgGZO{3~5Y045DG?)$BRLV!-T6U3gR8^-I$%8vp_lu}Bg7x2K5+w>V(I9+m>vt4$J z#+xq{g&(sZ_nahqFG)K2P7TR6{g5@Tz~49H5pR4gJrnGg&$S}K+QF(ty$Z1qZaO_j z*ED;((1na<-?Ytcyz$^sS=qY=)7-b0heHxE&42isM(=j6yYO@S3ugKEd|XfK{y>I_ z6l7!NO@x^9DA#1T&eua2m<9#LPh*jDuvDdf%YI_7)HKEP*XiINrxqkIX^|gM!R*p+ z8uLE~TqoW}lN0%x^XE3$b=9dLNTR)erR<%CK+(Qk?tDy~ZTBzz=S#;yj_Ohv{Sz0Sh)16;LI7%ogEffnbXQkBe`wszHU3P_4wP*-P+v~^7 zOGXX7D+-rA%4b!+W8MMOV`RXoR;Eb{*m|o5BP(@)My76~_+Z&m8=khUkuO&<&qpBR zxCH0*(UNz$@E*Wc=?m{jRp(@;alLkbw`4xwbV_FucJqqpJiahi=-rvak?bcN{4?T# z-y5c%1{N^N!QbLHjkT#wD7bHnUQgE~fQT>fjiX?9+8eVWvKgF#%;AT61IC&H+hT4K zN#a}0e&W<;dnQIsn2V~#zqT)J{sy`0k%T@{9Zy$kfiCGw(* zrb4k`tMenO8Z>9^TCc&04Pu+;+SHdgi@-N$D0nEVph`@ShTBNE@#+~VSVH!ad)Uq8 zOSm$TT1Uu5!*h(4sa46!v`P9{TH6#4n<(gvyQ-Io3r08YyXIo9c4LGR(hv2%n@H!N@L%*8<3O?sbUC2qG!7q2s)ck|oXDTK43M3!$pmms z>pO_0F+HXg;H0e=vAA0s&TZa_wUTa9$Myi~*ZVY{thJO~pXV?Z6af>(PswF*c8jHI z7f(g-dHy}(9_qnt?*~#EvwT0bgQHS@l;s1lBDOOY-N!f*mrXWe8-cG)GqV7BC*AI< z()AEo7=xJ@l9VI>TL6Q*6YcO4D~(=@>B9M4H~-muXvDa|Lp6w6i&nq6nT*QZ%}?~8 zO)@v4)hw%}*_XEC!{chC&ddo;CrPM+rJy&+>%R=p?kaEWJ1H+k-TnXnvdAON4@%%W zRj4psraLtzs5*jDAL;LcSA>~af5PI5hs?QgSEt&wNp_s&L|vt*)IV@P1jMZBuy!P* zliu9vjR2cg>4d?Xdlr{UnD#=)D;t?vv`&5D8Y~{U@<;=q&#FVnF-Pzn@M}1^P&7m8 zRO%X>{MKW3Q9*bST~nD*%8L0G5NeI9-4jn8TW!b6RG3R{>{1`>-go}5`m^|OgE`qC z`uIkZ_WaA?8CAnJW0mR7f9@b2V{tpj%%fGr$jH3@V&spw1ogm}^WPiJU(dpxuk?>L z+}h8IqRO-yD@(1Lv*(j!FBZ*s-SFbg?ugUGw;}x*WWFg!g<2C-m?DVpzvZvCTV$Q_ z1y7P+?9NulpZ5es;zOFz#Tlb#N8)ey?UEQ4`X1kT&eRWo`zLfM13UgLuxV27{+gF@ znKtw39ltj^cc55L%Yt_7^M|OfF#rJLU~Sd!MMtv(K|Q1&k{TF)I2T`JrZGi((jn!$ zs(g)z_LkZVp5SGBrI!7S9cC2A0gEHjj%?;=HbXie$y|}Moj)9TE0Z=+A9Y`E4`IQ| zu?~N)DP7S2syXnAn)%fAuj(4m%XXb#IE;+y@yM`X|CAi|7|)Q>)F+C_pH0U`9Ecta36fpzfqZyOnzDof&ul1_c;? zC09Kk;PTH73Bwsxk9=#9pZa4a3ZYloBxUuPC@pqCKM=U)7EMf!pB^ba%2VBKaDD0fv~p4Ae?P5e*PcT!o2j(>It4nBq%+_k0I{(F zY(gP|65w~)}O%eg!vQYkVy5dJ3T+&f1!xF`R;bcU}_d~%tuP&%<-p8SF%WNfjfMEe++m&QoNl9EH3E^Ro89p=14{aV$vL4vKva% z5vDVz!+li_zD#tc$0HQcbfkiRo`!Y20GuaCw=_9_1QhtJ4-1(UD}$|nKL_n%3-5+= zYM4relzse(UIus8`v))!okGTFy$}eKP(x}Z`hH*TxSf9lGH?*)QSlS_E?}C~@nSpl zO~n6^^!4#f@9+Pe(~WM9qdSRW=NuK0oQjm#KIN2@9{YQiS4}K*Xw#+*YkQ_&*wC|ZPn!V z6hBAuj?#z}WL2l2suByI!YNsZaKbE^86Rfo3@{j;~7`Q)$t z)}LOa;0mggL1+Hm@_OMo5*Wc7pIi24gNkj-G!iHc`0JHXUrqT5U-VzyU7r)x9!&FUcF zOXc~fqBl;p7YC}*q4{1|N!L+@d|?P7J`y;Ona4ep*yn(K& z^n-`}l-`6>$A5VyyEuTYLv^SN7ktPY7che4gydVq^M0zFLf#(RFf8qyeS6{#`d$X@ z(Q;VGH8SN#(Y0XUI87MN39y52Z8&qNpD>Xs;rD-=W%{=6CQJ<{8-+$!Kx3qV-%Cl_ zU#gQ3+8-JWto=fC+yNehJ={tTs`O0SVzuB+j)+#+^-D`u#KNmKC(2=89tFzjr-=a5 z#-pdx|5Ap*_#m)43~Cmi#n!Iq;U}_>aw~d^yPIY;Jz3bW+Rn%fyXjgiS7oDcViIRa z6HNGDzQOwmTi-|x?4_=TF44ydW1W7tD5&s%EZ%@UJSm$K zZ|T)ZKrLtD*c!Tc5b6 zps$=%sRJMLKRm}f5MV(7mdjX=%CcBWA@3ZuD}Des&LPBe9WA1sfWAE*wvBZd2^)8f7{F-@#Ak6JpIlb1u?9gwa%gckVXdM?qLV> z-*SrLKegth&mchx_Fe%NN_vl5mqVRJT?g#hx+?di(HXH7ihZ9irbOTsiom*=XE)1Z z|B{?)DXW9M6qPAtsx9P~8KDnq!IKYqFm64)Q6p8hs+E zt8(o_`BDM)wPuhssy9(1hKd|n%LRUqvBL6k7ymZW9-5EMk87AN*s#b%e>AS&-)w$^ zi;aS<2tvnA6;plof$udmdejB<9X?KS!L2E(ZVTsQ#tbr0slZ$@5!{=#3eOXN5ie&C zKc}ns5IXm_6aFcBcz`gGnc$h*J9U$%iT|Ap2dA5q0gH(ZEYb5=vt6$pgpg^(~K;Tt}x`zB7N$ds;e_^TJ`p(AbBn!O+|fqSf199_@w>pPbIx%RpfkQM{J+{b8C1Jz-0aVU&)Y%3;$J}j2JN_XxYD%_{ARt zmXZq!ngP{J$S8Dz@0q`BA44X8$Pg+>1=a?c%FKAu7N;OMK0pov`_u%*$uU>&(~A? z>|nz*{l!h?eU4d|5lXNn{S@1t@m||tyXZ9fB*HM|UDL|niY6)eOB9EXe05tbakqKa z+KA%uwq1C8zHI~ZBj40jGqZ@f>E9f`>*UT;3+vCnc^3UTo7|0f_YcKSw9k6PJ}%ou zZ{hoeJwZ0DSAHCxL*?`fVilv<4cAL!`X4$O!97ilPb;{up;4m|?e{Z9I zG3!J^?Vsnx3g;x`TA;0x`VW}mx^&;;*FmoKj0b2^4Yj_>Srg#nXZC3?(=VKASlWSnw5|s2jwl6IIu?AUPL-@` z{H=aY#!TwKy>gmwTAe$*dhjopf{zk!IYwthL@s}}P}mbqG_%bz=>VaF@Gt^rLX_T7 z-`MpZ*!-UdztdvQS*$HTU2&}EEu|^BmG#$;7VN#@kzb#)tIl2CiGRs)%geNjk<5$pP?tuWWApFf^htn-&} zx^@V+AhJ1^VNV4GsNeNE*o4uzYbGO@Tt{ioUA1*qXG_!M-;9Yp(2kSAz)%kC+8(m> zpR3?Vnw~ZOTX_-u&16ELYfyCSQ_93WB4Gl2H>ldquTvDb3#I7X&mUkzi^KSwgt>k) z@*UN(pI3(6QI7gJX#aH~^neKNuH1KLr+Yu82Ct9g47~oB4E*IP`gZgkIGio~x`Db)Ga2I*@$C6MPDHSYu zo`xr1K5CFTMVv5%_q`2G0uNx0VRqlxV#2(ZxSwxb_|UoVEtE~)XxiChNnP&&IscalwNRqd7l0U8`*{}iGk4Dy z;uS`9J5R|@OlgKN`h!86y~T*S3-nk*tuzumt;GX1*YP^dFT_zL0Z_zSbnsx;A}%T+ zo1!7?plcRCluluxN8Pw!p9hq-_)q=RtuFlj2rtaV844Mlb%=nxFyV3`*}IUjJx&tx z@jvrZH<|fAmfXR1`jEx1m3G-KGUNA55mF3x^>E?^IRw#ABKL6<^jwXdhot84t@XxP zeWRv?^+4IG@%)`p50kGFE4XGUeN^26&=IgaqX@2m*%%vs98MEV^=c) zPrS&!LHEAPwGQ%p2k7B7L|VUv)aPlF*vj%uPB3; zEVkgE0dvh>vbt|BcTop+SHi@pidwSf_cqo_n#xOX>Y?wZ9d3Tnr2Jh^x;u4n;q=#U zHCO^fQXZiyOedjlWKRZv*b}L9OGZL>C4|ol_MwS_40;b%i4*@t?Aj;&H<~EBAtBa_ zRc>V9BnkwaQGqcEfC}$TvA91ptwYIZQmz4(oW|X2Q%h-JXKMnHUNW-~y%q*bZ+KCK#wtonaW3-)EZJWV+s(LuOQ8H8 z;Y{6S#{TH(DOZKTf#av0ZsJep`kaVx&h|XPZ5=6XpSE6=={S^%dRPr3tgNz_$~_KW zf6l9Ee-`yJHutZNO=HxrZCd&6Z~ohoPk3VI_+v@y*)twhOP>G9ePG-*Z}MDZv#b3I z=@yKV*pZ8_y6YPbMNFncXiPjqzjKC8$(9bNeOMg#M<#?|xF+84hh}2WC&0lk=C-R$ z*mtTFx#<>3k|uPYy9tp>U2)N8WD|uqGvR|}16F2wH3bT#ElP(pOFQYmZTN1rH&K)CLI7j|FL9=esjs0s<4ak zeQQEyd8*xRqls6L?3m5USFD9LIJVH$SFEL3NPmI617}$gYeVU9~8%A0XY=*4aqFO?V~qSGbLa@jo<1C0%%Vov5_ryD{Wa;jA89ml7Ktt(jjZqHQpB@lbi^luoatB?$ z8dT_3{oPExC%k|PQBEGtQ9LX)nRZ`D7^fc)XUs=)TnKFoJxIJF+2SK_A|Wt-RE#ps z90zsKMyO~Qb`0MFYCuY@z(N$^ba=4s60fz%$2My`3>VYeQkEa&$wXNol{Q2l3R`$t zsTglLw)}b+DP~bDh2_Q+T6y}rYv!IA^-ybkduzNH9=TvArJ$Lb3BNnIAS|0^)tDR_ z%>^{(VP{2bm zuI2lnYaz{AIs34j#@9=asX8WHH_*3Ft8fQh-a(1)c0*H!-oXaGsLa}*yabkQpA{Nw zBh>|%YXw$hpx9zlj+4y!8cvU2)(Hs>H|Gm`MaK$5pGIh}$g#L<()}nsMKc{8EX-ec zK$;C!Y@|1NE|=wsp9?E=wzR<2qe@BnWtH^FAC(7kbJMm#OBw6zg>AUc{EqyYs5Myr zo-t3i4-c*)-bvFJTi@}sp!Bke3)>0>)tAG(Mq$*s#yeK+beq~C%i42yU-Tj_Ee@WV zii7kf9d-0&*&5v4!uN@;<^Q{HL_G0h3DXCWwT0gv>h)4rBx>+^Ql8K?qg}+rb^TLww$&fo?%rv` zl2x7Mh%Y{2^dWl(F!=%3f$EF@_T{%(8?!9$$2ztb8n2Enkr@4d=TVr+Zom3k#{8h8 z7ZpxiHhS4800y?j5;VnNL8YHLk*W9%`}`*{+b7tnT0X9eUYov5nE!(NM3Dqb{|9Hh zN_kiobD@QXXRk;L80>VVPyA~B&s;w@d;{~KU&M+H(eIdLOjx@%&5+ck)r4C3{%^TiH=83`yV@?}%H$_??-1~gOMbZVt+|BPLWwX#}i1sSrNti0=9r+IMJ($*zNUrVUY^F!ju zIMYw2gblt)xcO<KDl*q$Xx z$?1yQ%#4H#hV(w-=~$e}a2s>|_d0AWz@K|4LdpQ`D1sT&Xi^oUgDMS>g)c8}yqhy= z;gfY33K3Hvl_TAT2Urt7`R9soqn>0G%{<)q<;RjehBtsD$ZDw&w+)Najv3zx-$$4b zUVOu_ZyEqYY_&yZ6p*@4g_;Rq^Jz=nA@n|}> zgM^zOu+JzAHhw1fe|DW2g3O%YHgPk%!Or9Q@i?3FA_vE?%)GHK zTx4M~h_a(c8jrS|W6UR+N7g%iLB6|w&%Kj*q9^Xxh&bDanv`kp0kU!vOS)3F({w1= zKd*7X{+Qarg}#yh^EN;-rvGO18L>?96~e?%lGQ!aEz)qsxOu9m1!;?mNH{=m4~w+ z2zKLj7>bjw*lxNWKxu_j6DnA|Wa>j#6bBm5jFLp~y=a{Lo4qBvGKKhn(PIx6CS@qU z4DJtnb00VKrFaGF0rRH{cyC9*1j zpDu(H^GRApkH6aZzgTefXQOfs`~K6{X+xI^-#IT@TwU1c5c=j5`5F!Sots4ZS8}2K z8{af7SwQH8mp2qF=32G!J3LX|ZpsJwm$M zl$kUHcJ}e2=qr^fi-URYdf9%dQQ!cfIb1i!Lp$}>)|PwPMoWxyNB`)dd*#JjDbyw>S?Ll+q+ZL^3l3*m6xW>dcToc; zq^ETr>zvyvK4P&&N?n*nC+OL<6>WYNL5khoU1P}fptsZpndl-z@jMcv3>D|G&}Uv! zD(vOG1UJh4@6_&CXo7;oE!0nAeJFXZ?o4cLG(1{Co!3s>VLRaq1ma(8Hx)+~1Ht7V zRl_5#le(!M;%(C*;qVHI$mLOFh5z!1DvPyWNi$oZ+_@-g%a(1C#=VhIazFmwg6aDF z+zvNTllKX9FmsgLYSFYMG@txhT!Z-7=t}Z*)5k^0e|EUV+;&6%y_lK3@9R1;d0g$0 zG%`Gv=5%(`hP#vcW=(EqxE&PZb4yyOn<{gTw!cWtxaijSz#}0s@{Eb{!CBs$KGxa> zqr(=8FoDJ!li#NaqZvAWbGT0XT~eKdtjvO4=o_sx&1ZR6ocY!rs<0*3P8%XwTmRDZ zWeAhLoidkpQEkhY|5!44V0ttnXv3u^mis=&w!i&o3@8R_a9rf78f-fa-nEWjN{r*3 z_jNEA23-fv<`;=v&V9zGZ1!18jn81GurOd2VWBlcaNM6~ z2TC-omfo2nh%!6!0OjpcpTczs+Qrrs?`>)J-i^c8_B!>nTdqqmKRp@3Q|^k;$IVjr zQWf4dg!>?9Am@C^8)B2DDYh&3z0a7ih>=<+I@?Rk9HLQ;V~hTv>~})UbXhA1&pQoc zmj8U|gR}AQlPBk_#RFHxKRTcF9?QrT!p(DWm%AtM+ndLq%@79T{#`tjoh&5=f?x#o zMv1XBK{8)$m}N1_$weIA%^;!|9PGAmEe)=L)q*~aIQnmJkjnc|>r-&=I~CNChlI=K zi*djVp83q(g3qBxR$dF;xi?Olz;gFF?K%>GNvXRHsdCXa?pagp4p|MqlqfFftj{N z`|14NC4>Rd*|+LuN<&M1gx@gq3l|fS&@s*4w>TfpL*fp0Y={xBIqya0S=RDMX^82wp_Gc|pawlCyco7^U^=EA z^d%>-?S*@$^MZgd(*9*OkHW{BgSK{jMFG^FPr^ltOK-9jxaeJrf%+Vaw8g3REN?SHhk3rS0;x%XMWN%ndCoi6Jv`cyU}DeeVa zb$L;VL{z<}lRjzVcP*CKBXozhOP{hJToe;3MzqR;u41de*%_+H6-|=67h;I}&ctJ- z9950;a8!(pzAG1!9|`dj=QO z^|i5*extw|v-Pk;`_O*aX7K>oZ--k7!nM(N7#|j+)isT8G`U{v@M#EM_pax$^PIl$ zIkogJnxStu@F|py@%Co_r}gi)-M8XJ$HKaAA>5hqQ&ZFQDjy&PbS?f8rHj4}YanaT z_lOd~DJV44J+#1D(J?CG)SC?c?uy@Zpg6 zB%?Y;y7y}|Gmu|1WUJCQ9C?ko?yImH7B&}&z3V%9?bd2oTMGAIru2$9vw{#kO*(j8kZQXA(^13xQw8btNsK-O)hjJ^6h0iPK;!N`a09z>>3 z?b`K^%v)jN^J57l&&0hpgJ5ifNK=&GnH8nQ_by`HvZT=M<3f<$-nYnQw$AVg!$tqC z*qy8$-uNErtQ#Or92`&}(Y&RFhH>5wshCR*JUZTJP5~+FuNjt;#nqMg#%0&r^ZAMx zbOU;y*P9|N6ij4gyM0rdLS_C&xeJHtRhP0SXFp0t2!kBt2reI|TpQRsTtUoN9zpZ- zjFdk8$B}R}8ouOj@5u5|7{syWGd~w|nsZ@Mp{J+r0%L_Dgs#gk zvV$~F+eh?xJZ!GYRg3>{(UhX0pFK-rjW=54I~n31{>l{TOaH#qT-BUyW$NRkZqoGg zYW?*3s5b{cfu_580r%^_17Sv`&DZ`}E+?9oiK?0Ft{Ja6EPY~YE9q2POSbfHY<89T znl+CvmVO{GY}>xstX0ifLaK>VtN7|(Hw#4N!wc*`IZ-!88|81#sOcorROWWIyd(Yc&E_PFC8KLz4^d6`TimTpYgT* zEzEwEHj7^t@M4UslZtB8rDy`J1!OCL!omcBs|vPEpI!COEtfqbI+iWEi}>#y3m!lp zC)oeNaSNqNmQsdXqIM1skjBqQ7^h@=6h}frXWxO43{&|g(Re}rIu&!XA~P=@^vime zK3kt;9_NhHRo&4uY!iPv?=lS1ne!m;;v&c#D_Xk-H(|7|J_Yo|25nYEdIb!*KPrn6 zQ*n7(bO8A9lNCO57>?*qM&7luQwu1Sl2G0_&JhuhO*M)?EHnTUD50TXsQk*R9 z=&;?Ope~I7XqzQZn!w>b$+W_Xj2GZKQ<_PB=DWaS`+G5t%JMEp?D#O?9)E%}JrpG+ zDkB&76bp>%GyXH3pX|4T_IqFB-5vw6@tpz5_2>Yp;m2*$F90q}^QU(!)n#Z#NTzKI z$7mlG`eVrpIPMm#nWfTb*-o$CDPuRVI+1Vvvaq)XD{^Mlm#vd*aTH(MBu~hB2pEpB ze3X3VUPWJl0pXnmZO87s)mi8^l&kjII_M?oX~>!CD0 zgA*CiYUO;JRFLEo3?BHpQ9ScKS+1%j$+b&U86j6p-NXMWGaA@}+`*~kSv)z`i24B^ zXvi2gb`e|hGVWg4A?aPQ1$nK-+EESpTee>Y-1PoX%381%HbM;`z5AU5GDw`sA4`5F zTq5J>^~eTY*e4F2DeM-0^S!SeJ_>$STYbY<@uAM!SLiC zhp386EcCdXG~Fp-Vrza<5NRhRPWjJ-W7x3=AqqeLT*8<1_p$A~gR|^)SQ9+t;QLcmCYw4xJZd&@0`#meq#NNKM zmhj7Y-XC03`ZofOdvNTLWXHSEUB%3?TtCtHR3{Hx=^@FirXS-dj*VsYHvDD{2|dpI zcm_8KE47DfgEg<)%O3X!jPSGT)-dlXf|^@}nX-_ZNGKH60pMV~o0Y2a?|F)rQ~m2% zwLxkhf81IDrY|>zATSbn8P5*~yP~e>#r?UUnLO64sF$r=7g*61G49Ho(C+WFfTVvC zuY9!i%@i?A-8&(DQ^51`<2fBvE(Q0XR=Ke zZL=&OeWaKPcAWusurz~Yu+!N&rfzq6{TBk@nfcZW1~_`%&D^voyVYSj+uc9p)c$!X zjCARH3MYSg;bzYL0|BQZp7$^cjl!;7F(I1g`m8y-8$ai%I9l%TR?#NfcJKHm>TKwq zvt{Y0=u?WhTljYu`~Y=5&X~u6H?VEPK*GN5R%x!<+upPx_?|A@T*AVli4nFs7sPWL zkJynngcMm49Tq`C!t5wT96bQbSO+C+zU%EYO*Bbq6DQAhbMkg91+5UqDc}nbK!M@M1JCN*6mxi&4sc9F$XL_fXayW zc^{r>H7ZWtYR)V|w(@#`6~V9G$*ofyywruoo-Lu?Ngm0FdXAW;Y>Mt{oN&R{Q57Tb#9fT1 z3`f)=$trXMWnkMsP1r9X;UqwRRFnlR6B%6ggo+db;HJqU`vUQPs|%;&wvRG62WE6r z8*HSH%7pS6poEcMx}Gg1-nyo*H0_JSH=byLJ#_m%KVdAye2sw18AF{V z;^d=f^0~#eCW`ckzti7)1{c~qSMGS5sxGiIOec<~`MdYzeEFcb$sOS>j$dB#`d} z)jmZ0n!Z`)%_q-lei`SeDObfdu=|+UukPY&T4u_PIBY$IJXhL&_X4?nO1Xi^7b^kW zz8R|AD&Z$%@2Vbj*}&1?bs?p_>}$DVL{5Xn*Ys6PDh6$=sE*)ce3PyN4msY0O*FOk z0iBDP=e8A{#w}ck@K#cb~YjxQcqoHKb3`L63m zvZogtbq{sKDD6*iUP)$SfR7Z}u^IFpVONoUcI5Np#>)?J7whdc^(zHr1)K^A*gtE%-2 ztI#z-iiX?UN}_r@7^G2Mv29!f;o&~&z3ajIc_NPG-r6aww9bFnRWNG=A($^K3D2SF zwiCSToRy*L-Y8yx<<8XI`l~hE(4Hh!If|G^PU{WZX<`^P!bIX(Z(1)g)WM z?HJ|3Pu6k%^_yVEOw$e^?}KJ?i^Xed+@<(h0zU7qX-iGdz*h zz!`r)Y4(_narL z9)I|cXU|)Fz};CR81Kr&)<8;>)$D>@Q^H{Pkv6F2i>biPIJRIqGE*l_Tb4kiI5ZF! z>`N>f|G4#mu-+6m>tS3;!p*f$N*8y{7^KtZWhDX2kPAgk{XdqxjcaAf4Qfkw=Je(8 z#@|gQHlGg3k{&}G4^qAv4rngIVpdksSm!r*#*&m;NI7o(*9raJ{Z9y3rw<-1VawS^ zr;YvP;0GaTHXeI@a1Bl+stA4c8yE%f8)1>KIlXLAI&b^K^6XbcuN47y-HwLe z4xols;uTLoZ_fnA#fqyjfgY)+^V<$bEcO+SN&DkRU7Ku;CI+&U zBfH^P1>O4Eo?#W2RtdZ`yJa(O4G%n`b1)lx^K; zN)GZ|arO^O)okZ5(z*!KDP`$G&=FyEN-o5lZE;==W#uH*4=^jxZCkS@)`#0hwNr_C z4-fm%_nVM+ZztKz@Y6u!zUBHIn&x26SA5&v$vlbVzr1sv!X$o%wE=BEh| ztwpcp#vl7Q#^d-Q!@15kFYP7_W`rs=+BI+^!b|t>Dh*A6_3O(iU|^l0oF~3bYF_)k zut+|0d55fIL6Vcyg%zD|^Qvj)GEOE$YvZ|%VmQntl*pkg9pBCkcF6W&t0M#zN~`pdQbwGG^)^q(o^*=;E+;MT$!BPNfj|WLW-HHo z%UwWbGeeHxvFFP^vu}hJx^3q?8utu)O)Ek0r|UB@Lh+F${SPN;G(_WL!is_O{dGl;o8_v7YBOJN!B7 z37RE6M~=hb=D*psxHW8nuM5l*1;T#qeq)ps?y1qwlNk%f-=&k0ntjhG@+VC68l)5H zzbz!aqW$R)NrWG57)QCY-(yX+xg+x~ZC}8!t8W0`sPKW!M)(h!e1q9=93EI|uuB=m zyCv*6gsrB66qk$SY?#K4?+|FWDg}%oVTjeK_=Z@lbTklJK&<`85`cHQ*GNOq;^f{y+ZMCX@-N8cW;iucka*3E|FoI#Ahd2A$o&$9piWqqNnh zYCbytc7@|(v}&?W5vyw6GgIC5I8o}9=&(?1CO}GK^m)U8@qE{qAj8loT1FCwpJe_e z`{lQGV?E#n{I+N}@*hZvYXC|}kl_^0P#+xU?!lT;*qwPCHT>sQAWSp3;ObF~UM&D1 zL^#(KrW|bJxJ?|B+uM1Rg?IB7DBC#G9be_-s;3c&YSHJ^=r1!{k*x>?W}sV@j(Ybk zJaT$G#|YE4ic|6P`A4DR%!N|O!JBO46#T@g53ZA|P=>m*-b>G9>3*AEZ`|EIRGPcv zL)FB3Roj7&Q7e@o(>PS;c|*KZipZemJQi}FuvGc080FtF)qH`D7d^nn+KuIuP?#3- z-cT3MN#m_Dwg%Q7##e5W^W;sUJP1?F;k<0gt?#v!gNEeTK5zSvFi3s~`w&vtSY+(Y2P0=H!_&MU z()LJ{_}^r?Iwb?l-D>7N$01iH6mn*VimB2^gf_luDEYsH^Td1P&9n&IP5jR?Si`A# zSf?jv9anz(1KueIMUVJrr1sD zB3_340tbYr_W#9Q5}DJ@V?*QxQJ`rUN6NBP&N-llQ&;b6###E});+q|oSU!lxOGgQ z{rdVysK=U(4o7v@*Qk5OEXhAgdj4M%gBq{qg~|fyMV*e88P&tDojjz)=lt+3f!nSK z9tlH)j_rC1@K*bFhwQ z`sR#5>pqgDO_6g~Q;wW`z{&LYE5^;CZAS_XHLd<#0SI7?M-=XlMbPnR*t`7y zxc?E9L+IuHSfYX7h8DaR{-hiKzEndw8$F*=&zx(Yg4j28IimG(?#~X*6WA-n*I1^{ z1d5^l;q95#4Z)ZmmpoZ$Nr3gMhrD}anL(0Ly;LYgzxd;EzMfizZ<!*FgCI+ipJTWP-7jqz5fRP8Ki-IsgjtqH}bu9Z0{+7x~6BU_T z&8bTQ0nUf{guIIBtJe@OGSZicy*!cb}e;crdvBor@i_Ehc`w~ zq|Z2~wCMX|Mb^Z;)0BmYUg%0a1;{U2jq*R$2d;0@%6n!xm`nYuFDHn;qK!jT**xj* z^^kIqC5l^9jrina&4A;yg$7M8kDKkW?nH(ocSH|FoT)5*kwl*6W1#|dKit7i+blWm zndpCRP>nvv2Cx)TX2_v&^V=|Txc-JN<+{N-<2WaE^PDBDwA*Wk>qQ1p$49wsWK++( zf@AG?mH?*D`SGV)b`v6&A*Jj)n1O5ywjQSnYZms;x<7?`t0eDABuuw|;J#|6S)Y4l z1zpyUC0QvY{!XD2Q#qfbvEp%<*~4o}C?dusta_Y$|JQxi@A2xA#CLrjm+Q_n&sT&l zucn_(yFl+#9+bf^uUdZZdg*Y|aA?571EkSFDUij94=JqbO2oI3QKslZ5%k#Z)GC~2 z2&<}VJS;(w{7VlxetSgJg=6>4@AeM1QO;eYOAhA|{d7x<(D?^gw(V@U>Q&s@k<%U? zHjp{~U`Nuo(j0GMA9@65;y=%T!J<+4R;@nq+-$H@vyJqiXjADd=XI4cW#dbRSY{ZL`bLNJSGsV^Cfg59o(%#7(Yh1E#4Qkpl0A{ zb1vH|N3FmE$%Xsxv|!3wxn4v1yj&7p*$^!CmF$|f&kBKDR%jwL!)Uvab_ftZZ+1>! zHrX{-D@ZN1-yrRCe3rd7p@J;?gFVg=7p=_W8ry_QmXe~ea2qLQC1jL)j`AnHaa$^p zRWu{qZMyo%ejQvh6ue3P<~@d&c+=`GH&-##x6?(pK8}2mou?bRfgxddJ;&^>Q66Dn z=wBiF^l!&i=b~N#W2akCuz7oa)yFu(fzwX4QHd&m) z8mS1PtAseMX;71rTk`O~jlpeKSI_m&OHvQvb^rM?{NFcW1tav~ukI)lb0yU>H3%o$G_&h8LB&Hgh~&X5}? zf4BF1SaJHs_p|lB^(|OiThK~fIJIYffkF<9TAWBzu=H?p25TU6(mw4-WUo@VTAzFn zU8JTv;WVexVKk8|vQ1T_NdMHI5or>-blUPAX$r)ZZTWusK=w7wxCZi$>VXMI>j|so z*JYowLntlJ{}cCkN^&W92;=nWRXhqMrV%&Q3H&X*s|&#*QwoTpSZX#;hnL zYhewF1Ii;ZM}Ke2iNVBT|6u=(Ahb-`NueFJP&GaOj_AIxBU>RHhVGoJ0Fp@y3h-hadsakycV?;CtDj zeFJ2fzV$5&GsS7F-gWARat{^F>?eS&a`%atX2M?begS%oEbUs2so+gzPSF1I6!z?7 z0NF(-o@Q>sR3mB^C3|lr%+;D>IHWgESfGzG5ubAJznYAM3SHNSmZTGqm`SGMlDRd+ z#|pX*YchP_!aIS*6DRLVfWO^-wpi!93_)6~53WwB7UnOgN`3bu_QM0$M7l zS3}spq5onBov|;_Ek|+2yb-EK*}z_`J!Y)_QW4_$G8fGc@Ctw2x_x! zurzl**FB{&z$NWOo2YZ!l~tA#aR5sBOpl!lRjuB77Jot~XoJfdYGO&m+h4N_Dya8; zm!etJ_xH_-#pIu`1i+6T{E^!hcFt=@guzck5h*tMHy7RCaHhHVchtefqf~aQWc_%yQa62-=kn&NFBqU%dGWk28Cr1&l4-2pwinkRNSQ+OcG}uyPYSHp==gNOCj3A+X-b-W@Fp zQkSViyL(`%)Z6{M`u`_$3ot_?M3STKrUj35qUGgh zu>@s|;ev4+ueXmE7Y1tix-yq^_-r>gsEeFCnK5aC1y{(&eU&|n765PkTY2*RzI?^S z<=}q2eiAuH=xX1D?%sJ(@bdj89#>uIDnu$S6M8dTqm^M_M-mBhbv9qlLt(Oklptb? z&jNKpc!wb;R#Oz9OS8>MD7Rbgg}weufRbhiC6`RYC#+)K%u=zpd=KrUD4GL{)-KnU z;pRT`8hO=7F=+x;4;%HQnKedqD$Ep`d@+ORT+#q}LbX4c*Uy#|RGjIEQCtE+p;$!iTdgN>yB$%BV7V$Nb8Rfl2#Q@@w|3 z%=-d&8LzKVaUsxX9@No%XH)~R)$k&heg5(iRK;ozD5n-gJ}<}C3nT%okofBBRm74K zg@sUL0YiN=JS#6GJDgGY33N%D_(PupRSU`UV+Q0d^(w`hUy&=XAyu76djFN1Cdr94 z9=6c*ohbCMQW{1{V4$aht@2MltS1eQqj`iv>wL|bCw&#gi#=|_TuS*f;)T1rJ(Nh7 z;Wh%2oO?4J7eaDoV%uCv-Qc=LzYw(RT0Ph|zvj<*7S1+%_?9tXAaUys z*A!y^<1_KCs{es9q^VuXLTnWxwr0q7YTQwg8&{@&L_}l5L};476p->q5%FQ6Oh0#C z84==k9KtlObS~1c|Ip8wx2N~cHOda)qzgd5YEmxkt<$$g4=#SabSkBm%Ihsr-06Xdn@o@4Ed${AoRK~<106{%X#V>Hu=0#tj zdnA9Y1H6Ucr8sKjB;&>uueXRGK0D!!Zc%u{r&R2S^+X6tb%+G7D}+LRY#Bp-!RJDT z8)+;zTDgTU8R|!5$;u<*YTO)uVw&Uyb>oU5*=yt@7}x?Fd$r~Ai=1y;$>$=dtG?kF z1o1R9TzUD~5QVGw)&8CoBA8%>t23~eH|#&!2!0Hi{^jR{?*%e8xM9ybqS_&cFx7gQ zi~kT(Ss^Qad`-VuyunwqDZ>|C? zE|)hrP&0#kb=3zo?X&7%!8K$hgzU0!CFR8}mka$tP^)yTxxMX`S2>egnHY3?80{w9 zd3&)fh#3v|*HBgf`c5rbQOE1S#%z#5b{8w5O;48PPu-D8*@kq!w#EwTVz~FvXJtE| zjR*_P?w6_dtyD5r%fj8tTM9#98kw*Wn2EKQ!p_QX%aI$oUJt1gsdfH4j1}~xTK4^l zzca`iwi3Gh6tNj67LNE)%yapj|J+}Rv>n}8^aWgAi;a|q=iox$LtO9yCT|z?mdEVW zWO~SAjuxS*FKL^_nUesPB^Hr=^4?TQZP1uP5KNHm>t!g{yOM+seWkTqa7*3pUddeG zA(dts?n3KWhGK4`gHxvRkJ3%_HuTxz2>TEA?Ej*BHO7nK2GQZIwpdG;{3#Pg1u@_9 zWfbulB2KbPtQG~&HP3u|Bo)g&e~-{!rZ-)n{Pr}zxd4j|fSg{Kdx@@z_%#AO?OnJ+ zsPG9gLNZJv*-?cfDpG26AsDC+f{IidQc2G44)C=|LB^h39wLkG;}+CrF1<$6=)bvl zqpTC+yyEW*$aHNNW;@Ni10jUh3vrbn^4M#6@)Ff+=0c2f#tbC$m!}2t;Kl*9b#scp zZYE*tQ6d)RWEeF}48+aVGNy4q+Lh|u=4+`w6Wj)G9I8xeh_RjHMIu}A2DD9*a$Yri zsq7}?FM%KQx?^%$nxm3DC%};3*)0s2;jwhZRvJmx5FmlOtXbvu-0ymF|2w$S))y0c zo$$c_7cf6CN{)NPghi0n^u=xB#0R9>(x%hsR|dy5*FjM?peEa`F|kGx3pNJ76V~$| zp1V~$LnC036jmK$0dT2AF{ZxY0Q3#l;cC{DEY0S7*I{`2?SBGnXt2;vnJQ?|ZY!SL ze)Em@O}@+9njB_l7y~yS2an@-@gwX%(-OsSm`b%DA&zkt2GAn ze=EWL$}9MTJQu95Hd=b`;WUkps6<6YK}=N;MPR;al_FxQY_dkB zh=7QSC~KyQf`XDN0u>4=A|eEcECEr-$Ql7LvIc?>_C1iWgpg#W??Zp*y#1p+r$>{? z%x9kEKKHqoQS~8`cb}TKsATYdF?rrGGLkqJhs-ok=Umlj3oKpHo`hioo_h5lBrIbP z5{&U3I28YzOx0{}O+P}*kupSnfLkxdUn4%qMh?5z`I7l9e?TIRMvyy(W2rM=_RdUV zVbit`*smMov)Jb3L`9TX6x9ix`H50+aX!zQzae5Ft!-CONn zTk*4fFc2PD+TvI`QGhHHpxpTd+XO(%MAZK{j1zbwa`DL?XPIWB08}Tr5kc(kJ+)uKRi*tNgEzSg$mZT@+iCJ%#_0yA{adEAtI@ zHbXsT0Btni34gu0(aFg|Y2Xr%@OwKki;r&kZ%#Jx!dWi9aUAa16X&z%PE~AQJ7g3A zYv4^W(O=yncD;Q1+zL zo6H4q^Ot11>+L$=ZH^TvvYT*I85Q3XSB>`QS*>%0F+uNPUrMlE1F zS9Akt6=%P~pu_Z#ELM0j_6n2|nP>|Y>JGlH5#a=wjZk*Ti%aaj*IP!)#Tm+Nzd`bx z9nbb-5c}MzU+z>)JVDh=^+x032P^c>jZ3`%OaDFA{P$SsMfKSO2c@K`5#xv{&r5FG zgY)uc-q$xoGl>0a#&&v*Ku%1jsdnaAW4Qm2@whELR$z zQSc>gBPjh8i?2{88!I#l<)$w*O%{yG>}FCF8_?1P7##h!yfIBZ*{rrw4_RBT5Kg}< zF41f!itPD1#rco&M~;y;D4)}+Kspv}SCtBiqb9nw!#Y)0_~3&N4Sc4(_ZtU(#}~6k zYo&YOOTVLiLi0$iN=Kla?WISU`2BQ0&?Fz5uHmK9`i`0uB&Kp-dc;cF1Vgrey~4!DP!(CN zhy?H3r9_=0dM+MHkwsajdyE$Z1Iw%aT?)Iz_}}94*!qEock1~D4N92eT61wnvHH5s zokF)ab=nEu%sF&!$q1N+I?@o?iGz$q*dy;0`m7Kf-(p5Nhh;WB)bB?NST{0VP$Vn=L!d!4$nxV3{j-6KKD{-m5DA4brX2->a9c z#Dpl6*N_)BQ4bF_zq+m=d|+C)FwX95aq|=}0;^AZCg5O_$35+^X8eWYB#C)Uf+l{? z25#hG-VZXajrcNCn&5%>=`%(~r`5|i+Y4JRC~PtrGYvY*Ni6hK<1~3rM1J8M7aHuE z;UDCvuzjID4g;JGN%lNdkJCS&|3c~bj3Ws)c*X64T=PYNw_~!8-nb}b?4^9GrfwT@ z*Hew33QUehCL zNzrd0Sec_T(apd!MJ5#lY)icVuyG=P6mx?t6I%}oKyByBY!eS}I{*IX7c_L0%%{A? z=yrII7qab&w~}>GL&^vjuFAZ2t8iUzNC6MG!*9kG``Q}W!5s9bsv@7kqP1w^6x9Hio&_zZ#DC~&E zXfHG+wphVnsNWHLq{q2u`7uiXlls&7{T}=+k{`o0ixkzbC&95^?KY6!eIEO@`#h#C zmgr?Z3utj5682Ds_XAO1VNIH>`jG2sT9$87VIys_CmtEL%&wa^O)#rbgGzYh&0~ zo(R6RJN{hhmk?F&gC863P`nn#C-TNGh7u07)X!<6%}}PTmmN5HueTh@rQW+{a0Huk zOZP$*r@rVY)qr5-&1*N57I2=8_L@D(CZKcJlX(em&ZJ5Q)%;t(Y`L!*r1I24#AyBR zqZaw&j}Z5q8?T-HW07^E1=PvjZqV9QC=6)JiF(k1X9(#`^NBy1LgyVoG+lm%=x}SMc06++IG8(KW@y-@@*q>I2+s)izSC>Lo0HTdJ@yx=1&oDo71TDS z)T7?D9(CvaFqE_!UbMJ%vGpPEAyVJbo*2lay&05*)?M`JV3ZD)lR&;yxz?*k`_Yyb zj%KjIhx%Ln&vZX{3D*QT{BoRtf3TNG8;khKT+AvJx&lAKy@x6@pCQe8Bo8HdN5RE< zUxO@CM=gn)5;`%aUu@5Oku|6`aUs{!=5R>zRC8Wn+6FPR+YGenXq%$TN#6zQrOGTU z!PnQpvJmn*-yTTmew^Uxq+qIK)YfZc*F}%UR>?@q^QuxGDPuYwLA~s}|Cwg8E2BO> z{(a40>e++Hm82t2cTf{PeV?4I7OKwH$9xyLQB1H?splO1l)C7fpQV*Gb${cpntIy# zYHP(I41AZ}?G@p9`YWPD!jpszMRm4PZaL&~&!%jxFdpGxu_wtUU}hrRRNM2wzY8jO z=L;JluMEaAND1?jTE7sTtZUdn~phZkfCuE740 zX@2R2rg)fO65zk==z2^>&uj&9O{cvKC0-2In=U!;&m|T=m1qnIEIxFYmA6PnG~GHr=g#x;l>lFbx(3^Xq!IO<2gP-n zjH0ILCB%F98N3xodl_vTdkpXIO~LCX!Y6`3fmc0&S^@g#y}(ru!^CHK%l+NY0rZ{T zHez%do8i}hXGQP6q=7BCD%oi+2>F1CswG5>8maxSq$3VPGv|?d=ydqHQc}Kndz6OU zQ;qk~%j%|pR)y&xU3pmEec;`|Ky6U=BDpO7?W9~2wmAW#zNL>0_}5;pu18IS()L z#MM#Bpbe*4kKm;X%t#5T#W#Tvkf9XLr88cldw2p;tF5Z+G;M|dV0S7{p3piG%#x3W zcq!s1v3p5cME%>`Mt$K7$30)qa@-y)-*?* zZYd`9lB!q&`gz&iOxf|Cv`9Y?V6|I)f`|*6_hp&J!*NzfOax$(+=6!hGnIyvw-p79h2G^4w(dC8t|l7bkZ zz4mMHguGwP3(O-sw@aSGJnrlC=o3#^QdxFWXyH;;C$Um!ClIWQ>5L|%V&eZGTp(cm zCXUSk_^r|McufxLX|OrOc{SN6@6TXp2z)@Is)>9J%HakFWd}(2ui;92B|Hc{Kheu5 ztLSnsy|`BB)G@w`Wyp;#p=>Kvg!hu?R$LJvVaV84<_Q4kz%ZjcTHO>n@k=R^)+yD8 zLa~!-yKj{hytZ`3nsOm{+*(ed(;Uw^yD9`uy=)f}f%f+H+-9W`Q^dvDeK2+E+xU~N z6e&l<*I1S9iE+qEj_wr=cl>HRJaVDs-D48 zvS>Ft8B~{DS@u_<DOhl$VIKhgSY+u?S_G!LQQ1>fjR?`4Dg4jWlh3oymi zY!(wIO_P2KJ}B-2Ee&d!!%n!<7yiHR0|VR!Qj6CY+zI>e=DN+9OsFZGATjRkLK$Xo z(XcsJ82+e>u2ApdMTFx93Ffi<`RP;95LJAVCEHDT7#Mu`LoO`MKNx3tQ@=fyzh=Vq zlJ?u|W~F5doPMBW(h>Y7vyD_G4F?QO3l3bU6J7SAZ7ALy5Am!=MLIJbs>JdUJnfo_ zk^*`zbq5Fm724E%T{$O%IC1A}*JG2%o|0=?p9r^Gh|KUvC1Yy8(xG81fH}5-mQ67u z2jL0w|3C(`BuNuQ+m%(Q$WcIqUCFZh@nX;h>z=E2zG4&-dT0=^cR!$DFnvn0NjOs@ zC~GNkJPsGMoL2V!meBJ(KiC}(ZTmQbG>=KPX6P1Of32QVO}y;^323hI znYghckO5eIDqzw!9p}+fa1=^-k5a_3Z^=%y&vELWy!OH0rJ z_c)nj7h`NfJZ4P_*)KZ%gQSz*|QX?^3zVqRK>y+8l51H>%O^Ve`bhBe^ zjtMGwqipQ2=7b8P=8D#L#Yx~_eKw?EmY{9VeEco&EIg`%GlE>Xg)67!&-*;7aF zyS4kTR5NETy(pWqN+g%~@dgM!E&!So7c4Vailq?L1;?2C;qp&SlFiURbm41~CNsQph!p=QBLkp8I1i&>u7?0ESYd(M3cS!VTw z^CfKzmK9EKPwV4}E=f^S$+%9|*}s+sWZVceqx4e?&;3LD!6C1(1yQ!KgQ;b49Gu2>)Y~HdXBL2{g@_FpevXt|lVa?hAM}2VE%Vxy(j!*emI9!z-|yFt9)t$zZ`duyEeZ2SBT$;BAty zq8?J@ZR#?3@nUEjFbVR=xM*whOf~SzK_FMJ4||svh8foGuW9DJuj<`ZZ@OF7tk6-~ zfZ(pPZiR3qhnrdpM>wN#M^U8W+&o>fz;9CJ;q-3hM82T9A{EJ1bkz*pXD^@)22q|--v(gw=D!83dY-_MSR4Yjb$o$c8=JS(QAT#YC#=qC zR+_A}H3f^dF!DD`>gx+K-&JG0$IQyVXy|2>p&nX%u?Gn+Yza(y@y1*q# z99UMd2h_+)549A&RaL6{RCKDvQ+^_vh68#{G$p;UmOiu8_5$JiNi0ZJp74%2d52g6 zA!A{w45H4$Ny(yU|ACQmJMnn_Bzk$IB{zgHvRKRDgo}GH{Vi`x3PSOXpXV{&7VDxn zpQd#(&PO=c2{ef(?8IEresBr3B?Qm1Lr@#^pkJ8?=XJ$WIfUMts!$uW7mI3UWr{dcDL9~qFd>J zmJ7q;ZG;aELe5Zh1XT^7+v3J*pv$y{%2l({=Xl|stDLP~Pth_A3dcf)&u<{Nv=42( zZ-76b)gn2w;3&8fEM``b+NR7VcP0=BI|%C>i4)E=c={U`oX=WeT>f*^I+Y&Y*kQPR zo9aOg1$jg*wCM{>?83*u=^9>T$fkwEUh-XULr;mv!+p9{m$kJI$Depkvtd7ZMYEpQ zFg%^HkuftZz;$Vkm=upR0Y z*0lC3acJJ)JsIs;|WC8T87Mlwj12RJBSIhf;i&EQ7YSIwOAMm3J9jW?%8t7yFT^FaNoy+B~t?u`^@(mEvp?p-a7^EjPu#FF80QpZA(3Ed{d%|EE#6i~eVcS;$75^S(R&(yn*YckqHoTWAKsaH zOTqobC{Tq-ne;YZT&#;HNE|BcW$~S49d3o~g{2CgS<3h4OX#Fi#0H4c{~%&ZRl!o} zPRVN0qu6b|$3GC$HMj&e$^swOxCc+m*dFPab7R1_Ko7DD18SLpo$>1#Kaxu&8KiXQK}i5!u^gDOHODDXyyMdaAC{3kq1ckKG@dtJL2^) z_;70Vc8;C01X97Mi>5>J8Ta~@tiz18r4o`&Az!O$MmId36D9La_MmO~+E=trGS_H6 zP`Sfjy#jrpsU_Yq+jh-$Ds$i&Wu6Jb`}HNuN@gxG;-1N&A17*_d6 z9}HI<=Eq#>ty7eL2Ag`@@^S%7;Egunth#49-CZhQ=vJgjfzb>W8K0@Sn~&z{e^Szq z%%e2#mfLd2#OTX3m2iGH zq=DJ2pJ*%ZRESL7m3b`EhF@l{`vufX2f{;sOpyl8CTzA22^DEU?fm+wU6rYd&Te%CNkc=X?ff6z5j)r`uwz_uf^}6fK9S#qwzFOYlMqbyLFupQe;a0 zG((3x=hbiS=VVY76XJalR2PsrZ*wu1I~BZ9LNFvL7KIA$!F%Ic%`e$;xb?Hv+JSPa zWo&PVEXggW!4fLnRysl4k|4qOeWI&NtjrKC8sM@_=Hr1p_vRY@)1Sjgwc-aMFgx zaq_i+=-C@6_j7KowsJBII~L{oC6oT8)9Tb3#2fRV$o8g*5+xI#VU0BaU3QBshp@nH z0v7h9gYqT^;~U##J9#CMo3DXBtp^gY;~QgCSE?mip%5Se@Q^64vvZpeJf*4>t0PIM^{kMKZ+2PF z^XnUBBjshN^x|(dNu8aow%gT(9a-(NEu+@Pu>du4!XBVkE|Uc6njlk7VV}UChv*c8 zV=rmgAcl6G?D)+!6gaRarJ0OXGJ1Ku0bRhZjhv_aCOxa}w|jw>nMogsU;?$WG1~x< zdyvPoP`KPdLbA`g-{e{lnupe&s%d6JBF|CSrry~6pT>(h>gQy9&~$$j`4wczID3T} zC}0%SBLJ-lhc7S%q;OM`EKs4aIGq*N`{T4S-C^C5hcp_xJp~F1@L+3phpm8FlDZc~ZeF!I9uJy$ZjLu`PHX$J)Z!FgTnD*|nsL7icDkzDt$Ro_mjuO;JuDGPY}nQI?}Es< zo(@vEP`a`tVmCU$lgpJ=GA@r`QeKiUtFt}sT=6%MgQ0Umqyjo8`caHSqQA|C}auU^7J>4N<{ zF1Co+=O5h_UgfMe)+ffl#TMq!byt1kDp&{K^+(&4j~*z9@(8aOK0SlBX+c+gKd6^< z&kvb%g|4jvBLvmzZRm7}A6oFL(f^3_ZHu4YK}6_z`?kYpItLdXaGn-uRGIQGs%>@!hNUF;56q@M9xfEw6koY`!-+csM0o`)ngcETVH*# zKj8Q(hd*`a4&h0+n4^sKZL+~if;y2Bu^vJo!+{6`#vG<`)s#ducmCLtt-Z=a{`aJZ zA%y1ILlc)KD}w@bA~TD433VB@t)|E2`@f{xd0AwxoG^^Q=_;YGTDU#zyd}A^_C2VV z3zQmxOz9k$73d_ApXs(qS30j)_v!WL$tFMd>a{VsAuA)kHq;WYBUlc4=hcRwe_=1k zn4WtX`ufWKXaFkuvMyz2FZ??FD#K6^7IOh+bWyvEc+*wP2Yk2qSm8mC%#OANi|R z@M%V1JTfUWKF~|oCU&~)W)K~Fvb^C+5|4h}iwx|@9<@T-D>JFE1)dN-gP%7^9&!oc znAVvuulOGAW$oAeQT+NJ(?-7lX5IY7c(L$QgRL?vaUS84|A-7?X`*HxXe_2rwqGWD zYc&pXa!Hd7h{9{fO+H6gd>ba6B!{fONm7ZLYboGXPyT>w6DI-8{Kr{yhZgzC2i^dK zy$|^tDB*%#Z=OW%BNIE7rt@gnpgq7M*i)PJru+O2Ns_(qo=JV=w+dnh=LwB2k9WMA zRB3yav3evhwNP0Y*v$PzcN_3s8GO9t9UN+JRd@`gHceFd!E8zob@h6rzSt06u|D{v z2Lp$?S_VjxsU1fYww*7Hd@eA5?Msu89!rSGZn&W!?Vpk1zgHCW#+pH|KI`zoHq=k4WjV$AgR>sX@ zk}b~~XLAIQ^+@|my{Omc4CeYF)7))NtH-($IC^Yo(*8!!!61_qYn%Z+7E3&m4bM>bAvT-7A1k zK2;2V;R$@T=9>XA624bOUMoXIQit|1_?l)4Js;&}=G#Ubm+m`!g|u30E0=N%Q zHURRG1Y;U8g{=k2`P13_v;``h8|ar6bfY<4)|XhD5-aevJr-|l?@Sq_8Qt-}Yt`LQYx zm{2I!K}$I}7VBfWf#9L;5=PWNcyk?3UPp$)wzq-b8>d{05KC<&k?sXDlvPP$udpTp}>v z{4?I~IebST40nGvY8j2+k$=KkP5^(1HGL-se++x)PmXk<$^$DB#Dl*kd@R|X6N~IO zhpSD(ydd@r+D$!C%%`{?lxWu{AJZ*F<)nE}$5Ptw;%RJhJsYwhb!zrh!BK~#)Qg8g zRS#bao`BO2Kl5Id(iM-rm?!f9ELu(FJ_20Q18>Y>I{T5&P@D`Tim=NJ0S`9b^NM%h z=%M}*$W07@H-{uRnM_1xz}etC8vVP#pw9Ogr{2%;iK=tqv&C1Feoc)yUz~m^R%e>` z03~s>g4HBZj9#DRBkI>jGz{1ATjEx8QEwQhq-H-ZR5$vuD2i&KmIDiqE6)Vln1o@F z7ccq9_A>6%wp@{dSkjxm2w!@q|LZd0YDZ`w_dPjuOR3UL#Rv^=)hg3U0fcTM6p)ZdK1@-Qv2X zwQ&c&In`;$fO~hNxtDlK`UxI1Y_Vc_o=*O*(vT?Rp(ecejCw_u#%@{)?j2x|cSUbi zz1gDO((iwtK>1Swh@;Q6`p9Lg`Q91U`$Q+o@E|mA#n;zS_dhgDzfQSk+@f4t10Q9kY;l@pRmmF z9D#MZsLPC5NbYtnzc-?_=3c`SZNAb&z=*jjTn|meR>fg|unJgnv>$)1z-=DT@emig znQ#Tf?$Qrf9>28S2g<^B^|SOIzYN?)a%YDaPB?W0P&myhg(5fD_KhKHPDdTl1zXtv*m(cxXzsJt46%aM!i>R0mn>tWut%E=w@zUpb{F3m zN7RR>+Suz}@r`b7ec!C}b!tmtsL0S}(E9d?hI4!Vpu{+!~1owB6z9nhJL*J$E^L7b)NOAb3b)T)Cc)< zb~UcDdk^$@FKZ{wKjVMAV4u%yw~e<5T58~gzm`30*f)I$zpgvwD1|BpEFi1l*7cgF zUg4|uvR1p!onG&9olj&c&wXzQAC4z>0yabU7CLhZjZ_n@@ym+*%i? z`C)rtb1Q0S^^7W;DToB?y-_&m!OOeoVVxTb#o>1|MPpgWFu?w|`kYK6vrMlZ|2pvb zK%g}mM$;kc7~+#94&_$)k~^Y{J&uPjfs~iYTDXf&sULbcsdzHl6@|U^;WEN3x>SFX zT~ZAXeDW9RVoR~fN_8#Llmw=VH%Pv7cEjgR24qAE` zGBBmpr-CYe6nw3|m-E$c?;gKeN~cF0b{5`>ova!-qwbH!w=@|bKeA+#|?4K$;tzxH^*AkI0s~}u!c0n9XTenb8}7R zWuE8y`Kg64nf{b=bS;*zUt$4jPNL^GEfm6z0FIq}2pi4vPn->7Q&las!>+mF)28k* zF1l5|49dyps&NM1x(ZV{t5xVe>RbuN?V$eJaS=cw6}XLv&5V;O98pF41M|jvU9V1Ilk>awf%H(_U4Ax3$;{80FT^x(0P}?x6 z9uDY;>t-DjL+Kr{TM|8B+4;D$&qLDYb(uSAqviYx;ai@FyDPVm_+IG(rORuFlWAln zWS=z03_K*h#%r;JnknvgFxa|gGHGk-!(^>(UhSiIrOfp0nOS_{R42O&@yH;x4R8cH zn^ohkCMyJcE+-H!4=fc4fvJW`XfKE$+5OS-FD;v9{RIE*@87?RT7Lmb zyFIx9E;a#N<(>}R-*Oa`yD7yI72F`7K1-dIgPE|q)T35Jv7bbTQ(dWEu|^=g!al5( z8xCT*I|3@FNvnYysIckhL_)`>w=EwRfvZMr=6M;ZJTPQBeo$(c2wYU2G+A2!WyvRY z`?34G|58+}QT~r;EsQ2sdg;~y$8C=KAIB}X<+O%fRPa&Yzp6uEXH1J;aR)450_3xU zWkxjr9e{eKV_%ucpG{s2IH)UiH*fPF=Wy>FOi@)9ceFYG=RLV(+H14pv6e0KOxr{| zw4W}_Oz$e08m-AMnj84?>gnYx9-Ln^@8v?dj`a%$jLIb3$HlwFg~y3+vbZ-MwDpbX z;GknkL={;XdEQ`6p!Mb32F6p4!(uZ(KW%7Fy>%t!y|YU7AEe*O4E5tRAM{vS^&A97 zgehl3!DN;hUQooU#v&PFDk|VsSyg*04#-q~1*ZVjIa(9i2!C)wROkQhv-f(k$(qi_yeJPPUFiy#H04T%Tjm4usp^9yUt@N(V)A8<+${_djk)P38dYBf$ zj{{r_eFM;Uj}Qn|6mZr;^06yIk|(hfrk5x5Dmd2EnHr5QW8JQ$6D$3r$jkg)DeszQ zHiCkWtB1Eb2TI?$u3Ju4oV`d$ta{7aI2->fLuz^9L{zR_FyHGnN9Db4^2LPXZ0pt z_-$^gM>FDnMs;vX{murUt8!CiCu@YK^TG+|EUgFuS^0qa7fF1Q@^ED^U^w^uWL{PU zXlEN`J2ETX<%3Dtw79!T;5GMnhx&;lq#r8&su9{>FTxJ80&Y~=bn5DUVR{nmv7kkp zx6$LTV(vsCu8GAUvO{Ll9Sz2A5|Rb}PnK1+>5e?b*60R>KFJqBexheJG9u(evAL4(krN+s;6AX*8R*09*TFQ3is;*XJ1pkmchf3!9;eF0$ zPWMXF{|L6i?<#+g*wsXN+;aRt0?dT3J4(%ke)H*QANq*1F}z&3hNb6?_UGTUP$!O4;*B@Ls2A; zUipc3IQTm;qaqg#2}r9{o5fK_+Q`J5-K)=aDsry|faH%o;3JZm%>$|6-4yr)AQuPhLak?GpC$HD>28o(ZIkFk zXw~165YcyhmLbzEr+QhOpM&=_%8K~+a1GuSVPSqi&~yyc@p zkW?HK%5C%whSnTUM|pQL1JHbCh7P%lz_v);^)kE|tFVC$-9?CKe6od%s}0)jSrdHy zUC%&!c>z_bn5S#zZ_UO;?^7{{aK$;*xd6IaQ+j?@+NXh=`??#7{piz)C}n=6WsND$ zN&n%9SrOOJfh!o05cRU4yQzO`=_nSq`7ytCo*nDMULo#l9)x}jREIRRro@U0`SU+< z%VBb~9oFrl+%xeiKsYmdWB!X%E@x+!F6XMLwE7?=_R6-xoWm5EEwYTO43zm;gcILh zW~W&cgqux5dAlu&B=6mH_FU=m8BCcMl?iFt#$lvvXY8a0z!Ke^xtH(B0J3>z8y*b< zuGNo^L;1POTyN#3F^$YlR1VH2#_F4O?6amhNzO<6Jiu7nJ4;9qHclpYRoW`qA1mz{ zJnmZIG-*zX?{qQs#X5LS#(hjun;mRwum*{E;<@|$zk)98!tW^>ve%QZokZ{0>`D_w z-4jY}xcGq#s+ismXZDnzMV}MOJ8LC+yyqw$y{J%GZ1ZW)1)h?I_8CQv&9e8bn;OKO zS7f4pbw;S>!MlU34M`FbfuN4vXmAk*sgt&unkyxir3$+?%_0}0_|B6=Rodj=6RmsD z!4y6?RH=_v{3%1F2gE-2k^XFU4+gLP0&jQLH?r)Qu~p;PGrOr!AjxhVafl6d6T5eh z=hD}$acEkBi0=DM7Tf*R;D75m{dL#aT7sQ{#9z^_L#b5pap8}=Zq-&zVMXCSLQ%=l zYGIQUK$JtIPteWa(GW_SsWKu4u&%^)@svLxyeFYQ-m(lj-?#@5tNSj3aSGc-&`z6F z;5wY3KRm7I`9;!T?+rZFpZ=#P2x@~p=)e6|#iMhBn*&a=CETvKaODSYA1+5N^b6kP zaxD*jIhT1C{719!7~?rTtlPu?0Q`s+k}?ppdvMCfx?ZNJW%>s1nXUe(a7eHB4bo%h zjmY1Pa$n;q=;fyXu^?;asmGzCs)UJCpOCFO_SDC8FKv%(3;GSEWXC)VKS^q1W6$NQ z(VRO`$x~ynvXSa^16gdlE)0!ab4W;G{r%* zCa_Ok`UBx$VkvD8l+0mQC~XI!$(4P8RcD}qZ$cnwjRBr@BH<%LhBS`edwr1ndu?iL z3t{zdJq}-T4?xM%OQtGB)$!kC9^x#RiOek_%lpq`?vkB3JxuQd z7EdNFmqdf1L>SUps~6OoDe%SHswsO@eujAHYjQL1y%ZToXY0|STqc8$?)5#TfaD-TvswuA|} z8hxOP-2IC#}9UF-BdhI^(jv;ZmfCDxHG2%TIZO)`5sm zAp&3N?j%d!N{}J>)BiZ(Tzvc$G07)7vB4*3updjU>u2-V&SsmWzGnSSm3wHvpF6Q5 zxYIDamwbQrX3|!snXj_opHQ26_OCN_D|&ir#z`}FKl6u4V{i$J4$1lz+eaA!mkll3 z8@Iv&iwpGysBQ9LT{0(*NH|KZj}t*4U8p15EE(wRTKFa1Hb@&J_USrJFD8M}Qb&jLsWmej3wi*;0n);pC&?bKj& zP{sgUUUV4$8}s^gkJ2F9$x(KosxXHbsd8lO2YdPAy`$5oW>0hK2cEU`0QR_d^BP;e z@kSG_bTjwqV8G34Z|I3()}GB)%qe~X9V=pQ@FoSR97G+SR`-%sY2)iN*-IJIqdsy; zlN%SGODeg#F35yL2hx=~CVK~F6_g&ELFIP-btGZ!Id1>?6Z6b* z7CYsybLp;ApD$}>%&sscZ}v~)YPzMB=^>)G^EZwP%gW(6G!9A4%+%n`4WfyZ7Nu{% zP7Ll?Belb!^1l!9)I^oVO{AgD=Ej*&4gX*NOt^{S)~uEcJUJu(fK8*F+07G=(56do z2*sD6_!67Zm_&=g^9XzUU(6Fb^*qwh~f)rs$Zda zzHeCSy9~Uw!LBz7NW64m9W@G;t2`kC2m=3p=F*As?7hmFj}x7F|CG6j!>ee~v^GR+ zLl(44+nWY+Wp}fIT5xsQiT}7b(tUvIX;ri8-k|)*1jc?3Y&gr$nL~M*1ES22 zXdri1lfh<|3bJ(Z+#e!l-t<3XN```Qr}6}uo2rUGr4(Cktmh+EbiaP$(Ty*u#ciS( z-fHOIj6eCfEZ{r7a7aK!m>ouC5D83yMtN3-DT%8HWOXjTj~C1O3qxr*pOJ< zE#`K67vFI?G)eHGTW?_~Y$rMGZyN`QYNA|h%J4}Y7EV_oIyz$yVxC}fihM#o>hN~1 zc~-V}L)vkx0WWu}Hz!^ny_hn5b~u(X@(;7?GBY|}MHxsKOze8YJ>djtv`dF^5T5%UzYt(P-%Dj@aPTbFZq@=uQ zZ?kVR+n!quAgKR&L0W2PD*5faN^|Kkq>E0ei94I<;n z(Fj5t^8hoHUe&P|z3Q^%3hOIADV|@kgx8)D+GNWBpLhY$UhgGqj4O?TbMlc^gXO6| z_?@V0ah0S!BzObu9`Wb|GBMVyyaC^L9O+_GHLz<-M?+M5Sgiw%`L&OBAU%LbW@q;_1l zHk(;07;GC*=r!Ll6j-YtguKf-Ow_~+q(@GTG0pzo)gpCo<*X6+N9Cn)y|c{*j~l29 zENAcfQOAH8@+Hh?<_ZoaKKH@su}q7M#}bej};Z(kr@u6gCH=nE|1v8&VqekiplvR5LF=dMRva2jhBJ27TGMh?Ig^#8`u2fE zf+#PHBXdpuCPY0vX_xa1mD5c~fI2>xJ>bEvhW@VS)Rm+l*9dBUoyfjrZzX9bddheh z>mM*m0^lHzw>hgRrds(w33r}K?@O!(ggHKy5vEUvx-|PzLBu;R+xsg2B+_2_;NSxjSf}%MCMf7gnop*SESYRx0Z3g-EL%Ip7;>)P@6gq{#a ze6Ey6Q?+4G+#Gv47YA$Ga)+L*#A7c;y7#|0O_VF$vt@?eV#h*u7&`b6fzH6y7EuLbp0V{@>cW3eQ z`tYg{R|Tkw`am`$M_hOEh~Jq)Di zat)O$U8OEKV>{6(%gXj7t=S2KjKwL66;X)j;cKyfM*YcVUni3v=6;cxDU6l>lci+9 z?9f1bq^wYme=EmbqTTd(IJk%7_hd()(p`h+1YhzVr|qS@^#8tbL-gl&3cp$KNbbS1 zOO~Gc8oaT)7X3-Kk&;(`tDQV!YZOup<2|sI$*5?o?Yk@}aUw4{E@Bu&^rU+)q#aRi zf*UIqVauA~oDlzyrZ10&YXAT5-WF||7E;9AZbcDpMOtufw?#-( z30bF-Y{`|BWz6~97Ai57P?Tvy*(Q60$(|%x$3DiIWin$K$ILnB{$B3)@%yKHm08X? z@AvEddOcsy*Yhcge<}u9y4$^7t6O>zq3T+)#{M3#vdJ(f9bfbKh|uqUH(x$>${0fZ z%}e-MeM%cr9=`-`e!y4)6hHUU4?vZpD>+(HF(vndhwPvH#7X?u9esk|x-QpTKJEkkbFy^jWmW=_D( z($=b)=7!T(OpQ-D?k1+=xU-T5=V&RAEFH#iOeHAcD0n=O#!HK%EN%B<@ z?O1-s`wW&vBl=wsf^=0V_?RdL|5~(~{L* zOK*U2Ft+3pbuIH3_kZW9=$$eo=AkYQ6kvzD>-Kog-X`w*fu|x%IUUl114cTga~XGT zo)t!4B`AuzR`)|~eMPYIGUtiLzcN15PoD()>i%wbwBXS`86r?B7wXEajdX^-hMYkL zq8Mf3?o#wuvN7KHdm(pPx$7%e@@0^|TY1<}1(E1a7w09S>FLjmtDc7=Z}^xxr6Rvr znXHdr4MMqCG)Or5!Msi}XOw0gM>^v9qu4&E8BKx(lae_5x@rDIBN-5IiYF0>CVO3m zDyX-+*JBB9jTdnfIvh=hAu+45BeX(N-q~q<60ca}9v>#jPe%8>2wBHqPhB_l+sWiZ%I5xW5&0XYJ z_EpexDPy`l&Va>oD>;kY+2DzBxxq}${m3%klkvV_9nf9gg;_G)W0&1vy z8m>gT+YO2GH9=l`DfM{Mwv>B2OPqy&STf+b4yB8Uy_y}JOOBNEV-l5 z6ws){Xvu-}-yU_8AwD2D$6e)W>qI0n5Y2v7j!t=P zsbHE*XO&@$G6#7=&i)b<110aGn}SOC#20WG;`yt^B6DwxEN3C}Ul z=MKb#rWJBz(~_k>>c%=Cm`Jc`GO{Um zofm_zfy3ZE+@dAARmg$^P!E;e&wU@7$b1W8^mzm8vsN^0 z*B+*eJj0`r-XL)?P3H0n6?e2x2{lN0CN|#-?m%5wI}XF#Um7$$l~`jo%{#k$pM0- zu__R1CVcY$6I4|kiM7F1;K45_uJ3`YDo<<;KRD)qL}}E6)Mpv?8`08BlW%QojcGWpxxLGZVzd-|1~YHpM@v53N6vd#vonz-{o<1 zG&cuzbP2^*S&~bvzz&^L8WzAEO;1RMr;{`C(qw%rlD%`hA9+^8$M$+lK+BdrR-kmN za2YIt%crX0mqtH(gN7Iz)6_`|9Cc5{OpeVb1Ke5?xv54PHoY&Kd&)=4|r1g?)t-y+l{q9 z=D`Jd4BH-2?;g8N&Oy{eZKSKRP5F37N`(_$!e$j-51NF`_-Bf?`{?T`{yBKT?U=V7 zvCsRJRtKE&ykfqk>7;o-T4x85HHf0@A6mzn8K+lp;C!lBjm42m_0!uae0klY4PNL3 zh^wentW%zPQS^qDF1SA!@jLC2MxXJe%iGmPcr*NuZ}n-dDU!|>w69TMav#<}l4Kzd zIJcbh!~^3E2YM;(HUd^z;|8{K6Hb3qF@QGe=FR4i_XDGof_;OGs>h}qO9M3Y4eSOP zCeO>{x6mH{J8#>Zyk!;_rcxSa#=6x-5gD)yjLtXdJ@raR53U#A$bLN89KpDK*iG1I8t5;4>7!>WL-XHe;r^FKW$@fz0%j%7qYV{Ae2C# zTtyae`;oe(6zsP=T;V!(7+I`~hzw{P4-77Dffl?x)c#Cx^tix_&j&7IcK&$BN3KSd>!?!NUBAU#sAw+3wbm$0Cre^YLP*dWreOghnOR=_RaG5C z9cHw3HMhP>|M1}TJwj=_fCC&|$`haENwN=0>c#Pc=u~pZl9|)lHoOxrod>mcRz0^Y zv(4~JqwZ4)6s|%ZyHDGY#@m{|{c@_J<=tt%c>GW0v#$39%v}r}%v5%efqcNM#6xA0 zc=hibNK`uMg)B0*14`ZPE-7Gu6LGtzOH1Zkp7*frpcC^f#u6VzYiLW{=(DHup;FVY zy;I{}8#Hk8YtnJ_BN9#PC?gjK_tHX&H9zo>^FcLrca*(j25SW4(*?En;RY(>^TZmV zy4jw?ddM34YL|fdv!^O_eCC-|G66G@+aD)BRo=aH5{UlhZ%E01J%VrCUHELa ztaaLGMX$Nm2OwA~MD;bMSU+Z^q}(d&J&(Ry&2RPGXT`mHb$?AT?RXKZHn%uC@+(N~ z3_q^7W*VqzVREpTdQy;V`j~Tihy9Ph(C32c(750?j^sq?5Lp1bYdb8^#P2o|Bbgc; zVWx=7cn4~h*?@0)Yx2Usz#oPVUYAI*H8#PjQ#m#v1yc2Tb^h!P#Z&5}Rko zTpPK4gZp0l%%qI`ZDGWUZB09T=GDjlIf(CDG9r)X$(m`slrZD#%Er5JB6 zf<=;kVw%`N|Aq?d;mqAK9C%0xI0(o&FWu@*Gl=Mc$0|_AX*)>&QddzIfhZaq`zKFU zAxeb@(KHXcXYrRZ9jgazzBYeNZf?8~IF*?rspC^R`p6YZSiShc2z429!Q2}=P^g3W zZJEIhT3&%9pMQy{O%i&1{w-w=>#x;@^-g(lbbf+gI^9OTluXUDPM$A#x) z&cUoo=|Bt)`~6o7;6T@2M!GvIAWc~7_xaTuK;B#zAHwh6D3zUvH`>{1%k24?*gP&g~yh1P6C15)SS;n+*g@Q`FD#F6vlXXJfRcyW@b z?k~vbZdQCp)5JPyGDz0u<|Pb0r+#((t2Y3un=OG?ue3FF9Q>B@#JsR%;!^O%H9BP{ zI`IM#zl27`Dp8@4**5Up9n}v0M`R<>EEdC&Cq6bj;Yput86vD;h^?J_)=(Abga$_@ zrgiVeP(=?c1_0+|NmCZXh(@r9$BAQOZB>!lNj$mm{ku-@N_Dw($ z0CKW}fXIyPTl|x`5ptg;3x{y59esTUh%qUnZ7i!dvST;`_iUnyEBxZBZFm56ZcPjpZL76a8r?PtjGG~ z+wwEI51Lzd*q*MDVO}p}HgOIYW@g$$@gOFsP>ecEdv4Y|ec{^V)ntPizROL*kqLA> zK(wqmK-E5Qqwio&3o6hSGpLix=X5r#AaA_L8Kg;~U=4mC+qq!etXE61jVxg*#t|;* z&t;r0lxHU%b^RkGw4rC>?lCe6z2uE)QOBxeTU)CWJ&QN8PV>+olvhm2DA^9D)MC$B z2O^c*0~u~MM;JWl9^HVJDhb@V1C@4~xTUXU z7EO;J1KxU`!>6~Ikc+p-PU2TqVKI`Z0?3B!1>N$ zu|Dmm$k(Ngw6v>*s#a#b?XDg$@lqP!@(2{gmRrffWV&cc5jRIkxL#mxS27+m;DFsc0UM#|Co0Sdj@B=gnNI0 zCg=aC@dTDHTkc-p+6i6QrouI3a>EdHq7mXr{F=aPq!qFLpwA+t0UZeUEJ+TIcl+tp zpFZYvV0~qk{Dz4)o6#s*C9MsxZbaU%=J_tiybqz(A0{r`qj#ArfP&37bm)Fg&*YE4 z16F%n;}=5|wvjrMUGU-X0sjLrmH3-JZ%5SVA%;E;svhfLyY?I=6SaN-0ZSj>Lbh=; zbSpTmqrD4<{vo&hpk16Bl5W&`hSr=(1bDpOrn*-Y`64*i@kwbm?OU~QoMA*p`N`nr zkGYdyimC)k5gPTJ*SWmS#5d`rY<)%f29#egm!P@AilF7f7jLu^iL(QGg0gA#b@F_s zbcdG@aIBMOo>T1E+40A6W}8KQy$jm)cDL}<9Q3Chi}Q@Wt_5^6o<5$wDHi5M>082I zer7p^8D}&Unw(3WWlvPPX<3>!yXNwkHNKFm#_pRPtg1Lc3zpDyj;h1grhnx8+2CiJ z!`dZ074S#x2EWPaxA8ez)FVFvQzhTgx@9#QfN;{kQ^vw%K759A10(<;OkIG-1iIAx z+~R0j7j)j~Qcrp<>t>Fdc8_d#La}$(tg%aAQmDSYP}x7-D;;TKO4@1CAv&#WmT=gd z8nC|jq`BgXgVKg#(crsORwnk*iVYQAbaYF+R~~uf-bZAGt-s}wJehiEQb!vc)yG~> zr1aLcvLq!L#7n*Xpas6NKZ2rELj9SJ{?JgM%dCsXV?Wu0dlEP3OV*zAKYlW|#ko+e zQpR7MQ4ig4+Op)lz0f+FKlWr_fR&lQ-be3QSI6}G+dfa8(ydvZV?yk&1AkW3o!-$W z*-JbIy*+z!M^@&?o8-A@_OJm|>Vum2FIXQOy(|3tDvU4QmT6*gG96v%3jYw=Zo14x z-iKGa@z|8Ri=sMeBmJ3jPSCMLzvx6kfx^f}Pk-E$)Bzc|vygz6}(lc#+7 zY41}*KMq`@j`4b;pDt20R`T!O+U9l~|ip7o2gH^~szWr({Q- ziYN!(W6ntyWbzPc?ERmp!K_LjL}v#qCrCYC%&xR!-yNI;UFjwr7tZi9$yKN!t`u*C zc$3C#?B0_tV%M?9SQHaU2OHEdF&p8`r#fs4eQcr3NM%1q9yiVsFXFf~o)YWg$9{4r zbbtPirz{p|HFxqyu|N&+df8sG1j*(J6}MmG|5B{#5m*~FgmVvjN$e^3@|fxy+$+q5 zXbHr#)#Kf&G)btqA|@p5f3stHXUGoU__p{13iFtYxG8&cY`NDb$wBJ0Ps_;<>P3ML z2sPV3$3L1rA*9CB=L0kliM~fa*|$!Aq{(T7>FdstVm)>{Ix9yUW`>>#^V)C5vZ&YY z%gVk7^m;-h7235;+a3{RyT9mNEz>|(0%Noy9#?|S?(=WNweG}_S#%Fh>RuMg;7BLxPn zT}4<~&nknq?ERs0c3|;=$F2a{)qjTTBY&z$Y*Hy72m$W>)JG!~GS*{t0Mz09IJ@b^ zhDM3@Z7?=CP^N@W-iwi`Z$MvL-v5#I@XPQq@iJB@uY2pNb__ynV0?lSo}JqW6{o%D zzw;hJb7VPDz+8nP<;Z)v3hrXe+&ue+Exy-R_o)KCkl>Abj=5j0`|CdJz9G$Q|+s9_WiD#I~Qgu0Ya7RZf<5%MZ~698x|@d`l`PtWtXl>AGK<@n8c@ zHm#RK@B`ixNn_Jw5La|~6f<5A`TI$Rkw66|C_1jVBeP0lIpj^H2Q_DdwT3XCcL!dN zd>D)w-}uAq(phfoi?~CX!zThn9asHFJ{0fn^o}Tgwc{Q5cwTorBvX$fyZ%ClyD92# z;!S-Tp8BkK?dh!k+E*je4Qc6gtRATNcOH5nZNp=${#xRGchxfSCNQh4obvZ7I;%_hPp_zyix-A7gG++&#znmbOARHdzJ4 zWUc;*_TqlptIBgmgUo063h`#;it?M}nb~+N)R8Wt0VvlY2^QImWl%y8H@1qqu_9Sn z7_H(hT=r0byHpKQpb2H7C9zOH>{g(uo=Bx=G{htO8G`emp{Gd4zIDy?g964 zMZo6sgS(X4G$zlje71D@N@0u7J1>^OA77mJInB!Y#B0c9wtz3Z#h43=xM8}5=G%?3 zEi`}hk>p}e0e!BZ`^?QW2t5>C{0rvYr|L}>$F`J7V@GfZ=8L{E>!jCXyu@<7xpT#ZsA{5i{Ab-MTBKc?5%X zpL4tB1^D|NhVU52)HzpGM!Q+CU0eZz@PDPVl5O6JcYT$TE2s-7Jv1uGRaD$v&!=t0sg!D5f9N69Q$+mSw%o1LMTasWV>a)TK$AhFB`D zVgq-gyZ&qh&%W7^o{aMB;}&zLtiqYN%h6>0Mw-SeXUn@gjOt2)?MeAJaL24Ysp2t1 zM~G|=Ic_Np{{;XpRb)=P9h)SH%Da_=tb`SHQq^M=^j_O%^<~G-EDimfe#a&Ib$&IG zcjqVLp@80MAo*2vbw`IAeWBqh3Or%$E%n+u@SfZ}{hv~$QuGFM!#~=En|i3r-Px0M zW3d*uKyG2F&}EdC&K(;;zPJzxHu))w5`vOCh`3`BdjPYH_c0l;q6qB^LhiM%bJGdc z$a{ji)t(>{1JTEB6XD)JuWe7zYj)zy>ILX0KQj5{uX`E&C#|2{o8FMwRDASxbx7Ko z#l54n#DF82$!WgNS`*D%-h?J>`K$iy%@bn=o(bZ|}%T4|;~xmp9k;)~sDw zD`^#uV$fH+@zPU5?uP${;pd7z#3Ke4y!cPdNs@8y1}_1t@^F=8LDgkZ6wn*#~eM?VbHiGEDinhtIq!m<0cs1Ty;wfEn3F9lv` zJm9s^UszS%F|NQjeTi%4MMyx7dXA`~w#sUqA*B~lrL9d6>(G9$Bma4b3hic8R8&-z zD~)!|J@lKz>A!iqQWmcnH&sIgv=BS%@Z_pq`Wgr1jy`{u{0J4K5)oJi2bgCg+SmIM z`SBej#hY0>l`C}6Zk0wI`#Sle1A{pS^|jRmFSFza&pv7y*)y0Gi)fm=qd^K$n32pI zEm_E1ieFJ;uR<>DzXPI7iQe7SZyeFj$}%z^1)GfF8(wt^{M`9Y*84Z#wqQBy)Q)_Q z9-2*@<7#BtR8iZ)s&+CAu~~urzw;<_Ht1U1X^2CO_8|M7ZPo9jAlA5pFH1(>4xcb z7bac-PDp5iz-r7m>JvaAcEm@o+5LQFm59(35#6CuOXp3B8?Hr5t|=*ZCv7Qyn$%`8 z*y+?|I$&?I61Mjv-Xs_!k}K9U=CE%E-UhG@@=R~+^)aG0N^*yE44*10?pn?*&cah> z`NT)GClz`;h%mG_j=kK!<3waxy8=bVrBsmN=e#2J@d~l1(?r*~O@)C3X?WdjF(5+}w1uuXGa}RK5Sso3;_x$&N8w(QF%`U!S#jrpkM@e|RgIN{bd-7Pl-Vrb1t)gF2 zr3=9dW;DrW%y6c0#PGBN*VWrh%2@lW0xLev&T@5h-?)|3EBsbtEgA0Um5{Hx)Ow|F zEbqoIK1NsDZEmSo>Rd=q`dn{llz_T>USDZzTSjJr?itMF?oE;p-`X>@>q(~Q84q-2 zDz254eqW3XJbz{-rdQIit(>t*(X~oiW_Q)QE?ytCiiK%s`GaA!4R;k*Rnj`BJ(N#pHbcjeYy*PVV|_@L#YqwZP}anr9|iM^W0Kg@*S_;U zgQ*qTryF)1Ql`Kd=pfT~@_t+|f#@jQ1?e> z1}kfPR#U)K`gB!k;Nj{GP)VaL5Rq=OvvB2G{EJw?%it_BaE{}y1{5C;SzXB-;qj{b z>n3ue16q2(0GAzlAj|hsc3%YRGLqbC^Dd#d-P*)0`(Z-grAZ(QGZJFJ0mIpy6f4^AMADL^p&qgI1B zJr}@iQ)WX5*kwH_Xik+d9I8gGl+U=5fFfPw4mx~1Fqmb9*KVBOUh2~Dl+YtvfaFVQ zQ<0o2jy$OJi1DX*19hVBWwq=r*daIL%_NTsKwyW8BzMwqmuE6sS}X#{1CT&2^yz2C zqCNpNg1N;%xen_0rPhE!1QroDc{50{JxlIL8A)BNHjGdzXvYA*DFoo)P!ks$I7SNl}u>sjOvX-9lErtk{ z?epJPS2j^gjr4torWWTzB+k3SYdG)zQ%-s;%HI$?OE;`5{K+pfwkBeb^OQEKWNV{w zt!yu5%ssY_n1&yVcn$rm~%ipC%U;qEo7ux5B^<+NdSPZ``T_d~hIj2UsU^o1*(nTS(1e z8@2Ufzrw#UZ%bBnJ}A=|2w}8io98URx;K*1l9l*jk*ka@xk=ocnrSNh{d+)cUMSk) z=+2#L;E_RgXRmVpshxP*_?=j`2_#!Ok8h%hRkE9Y?dzhaAUvYF2d{Y?*S5C>BwNQaWSQx>co8R?`{3Q<7 zbv4>Z-_12MEW{8bZ9<-SS>kG1EUhKBM$=_oLt02|sDJANP z%Z3($uxjMZF8+YPo6b8w$2`vpCF99OE6SYQVFL${0-s;`TwaK+K|HvW$m>Wq}jX0^{J zm-1wO%*K|T{^xm)c_Q_jke6S&igZCh^Sa16m;;aPv_A}?S2i^u&L6e)+C1yc1GH}w z{nx~;ecxB0^R#Bz65lzCCoH5K81XA%$$oxXxM1PtEGWvU?@RpM+aW%R~ z+4*S-zia^c>c1}iH{cz*4k(R53An(5xLN#br=4fu&$~#u#g$dSr7+$SS(~dScCUw- zPjVfn*+`R5tG~3V-caAw+a>8B^hg>INMwZfPiMbyO$gExW!#-SQ&{PXwYJ%2o#=0x zw)UR#_i=n^?p)`$Jb(Olp53*de<}>y7{(xd<5KOPSs%k zek|_>^gK8*gARZ+45Ps|v?a%RktCP1v7l%HRdKqAIWtzgSk%?epOU>rUqI`mpUx+v z?#hLb>Z3fCPakXLmS=DX)a2f!LU-n&%cLvkD7QiIf$El=`}fH6(d4MDM+`#Pyy@@k zi+@95w3wj^%0_9syZ1slGBh|!sE?B1^yBEt=5)+D6W1f{9{|IoqI}wr2Zv8hwqLz) zK$PQ)oLlp&JPkf5CeCKkqn!8N!RM`gmEBHw?Y*Skag^uBcZFIx(=M7gr`ZmJ?ryi^ zrIKK{aMtyR_uNc|*k(Ip|GQ3$Fb}KOM|hVjtFLXZ)7ur>R=@qyIA>EX=LxAtHgdB} z#)i*dW*T5KN9(u1nIvIl(@}n$_wGRaB?j#>IYs7YbP24=Y=*L^h0|N}*#zg#+Fb(h z8*M0bU^<&A5S7;k+K&I8c68zpd6v1sB3PtLE=}?7V@*?Ai+9QBWHV>#wpc0jG|l*> zpDgYuorFbJ6T$sf)3-rlyp{OShu!w|>US^JC~WZa203FFg5$Y>E3+$-l~Xfl_}WNv z>H1_^3f~?}IrIHOEM!LhoKw-IrALFz6_kup`mQiqPR8|rCp7L%JZZia{5pehWq81j z4P$;n=8auO1TGA#dc#%|Jiz^wc}f@4T5c}GnkGCo}wg{MqM_Hgi(RB}m%$db@1kEb@_ z=v#P(^p#HF^M-c>=#LZEvZuJy7k)Gr)g`jpb9Db8PX@Kh{^1*gJn3?OaSW{J1h$8 zxyUANix3!%x&>LtP;{h=B8R-k`D=1$I<@%q-pggOz{kk#`Ll~K2uh3U@V{FQU8ip_ z)^LlbR^gfT+Y_1+AP3YR0Qk)t+d?U&w$AUN-ZV53aqU}jh6~N#I=D;k$G*HXK-LT% z94K42PU=fRtb2+;(M2ou9bNN!Nd)Ms^ z`U`{GB%N!*Id{wVGq&Q_h}5%cJBk14c`JFK#WKapxf~SrV%E^_?90tx#7-un+mTsU zMWz(rmXU$+Wb^#11Phz!!w=l0;R$&}uw9LW*v*{>29fh6QCO5wZc?Hfy*1YtmMC>! zHuvJaViRr5c+;rQ)qKsdU{w(`iFfaAL=#M@k;u5GbUqPoc%YXWy3Z)IDy(`a>rs7Q zLBsaniOxsx2HP)i%GuDl4lQHdir-mZXd%|MYBF?8De;k|s2uH;$;EB94A7Uoa}MrJ z^Zbi7<1=f(F3NbM3!@f^c`5dMR@M@`s%amYD&w3uvsdx!L^MRH0%Irzbysm|DYle}oL zi)?eM*kT#i%lqGc54G!r&;QA69&}v#c;;wH^Id-PeS0bI8Rc%QVig`_Kj&Q932i@^ zHnqYSXLa@}J0(Hyvzt!dPYZthaasGJF)ic#R>s+?#PD|zl56Os(dj|)ZCF(T8CT{x z$Kb0PbvyN_p+tE0+KJh2D^rKXVw3xY?5y@5*Z!R+;hluG=?RMywQ0Bob#hq)B69Wv z+WG0AZS=E}q*t@w>-);6gxqlfMbc?4*2VCL%(3e9M!>z=m<+!QT2vE*b87#4tsJbnocs3D?xb zj1}8N`T7k)S8Opla7!PzV$Di9RUg{9GLwxm>Vi}Kr3Il=2Vnq{Srp4(b zBKW4FX%=}TzmPNBtCNF8&Yk6$O>h$Plhh_c+s~ZXMXv7hwr*minEno7?Fs=Fie(14 znA5TZ*Gh}fF0_P8>JJ4ztj&n6&YGBIi_@zHajUSQ%A?aC&L#UEbUJ?(fpp+|+uQ^B zNFjHa5>dT~RCyYa%>dw7sl_{EdYvrp8+zC4lJP_T{Q8R=1F}@CSciX8egfpsYgGI^ zJmg#U_J$ON|L}iLI=SPtAmK@rCAVYq)JPAKX=wBByn~yds=9pAiZe!ocFOl^4e}Se z2A{lXkUQvT_kBJdC2te^fj_3Zt^=63CD8IYX?ga&I0i4o;LC5Tx89IDN(5JCd$9j) zB2yTR)}zL$Hd6<%{EWjpb+RLA3k#|4FXWe)ywI00>gR-x^Ow7Im;f+&bKvgIR##$idgapFaLIf~(y+#K#tGYPqQ0l!)|uMb#)jz60O0AwIr)nqMP>$4#?`(1>o$OO^dm24OW^+mU-#9n<;Br8OZ97&EFX;w z(zZ*DWp z3l7xup_{UuB#)cJ9dqr&$SqJfX|$#fM(p9FUjBDpz`1vamGI2`5N;}~HIiJ$lI>t=i#e)v1uYMe0>B+WKm4HYojJy_9M}`83s<1CHdLs8Mz-H-wr9cF zmfR>oE#!QpEjh?N;NO0=UhGh`{1>l{-|ujL~NKVsHAnQf#-nR1ib zgopK-{oyp+Xs(m8>s|w{QmL;gEG~QVqh-RO%kbLYC8P9pAUTl7kQaHIq22biaQJS2 z6;0FRJ{t$(>j?1*akC%R+wXYo=%qO$@`y-PMg(FMXM9uck$oQ$1Ze#@wv9UmtQDOl zdR^dIWCNS@A1=EMz0nhuttZ;OGAYpqN`@;1v&RjJqxkDbKNGaS=?w9 zF*wq0zICo~?5i8+tIcd8VV#LgX>Gm&?LyEX=2C1iHoWcITRslF+a~g1m6w8;9h8uN z@WKNie??vCU0joBLL@DpKx;G!58@&BY~6bQ${^tPu#ZRDMpI|6g^@j%zbC0Cd~HNKLIh-iG9 zVALO~igTuFN&VpXo;~Ltiw71*g#-oJubb-Hy{9LHI(_o+Y1VPgP4UyxMe{ekKH$cv z)ZLMCX35^(NB09y^+;{9eP0m(Mg8Hi{+|lhu}^W|g!dkp-fYOyD1P6_9Z0xRFmyjv zZ*;xB*1JtN)&X*mQ)Q!~;E^7#Z?)3eW^#y`FTf@UJY|!bfII zyl!Mvk_nIM3kj3R4ob>Ok`!zd;_{1&q2!!acVd>!4$D<1E8KTI^CTzOB(KsY}MfjT8RLn+XU&U8uoMltURalUvc=ty= z^kW9_4J>L=3nT-a2jH!W%$5N?v(xxD){!h~QDm7DHS#ND%jq@-QN$nk3T%^zCUF*B z$F;`W8cX+~x3d2sv&LW^9=NvVWU7Zw3#vlf?`LQ&1@vtFD+T-r!@UA~ zO7>`s+F{*`w48y>GWjYPu?kGjcNXxqWLJ9kFh=^w4w!?s03`70#ywwHtj=&5Brj$S(;m#5$9xvN&qiFkJ2LpSC%Y}S^U8q$7mcU^bEW@$ z!wnNS)5jYM_xEX=oqKmsw>8a~_z^&@i9lW`;&%a?{N#(4?3kA2@`_cl;#T|;U%`Og zn!F{ec!)ZDN^rsKZ1?9nUa$(`*NbGab@Oq6qBOs;^J zj3eSIDFqLj-F0BjOnxV4OMFn5F=p>^1x+Z^h*RKBHl*_p1f|kZcf0BhO6-w@=;HG^ zD||<`wiv(46D#3ckn>Gb+YHC|(Wbn+1FS}iRhrL={8)HaEOmC6z6m!L-yb5BzD`{3 zfk34gRK&XXqGkK$+#D8hm>cD!?;)3BmN6Y2mHgxSO7ybbY~(>XJabZur^jA38f$=0 z#(r~yj$<=JOOQV#O3znJON~E-fUH8h&G&Ze{N!G9_VQ})L2{B%wl(~mz}cC*xI4=7 zCj!3a^0Q8fBYS$HA%;JB`#j!RC_H+!NO9#^Tph|hEL!` zicwvQWTE};2PPURNChk<=uW4QR=x{Ud1h!J%?Z7rCHL?!{XngLL+cUqZg; zeqlp>;Ym%esoi>pU^!dGzV~h@=u~k0cy;iRp_-7bDCip;dad|jOKU2`BHbOQ<1Cng z%5=JE2>;<*)PboNL zSQZ-X7XVz?VWW7gCAM|y?|h4Zs|e?gURaF~Kwmz69m5B+f&KZ$nG zGkMdVGDvYtd=rr3k7)Jc+=F^+J>jvUc&fp(tcl5zK?%=NCo8Q$GZGpe9D?_G05 z%iU#Jq;Ckr(vp1$UBDNe_Pz~1b@DR*5rl#-^dh2Oxe4FcwH?|#xxl(*(-&Z7uaWG+ zYTw{)#6waIl99hIo+QG&&-o~@C%%myho9q-^f8_o?%Bd7-Y)oawb+&TgJr?#Mlpk- z(?D~Ut@TeFKUEl1v$xR3SF#oGA@);um+d)|ZQD=pIKEs;Zf4AS#3GlO^;>9DsS>!$ z(P}Q*lAHv8o1=x|Yk9Kg`_1zn{Tw3m?U@og*_UrS!s}{8qw$Q;Z|rrb2WKf`6L?dH zT%O|Q!Xh&98Z?!#v}Q7S4?5A3gA8iYv6+2!H@RbVo{-aE7v zaaOYRV2;qy5)1qnK?f$xq0AedAb;*X|7hFq6K^;}EIfDs- zw})ZBA4|Vn$k#Nh5Lc!I525Zvyv1?%w4Z2ztPLGbV*qf#TJOf(Cz89vpd>mtSnN)6 z9jsF9^f^2ynrZlk6Ir__YYl6_Dsb0mrmd zE{=4eD%3Tre(JN?>S; zyzlwdXr-`cmzDVVQlwk5Gi#vp%FU0aYmxrE49wf=W=XfED6hTHRMNHk%eQu0!#3^n z6A6=yln<{6f*Hj3PxT+Fq)+_H6|o+=ZYZ{X?j@m4&-GXAY5IY=w~bT!sO!RMf;ZPB z)`1Q_!xC=cM1pL)RaWI+v4$fbOxg7)zJ}N9dW%$IwkqH58hjnTrfT2O_m50<)?FomWNr!V zCSx43+RMXiOvTgwZ#%xnN+QXk%^!rxqwugFsFI<)*i1H-n>+L1pxje3TsLZS=3%9u zDeAJ`+$gW!{lP2RkB)DNMGVF=oGO%}v^fOa>}VvPlUU;aREP}JPv#WvAG^n6I*;^#0hQ*QeU z=&!hjOncTz-N`VoIi1fC?w&LV%?a_Fm3X@gx^KU*SiY*`utIbUGP)%?FBDgZDJ}4u zx>l?%%Dx7wq}%DTzdUAs_=iVMqr9Gg9ER~%*`}#QR2Bb7h{G($Uyp+8&j5#PnDhw9 z0jYpK(r|1ea69h8vDB_8Rs$eo;W~_(8dk#|^Zc-Vj5{#&brL4W1DR2>OUy6rl~F{V z=UayZ6nrY?OBf(Ayw~QeOz$C+NShnJXM%6G4>d72p*1;`aTMaCsRr2+^7i0c#*s~= zx?LwK8BRJ3Slz|g56h_S&Jy<)q>opgi_T2&;H#aYGZ>hvmot&%nO+4|&+BMA$*@l% z4Vev~e(HzfYZo#rsXM_>?VOyO8p8ga_vs9Pjknj>n<0IpmQ9Ip6?LROeS?1rFfD%R zsh6aA9~VD^U!jO9h+0NhFAdX{8#5A&|KV}XX&L9?PK_>@nuip6mvcpbk5|+x zyKC$5m-+7k+E-F1PZvM5oO;BQeAyR7ZF-~BIM=;8C>dn||4EblOC6%{BjgggiBJ-7 zZo^NBnQin65SZXLdWN&f6;?#P4${~0$!R&~P6itA_+dvELrB1{icy!fF?#^!ZW zM_inKkb}i_K9}~q#YaeaxRf3ceb5|y34ygB{U15vlQxP~Tu}nd0Ahi~sG;Hr64Bulk>&e?{Tv=g5p&YDsWVlE@Pmas^X}$eKOthvlTe_gQY$04uQM zGSZW3eDwyeHwWiS20R_~v5)3gROuscKC&B?@C~cP`+J$l)(n#?OVGuA9;%9*`=nxC*2zN{o%*jN(#X zxFfLw9uxi4;lVCmLFd*wJR8@-$trw93_K89NVw^1?V)?^Xh4Gl804a{JzR1rtjU9E zY$B)OD!^Ym=!rcaV%jQOjF;^YJUyQByl%X49$MAp|JJy~0RMPo8dr8eOFp9_t34VO zocmYvK>*>Oa~6omR|8i(G<%INiiU@R{q~-7gsnt-^Z!_S_joAt|9!lDchF&_lay$7 zJ1N3eq=frZt(Bxnl4E8|a+t7^oW|T+ib|Q4uo1HeIZkAVFv(#;jPqfXaR@mKGY(@; z_r1TT{r>)`9=l`Qhv(~gzOKub2L=ye);e9zUi3HGy#4?ZO8WQ(5!{N9E9)8s#+bo_ z)rqx-Q(EI=iq=c1~ zh`VDP9}-*_;p`lR`_cIFZzrA$^3)0W@6+A8K-9VP*}F9hq)maDn93>07T>~j9D3BO zRHbUHpl7o3_?uQ%E34ZAvYV8APbEb$t(GuuvM=Tne30(>RWSD8cHR!Kl0`hY+vUm+ zXQTC_=&os1>Up_T%iDq=@#x!>Fd)Cy%y{>%DaeG)RbRzQTFG)a`>EvE_~ih7uc`I- z7Pi5;6BS?PxR@{l_S|vse@XSKt^JaG$qHPF>L08Iv**9L9TUOBGMyr7m;>bst*WB+Nx-yD!l2y?0m(4b6pVVb6n)5Fecz9IL&umQ$muJSL~~Ol*`C*o6O-to7UKOnROd>4)>|m1@^HqdXA{?gKD- z+GA13)zC|Bn2&sy;g`SFkcM8IZqNvn`Q4&+*1EZG?W8EN)KcUr(DmhGU-FdzzU#ULGYsSmJMnKQdnsb^t zn5N*V!Mpw<&%SywLJ%O^f>vEb$um6{9gP(}EN0eHSB7D35BwSZW-3^qC0^G4J&-XO zCOQWfI*NZpnL3F+=||te7IO)qyalSHEU@_V-F7k~9xSufv-yLvjbcBMpYVKE7L`NY zOJh5)Ekyevw&5?9$_UmNle&j;UWi4dAR^_wBEKNzq2DL2X%c&rzj|&9@uQDtLj8fS zRf5WVaPL!guNOn#oHgEt9A$09ccWES)O~mh^$=~4ewRP9ufqrR1H~ha7ycSp0h2Kt zGq_l5r|0Dd4)OjNKOo^(m5o>iSBs}<5445P+a&##XsU*M69_ZPH?iwrMVS`P8b~&G z`zJ7b8+5mQUXca@AG+YdlJX{bW$d`cI(_5@$K=)3)$Wum0ULN?gu_E$4vDKpPr6(L zt}l7B!=MF)vo4ryp?;(na;hx0@r$mghTfRL9h@d$8oHnLv9hA`M&ezkOzzf7-ty|A zm)^a?cb~brPpyKr^M>1Re;O_fSCY8?NWEkeKlX#^&p+9AT&O;kP-wJowM;OlJAvE-*r5`be%Z* z(a_x9mdk%oBDJCZvE(VNcz0QaQ4xDNP%Mmg!fb-e{)|mA<&UX75Qr}$Fui!%>8;n8 zbi-1m+7Fp7YC5rKGwkA*98nVXX#{zKm!O`ASW{^#OLoZaiz7Mt=aPyppl*7RNfk}7 zV(45pzSdXv8{UiWfpH-FMf!JGMB}ndj1*suI~#_{&W@fL?Z|vLd#wP*Ub+}$CUI@u z^G9TAVBX89MwFWoL~)qxQop%i_+vX&q(xXr;Bzqeu$3F>2x*5y$u#HIfBkO0z^xjy zWjh~lpEo|rovXq3bW9s1I=ZLMxyJnmhsIQ?Y*gTb)WKG}i;%@n%z~}DA6}s?>)RVj zyOzk5z)IV7r%Giz@Xz!DG{Qx|198DXz4|3if%pFp5j~mrjXBTvzfjNXGm@4Tl71Lu zy=6_+g1mISiQ-NL>}C00w?T0RB$$cxh4^k{VIe?wW|VO&tvUNvBgypi^0jESS+wm| zr@3qbv);yN!a?L>>3>Y^{hBe$3s(9X(XuC0Ww!m=*uza0BdY1&tlheQY9CYyIDFAj z)!oAu$tK6C>VsO1*2Bptdac9Q!$3i8<$T=H*^D*yLnvweG$k2g@(Gt?Mu$@D(cBIu`C(ovlu1nS4w*H)Og8;3{i7_AwgRsL{@`8%F zdL)`P|4*&zni~a~1w1pImz?j0xO<+Shuk{*oL+@yo37!|>G z6;SFcOnsgey9|8f2m|WuhO`Y9gKwgu9)UtJqKcbC7p0FVs>GQ3_3*q8H)K z(uuqm)zoe}ut4`UiiYlunTqpW-$VpNUX^IY?)4`syZj5^wSqRr3H`yPU0g)`P zZg=~xctDg@AW76up=ncHN2T6LYJb>Q%U%yfF8Z1g6=NDw7eD2_tfPHE4@=$TI}B1L z2+O^TbhlE79+f|z_C^bDFiWDecXfy!oA!;JLpIXR;ulN|DJ#SkFqt{sQMpD=Zrj&p zbn?}?-M3>_Y%tsO5kT~v_^Vx`&OMCB2n<|%ltB7%%Z|Ym&LHok0^&G$oQl=?pYzZ<=bWBqE1@gyzwobRl?AuWy$Pbps5`J3H5ot zR?Qzlyc_L%qI`Cp8JT5`y}H=l@P-tcsx$)Nqh_NCy{lE0_0a{!xK z;vXP?$h&8F;4)%{D^aY45q}y5c?`p={TgX`s>N(?Mb$VMR667P@PID6i7a|A$eHZl z(cxvJuOA=3mEl4rya-jnn5DxF@g>UgCop~?aDR%qSoCg5lvVfhj1rD}BxOU?w(LhLw@gj}LI zmX?HCTmS)f|1~DFpUh65|9f4{*UebwC;kOuVt!J# zvR{AEKlb^1W%@-_FU4CEJI`cU{k@IuDTx$4#0pVYQm@51AQTA`-^~c5lB5bjbdSoI zzNtIqc&vD%>@4_*rhk|HSmd%VLbfkZb@);|eh>c%>mZ35nl-;={oNkLPI=Hk=G;av z3fxQH(&p{@9psBxIx_GYd1E%kTsgw1B|hX*xE1m8k9tJ$3#cN$X#(q@zwCGTZYYWd zGWz$&e{|l_K_Lz~YL$Er)(H0+VZM2&B$*UBVC%8x$UqN`W}?}t4T4|**Vsy3-}dJm z{ajo5`>$uDiakG}$y(t-d1l$|QoL+ucKw0V;zC0XcL%hnU30Z~?bd!{w zu$YTjX63Hl@#r69O-HH^g{Bf^z@<$pCoDq-{vrs@^Lh(Kz(avlhZqxW!4FLi%bcgE z6l$!LU@WZjeDAdJL*D+8E;B`^uJW>k_I}G1q#KZzTPsQ5O~m(Qsw=wck=!;8#r{|W zbzHPoYn18%_aMtp6}}-WREk9(4Y0)*GLFPmR(8)bu_+t{mN&VG!(nr4I zHnkPbQFrnf4!+?dDaZD2c#X}75^Hcj_7^lB*R~;&trW98U?9?i=-EhI@qzG(A$#f( zV7CeLD};xypnWGMt#D=G?WcHunym&8HfxfSlNmHJ2rJ-j?% z^wr(s&`5Ij{8&wlkeOM(i)!Auv~&~G__$nQC@-^WCMtPZ2d)@6+B{Rk-TGF|*QqvB zQeY}8rF>$w4b74#bFOAOM?Te~qVdBAF66BFjPFyZ)7G+|L&l%bD`v0f``CzaBjb^; z=<5jV91u@e#Ie$otnt;+vQ2^a=J*aev>Y*H(;Peh$%@~IvN>%k0j)X*X(+nZWEHjL z4oQ)^a>C(xT-l8ItTA1iO`Y@hf+U(Z z&jm`z15xQuteyJ2Lbi|Vj}YEc z_Rwd$n<^gzI+&tAN2{{*u@NltcMK%?)yz_5*4Ss(Lf7blysM1saEj<(0vk=cg zCkqT7>f7t@cJs-&(jP>bLHFI@p^lJ)PAo|7Enbz6Yag!A?a(WM} zI*x$9Fv|H16n>>Z=+eY0Ic`!ft9~VBpDk|lSK9PFPV~oDY>AV_eiR%W?|XTIWY|U+ z6_ZJ^Yzco6G)CSGut-TEnme~EY>7IseKmQGgKy2xOYj>KaHk1NjYJZ*SG-_QLVmLNujQLy6!MGmZ26J4N_}z}@@RLv(UBlL z^~?}+j?86}xB+#BUiSk`-1^WU5o^KM+Yl@aoHcSYk*of$>-L3E;-c)o@ zfutbFMv{~w50Hh@L}QQA-gS&rfXG|@2#f{43T+=3@ z%;&5eiK$nTzIS{Mo6)%+r4OJ7sKNUe&rp4@3Io+X1+^&}NNDv6ASnFua#TGf@ zHi{*mNtNyWOe)KL=ig*|zI%76fYbML{Nk-85qT=og-cZ%o@&0V&i;p*2R?)?jCvdD zn-MrxWi@dJoo(a?Tjn+03j0WZ%Xz2`3Gw~-L9_6m%V*)A))`m=uqo*23rP>C`^1gs z6EO`NC?NCy=nW#3<>Tz3vByQ2<5by|nizY0mUPsS*AG3nyEe5pLmrLfbu}Gir){`Lfmz3X`Xj;C8d>vxmRr3`s=6E&< zszSb|X#c3)JGIz1w{L{{2tq_Ccw2W5QI}LD(nNI$=&kJO4yP2g{6^8qpZ1tVS?Jp z;r-g6F^IGcJUf2#dR~aqqmqvvI{6HfzSm6zIWuO_3T@xd8jlUQdQ5r&-*x;DMPmn* zPj9V!B!m2{YKQ*aZ351{N>yhloGnc%vVp1BOuiWp32b6~;HlTky%?<#qy=Jwnj#)9aMlrnU>Wr1Fz{|7`a-lR$>M=fcRh4kdIviP3|Vsm{H+E& zXm7kq3ikPI-2lvBHgRnLsY2^<==pb9s(gb0DB<*=9m5zdM!B|i&RbjN;bH4;o!m+4yE5bpSZ8p+1H_BPZ5VT^C~A@W4V6OP8F#TZ?}}5cmvZO>9i8eBlb{-j z^vmYQ(2dSqC{dVlm2G!~`nZa|0v!m0m$^29(5oUcEctg?!tnu65CtO{BsB+wAp@^S zOi_}H4-6UkAkHXrvT~BJ7Da1v+HXQ`olPoEe>&0}77&u*e5KZxFymb`xf<{%;!CG# zvtubw&#z!(j|dfh)J8%958KFF_5c62@M@7R7QtNC1H+he;@x0Os;Jm@V2U7cq;pky zmtxMf>-ntpyj4Y*S)yj+YjOF&O0BC>+oWdZ3tXyYrr-L$VPBIzGkMmJZ%Ixs-mIf3 z-f-fTyA1$Ii?>pE2|;jy@Q|t`K9Rx=bgNd~$K3kt=4}i2n_kxpum56dFnx6yRT>!b zgEOS*E9l~N12bF$(W1Z>gick}GgyP}H<{W#w*RSDzhV|dHbi`m$dpQQ{u1W^YB;_Y zd0e?y{31Uv-nwm6xIQH$#|fYA8r3~IYM-94KWCCB-pk=D33iLNiP=NMM^xRCE;%t^ zNO6<#KK4}HA;-}0{pm8BF=;QLtfpKK3~`EU2PUeOrtcsbmcTv@u5CqqCnO|i#Xk=c zWUkkD;Wo`+aw`hJWSr5~Z2~zcjc5wsbc(eJQ?6<2P_cQg9GFIU^CMg6Qq5rgJVUHS zl5b|%-#d}WP~)Uac=H?De1`B?Y3=@jxG8yR-oZwRJ-Da!;EV5Fc0$?gswQ0=Cv`z6 zmTw%!*PML)@3N*n#SwU^ry&qUJ6D*QWABmQpSm^T&Ekr|hsfmg7zl43tstGnz}{}? zZg>bRRQTS&i;H+E`7*OdV5jr+CEelkPZZZsxOTYydlx5u!Jf+v6AAN;HXTS^r6*tx zc0gLW;-m0Rsd)W<>VZ$cZRwG( zMXR*ty}gW#hu}Z^W|0?OpFHUyGj(eF^ag8Au%G_v-!44nHe;=&FCvP6bbT%ZBG}?D zmjow6{EWS;S4PpB(9<#(!R&(v_ZI;xBTE=JirfL*req&*H5rf`Wd(I!d(mQ{>#%E* zm>!Y7jJVP+=R)YP^#yOcdyg4oAB?r00?qL5L3R~q)fdVsaYcTw*yUsd<_c=mV8GOz zulD+_8ti{14SQknj zCEqwGy}8d^KE~JOv!Tpw!hnvUciKo%kOQht_xEAlJ+~!G=eFCCCGi3|#_qS1M=;PA zZ%%lx8;<-)-7R+!USU=9?i(tPJ=723fQ-p)>P;s08(vEic%!{ItTpv9>}RinA9Gf2 zyN=CZtbW@U9z++`;w7cgG0`n72Gkz8C2WEq4Chd{(rdUhIrAClq44Ir{?k|Na+`u^ zv1);$EH+oBj%r)h4(cVd7 zX5ULofF*N98_c3F=Vlz;8Jj7(>S(C(z~2H_nkE-^@+sjgH=}t#M_Ulg^EI`YKWbX6Tjmo9`=a z$`7(lJT3NGnh^{{5`b6DFT**o}G z5=Hs>wUc{UUA*sT&xFHmx@%c+JpSI4G(q>tb{-$bww{%jVQjNte8em40B)m*n&VvWS%X&D~W;1SdoXz}Gx6(Ua?ka|Rdry=msd zNvqZv(Zy$rX1Rz>e*F z$zp}GB9!_dGAPNMsI}Jhz(@pw3~?aFX)g}@b8yyA7vXS*d@tSMxriZSS-GL5 z{6#rupRUUHXsF$JMHBc7TrF^N5a>{rJIXD@Cx_IL8e9!J@iw8azF--e($6XzKBmCT zGb3+{Ki%CV)>(;9Lih$3&AxR)pUcNHMI_Um?zZ$CQ`X#*99nUMW3=jI1l(Uotf;JK%9q@fLt5tiWkp?u7Yt2P$ylaoIz>K0VI;jeTM> za0toKW~9Fj2@i}=VGLU&CB1D-_k9+_BI*q4Dg@}9yOGq0c^Z<3Y8<`-u z_nkC}4(@E1=OkStNyiPOk%p4RhdB<;gY)xQSHFM2gD3}5Adwp;(C{X&t(n6NRq;LI zSIEgL%a+6+NiA+mt^ZXs)D~n@t_!$Evi3D3+(E@_m#(JF`k5}aQ4zg>ytSRml<8AH z?Oad$NO&6`mMce~%F$(Yk>GFug9nO|&froYxPPJ5_VGH0pL`jFB>xh-h|D2MU87dP zd_#v&&0k0N z9PWsvk6De`rcA9K(`j4^N2m8?Y;X!d8cLj=SNCpp&&GenSq(W&p;x_D#M_eI%^r~5 z3Q}~xalhJz!E{tKBml<=kRs#_AzLi>GVV^v0SqL&@LwAjto+Irg3=TP(m3N=<_jlS zlJNjM2cRwXU5|S%W#2vwYtWrWr}3wQtA}R+pFvu%p|U@4ZOU6cgGXu-lE&l zUgxYvp0Yd%JM024H(q^qY~OR^>S1t=-Lorf=agmkuna}j?8>BnfKyGRtwC>`Lj0l4 zW&3dVV{?Qbn-rw%7l_=SA0LT{8(UBilG&`4kn6Bk&>!-ON+NTOHouD6oiOcmBAR=Q z^+7GfcFs>`3kx)r+up>@d_>;phM|LdkIm8^Q_fP}pMmNiLt&mVYEjp}OI!N^s#@p&L7sc)wr$Z#0_~+0?b? zAZWFr5jH)|{}_iK)LEu4`DXqBPK5$ea} zgJk0yZK2jx!4K;6ls2pj(oQRQ)}QMwKA%2gjaMk8)E_Brjo)iYn~ixx z$DCi}vG=qzjX?8_J3mR-$nnbV`yOyOi0ktLFJ##*NgD{vc#l|bqH_F%#KA@Skk11Z zAK80gq)CHzoYst|{A|liM)91sw^@>h9$LZR_#G_5%oLuCnS5xYT!N!DWo&_+YqM=F zJ6~$>Ad_}(4vO`W=k!UVZ27nF`M_Y58JgDoHmqSb9ekk80`YFSnK38cQwIrMNy+on zc>i1OzEFY@Pw*H^b82DvDNdo~k+?m|A$_$qPYKMyH>uy^u?^L~-MNS*BhVEpX()?a zbhZi9Gucxh$OGupxo1Q-gZNQMhja>T%LA=t8o$93Ed9Rra5yxm;xYX>3U^K`?Hy(U zshbChApcRQ&Z;4-{u0#Eq-F&q-m?wTF4k*8II>Z`L&*5h1$oBKFF{=Y899X4xZ*Zw z&)TIkh61W856Fz4puP0D_QmM#?-5g8GTT6!=#FrRZ0MkV`cx&Vak)KwcNDdE`wHKA zM#`Yc;kfnA4UCWQls5lSdyrzBZp@ib!7I}8j|?eA;c65$L2j~vxG8@;d0X566JFzL z;!cQ{u2@%rpQljso^zM}L%E95pGGrZdKy=_Sa-}UB@)HW%g!TT8PS#7K}87Cjx171 z=A$K63}4!X)~ks$KDyJn5sJ7zt>Z@HlcKdwrhJ!Rt<$sJ)h5;A&sfyb5DRFzHV=G{ zIgQb8Lw)ktAr9$cNY}?pqA@Lj?GRnA9DuKVFAElDpbyaHZsh{G18w>$jGpfvOh2L| zoiy^t6y)HL!tVUL>^kXz)Jc`cPQ-{q&TkZ?Zx1GTzmO;i8DEfaWF2)IWs4w>b>Cz| zV1R|7E)nomZ8uX3pkMOyrQ_%S`Fc)Y{U_Rxg2)@b%p1AMdScKPSR#7b!KbP_oJWH8 z%IRF`l0ch@7OcpL$nYr?8Azi4@N?88TUDJ`^VJE>Efwk|doi%W_EfBv+Ci0Z6R&I$ zcNV@_(n}S6*d}C6j-^8TyT$^bK-dFPxTnMjG2KpIbsg-T)rHTZ0q_r2x^4mW&J5?2IyQP=E}h&kKb8* z-F3yz3}e1__C)77pJjUJ;zVD4Ud}p2t@B}1T-TRd(FG9TE!+Jk?o%zrR$gYg%n|W* zW|>5x8!%M}HMzVq@8Nw@PiXsucE=LrAr_>Eh~Osrl!=J#d7CPg9Vh&_r-NQOdM<}P zXmWAe5G%`v>p1vH{8pwZw-kH$5Rx$F;M3o>!PL3L0pEuX+$U@{GLV^2`-_9eYTnC2 zcbrK))0yWV5?Q&c_=#yWNjb4OnXp}D^E{Q1ZYa5OR$~!HrK|HF`oCLvpLlFW2RcwT ze*SpOLDE8lJvrrt#ydLyKgPRweBBrX1+MtYYmmS`Vb@W)tG^mTiyUzofxl62Us4QI z%B+E58rPuKwkZW~W+~14tcsT9c=)?uC8*>_rM3!o&3t~T)$FBr7g;tg(#1B)3FvJt zH0Vk^NbE5_I;?0rOyEa?es-`rlNCF(W_SC1uXie2s#qdDNLrMxCV%K2gr(n15h!>Y z*wO_rJb(H6wAENn>IvSe@JhwxoQ8l=S*{2d>HvPes%o&+Z;1Dpq;##rjn)v?;CNsU zkWy)BN?y(!O4i)^NMwY>U;JRfwVa?Dh;s&O@byBq1m{P4;>(`2N-mlQsK}Xd?F|Wb zDbR)1pFXNed_u96>9fiHBfaQHV}ghh-6-Q7?P7mo!cgE&va0lLEh6}pAl9NkV0ilz zSJ}(;g?jNxl%&&Eh46HC1=$QETja}yX`Z%;IJH0D(2wzM$@=TbQF=Lk^w$ zxno3;x{enu868MXR%oM~7F?X|KGntthO^s^fg=TTUaXP4k|ey)6Zd9TC|xcQ^mMS^ z^5xNxUj~_v*v?xEV}>usPyLCXFdAZ5*SKIOaL1Cq2 z?tIJuZyEVWXr@f79!hM|jmX6UNRpg#Zuu+^{NE_h(O!&!|6wCz%)iblrB_w%7A(FH zS)N$DfJ2+{Y*$Y!?7O`$VbI+hHI-iRUvYDu^jx+R?oqr*s0cjuWduPrN5&=qaZ?P|b0GNWk zWvTpgxQtxPAY6GdcZsl)atmqmx<0!PVzJEw7eP)9eVpDGud>zIOv>1YEEIN^5(h#r zHSJ}V$e{+0V^ut6qHoGwGVT6dmK(Fkn_vZL>rQppGEF=qP6=%)V|_DFH;z&gJo3gf zOIC12{psRkNbST6QPU00t6`5p#yDL0r!1gmU7&Vt$1`Xj8pF)_8S|#TIUeGYOvg+F5%AogUb&djUvgHP&W z%FY$WSX|l)x^OJyM_3VVjMMy>%&rcOklHlI`hfV`0j(&SQX78h&Ot82Zx?~qf2`vt z$YrMDW2keOE!UGEb~f4FUjF_H@j}dEEAU#z>1r+7y!RPoEhArmN^Fztq0!#}ws>U| zgFGUjvJcbqErV zJ5;=iQo1Y1H-qz`o;G;7-!*8XEbTu^>h?@dcoZ82pb&XwU9StXZsUNL( zc6ExNPbEMJiv}(d*2>XN|Lt%fO?tmcHr9_)XER}Fj1H+g%$+NZYIgrUrYWuuVptqY z)K%%!3Q)A&=UFmaxy1tVRYLk6kH{Q==A62|TgM2nO5-NI@Sc}ihdhR6ytD#qV-=Ni z-cVeG&)DY)z3~RoO$RpuHmuLWcf?|g&7EpE&kuBThl^!K3EE@vG6s_k9WMk*?bY*Y zy%T@Hkaebd>(;0>(iWhO~>?oi8gtRzB`8Fc` zaVgtRW|igp3?a0cd_8Dowe3mpC}(Nz_eT6---S$44)lSfhx0;|bh`QNEYt>j3K~aj z>Ab*v_W6RSw(bitn45fli3u!jUHH{z@42T+=@hf!NG&?yOWopC@;ji z6Y-3S6NBu>3ymIWWi78_rqHt4y!5$ik&8AGy36qPX&-+Q)5-i>QxNGi<(T-X%V6Jj zy+(UN!#xD9#5}Sp#PFyQ_t>ZNX5$fZjh(yOGh>`OruV=DrnS;1w<%I)BC<=5BN;SgF@J*M{bj#_0Zg%`*^+sa_*HJv{Zav-2y#?i%ty9R|%X>_kFZoQ8|4>~q|CZ|0u?z?ZO zw+1&xZYD6A!?N4X488@5FRdwF1=e{I_TYBz5G+RMXhV!R85H8NH#0FnR*&*yDXy!s zj=o(HfVjWCxBV41mN;S#g<3*s^{Ub|k{R~ER|6}2w!ggR75M$mzOYm`he8n4F$>eV zi54w1Mk2+Yx169$69ce=cEYark>j|sqaE8n8^pTsnfhnMBMksF?EbKs7dSe6rKDRs zclsxZJnMQs!$!!FpMBM?llJbOJ2D9b)RTF^{?I{tSr@P2G6U1H>H(iEV5t)hdVieO ze|aa`)I&pF0R@#|;qQXHh=|PMQf3rS_S+6ri+@;BXhBkd$l2UkG!CQWGtX4N(1&g1 zdya~vaix2xH<8({ZSX=a8`J<dnk*-y%i zjVqcXhIV}N9>DmYSzdAbSzY)jv=sg>qCaehUX? zV})L!JwSYT;{E-R3Q}S%p9*yAu3O5U*qXRu*j&ymBrkP_#q|8poL}EP6V323oNeZxUjMD%(nn)vZ_Hu=%JI0C=W#<^JUy{9)Tu;C{t)vMbj!B_%F8UxvskJk zKS(~FvE)a%T(A2uP&K0*hAQMPY~1p9Ore58AcH4g;Aluc6}>=3&s(|&?!*k8(JnXG zo1dv6b)BqNdVv=MjyG7++0rA9Qd(yp8b2kh+CnIs+x3hDQl@u0hm6epp3&A1j)*q? z+l}W^27mqK&jUaG=}4?~x1Ik%{O+&L1j+`tyAE4L;=GD?+hbo7iZw}7LhI0^P%VYa z3Z{?azG{v|<8S)VMx}*ku$rwYIU;%s!XPqa0jOEGdJ0S|k3d;R7qNv9vOH^O-%4PZ`@2+Zl;@6=AD#JkuV-}${hU3>}Hz;$wD?;-SRN)meN&zrSe{pGnkeVK=0Xe}q+ zE5lI&uC7tbJx8jDJwONk1fU+(u&-Bs3VW@yN9;1Vh83cmTOdhjnkOx=al7t$8yVbM zl_u-@OwX=5UQNGhI}DW%3R}SaKzKkFNDG5X@&ZQNi;M)R&wPCTm#vP5^zCD#$GbH? z1gcDR%6`F{Nrg&btih!fdu^Y=f0uog*c$LAeP))3&PPI;HOfR=z6W1g5FJxnaUh3a zBz*S5xu55rxAs|GUFa!v-fps2enP;3HQ36|DCB5LxI^NFs`Iyux=#!Eq7+1`N3kvb zUb(hy-VtR^=tQIK=Hx+?8?gjl*pJu8Z605AxJTwr9m1!piFN2%{5s1MXu}Eo(=un0 z`Cy(7PW;i`8s|9B>m;AJJAI4w}FnDhbrb<_`!{vK5dE?;2DP3pAkILr6rFuj(lOt6OnwrKN#c?7l?}OX#Z|`357xCV zN6lDIavoHDkne$}%Rm&elX|FsoT`hxc7fFui;uj8c3i{YkSUC?K!*(_64pYS;1{v- z;3qjj5b;|{>&*dLJ=QJl)oO7|9>RzJ7wH#G`sbTmU-bli6~^bDA6X z3E`|eGXf8??P^U~z0<#D^T{aFlY0HJN?>WW7a}+N9o?UG@l4$dq>m<1&hc3^y^J@s zmtBjOnJ7Us`G|FJ^`(R_;DaS2q{qBs*g(h>oyBriB<~p2N7jq51EHj@fPQ;khH;)LRoRQwi#D1 zWJX5jmM4mQv43E6*t@&#Fy%BBYvkxVs8w3dD(Z7EAGIR^_4I33#{3`RF=3+!61%H_rG&HGGRr~@}@%S# zP(4vHSQK@X zY4X5K9}i!zECg0ZrsL9hHZ+MHew(*I>WfFq%Hmi*3;+wx>z;b7bPvFiOtpOz#{N90 z|5S@_vf&-1`&N+f6y?OooYCsnO{_w9?0&HF6T&9Mo%ayZCU5f``AH#_sS&%y*{P)a zV&l^6lJWh$=r~-If2EQ9^qUf)0Y4xY{aD(4?+hCa{mxgOhwE@h%1VmfiRo zj{)L}an>?D(%N3RqBzl4?Lxn09xV6rv;J?ap=*z z)2*KMmbNtAz}Y5hV0~nfhafgHLjGNzlgRrIGy`I3i}e|axbyX#WYcR-QLD5jf7yJm zM-u$m9_Q3~bULgHR5>U*q{@$WK1Ldijj(hsu>ptrg2 zZ2-Jf=zn#hefvF4@*hfDSc1Pfug_~!j;Q&8Yw&b8Isj^@#&?GKgq7biF( zuUJ>R&P}ILc$oh#^K-x{&aq*lZRmKqT}ff5w?*P(1D)jZxyQEjDhALR@t~b%?hFEeQXtav&vFLEa zLK=v<=K1&!0pZ{y-Uj_lDAf)Ek2aJ!PGCCAMJK^@f~iLXYsT@TSU#W%kA|NbEaBH3nwwwPB`VcE5AtMjWdfC{l4N-`x;Eq;MeV>8?SD*$zbuMwhE@nKW#JC_af^D>F*%@G>Y=)4UT>ijB? z$~9;eBHt`*AZ((3tTb$6D!N^XGwqh|P5a!|$33%!igWoURx!y6nciVS(%DWoCQx^@ z2VjiP*a+3@NfrI|Kn}rIY<)$BMj&r>u1EPu$j&8#VVlb0Hm?HN%!$T1Bf6BVObHvT zxVX+8wha*;^nJ9!z>{tGKojJGrQwl&Bn^kVGgi5w%X~6h{XZ=jA4cYhI!Hgtu`A~- zz;5Xlz~*Q~O`c;YwE6tA^)TA#ej|VEY-jjWBh>R5A{kb}^cb6W{NKEL2jYQT)8!_! z2hiF?bSpV-!(07dSe8m8B;d;8;kk{Jj6JJkUym#Cy zAFjz}kB$5QAc5lIaT@jl&+u8Wk-5o~sJ&VOYg^hNt7bb7-|+R~A4h0MWJgDd5^xPp z=vYa5C~4)Gu$mc>Q!p#Ht>)RK^Y?pGW$T3fSsk+W)~EIIgs?>$rJ0JHBbU00DpZx2WZR9sweV7}&rS>~6dspEXB-?% z&T4dZx?O1`10Q!o@HMF)dN!6uthbIRua|7%LGj7yADx))Zzf2_0NkXDVR7%ruTGE( zVjadjjJiZESO(B=f#{g-^kfux|HWV55rmeGUnh};al$lfW{UMLcapGb+<`LdNph2U z@#Jz|z32tXkB28w@@q*NZsI*ze9Rr#54t6r`PU(Txf#f_D}bGLpER^vcfJ>ynMyvV z{1giR#s55$iwi|3N1^4cWL%-?RG~RcZ9+W!$zH=Ei(mXrGJaleAp}%s3)x$)&+EYRMZ?;VAZxhw8Vo1#!Pt0uk5*kO4 z&5@l^nIT#Qk7|?t_Ja#NSel9p-hxhgAJhX~8`#Wqs_fJCNvD3Ntbm%}I9g?ZxOoh8 z73oF@1LN?G4;d5-4bgignVar3a&|WRhFwDib-3c{n=KU1sKqJx5tyk$e(K$qXLeew zyZ-I1++VzmwB7a?Qg-8sPL8&tWAdNd#VVrNZt4bcB{D_g8>3c&h53tYC?HtgSSOm1 z{J@u-c6uu<&5`ZlS#G*A_u78;2x)9H6h<`yCc6rrS;P~5UdNu`*ah0d4KzpEu5UPV zt~5$H>wqQQ;;$ReGrnqivgc)j09>&edxG!q6p|=cyP1rg6|Wn5H*bw~5m&j%c=b68 za|5iY6qyG8d2*Zh2f@rq!AsVh(8F~DL=F~5CY`KYA1J{Oz^u%t_5@?0|EE?x{;6{) z$0EnhHLhZx)&a&VnUOO8VzsI1aRPz%SyN_q{@^p9tqn*$KhPkZW)) zY70xjWK)%P{@d4zW>yjS)h-a{lm$IgS|FuUZ7AN@dlSt-ynn{BWyZSNL9KdYUk{oG z4znawVeql!iHvr5s^C`rSCJX>nc%mpe~0iLjC-Z^!rda8*h+A02T8?~PVTr*@hA(N z^F}r03Rs2_aR3FGsTusRXRx9DghNtAkrn&kz0v(c#gPsCyHZUCmq7{aq!_&RaA=P3SM#$7ar0A2 z)P)refUb!5h3EMA4mQ$Od)}gso$H+5^-NdlU;23M#3wZ9{_Ro!8}v=a0ktHRgZ}Eb zPNZl6+=FyL?uez89~YDi<*}pmnobeF^!=x@oCBfBA5^CqF_k~bJ?ZCVW?}fw-Y;a^ zKfaiIjH21I>CAXw=XTDM>GzPxJCDcIRO-;0J4b1_i7Wi5a;T0%IP2vs*>}ZN!A@%- z5OdY6^Eq-wh(^2;;L+LU_){RYav4S2Nd?^v?P5svqnIr5d6O-DFgB}+>({bKoGG#( zlcD?Excxe~HZm!lAh^VtqKmC6w|48~4tMTLbewes%u6~$UYPJssdssms!A==YdF;R zaqH~K09W-HE;^Q5a``Y;Nie{BEJ94k0>PGg{DB&Ctg#PVxla27LNpuEw9JhdOeJBz+2)a1>h+O=@C5 z$h%j@xJxl}6IwT7i{Tp3Tg2^Qw{O0SB;k|B&165zNd;md$ibVjrRVr}K#o|Z`1wzl z#V)iAX{da=+=IEDa3rDm(pAoK$Ym6WrR$3ee9QLA#ZZ)Zf|Qj zrjPu|DptC`E864$^)q41%}==TiL-c5B#v{t?@uNppff`Lo@ert*tQPemOxmbbNkiG zn2h=0&b=K*hyvIDge(Nql6}=|h7-p4Ct*c{^&Q_Ujv4%fjK3^n=EgS9mMQUd%V*M) zuAyV?NOR;R&?ndYVhN;@mKD$Y-Q*Sju_+a4y}BnGKpuO6lONnBq(wklmmH0{*OK~G zp0Gd(UPEmIc=~m^wa!~Q;O;VtNsz5_H`|VB)Y7;bxMH6$#N0=yQiUinOMPW^ksn3A z^^yVASW=l_qSZ-Hxh|NrOf5JGN=Qghs*WG*F9eU9VM zNiw9CN;@Q}$t2Nb?Q;l`%Z^e}G)a;!(`BX9rt1!=>8_%+rhBWc%eJ$}~l z)y%`&^kS%a`e*d4a+glzGG%DzURutSbSn0sTJ&Hf(4R*8S#}EQnmX$31B!-I8a-vI z%)J8G8G+gFq(Zcxozr@+&eo)V94>IKpvs@(1eZf;ZzugX<7(}J)gRkmFZ*Y7*mgCE zW>KiJC;=6w&+!V*Y(;sZEX**g@aZo*$yTX!XDrR!7jMQsy!2yDwtU{ili!*pk5i7P zkqDagxRJD%^Ai;icWp)|g06<0yZmE0k-J>zv0u(EAgNhD?A67py>c(*=4|(UZ-?S? z?eSYaKvFWl+`|(?IK3_qE$2l3w8M&|4J6AiyG z{oLU9Y2EzFKu_rY;`L-E`Ghv|ADFneZ zOK27ev6uu7dLEL)IcZ_GV_cH-NA!W^j|+u5qxt8N<|*528n}?xoY*&!CG@~-`Znps zWIQ&#%^jkU$15J3jK-bk;d9EUJurmi>A7zKw1}$p{+qFq&3+-Z&G1Jwhb0mSsRcm? z(K($1U%i}wGYo{|Yl(1b$f4~w8*vX!d31&9CgfOOPY?9xW>XiPHeA)Iljk-Vje;NY z4lc9#uY`7;Te<5_O$e1^4Pvl)E5XiFm(*v^D%6Dr2`etF*nmzil} zLeLFq2!C5=#T#PB67dJ@_a%0s_w;>$wQ6@v*HxydTcB|?%&pic(ksoEGGqqOQ5b6{ zKQU|Qj?(gzjKGqo_^$@h>rLGmp&3_%SSYhN>H}2=YI!7F4ID2^M?}VGVgfQX>!319s)~xcMFXv|uNrcT-6*HmB9v zDtQo)RO(4Pk5~AN!WN%sp(2TdU5R53H~Lw;qCdY!TqjvOX2t7E8yURCygxk1Ps&JL%s-rJ$7<2u*%jqvRT*gou4$v+@s+OjF5QDe~MZ_4*v&-|lt zi)5Hv<+HvJ9$X{Tp~fBXlHW-t zn=+<+Fu#sauSgEz}1S156PMxCcYp;Vp-`Dgt-MLhZc z3KUl^#k`?Lec9~vO|uz`M7lb8&~dh=5#IAV`H`~lRHPy&*yjkGRXiw@Ewm|rO8vQ5 z+8k!8J4|M+kgGfsy$P{Ys;^$`@?*#D-FxJ=xO@gXy{zZbYkHFDw#U`?f(%UrkH{BZ zBz1L>Un#>ry2Yh$?K?d47{$O&N2hbq!=*t5)}4kXjM#xa#ucUTL0|=@*iO~~v(8%> z3-$Kj>gd$H;#D*tx0=1ClupN~tL%@ob{0NALgpa;MGs~)G_?lyWB<*#=1ql}B5L=z z=T_361gFQ+l2pxpISM6}65csl8*zW_kDsA+S#XcC{7t7mVi~-y3?Z-?k|lEH!r)z~ z(k}nmOt~4tHky?A++xgUd?n;7?)yV|eBJvd4fFdaW7V6N)3li*pfWVrQgphYDJxSf zoAW_S!*ft)Xwy_ZlzC1|?oGnu#~ z^4s7sMxDr9F@Jd%z0|LP#oOU#5<6`VY8G_DDm=$C^<#(9dG{K@|1vvJcDBiv{)6IXv=JPGNO$N zjV4q*>@vHLCVz~*<@u62kg8+B@$x4!$Lh5IX4tl$1<#G?2I>XQD)RpcRB7@2SnXG} z5k308Jje(3UA!MPx^)?Ps&D}on8%K0Kdmd23X)UeD;6+*(;Sq=SM%C;R#T+$^srW% z=2UjAF?0e6EET+o&-&Oq>^=mDzbW}_kUv%yid*BsswPlp@_1D*bt&}xn;ybbk+V8V zW72ShTBl6Ty3uK*rrpu-I)ftt{n+#3xLrxU*;?%vJ&UDJ_r56|kJn8YLl-EQb&YD4 z!W_-Glqjm=muG27%ZJpXsv!%8E#3y|SO(wAj2|L@)jHwD!Q{%N zVQ9_mly+X){2TMG>vAn4lWUUu>gxtS{x@TX@BuPY6DIvoY01)NSSv4%9&8?l!nEsP z&eUabeh&FNnnM6KQC^GP5;4nnwMNq&m8gzNu#kG0A#Wk7E|suHm||8L;RY{XQ88t^ z3a{tt<;ivdjNMW)`r~^Cly^>|tre7-J_+3YIhckl-J-`@jGQSwL|S$JuMnY>=|}j` zdIpGIyE{bWSBkOw){OmKwn-0tf6rA2t~JAC8`7rkc8LMg#_fZQm2e1j9bD0T7w~o2 zU(k%>m(vd1kv-)zu~H{emCXVRp1Hx@b)yGb^Fd=XYQ)O_Vpb}%o&vzG*BIJ)W z*3%>heRaL9Rj|=qaTH-m_>JW$sg_J;w_BCeKk#_?STL+5cgBiwg62xI zzvfpgnI^9R5>d68c5yo;hL^+sh$z>#N>+uZX=qr)l^;gq#~U=I`-hKq3i;uX!B3gD z`M`)~QFsO^EhJw5anM8&V{bdb>VBDeDJhTO$1!hlyOg~SUv_UHC?D>}u%i(b*V=Ca zIIxZ`{m>s$(q9_hZ9lmR?LMiyPwSRX6PO7)8bd-qoRRXb;U%OIai>YcmcXdD7LmjE zj!v!k8oo&#RJz|;b9dz2!-f{y$EELMmlNd=N*x!Be@9b%zS8nIys<%>`PY@*g8yb;y?>%BC7I6T=-DyXPfg8Ke|7Kowf zCH;HJ5f5rbgqw2d(?9x(Fh@p%kV6>mP_IzdAc<}o<=->B zSRm!8_@c$iR#{y6s0c<2Qh9${Z?_!b6>Jc@7BLMY{WQqe5>pvj45Wr6D{GQ>$JV0d zEMTPK=U6RclmW+MDa}$cQ#MDN1RtX6;Z;1aJ^j?YhGL>PrTK40(|(HWU^6>sV)?uL z^BTMHo#N|aGrQ``9!l<*Lq{p8CeGpM*>UffT6Vt!K2Hr{*b_^Eii}{vK#~>q!U(<1 zm;*`U^0>R$m3yx+-q%n_Z;T$5Z_ zDfRv-(PN{~HQ=f`7Xz~8=qu>WaMW-7zt{YzF$M%#{NCI~hXf7J{?8UetlFe0{)$O_ z*C%|{>Q6AbD^jCiYEZX#clg>Yw=|u^KMIo$TrT!6ol*4jSl@oyNuEEeAvxm&rG3vr z=AIYhx9q&V!%)k%iGEGHrVh(Sy0R&t@Z>bRH(s`rzd|L5`U{kp!zzRWt^du44Rp>r zlJwwdefbfe0dmK}5G_8t9qFQCws<#tNcxmbrN=t@q_`qh%~UTT&PpC@s@f)@J4inrx(7T zv7z<>V5e-C67-PfNlpXWl~0hKEOjAq{PuM6L`6R#3F&C;p+TL}#2!wD6}Arh8#(8` z*M?MCY^rgPEm%jmDBCpdKMs31e)pqzjSQsca6M3u`v>2GUB=1qpo>kjm-nWiII= zojYzpy$`YnqQj$A)gy?>;AZOhaH~nI)hWWu9;=%sFtF25Oup~)9?tRyFvW;QxT6$i zQJWc!UUJgTy2u*#!_19pyZE4F*aTakW6v`k>|OQ+Sa4cZLr6aPlgo>68%;; z^}t0OM;lWatt5-0y(C?Yv(m{UsTaC%nq?F=A&)HKBhZ_Th|;R5AErvIbYgw|!+niM zFQ7wgO<{rww(iFJY_rT=n^ilD>7GS_6bItA9tG+XX>;EZ5IFEqxgJ4HeYcx zQetaRKe7=*WIUz69t8(pr+l+zANMR+G8k%D^@?}lq1Bn9acjYj&EQW&1)G!8V7>BS zNM5}71+E(?BOl6*edsbKtZsidt&C|~1r?UHjc^id&uwT6zRb5P#p^kRV8RQO)>H6( zg6V*>*&j#^oYK?u42R9n7WK^_U!TUrqoAI-`J2V4#8hT*P?~7B;=rp`qwrBo$?Sy| z^#Et5ZOIPb{X@|T1JRDp%^RdiVtH7{qX?G^=8i`cn11JvUUsjR{5I5{6Yxba4Pj1c zBZzAI?q0N0WrbA{<)^G=c#fG@-@|VmlqgRd7((dE=1EVWiygao+CxSgWgGrE)_2}^ zUT$1_^|ln;-J;M#$4w?%{afn?M_0wbr5boN3551O$tra?ql}V!h3BKhWJLRjV|@LC zPmSfb;EbUx_{mty(?-tIlvd*Mgj2QE*TJjQVrQk@rz~Z`?-6+MgFVaMGlFD&!w|9N zd||W^R%D%)ktOr8eR&JSr=Oa=3e5BarGVBSgu|^9`_x-uUuf}QswU5^V<=(tc1QQF z!ns(_=-s5f88pilGX%HcH|qABsA|oS?QD9mz{tQmaLT#`^_#AbXmk-ue0k_{+(h=^ z!MCaWQJoG4YRbXoK~MNU%P8S^9YK1bRbnZo-h>xWR{3`R@7=7md`CiidptIAiN_XE z+Oz*D_KCa_hUzHKeYV+AzT{4pWL?yzmqs@>shs+XCbIwZj<1h;O~)%QFrYF8;|>5z zDZ@go_H)wvNjA+e@mY0*_z)(RlgF}vpP9*SKBax+tF=LjyOLa{AH;o-`rCHhB-Uz| z`U4YDTVsiCA%AzYrjWGfCRrTzKAGVW_p^5Q+sU0at?|H@;RWOY;c@H_y znp{4teth1(|IU`IvcxFd0PPwO+)}vFB*|TbJ4fw+#nrlX_&7*`uX>M}s((>3p~ZNO z(qF61d=*S!HlcmbUjeBF_4DHSxC5_?N6{Tc&ZD!Hmi*Q+w-ByTNn9hQJMZD{RE5P< z>*9cmI_+DmeL@ItE=4Zz`jzN^e8pXL8ARs+jAN_UftFb?^r*!@N7JcC`^z_*<@G$P z+T3mL-F20%tAqpp?8P$Dy^)Jogpw!bKlZG$X6N`)rj54Hnh-m~_v}9C+CpT`50ljv z{VLsBzG}7YSz9vxJJuZb*l7D#jR9@rQ6n~|{^7kD*cU7|=G*GB?pSPL->`6X*k&=I+sJJ1k zSACHkaE%IC^<@zT^#XobF*}m;FOdHFP3t1z@Ay?-<6yEQVUG?Cvf7y*ttjV8PBPy( zM!s9~2^rH35H45~d8C!Nm9txXoARS(!j^87r0Kzwh!_(OdwX`S>-U8c9o(8I|!y8(X)e)L$6AxDNX+EQ#Bc zF?{*+_X#vukW|(1^C{*?Kk`m#Dm^a7ms0MAj)3g^6xxqai^ebVB(cw&M=5zUDA{yJ z4nI}ztU{&KedC(FY`=ywDwgcu0~RGp$aqe_%|^}9nK1X$p^UEUJMnOD$G_IRP6xHX zgqOxs8uMX}(oI8=#xkoUODifve<8owI?T}yrk$BXnK%~Ib7+w@Yp-CS${fT0_}6c~ zk>+Bs;y$md7>p=J4M_oD*L}uj+jQl@w%SDY0kn8VKXJKWGZ$%(QI=h{`D zQD#4|QtxiGo5GaW@Ogj@!0zEgLK>Ty|;lw;zXWOdHcGE?Fm(xF1I=?rQ!99R{$jYJ-Nd zS9EWsAjJ(HnGYZxpz2Fw)jhx3fRYbh{X&P+iT{NI0^qOne%VQwIyZ^Pz55hK#a{7WnHsAatnkhVz0FIl zi&qv~>g$yW=j;cIkcEiGw6xK79xiDAh0D0tMO^R=@TZ}EHL+)5XyG?D(s!@r!fS2D zR>NPjqk`Q?4jxfY^VKn~?#gQifeJhqf7%CbgMW8a@yZg%jQ#UNb`+^vwU9f2g`qLe z?fEN2F4Ns-$t;;ogL3DCoj`D{%?O_B|L?gxJ!1Z~goinSZ;5R|K~aOyGrB%(h|dw+ zK=WXz5+G)|yHs6~zyg*M33a^5IY+xk(cUSiDecV#ngvm?2DI%&D5fO9D7{!w)UnWqoOT_vm%c1&Mf(@3s!K|AlD};SMVO4OOnc_Ry@IrgXWc zzi3ZQD%BFYH}6`fOt2fD*ltkH5#RGa(*Pvi2B?zF8@+iE5x3)e&~L{}rzqW2l1+S| zv>bZA7k}#ymxCVcIvpfc$WvrC&v;`3HTl48HDSs~ zACEvp=2D&pgBd0(ll|Q+9RZ(ZEtE@wHXOL{pe76xN*8XHnE_yrLsw3(WT2H&jR+uk zEMix)|EG)xzeJBl?;QMSC;287gs>?})7~Vc+ox;vHrEWOU`B=+8-FlHRRi?A$^K*F z!?cYI8{c^xEqC@AfF=7knW8zDhkx{S6JF=o5@VU&KA_ffgreN6xJ8zDZor-iod8(6 zZRDf@9PUrg=*=R1B;*TjY*PL!AqT%i?nIQ{qJAXL_Sax4=te(U&nj**x2J9-JVf&9 zlHUTO9UQk8D)7Yi;naH&`yD9*&cw>|#*x?>N-Zqa47lYxJ@bTo5hpVXF>#M!P? zihQwD(2h=cKlfSvpfm*w=evnFT}1?8_A&x+TA7}og8apX%Ra$5Cdt|HbQijCaK$dT z*!x3!jMCMDT_=BS&Z4T{e86tNolam_HT}hrQ9h#Db#^3WN>w2qm8Xk`BOJYQoi>$1 z{z@57s30!lzfv-UReQed33{GVv%p0zqkLJ*G~~vLdh3N)V!Ff@ZlkX41Ws_e2Lr4O>!lKWa)64~>+2>-ISw zO3*B__6)j}LXN(G`}QdV-%bh7jRSxfN!Pg!={(*Y-AGe;QMi^u>3-~*VRV%` z6X!uM))xcmE`3g9H(NrrSp=Q2j)c)OSov=Lt{$;E@>h8T`vrrsO#F(iCArqI;P~_-_VHvW)M! z`n@ttZ8M3<3Y(Ml& zUT&WH4^|rh+XF$wQMyp=552v8>^q&yxlJ42!^th0@Pls_E>f=npYj!XQt?rxlWghO zUbAao)TcNTo+k=&Ls%2-uyYoMUX4^+x%wggMVx}d7T#B&#f{q;jlB-*DHEUHRTIzo z9DMc~{jVM`&o-_N76PZ%*wr^&(dBFVD?OmqtI-TtB6nsRQjE3}?=R zSBw+K4*ao=)Yr`w%>L&fq2w(+n|Q|?xtw%c&~dH_X~;gC)o=1_TdR9&u=|N-`06ct zCQXZ%b9^=!g+|)^B-2E~xqb<}+Fydc20w<0tSAUrjDp{}%dEuuC-PqdqEkI9y!E#EJC>u2lo7hv!!@E&<)7T` zR2TWW8tl6TYnyemm(SB|Q15j^&$?b`a=sv8!1}YR4X;%rE4emG zwmPs%b*nlpB*a+t=`6dR)&>!GUbAdg)y|IZLj{yG(`3-pMdIGd?zEA0qno|2TzY4_ zT5VTFxgVOD5SO;0vNgsY&vnCAW00J?o_SiynpQA2%Bo7@+-R5u*7}sfM(6Up*|#XO z*Ay0W@*XP4Aa3u?e$iK&(Cw#MofpyPq=*%0Z|e@;uehRPq(r5bfUg}lcI6*=^ zf`J3|cMZYCY2v>byV_qD3{8LZLcWG3${a}iqZ z2x5EFNsL9MOcs)n$RuFk874o$4`GIZrrGWk_eq7hx%gKTX%Z z3vH`8_(Ar|J0MMJ1*)vAd_3WMC%M+8&IM#GzC~cmc%WKF+hsx`C;b<2N zw1Zf;(Y)1rP*@WJ*Ft5YID@#=ok}BquFr%6VS7XC$m7;LfvxF+74FB=csnngJ3SW) zQA9Zc@tVS@V!f+ecS0GK40oyfQER2XFg6In>jhrVO$$Z7DpRoxO|?H^tw!CF1sWM< z`Yrj!&0V&PtdPUJz7AFM8b{j>wuo%X+4+Qh!1Z#8VdqnBH{9a5ni7c`QQ>k*G`yw`SD2 zxbdJXuVIXI2iI=&*MOrZ)(S2r@_V>Dc@ldYTrISNJjTH$g_^P3?=r0|-zskhkCagG zG&~%Ivl@rJqF~>=3s>vwdS-zm+vc|#yLv7ha?8t=T3B*dsTaWA_$RO8szJVHz)QXn zP~LS8YrgWO5cZ_hsn!Ht=DSYeVzl`k_A?Hdob;VO+N#cC+2~)SHf?!lJwqVlRRpvR zv3$ld=?EVF~@w{QlZk~2Hz z2ji>fcBYzAGwxqv^9sfpDc@ViI@Ip)kUkPPh5W)&Y1(l8IhK}YEgIC@&aymJ#3z(| z=tt&DvJ&3VH?BNf@G3POb7i!E9tt{4QP1-QSK2f>MStiC)^a@+eLWbB8=}_au~9WR z+|dy~7Lx@cio=cGgtF1Ouw{wc84Ay$DBfDzS-5~;g!oYio#)Y+);5{JLzOWMxtuf^ zT?I&}#v$Vq8n6&`Kyo8B2A^Jjv-btDO0){O0Qo1FT5+856AmOnZ)BbZ>31@*#s+zC zD6&e^KsQy|$f)u=%6RO7v~Yj32JN2i84ugy=|2g4!|Q1o`z=%zg2kd;KWZ-zO;5k% zb+d-wqy3)JFG(Og!)eM;?Ni!Gc_Q*h;w(F9V;6cGGS|HGN8zdpSbDL&Xe()I$Sl<7 zxo0nQ{837F5BbRPRX-`S82_Ws!5&XHcg!UX_lZn(77SEi7yjYnF@ZqUT;A=;kKs{GB#CdAwN`^E72avtLGtg^T(`Vg2ygCeG${H&%k3_7<>=Yl&uh zJ#yZq8N2~&wnvP+!gbi2-j1wftZPAj9?Kg~hDbQX`vDc#4)9c~aoX3_VYt7hNOon6 zs<_0{KuBV`_P}>{iH(WcC$ah$6`8V5-q_a_Mv_>a9tb3k45Oo?)Bmktxy~#>=JH}$ zsdx~b5aZc=9O`#9Zo}TZW%4&UmZcZcxy7r(kiM-SXXh_z?+Ce6HEm*nuFYt^V``OQ zwkYCvFd|JO(^EVe>}MWIud(=xPEy85E4ohWho>Xpcigrf=im_7-&2*Mft_gA3nW`pJ1$z zZYbdmq635HGbVP*e}kBGim{$*xkM?Hx5%uGmO%rEufB0?SUQ}4PSKF2{YvtrL>kz| zFC(?FKgu)~7|Yr$RY}@sXqK<0nL@tEW{tO$8rNAY{`{S5rbRYS)43dF>x9K4r>CRX z<_5`xu&w5!T;IECdpC4xPCP$CQ4NIn}$1c7!wltF${~&qAkaeT60rtxRYHHJ;W*L{s^@(#)&gZTH_bDpuiV z39D?E(8uE1q zL(FegEy0Bp>0$IbMS7HSoAQmjvruim-cGJH&Nk0BpdzhpVeZyREXk6aG^u!%)Rwgk&q2cS3C-A~RvPw!$MTaGrz*Ut)i{+X#_7=1k4>dRr?RU4o@4 zE=@I%n^@AEv_>w!TQXmabI(L#{vpoi<$Ft$F>OW}S}>dS@i|?yQVB+B!JYuo>o0Ej zZ^n}gAYVvQO(d{!xbe~eyI~)xlcbn3Jmiy3KOy^NHSLar_bbS!v}N}h2B^N~d<0)l zxV*&FC%ymJr$s3`@z4&U%yDPH*9c;Bz0@GbFk2cVeCW2 zlDd|J@MJMzZP!1H6kYk$9MmOEZT?gig4^#yIh$CI2`d3oPa4Loj(n#>Kt zlJDfx{@3MHle6%u{H zZw-J@70CF;wv>%`t;B@q2p{y>&^~!M}rqL{*Y$Lcxyb79l$Zjy>xc9;kfS z7U1TRaAkm2w>FB%1=DwPekwg&<}PnnhD%k|`?{!CnnvI$WR@JD#Pe1n{zCoWvD(B+ z%QF9!J?lU{Kdr??!@om6UM8aCy)0rqQth%6C7CW8ZBZOkrOHV1YUQ!6xljU`%T(H1 zod1ol$;;K88=xd0D-kMNFIXWlt_)?V*6$u0&O)yF8`)6Dp+}0)_ddyiolh1Rty400 zrQi>Oj2}@R`gjC9@hYU}3^P7FlAc?pCCv(BQG$hH!~0V7<@b<=)?U6OJzE&uCl8RB zrG5#h*cHDaE?E!DExwU6DO_3mx>nB0M>|eZKWm(2dn*$7^2qY6Lt{umaKxWY{%e6} ziR04R&c*3VcYI%s<(o{g4&2LFbdb3lgPID)l8R4oiUB(@ZGhAJ)qc6|cO{(4jABH> zo!B}YZ|#e(Fbu46L(3?JX!)-J>-GNOzZxXSYiiY7IJHWrLtI(&gVMS*UhPu*1%(zW zBjPPv4!NVrr=~$*b2I$u=$_H)QgY=oEPnq0C@M!&COPBP8FMnaSK+lm>l29_HPt40o#{V!NO{f9Tl)rTL!F`{QU z$9_3zD;`Q9Vks2YV46HYO6$nX&kHb?KZw`l##zzZC$tH-ci9>?UrB~oh*owYJ9ejF zt+73h%j;o+f3o?Z*Zsc8ylv$T3TDJaB4MTGP$AO;Z~g#2C(-Q<_ST>1-%_U=9}+#% zsIQQHo=uWS^Bkg$2YC0dWJu0bRJ8Y` z@}8?dOb=Rsx(|DMZp8iq9#gU-r1Os?QleRyORRWRmS(1RH}pX6#kRIn)ZSa1$Lor0 zW8Va4@1=*35zUn=P zH)@0Z-Ya~GW;+lZ%4p=4o6l%!OV;S=D0n*Zlc~3P&qtX?bGXW|?$Z4gmM)!kkBn7C z)Nf^hV@5XU9T^EIw6@U{PC<+!FXZy49#r54y@K)9-iRhVgvGtRM`JFvn9$!-gfelhtH|dV875!H!zY1GX_wfMRH?H-fZN2fx z$XsmLOJSpR$J6Rx2 z9Pd~7^k#U1R-79aXi`zH@rg}sR`_SHuz8ku>41G0} z5FZQGIc^OBkGk=JlGh1&-0}?&eZ(n6ba6Px_EUJZ=f7e^WRPR+;o;Yaes>vyI>-rv z^uc+6Gc`hd0Sz!zdvhD=1GJn#|AwKFs+;4yhQsS7zRg>Co?$c~N7d@}xzjHRhG~k^ zS6PaYVpr?EVNs2_(&34>UVp{&m5<*!Bag@Lmgsd&{Wqg`3E;NB>yK&Oq#NmIZfrrM z`X&>fG`epczsy50^=rGX2Ny{^Lr4#Qm;U~xzeBtW|H9U!8O(Vks)g!(rUV)N?rgma z&M4!xrX|3$>o~z`gx^BYpqZWhh$hcEII?#;jMk#pT&=~6;;VffHdUggyZbMmD~!Br zLM#+O$Hn?A;$D&B`LsTTIm;3c3D51Aa(W#js(N3=zjNhZR5I3*bFxmaDDPhx^7(98 zW)0$g*JM;4+avh#J~}Umu!26faozYN!7w-!iqd`sIrBw*%4YTYj`2Vlr3{eC_b`Zb z`geVTjhIq>(HGKK60^@U)Om9+7as7*AwCiD14SFyi%i~wr1=yzb3pjD^;gJ=W$GCK z1cIbK_@XS+KYd&&1KMisWtzx(sb5|QGC=&T*(V~4&a;%%LrR~phBLB4%ETAEfKLOQ zdHX+j^^FTU$|1eszEi*f&4p{{t2~I7+!hrv*ep< z>nW#7!gxa*Vew%2R{x6^6^ACov=P^|rTT;h3J}=`w;URY^K@Mav z{IXN=ueS>$cBEIVOyW20q1~T&zIN~PGY5m?9SfuTndiI5O*Q}GKXxUf0okYQ)k7V3 zH^6XdbgQC9HiXZI+w=>TkFglPe(Iv#1g6k@UI97_b?~q+bMR!o0&@UJ9XeTTvSpk{T@OXTi4*fIx5A>N7xdmuomATs~2{^QaV-;1yT)(i6qZ znxbehpjat>hC5F@qk#U>vJqcKt*@-HJk9V`DWQccHvO_KAa!M-lA!zi=lk^5#{(Z# zAE^s31(Xi0P#mh~=qObWVGbrUfGoI#e?xN&D`g$-bU#=N3$sjfBIHq6>{e9V+Fcj{ z49I)zR#=UBIlt?XxaqTu^6xc7`oI?w(wNA1dV@Lfa?MQ{2?ruERaC}#bgAuPWd!~k z!$#UOid}Bb+>l*f-qLY$x{8?o+7oRxsPUz`_I~rFZF-7&pHUrn`t?VDoN!D;TX_Bm zm%xh{Zruh8`g-9ppuqfu5u(03X@vfQyKrnSFOZ?wtR793$&+W=omXLtmznI|Li;nX zZ&VkrMRIu$O9aXz41#ZH8Wui%`tScNr7Z=g5u_`@Xh)=eU%8kJ(c`AkwH{kksK2GP40+2 z^h(!lT&@2C^BEqWD)IFYoQcNJC0R4Pfe-M!fii_&t-gC%=$&Mh1Dl% z>_Xb{XIAQjEqQ|du=aiS1DiGBM(!0sLnDlT&f_y1t~d~tf0mpKFig##rC@Gc`;bRO zAa-ntFQfha&O>P@he_yV%6m8i>1i>+PxGjw%FUyaNVQw=>y9!x6WwB2nBDmIc%iRty&cehFah@$O?!|n2lBp+aH zR=~gj6DCGR@1yzLHG?sO*T5}13+;IfBD(t6Tr2^eY&364iL)HNgX;0R@72Q^V!h`z zLTbu(2~snG%yk2~mUG%GCES@xKP%2kujwj+&P3u{)j{n`L^PjcwZ0T;u}RS_yKVKe zJQ)oyay0u7vZVFnT4jPZOA)1f?@B?$1TO~&KjCPQJ*un?-{(*BO52A$eSP5P?g z_p*nvXAA<#LjnevvjdwRQxR`ORNi`fvcLEWp)|U8gk)mUmF2m3&!xxSR)&z;`+2fS z3Zl6Hni@;!v!pPr%`h2)F$_?e&i@eencY_*hx--rw>cOpRzNg5h_@#KUls|Qkm<@B zdTgN)Yfi}G`Na14?x2EH8TnKbO#40@BWj1OTYb&PcN( zjYm-lKEg{yX9e#R!Tur5Y17y!_b2<}E5BZVf|2WhZ0Z>K&?J+suB$#MI%y18~JzTKG{W88igs|^9e!Kjk`T5Tmd1oBJk_SKnK@a9TuB|=sZ`7v-RUY?T$|96B0;8J!y>d6!BiyH) zFWvs+314LQRkY1{!zhb}mIZ(?l5zvH+>zj-Ogr6OLx`m4r5Rme=t)%uiQ$Ki-49Q5 zyh9k)sD64qT!HWW|V9aMu z)Jdc-J7oh(LUQdi290Vfx_OeI3Sz@Zj&WtUr_R*%_Wv_JS9^|?3|jfS@ha>Ju~dhJ zBaW=9$U7p|zqyV6?DeIQ_$gjrrZYANEnABGMf|o-UX{yo$C7Q=Kv(I|;rH>lnPT+H zmjlrBFlsui(~*WR9Hd^qCJV#oiQfb=cTr{y=Kh6t-1>oTWtf5)oHVZ+l@lt>5GSee z1NwGE!x_Io8@~85 z*30bn9Wyl<%AXh@tu7HMiZ#!cFCCXpSJ+{mEs+P?^xW>k@g%pE%fb%_0D_2 zZ_wAx8W1onK-)lkkT^N*IR#QvFA@v*iIRn30Z~~Q)M7$pm- zeF2B5*5BIjgCXz3HBBnY%?TTQxecwa1e!nPLyG7Yf8lBM?}hTTsFHm>%!Mb>b8e_$ zBpH@}ewI67{=ij*u-z^3Q|1piEV#3$e5OAYPRI+d2uqVvGN=9*yVgE6E;P-l!i9QX zUA*FKM~?2x)qT3=YjqB>J}2ZocMkNXE|2@4$;9F#q2w4%F!mCG_h_^G2t3$3^t^E8 zK+@6%q~}?}O;*XYB@E8>!(m5V5Gwba(`FaYZ2-g3mF{UHJP}c5P6q`!_dT+JlO=y; zK8!jUbduF#TnzzhHgb+N>yyk>enWQTsmNx&&QwT~_gINQ)u*E=VE2T{Azwwj%FHvq z&g){?E>mCNjWt%;Ze%LJFS(Al(RMzhT611kI$V@1)1ZTXO(_mULtdR?PU%~pUSH5+ zOCl-bKbopuV)xK4Ay~ru$WP?lb63XB(wvn2p|hIjD_cP6-_@CPI^Upnb8AU^x z8|FiS)7ibOngR~?Wt*M){a|X)(Hitw zb@mlr&$r?O*%6}JMZyZt#f=j4+C4S*sAjgCva;Zsj9I`*Q|Dw?2KfALgmQ$>2<9>hvk@Rik-n*a^aWC;%74P8CiY(0D*` zRhaWQuV1*FjzT#{>#m3}Mhy1SQ?L}DpD|JfJWtWj{x#g0mKRau*W^xkeRVtsIur{Y za#z5Td5Q~oxt0d|VWiR5iozh(oTffhCg!J}-DcxPg*rt42t{v{;khQCu zWGo?!@v#d43_lQVQI@bdE3Iv$0;l)m$+x?EDfu;c0TDQkOjs8dCoaXLA+*CsGEEpG zKB{w?<;u1$T02qH%&XFgR1k_2733Adv6jz$CC4$-2HiUVq0+6}@uTP&_+Q<`;ZJXU zLtCG2Ozi_brHqd0+9sD0Kxs<54n|vA-LwdaHLWX*SK!P(}!kRIA2dQ5%*^3k&?E*;bD<%7WvOCq%T!- zV-s(*^^nRh`o8YZVS1LnQ+leo1IB*cA&^r~DWa$AFT4Gw57>6}MSUO_^{YavkR27<7(}VI$nW~JH>Oft3csGx^*uyb^`r5wFkzyQN z(=C+WT*?^ZEfVZ*G`JsMf_3sGtB7+&+b$`**nvWgx9lxy3$;q?!Ks*PM3)AX&O}BO zoFXfewkPyz6@goH@U9H;-ARHnuK!W#aHmgf&jIyknKZ-UCC{!z2=G;+Cj{u4 z)Ifd~+$VO46j78@CD?ESEX~Q>Po4(5va(UXPp_%*Ea;<&J9fZVUGr9)Y5r!bPsyH* zvFkhS+IV4G7-us&{T97-+ZISN$p+Pc?Gbm;N%82$DGwBu83RLq3g^QB>?MaYOT z1?Z-^+-39=N=}#!d-zdT&Hv-*%HyG0|9|(}qEbzplx=RQ+(^?VrOCOiLYg8?*11SR zk|bozxhY1Zxg`{3ZVAaU$(C(S2q8_@v6Nx#hRj&TndO}Od;I?MdW|`A&Uv2a^Lc-^ z_q*KnV0u!(05l@^DdTMScrfdoY+n19K}kZv3*ECX&hD(JWFrUYnZ1+Y_Ge!T4^Gfm z4)!#L=*4a0$-lhLsjcWbqX9jSZhgA&a@IS6S&cPCZx}|f^ZjFP)6=q1L$(C_Ei@8 z=q3H$GI8J9TyJjRDZ#|kwAkp^UkA@-A&+>huR+3aV(%DZ6I}xs)jN#u+#{`Aet%{p zPP}Tvm>Vy#&9{%wBVpwL>a5L#K2ZVwS-b|sC?0~&%)a5fWb@way`cxp3mU!@XglM$ zkJ*LtCr+lYUgMz(D$4RpN)nfjqDlDCc0Xyk@i_g*IHctBH8^bZ3+Y14xU=En%}$Lt2T~U z)Pz1C0Z-t;uBGK|XJbs_OT%9*_rYpVYjvP)*^&A2d)Xn3wV3-H0JC?AlmqibJ`P(y zfZVvOL8`{(wlh@B`#3$p-_72R3g)C-Ch8(AC9WQ^w=GN$2I@~8x>MI(6XvWNcG`AY z#19=TN$;e+52#6TQP|Q+t;4-J#h$)?Xx%^*s*9_ti5(o#!(fy&ukt`{na1ts@YcdT zmRi>TE%?_Fml6#cIjP)@XlAX>hBiZ`Z{NlN{Abhkfzp;OQ%c@Uk|+FK^a=6gEdhAz zJlB-I_9K=K(DN&MqxNVaT$mQ?mLljp?h56Rk^T6Pj!ZP^j4l81j5-#?txZ}t1--1x zFSi%ivTUYxr|3M{@E{c=iB{3g-i!`?8=hFh|C+4NztRGD^?A86NVb->u!AC8d9zz# zA*AG1=*i#xQND5a7h_<1IDNu9{=GN78QHSDbYC zDvTbyCuEI-8*C)i>TE`>)MAn|uwFhS-!kD1n$f)^agW%G;I8wvAuAK)4Mdq}J-Z~4 zr0`h`pCx|y6|UIK=;--fT+NRz+mnKVS(>=PA@&REXY7zkVJ)&3^)c_zJzTDZs~ z+Dz#%PjF#Bhd&?fGUbFQV_;{-hWW$^DO~?vUtkri8Wd6w_Cv`h0ep3OistLB*N6DFwVrHcSqHynZvY?5a)Yub~ z;C?ot8H}cX>4xnt3l%*p9szJ@rhy}A61CY{HJZX+Sn4@2ySD9xZJwOwx)eW^(66G@ zCJGfkB_82GtTdz(z1|>ei=-QYOP%+IgC~Jo|E1gaRwQr2o0C}+J4ERU4X1Ck*=R*1 zekuU!1MBY20cWlEAEMZ4 z<;4b!R0Ht8V@?@$4}J{EBNaIVQ%@N@7s`cYqxL(ak0I@y|1H>|v>p?PPjFDfA>b*9 z&O5$C6P(DLv870_fQK5GX5%qAXhH>`5;AJL&YKED3V4M8z%W>aKVSxH_O|IUN85Aw zuD?J$atrQF9RTy=4WHs~f^5PsaC~bFUMAryQ^7sQz_om(p7YW~Updwaq1Es;{2C~T zq-M99ucOR9dZjc0R&5CnJedX5-;J;30L5}2J|L+d%LSLdjP!!+-OK@W3sDi800zSY zuo^2PD?qz1_tj+`Crpen#XJ?I<}$F@f7F_qh{65jP>X2F%y&TT8O(%QuYkW`eXvrK z2C~mNNC~OX3X_vNVT1~V%eO%74~Ufn@O99T1!SA8K7JMvbA@)Kuf`+P1`@RreOJST$2DU?!tSra8{SeY&x01#%$2%y@` z!Y9K4OLj5Jthy(=>zD?XauJB?!sZ!1Pm4_v5K;yp1ipMZjgPDE^VO$DK^I`~uGhbx#G|2HW#%wO zt!USXh~1W*^U^nDe-kbmf6S1Y!-EgcQ>6xAd+X4x)rpI^>dGY_!Lb#tJUeX<8eDTO zuEr9H7?BoE6k8FP8{qZx9ZUDQtC5(Yf_n}uhbN{z&Mcfg&oR{R_t8V^%+=ar=`+VF zw(7)Shf*Q|<(pW1c~QpFi2zbK_wWbeOl{>9|9()dbUlVBRb95H3jsJlx%HqI4HUtz zs$Uc+z`i{IS}c|X4`A3)l}OI-NgJliLkqMbEHq)7pQJ4)6J#K_P!@t#xGa2gM_oW) zQb=*x^R3bK(dO|(G-deW+ca?KDTX6}+8HL z5SD(cbmOmEaF>HH8g4N(tNadLezAFGcRm~4#h*w|zlFV0!K%x&NqF;zL?mMm_!)4P z!kpnIotEFhPBSifLzC-IeT<>tOH;vz)$PWSWHmSq7@Fj~w*--+P2E_nyG+wYcxKOk zEqFoNl;O#95%nR--Yxr)MFOvBw^ZU<(=Ezn*mE*TFPgDyOe#J0TQ#ENF-Xhr|M>cm zj!J(JIjSI-zKunoliQ3Kxx%u%e*T1~!jMr@LhWMwKIS*30W>yRe4r2`hBgj1q}YCv zNI&Y$V+!(~(!>u(1=GO(lB}si#0pub~nH$AT;J)V@J(w2C!0P6JP5Ul8XiIKW7Myp> zAZYyc+wBp^iF!2D2Hz}sR@UXeIpbACTEs>#3whB-!?k4Vay4f!gV*cx4^^^EqQX4? zR?GbJI3#bH$?$Z!{~NU|aX4W7w)N|C@8+gEM%t}`KJeEYofY^8JGhNH#Gl9n8_E%j zgIuGR?LT4(e*8YW8jQUiZ$Ux~;ok*?kWy`-GzBXt0CW|#CX+zWW&;SQoOR}_F->{Y zhW>rej=PQA*t9hbK1C}WR;tH>8oT-tP_O8$Kd1~4vSlLmUs;BkvOh5(c+cxHmU00< zzM!`JcK-!zSiXvxj*qqL%cG^M!3MR!+h~Q^6WroHRbTWJT@{&29LfefXTUxK|3?cp zgk6waM7g#~dJK!)T*xPHPK7HS`T?=G(8+f$fhHBri=z-aUH9y&&7Rney2(;7CfpkV z=L;q_El!B$k_f0R16cm_w}{ZwUme?<#}TQ5w)aRFFxRCV$E&bprJ;5_aNdRiA;`>2 z>tVd4huWIg)96P|Fy3oR%qLpNuj!auJR0T+r@acI^JuCpRG!7jH`-=c+rx3%_8kc5 z;No{J7j$l9FE#vS8ppe38zqGET5GZG0MU5BFKjzbYo;5ZX8&9URDxHF{d7%H#>-oLM4Z z)DD;!u~>LjW4_MhmuZH_vScEc#ldZPS6iC2QS$5T%ZxdkPb-`pXDb$>feL?VG@m|k z`>L{=NC3{Yylt1a%o+pIFuhRMJ?YC3K{&{RdWsV&r|~iKTQd4jSFlb_GsJL)3;p2y zILuYJ`(D5HU?I~Zhi)Zdr0XSxh6d`%IdboS!2fR<--*S58~ovWA6{wn6B4RVcnhDC z9Rl$}$_nsEA+}Yfn^IoWwvgf>YcCuUk%oB-A%Av;1=yjgF$Zg%9t=WLLfc`1?T{I|T z&8y0@weO~%3nEt*KzG@nk%=O(mPf&`l-o0s=?>+}kFi4EyMIkX!Ja-id%m1u#~(5q zuT`9-dt*!^JVlqtt6H13!%-4<_lJ}_Z@Z*>=q6{3$^2Wq`phN zKRAL6i@VA%H1hsm{F|xE(rouF zujN}z3RW2P0W`sxII1AyHO>p5wTP!+y&Xz9JD=NXP&A0ZJhUebAhn4C05A8`ozQS8 zj|tR{UM>ytIGr?i9?iUn4W*N?n-OJNX9Jgxu4}3sRC6!JeDJ1uVwq{h)*vdrjsUc1 zOW+8Qf{H(H`TtjS_x4bq9OMk@O1r`4dCAa4BSKjJ1962Z8N_KzF}6H|Y%ARO`pGb8 zVB-%#RRmO*q*Oyd&raq^NmZ@p%$KsGif;Dmpq?QIPk_^#_$|~~fRGl6fw|v=Hz4n; zAF+j#k=AAsUs#J(z6`~po|I;HeT3$6px5-)s z39ZyIWpTC@sj6fb3+nPona%;N!9%nj%j4$Pmv~6iBMTV&Eumas4#179rB zj(^+nbamdnGc8&DQ`uQQ^JG5rkPu`rEH9Xmn!nbh`IFuU>5ca(w&4we4-{sK z7)WsThU!+4T`ePBr%7Ow=Oo-@;J)9uk^Ab6`*C|DY1`!sV!lUP|GJt?d;j>s>T5T= zzkye@3bj($(DhomOXva3y6xnBS!NGh6EIgu`Qc+x0)DB1;A#@Omk`P_$@h6B^Sk8w zN6q;>(>y@=-SIjKX>kx5M{w6GZ=fNWbR9J1b*+#?@Dc|bx9_cfW)}*K zus!nkB&t8BTxU}Q3P+qs)vS@QX=jv{#h5$YURJ!%MbBF^!z||@hd2H3agBY-%!}B= zwy%a5E-1%QVfNhLTQ7F~9?&X;405m!9E#ZZ9-JHC0O!m6gV&nl>0o-(UtKPk&y;3L z4m%bVH^1Q!zO&AN=e2`+M%5qJZb)?lSV$N2w(jK% zFEaZh$(q80GmU2{dS>O=xHTXU&zztv^hP@6S?sduSBVzra$Av$fq#of@wkh#&bK$$ zStBYSVYS|rPicmQb)FLh4Dw3(nlNwn25Hr#m>xaJOspU%`a-Dd*!kZH0oxZW{8w$* zU#3wLw>@I(luHtRBnOy`0

    ?vTaU~iQH;k^^}>>05rt|f38)1H zKBD_cpW}^bbz64>c}}pi!E@=0S!>XDin#<6wX#?%LIOdqr<~=OKC&|zPMQ5^)1=cc zq&&!zVmxeLR9PjgHdX>8TAikYArYC4Wg7XFaF}3J-z`;?nEreKFroTRf)^Q|YdJ_w zR~`}vM&g^TFlL&kU^D?K2lG#iF>dVQs&fjDIEMpd;YQF(gnuo5Vr9+4gTZHfkb6$H zwlcgE7|vJ|l=*qL9TtCZ<_jG`rTO6edsBOKR$`CSC1;C0guYtNW~rkZj(#$~<3KLD zF`oNQoW|_sF$;;E$*c3Gwk1+}9Dm|cd-?K>e;h~8le^k@^|S?yuYm%IC>!MBu6Pos z>J{gv$^-|vxkcFXopkL!r(L2mWq1qIzUav&Fa`AMH7C1_*qcO)(a~=u8;e1WDG)d=*tY;owTQ5wOeWkw)dV#nM1Pe(@sz{zxu z%zdC*Axq^T^G&9L{Pfxw{rcf!;;(K2LQ-GS>?%>jGgMz^v!P|XlE+Qv42c;?Ui;I%X9<%XbbO` zFMVIyB(Q4n-y_qoqnsfozKS7E``X`@_qo0*k%r@SD zKd30xLn>&wlyO2Y>7ISU-?O9*LCN1Vo31UA*ms5|8gOWoYZvVtM_nY=VTY$n0{nuO z214%-$LvpT)5%D;N8vLjyaz^0^Ba~z?LV9>wnTzy6ay5N_$t-?@#R$tCoi`69$t@c zWL9}BF!SwOx!uWG*^ejI4c$e5qkyyvizs$rcT=nj!BD7Prqk$m%i1ooALn|!7TglY zeo1p952YIl=~_WvYw(?{QMg~ARLjGc@f60H-Ds`QDXsV|$ni$pjUGiLKUnR^dI+dk z@0_djMgNF+Kpb}y=T!vCcRdy^>j!q~{yqDT3*dk8xw&)IJQ2-Gxe7QOJH!K7`p$_S zipFFG#S%q3Zyns+lnqH51o04U?ELQ8b>>b_@mqYT9x$l^x>As3 zqzm+EayLbyq;BS=9*_-e-IWia(-NPTwQ_;nlN2|^_kR~;4E7IUw%Z|tEJ9YBVXqVd znaGC}x8gk9z0?a<2{H+V`fB2Q(r^VvoI4+!e2sf8!B*Ml%*ng{QqC?tpK74n$3yja zkwb-e>-S&qU<36L(1|Un9)u?}ErkH@Vjm|gFA zm5#fglUG$G11o+%P-yy6QB3YOXfQyqOxh)YNJDW`G_a2lMIzI3eg>xvJGIPQiR9`& zs{8$`Os5zy)B(h45hnPYupu6q>ZU|pdIQ1{MHda#XGhFVc2`Mz&=9dRzuv)jqgT7& z^r<3vF=y2Ir-tK9A9I?lG(2nZBy)hFOTUrZoShzP)7)QF-fRT*bURk-{Ys6pka5i0 z^qM#Wz&h^c&rks@0d6^rF$Nknu5>$JgFWRxE{Vzb8sRG z_nD>5cn%b__Wu*CHVS)$EDPBe?sg=t_WNq3o5VRLH8iPeFC={^D2}qgOX1$`$(6=; zmHSeHG^+#mI#bfTi@NSR`zk*q*tCeyF4Q;Gc}#;Nzi^2o^2e90>~CCH1#jHnsH6T! zGxV5&0q_-oF_~VM`Mt6>zTx|{SG{!^nKe#w$o=|*YCKTo9Gy9unDC;WMSy02jVg@l z-(J*;48MU<0xhF=k9mawNW}P|HHTLTyRLps58m5~c(ej!TLz=6^q;nO#Y6qTR&3^{ zst+NY$Gq`3CYQWSSQ;$l9IRA%XVdL{5X4q2J-oBpzN!FFuWoDEe>G=2xT&U@N!c>= zb!7uyQs<%;{3}yZ)Ef_i^v#qg=ZznL`6($(P}6BPc&AM^qzxVsX7U?ba6a_mXOZ$g zZWMHkpokf@1zuz&N1+7@U$wlN$)#{_10{?59^s&Fr3zDy+t{6Zb!t<#a}%?QHKR&L zrLVXa!=fw(uYjd`#HhLrT5<*AawTL}yEm*`u3V_lTcb?>LF7u)_%*kQ;&Z+oZs)-5 z(^x&~;MEir=Gub9uMg6J;L&sUA+fuQtyVo77X30oK7iHNH7$S5wE#03ZP+7d1VJHC zjj#_@7ZjLfdARS|8 zQT}?p>n~WBD850Bs>xMcL47OqQE*H>DnZU+PAawg1*iIgGx{68v0DTc=tZ0E`U!tc z?R#JduzecUKCX?v5S$n-G$vHyi!c98V)?nqI=JT);{OK3M~?aM%u??;K##IiTg`d==|7E$@teF_ zrThf#t@m)O&hAu|ZBeg71u#5YA0ZwO|7~M^S-0Qxr?2^{jO$(z(C9r-PO4{JBTf$< zp?zS^x}`kpR=8i9-kjsssDPAt$wY;R4ScN=Y_bN62QK_hqKOH?B+{GBwEIviN5=+C zUTBj+EIv8tp}+Fh^1Y`f>^2n{-Ca5GQ=e971z>_`naf~q`?a>HZ_^p{FW#GuzF6^J zEB+4x>Ko`E*UQCIHItRll5xWse-InW?>~#hJCD=CbTrZ56c&Ia2>;#DaU?OjHgfwk z)KXx87>{o-l6xx-f+h@*lDECf*n$60U+ekUi{fKg6p>AACe5PV<1f7GS?3o#DKV=32gq)zA|ci$Yk^J83B zga8Jui^RDh#LBSXt>HB{F|$f^I4FB35}{sj z7fSL7uB&Gmrh*4(eh5rN z6rcN+%8dEua%OJt_!ArGUjW2or9ZJms=kKQ;{@pM(Jz3 z7rOdWzyFgU@5qbfMdBZVk|%N+*zQk|&1I)e_2`!+JmpqowJ(Y6Bs_8!Xqq4){-h)@ znD;6Qu)?@)EGCkbP-7^&Dw{PI?EYgY6 z_XiI#R^U7^{7#$rO>tHUw$OdeUSB3h3CceL0S$Oi^1Qb9Kmq2DS0ds+C+|YPnbt~3 z(vl|vp-K$YUJXM0ughzJ1B`D|n2SAn`Ctkn^V1roKE|dW@#uT0LzH=Vs!xLODQ%um z)6hMKE0nu5bD0bO`6xOko?h|GdTvLOzjJr+n$eQWepTzCv6Se!^C#_Yop=7~UZ2JK z{Z%w8--g?8F;HO(ZGkPWXPDL>`w=>p?I6C?*p-7tsM`O*AF=5e-2Ar(W)L;{R~X?Z zYwycT@}XkD?pCX?wE6gGqc_dfePShRuf~AVTv%>U^&L)yCXvCX=i%%p#ig2)n}Vt^ zz2ilALkluIG>KhfgL#pWd}w*cNDHW|Fs8f_nJi)MLvslsa7%RKw=~90UHQzYpE;tGrmp#1k?_!YyD_y|G___ zEGrb*%d5uBW^&G)a#^mS{fxXmlUQJ1mb_l99!@gdOux`Jv47>N2HX^gi7AY-Y?YIY z4n%xYugZ5J#_20kuA8pvuTD%Rb5P5G6I1zbS=ip_hdA2;zm9kkfYfXO#^r8zuvGks z-m{S;r|f5snCdjUC5(eqNXua#6BEoAV*zLx#$HzzxEP5>u3^XV)#a+VT~Nr`Cp(Ou zLx2SPJxH(B7n1Bx&zYt$D;2YLXqAw(2Jaw>&l4Wa7pZ`@h|*pH%2Ri`suW+cVNo1g z9_hjv(UqP8zH(t`(m3NFRu~|V4}z3Q{~RL4-ts4hD=1;`LgWf*3CKp3fl`VQ*jvW9 zy$ljvhexwp1)?F&(T~Xi$=r0k-XJj2O4h24-Ui)_h#*w4n1WTN%Y!roeZ!S2m-DJL zK+{a7wh3earo|l=j~FfgX5~u#@x8w9tOilfK7Uv@Kf=BzY;m!+K};@tOAHlwPMxsB zFU^(g!`OxMj43-v^mNa~U6CPf1yeEp8flqsfUHZF^-NDvlRLzi#@8sI`MRAU3BbUv z)$N0iV*9$U7lOprbh90~&inc9z4_TTpYPNvL*dWyEja!YoQwR;*^Pf(O@x&9biqM= z0y1QZqy1hPtWJZVUZGUu*cbmH|uXfE>g`7 z57gO;m5tAw-fwt7P>*-FU5=_50u#*v#2?=bltS36l++o08v8fEM_pAHC`1^ayv%Y$4?*U8X!q~AW=dbUfL+d3}kHVBhot@dIC%7OINN7shS^xrl|+r1J)S~fGM+hedaSF zQH=4pz;zmFpZEJN@dyLzjSv)o9*Bif?{=Hx*!!}T8xkaIL-KaT_BWd0+wXYfgNn&l zW1VNpTw4d?p^%5S-mg!YO!)$Na8O;Ua(y%)OX=TadWg|xU-K%(-U}{|{j9TR`f@x? zE^hIbw_wrWRQ)4(|K9>o12_^`p|M)x8=aN%--5^YKI_;v^0AU?{B_F|s15tB88zMU zp7ptBW2@op%LCGbgN5b!PYi%!0x+;PCoiOpI@hQerf<6)yy=m*?Nu+U3@bmd74`Lb znQAk;!X8CRLi59-I46C^D_TL@-JN#Q%aw@S>g(ewH5a(j%#>4m{~F#2`Xcs%+UbWE ztDtLvwsqix#kF!%rskM60O0YoF=TQ=PpSKUY#m%}sXIoSX~3K~m@Fq2zf|jcF795> zZf;dJ7~A@C{ntTY9@*Xm{4jO=+Rj@+dtP_TjNImoj2gdz8SGX44*Xq)Ghkd`j;~%c z6`I%u$wzk<#9TY!$qDL-QU9?0e`kSafMsjIA#(JhwO=58Fw~F@UR5vL!Ia+m@Uh8s zg$zvnktwX7C)0sG$^x+C9O{BN!=f5uArYh`a8;5p!&HO5qOf&8qDuVnW0VUH!h`E9 zA5c#kv!RAR_y!Gk9jUk5iVO}hXY~|+fdK$;QfM8IJ(|cN!Y@jyFp{Z56blkUK|;gl zvT!M^MV)>i@y1n|z+oF<DilI@&GmmmEeDtcUFOuUxb-OGV4fAFd!v`#bnEo#NO&^-AL33^m|{iM__* z`MhPG3vs7gqN~~AH>Yf~CCHR9q+g&#L4}hKdEqo`UsGvo z9afZMIil*eP^O^HbSwUVEB3%Hf{x6FR;~)F-{TaB-@C(?-_8ICHI-AsZ5ch!x7GSz z#IUww&6~oLGEUk@qs7$MC0L@p?t>52>#e{34mRaK57|;4Zf|WfvRU8vM|b6%F-dC= z%rp1W-IZ>v3^CJwL7Q%-^#HWM@CwoVgFcxLPE!JY$5K(J?`~*>BNUPAlMSkM+rgy* zN+~8iZ7f>YuWi`Ydk9xd$W4|qeFFaYQJ#}0sUk0Gbcu)NV@A4tR2t1 ztJjeY-+rdO_fDd09WZ|y+$I-aZz*q!y^{GrdECpnim-6@mxj1!w{ut7>^Q3eTp)1V z{2l(4+9XO=X@?8T46~i;q#I|KK`rAz+tulM<{e^+%Y<8Aau$nU}81_Ve5gVOBu z<$Km2iel#q(9%UMgozbi>Kmv)_I?TuR%1M(>++%RK493AZ1U*2uYw00D^=$JYjfc$ z&K|i-A4RLem+U%3k-KlTt);^#{F-jjoIPV`F+EQ8|6z_XGvEdTJ9p5)0?x=8@8KBV zTJ^32*{Py?UlrQpkGsH$YBAu*+zdkvQqd>1pH0+;p8M;)^a$2+cBePmJAd=YI}P#? z)O%dLpgW;%$0eVic;0ywO;iSTnGH24I_Vt6wDZe%%7aJ?;z3%ABEuiBA9uowk`&z; za0uwH+1p4#-ts6WU3M}7cU>B|1sT04`&-cUsbH?j{bY5*( z0TfAGQxFM&@8o#C<&Mh*O`r;zTttnV>)d5{@u_E}O7yd-mU8pFkEox@J?onHO47-ADfHnaC^UQpKYji< zxQ9##U)BvODY{s>sisw^5Mn_apuUS8-o)}^fSe=V;B952j}?kn1NMZuqny#>y|i%` z#R0}Q_3z#^RplWmYjyR8t^8S}R;z;p#o>iO$fwdXp26Ymw)RBDS&sGNJ#m@Q@zG*@ul~e|hOP?G9kg*Z#rC5|I5obJ zB_}lQ>q4D{PeKcEio(T*R`);D0bjKgfW>#+8^(~wH`$D&d&uHZ_HgP~b z_sS${RQhL2wr)Gf{=<G3s{iZ#RWCPMT1iQ~=@BSlJp{=z+`|KP-AL zuDj<|r$*WPiqLlgUj%#6&@C*$Fsjb@%r!*kB(c>R2U0_%*_+>bpyrEEuEvETC3iZi=(MVsgoB~YpF@*w|8m@sqyJ6+{X$H<*q!c-|b5geV_f1xK5h;9ar=HH|Z0yW+ES%{az*A0gK+y#>(E! z5h8W8n)7{^o4xWZ#7~^7^;3@nGgMLb{R~6Yx~5xb9G(*Z&Gxt#ym<^a*tsffLs$=X z?abN#_SXq`>c0isQepioalr#=FvUH;n3xBxB^w_JM<)94ygAd~TYf>oz_T$LfR!FW zy~hO67wyxPdK=(QzgiV(JJV<9lVDh6+BjT2NUb5N@8_UYBtP))fQAfRW?eF*m^D;_ zo>?z!g#^!jH`=bVL4i}AhY;d`Q#F{`sg4}es~dj$DCyH2;?d?-qJSQ+*ue0e{}cj7 z_aAQo>~?sPxdEWx3*CfhM2mhh4fQ`Ne)eSSaHI8*rsdT)AKojrz4^2L)E=4%T{qFk zjS_pTeSoDfvjkEhf4l~`j(d%Jp-ll$=c0Fj98XngjXsb#2#M9K6`sikg?X_SMJ-T4 zwk!96_UlCRH;;B4UHAk_4ZVJxdEJZRHsBZZwsNI5AdFw%Eq#mqjd<}oQ>;<*K3cTB zX-dDh`IG+^RONd5oBQn(aDF~q>i=T6)fKr*dU!`2kTK*e{t9yiG?9NV@;~|kls-sS z>-$MMslq}Nx*WPBz|Q8Gzu+Wun_P26kqjCQv4urmQw z{U5YknpZ+FH+xn4*e#>(CNY{uP}+w2WWvDE#K$Qx@OU5iI|B$T9i8tWxm?uc!WoVo zCw6p=-{#xO!A~tJktjC^3Vo}7uHxekj*c?6w1tw)JzL<(Haq+95Nj;23L(P1MUYzA z-YRL3m~;2njHZgu-flZ?oK@?GPWE;izlA-$Yt6i-gT|rWLE=X5s^hI&#q0<}iK6k8 z%bU<79F25#WW<5&ta5Fh5Q~2-@fRk1@;Tp3I&2+l-%_hE{M>|V5&z|Mb~m8+p9yFo zv8_-0HksM<`YTV|nAJK&86NZPfB^;-ZuApQb|sx?fyTAn^!{70DWaH&-Xbd38`lu0 z&Ott$bs$nRH0c_Fe^~?8k?W*ehwYH&*@K(sqs)`q{;@%VzWIi_)BG7W&|=^wuD@Ie z-<_H~kO3x$x3$2%cOQGvrY<3#v6p|=o@yu-o* z+kIH`Ec*&=(q{_O4b#Kd9@*WG2Rm1rDfPGu!JH1p#21}($Ra25<%-8&roGD7$PCn# zt5xx38N=`!&*W`jUN5I>rdHn0Q66-_mxY7wk>p&ESNjQ^XcVU{O)^(idLEAz9@$Qk zkA|q72c*a1#35onL2Yy`cua$ij6d!q!JgDynFmnPrQyp0`~Wy$sI*=I7cQxJ1-j8~ zzrels1Y(P(PvXU3%EO3&>mw8ov`TExPvWSLt_GKJ=x}|Tk31T!8L&gV?A~eK7&Q^CEn62@ETN)o9+n^y#9Up@I8cS1K>6imr6F=^_4wA zruj?aX{d2GzHH!7n5bqqOEzLOpNJ?d5CSj&_5L8<#dkG@(Kn;T!t5mqt-|t^5%~n= zqAG9JHw1o^(bw?EFyJsnA+tXI?rIP)Eve~X*)E80mF%;(tJ#VB)Axa-Kn;TzFL$+9 zocUh;@{Od8+kf{P+87lTE(pioDTXr%Hbi@OGw;9_3qZlwX zlBci@qGEb|>U&Ze!DqEFWUzE z`F{%*^ar<{t(`UlD0fi=Sfu(Oi|%m*yk74#n&+%fh7&V4T!MQ~TnM#r0$vZk4h@=3gS^TL zP)|@fd=*%i*UIza`1E->7etyJ?x(X2eF;7?#ChE1t@uv5i_>DIVc(Z+NUN_~Y}JSS z+q)l1<|q^kJaLPJc2B~ZI80D3jY5p!-dx6dB>7Gq(JD2T7F^i24)tgYXr!LQ+tBAi8F{kM-2biPj|Kom-4o^t6tkdJ z9^{2=37zYtx5P+ACvusxCWv{w`QP}{zg${4%Il_S&eqGxeULaK4Qgu{6Y7RtB8)#PT;27KEi9$)wJF~qY zjm25xhz8aG%8$=op%Li>p!rY~H2@D-C^tg7XEBN`%wKYPnzv3F6@{M|MW`A)SN!ZFMG}{iy>v~NNrvwi{0SJrlkc>|; zM+ej4FDZ%(fNrzBW{iZXy`vfcLmYxHZ|F@Eh?AuMs$kD&4R3=AR{#B|kHfS4F4_%p zimGyWW)dXpxT)6<=9hvK9B8|uOM3!Q=9Mx*igs!mQmzAl|G2m)9uUZ@Odzujp95)% zi}j_*3dT1??2klTD+3v{NT>@`k`%s{kbFOogqLz28~mQC9R9Bj7tHz=dfT74S4Bfg z!~5fRK%y61AK#9k>)IwlOSa4h(6DfZ0lCmEux!!FtKx{bCE>!5&-^|nM(f6d;Yl&4 zjmBgbrB?_x9ak%g-kfAs@+=T|%_49jm?)Ju_`~OZHp#=d{-R6erMG6u%ZJ3e0bIg&yb5v{I^GWML8otVX z>*JGyAlF~##Vn1wPL%LSRX_aH>3j^_e7bl&xKd*aHyn{`-_hs}v>&VUY33tWyc~+nBnZ$&e z7!L*M=rp<8N2dk5U^^ms&rz<)leS^mbTfB}YTwMwAj?YP%x-VL;Pb(>88D+!$QkpN z?gY=f1qb%-gP=p{D@kfVpZ7lt`FV11M7kH`A~a2~r)-C3K&&h`=S8V*2DP88tb)R! zn_;Hv*h8rIC6wnezQZgvq0=!44Dfa511S-Gg@w;e?+0T$(*E}r zv6qi8p`Ch4c#{1v)81KjJ6GhID|+|w&)kc9qBgf+-qzasJ!SR7R{G)5sw-|7q(oHy zxTqx#O=8Wq8AW8i;Yp(%?8u{8NIQ79WKmVwuiHuLf)V`UnFY%o#-IY~#qQ=j6WVX+0V z%U{Y3gVqHd2W=4dEh`*A_DZOI{gCT4sLnuOx?=cU|CsIEA8b2IgOp=rG~N#>^i{5} zmDXToD-!i;5digE(c>UTb4tu%mUTN26yCr;&XYKGRN+hSDo!aw05Kn_8dP8VY*7Q; zE;I*16CJ@Soyii(w_}fy-bD6?!142gqU6=hNS~erRu)KB6=_-jguAn#v7Mqxy8^oc z)rXFC&cEy`dRhcIL7gnMN}a()bdh2YUMt8`A9s6ImquSCZoO^)ut{cYGAICyTK>Qh zUE#diell}SKst3aXlG8cj@DD&gY1Vducs|mD;?Bme0IqJu5FF$I$fV}~{Qbf< z=%f@J*x$b>pTWa#3a$`V9rZEpLim=By+BFrfe}l#1nK}G5cn+nRYyfiqn`8{%uT}F zc|altbey!MVlR)F^weDYtJbdVxODrtdfAXDk#cx~C>gyFli;1$61IXLfBjNeH_phk zY}_yZ!$eihb%jUb6Yae-N2To9HOJ=%zXI3WqHG0dH>iOBTi}Ltt_ndS*uRmHXlV6j z?fo)HNC6j#HAd`MLupeIcqkA;b>IK86apDL2O2Irm z@BRYiDBcZ=fkXd9yxZbMBtR|`CQu~c#sDR}waeguf4ivzHf0)%aZ>5@s@5 zFg=y5rFPwtq}y7elH`+Gt*)GU z4+=T-dCH~7a4vt`c1c2Z_b3ev2sD3%zxX>m+OZ{yCcgpj>G_q6r;XXpV@JFQ`Qsdl zYSsHN{>9*qtf?#{f}X1Q3;YrUw4%F9>MfC&5~9>2ii~XMf4)QgRd5gyr7LqwqmX|H z-6>$aQgMM%`%h0$_t_5=t)LA{m7V0Hud8=PbdltY78o>TRKvI9a#Kb2X>8*zpEo(z zVAUE6@!^~JmN-M+^ev19_5MpM@EzZg(alpB1%;iyrP)dD77)DFU`1x-6BXJAXE@{D z(v9G~iWqgYg4RNqz}@u$L=Jb2l^?yWe@mlTf&o{J2cL5Cq_yC`4&!xDA+by8&=(Sf zZwmV6D|;{!-xL}FGRKUTQocl@xCU43gS-eG2{symH8jH39!)lWq#*Rj;K!z4u;?Wy zJh2XC4wT1utu3r=*EM_SxMA8jYAEXqw7LD0}(ujBJo3Ld(i*n&;nL#gUnPorc zfyN+{x!*geHYxa><4JcP^>)u7ozChTuDLhTC3#I%z3Db5tUJlV>>nfNugdrL{2|#Y z9yM`#!|9qSuikh5A?zf0TG{2bmNA}EN3m(?>vyIIT5mc zFL+*3r-HAz3U=UUIM-vmr$}ch_H2UIuNUPqB85x8XM;F0jsFt*jhzkeH9af=U9B8k zHKw1IJ3{o8?0W8ggIubu59I{~TJ>wi)*bvGk^*;#@RbE1owWR@i;&jEz5qWc8DEH# z!RtHr{k76SzEPY8m?4>5%_6Z`)z4jkZ+|BO2p9p~zCAFtj<2F}Q}1U`g(hD8qvxB~ zK=G3uhw+uKT1++3C_*Hyh#%!c_Sj9?hp)jlo-w?ffU|QH{MkKyRw|Wj0@=W$7iN|? zv6(Z5d&rspN7I+bL%F~2cTS5+(n5-u(}GIULQ0rVNs=^eOx8J)gqUP!%yZgMVv10d zsceZc*|W}(ElGA`i7{i}GGiIT%=4Vz-S_qS{cB!kp69*X%XQ!Pb-5`U9%C@Bhj(xN zxOm+^m7Qd?e5;55=gb<$B$lwH-zZM9N%7TRY!7s+j>7K zex|06oC8Qg92QUwVN+O002h`MYGXgNdTVWBj~brFj}L_G8%eKMwu&v><9Ic$9_3lV zTj=x9!5He7J#e?5QIH8_dN3w*0H^4$z)cIKS0Nj9%!0SH;wBDoP-paRIO+|ptW_M* z9(u^!Jt5(dHG;BSwNg@sb-H%Vx(S|6SD$MS{=OT!1`p$3A#Jv_omcL`pSkib^nTg}{j^d7qtl->g?F08kI=fEq8D=5 zk^Z$jp9NHV#(^o*PThyb`(y39sbonW^Vsj1-uhtKuvkirfkPNu1jQ>@!jc#Q_M?K06*wxV&nt!s`;qB>1{;F^aa zgv{ce4_O&Mfx=XuWJ7}D)y>yMp3s{3u>zj70Q|^ zN+0a1vEpARdI_cv?+w=ayFYw?@JOBQy;g<~yI%F!>`aLYuHezOyIx5RKBVozNnfJu zZc*(^96$@469%>$3?cCog?msssX_ zm9=5N4BN?r_Et8v3Mk5qXF}^-kaW0V8(TfWq}{P??%1GsJ7?@}0Dk7%csJ=N>o(Bm z(V?w(CB->evR#zstHvikeSg@+uh+1_3->D(cVQ)U?P%iR2jYFa?(yULJ^Mx_(nq5+ zPkO$C!X_>cxpfVU?Eek)*#XVIVx?xa#g{tEd+kr(oh#FFJ|ZLuA&Un6ww03g0$(Pd zDZIgF{I@JZax$e(HKqO62d5VA4_TqNpQ*p3{>eI~U5D@Qhvr8O)nw}FIBX? z2f&GB(-}j$K;VCb6pU2hu>;gPOc_mHRV0}BV!i$ybDVEe>&^>L*keE3GTgTD)9X!d zm$FvZa!GB%bf19TB^DFH$?&5~?K+omkpkt_f2-H6K-6%#Oo<|kUtg&k!N5A`8_D`+ zdvFG6q1VN$^$}&X#&)3fPgW2M&`1#|wI3J%Rfi_=rMW+%Q^t=~v^&$L{A#hDpF^Sj z#=*>z?vIIgR#yjUbAO7y6-Aid4v!j-GH6>k$M;3Np+DAQ%-nz&hP_Wj8u$&-)1XKdo#0%9 z!;M8vIHLA%QgKsu=g}3%@h|1l+?heXdV9F8js1p;_Xo~)TsGe_tWbP^T(=+^3s@wG za||C67e8ZPiGeVI3a%ES9K8}WlJg}|FYZ(^P=idt9MOcDtZ1M5RJHiRIMN9-UaT%Q z$TD5?`LZSr!{0>tQnJ)8d$rHuyxMRE-kG*WFf;bt z+JFn5)ORw(CA2+^nOm-eRIJ9|P%@y(DpH#Qr-4jBl;G*&gWEi@`RmhxmaXvz@z&^v z)3KKtE*F)wmg;!;xChQCDP8+9ruwF3Yi(O0;YT(@b$3UY|7{72QrE)b0Y)!ld zA{0k1f2K9$lthxy44J^JqT~uUZhgHQbH3HywilYNL5D?M7y{zmURn08*4v*q05R7h zek#-6-PiDNc~c&0IUx2WWFr|fFl)E;5exjmzxc>&Y5D$)6SyaktzD5>TluBQ->rJd zDXx>b1GrSXv2j`K2r0mS!1MtO#6g68(-aqdl!=>mpkY=d>jn}$Tg4fPspEjwg94oXZmcxT+>zI{*^cPtc89|;4P+GRVxT`LE7Y~WrRmcgkTCp=f7 zl26Z*9|msk_IpavNFQU(h{>wSad;uSfyrTZEf>x}WBhe;SNDiH`d;El=AuED+kYKM ztjoFieABV(w0h-3{~T&S^a2$iaDCjjqusHnEvaRHN=_7EKHE$Id%{#ei%a(kmJht4 zJ*1Gh(mls~l#fgmL4TDIdmBu7Tq&5;Z%rBgBusY*6^qEP8U19d2!h- zKDePRR^c!jhrRJG%IN%h$QSL7KIZil-!o(~Fo^KUQWE(z-U{JDApL0`O_sLkvL%CI z4n@@WZ{y3f&VzHY2E;ymQkRAu^1mv(=pz4dTm#sknn#iTR1)8wtW=*1*LTuuRUB?1 z--WyrM$dD)*hxK-Ao$-nAJ3Q6)fByEgi}@!2d~?aF*(-pv6#Ns^5Bf&h6k9;4S{{G zP{Z9z`0(@nAK&n58p?R%xNqSYHXhSvgH&WL-J}n}c419@d%$G3Y91rDO=rOSHpBxw zU>;g&E*Gq6g8j5>Khd}X{@hr|8OL_`OF^%OuYm#dGiqu>!KiHXd%)ZB7DFF8CUb?a z!qi>Tt!>=U_#5N?fUn8U*AnS${&IL-t$=MG7IfMzp1oj zI8vM73L7dRj9)3JcBTD;bff~(#QwnypINq$UhpE&IIC9{ttN&O#EM8o3zNsnwV^n~ z1|LwLHSAI;acoWN-C5-PB15SKj9)3uIvY-;G}dd$n!S{_<{iXqLy`G_X5{a8dkQPt zAI{-l(vmXw@HVhCCt&eoOOg5?r}H>n53u#I@N8EExdigkv`-2=SiyX64@DbJ1!FG3 z?wRB=zhSbxNdy6+>osUF3xbTqH>GD=LfsO49 zbe2uEdv+5e@%^9raP1!24YE9i$MeTCSwk_sQ|*OV46#oa2hFhCgWgNg?SQ3e2V6$B zrYe9)&DQw=ItvoHMojupvh1!})~6a;dQc_T?kcoISjjh=?5e3eYvHVUds-GBc}SmB zO)AipY+?129^DXxM(R6k??`lpj)wir_slK)G>L*4wpPqzZUuI8?u7^dbyAby!>PQf z%~NcPK~i3R9Q2dB!MG09P&CmWVZvRX5}=%SNOZJDV?uf>uOR%Jm>BIzUWQJ$lt4wN zaq3+^$bDeB1LW-@`WHp|Q}zPq~?cS_^u7o&}CUMiZlmMVx7 zE?I9xBA0rGc_-CLSmj68llT)ejX8YD|mopX|XaUraJu2v8GeD*UCY`m+F zWJX=Toxv&9fm3aURe;Rz$ODN_3OL*Rh(@fDbn+IC??sbrDy-hZacU=*I;I8Lj~>yQ z!+$G?(fc&Lu*=Yz^pzG@ssaDM!!=H?w>(s!#SMA>zFt?77gq%{F+M{G-;ycX=lm}T zaL^;IRB6dRwzoOKzC+(A?dQ+R}zsuL9jS39iRhuY@?SK)mWx+q!y z66sH?Ev~-y@agC0m3_?DrXIzr40rGgL-6jnM~1qBv?8k1FOOYtenI+>-z6 zj{HNg%0)+0`VzEyCR>suuB;aj0qg#aWmy}1NECs z_h0WYJbc1?1TX?CFk;PcDX)p**;D0GEk0AK!MF8I5J+~v<~G<$PQ1Ln$E5pGOoZ2M zH5JA?E8A&=JAmU~unE3vAdPK_NPMM>>daC;F0udRY@%+YTz-I;(YHxUs-p+!I zDD^OLC=2#yRV%fs+pd(}mH3yS~w<8`JIM_25K!L2MP+3fibLWvB72g1=OEa^c4;f=fC_LXC!WWWU1=)*7 zT2Ys3q)ivhx_qeik|POgNNOd-E&c3j>Fwly4k6diV$lxmqgXHQXB2B)9@K^7Ku>bP zvUq4DY%&W&o_qmMwTGZ4e`*QIy!?ty4S6XdO&o-LKNLUEix;Wg{jO7;UEUMh~faTY&O3dblK`qSSXS zQj%bzN-MnKW%g!k+Ev;2izXT;! z^O=`_i`L3%T`ov#K!5~JPIo|ks(B#%x7}CqecwL{m&ih~REh~oswW?;_>7L*9vS!Du~TFo=9|64zo4EU_>Kmjh$_@y z<$igBG%hpawZG)*t(rPqW8rU*devlgDjLlrPK|t!ekPTGdoZ_ngxpFiw4;^vq)L?` zCVKdXr5gOkFR_R$RdG}pzv@w{$&k(eDbE-$64OW|!UuD!D@MXFx2e0OYms$lTO1lEd~>*|U**sy`Pt5XJlZ+FL49`hNN{u4#+(6cIa1*&BC# zm#%g(!n9u^Ye!2HkaHnkD_Pdn?2)xEB9S_I+zZ!gjIok+Za}@P-G?@3L;4BtYOrrE zdxMs1`L0jRsgXV3XCdm2y<{Y=b8GZz(5SZGOBb6>3dRCyaYM%HSW8rijgpLdWq~N4 z25OhBm~|_H+zob%xpd&orQ7OQO?F{^enBLz7q|z*QDVYXwFJwyKuebJ(tH+yhp*BK z!LN|WdJ2y47Q(#2$Aiwv1UY|={)ddL@jbq;u@xSjV@DnjF3GH`+wA+J)-k3h>vU6pA^5+xBFnC(36Es zeA(u<=w1lNvYPZ1*`C~1>gk*Tb#3d{iB~<%us0urKUyIpG$

    3ziFr7l(Z=r^Dd~| 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 hQN0LsC($Q@m*Gb|Z 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�MyRBktC#pI3*8N;X_kZ5*cx{P@s<6> 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 z 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 z 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

    ^L7VPNTu7e%hu7JH_ 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 Rxu=4jupi literal 0 HcmV?d00001 From cfbc25fd66e6c0e079cb1125b37dcbd016c3094e Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Thu, 28 Nov 2024 19:39:59 +0700 Subject: [PATCH 45/53] fix(auth+sidebar+register):change img --- .../src/app/pages/auth/auth.component.html | 4 ++-- .../src/app/pages/auth/auth.component.scss | 3 +-- .../layouts/sidebar/sidebar.component.html | 2 +- .../app/pages/register/register.component.scss | 9 +++------ agrilink_vocpro/src/assets/images/profile.png | Bin 0 -> 37098 bytes 5 files changed, 7 insertions(+), 11 deletions(-) create mode 100644 agrilink_vocpro/src/assets/images/profile.png diff --git a/agrilink_vocpro/src/app/pages/auth/auth.component.html b/agrilink_vocpro/src/app/pages/auth/auth.component.html index deaf7a4..07f5c6f 100644 --- a/agrilink_vocpro/src/app/pages/auth/auth.component.html +++ b/agrilink_vocpro/src/app/pages/auth/auth.component.html @@ -1,7 +1,7 @@

    -
    -
    +
    +
    -
    Sensor DHT
    +
    Sensor DHT
    +
    + + + +
    diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss index dd618a1..05e79a4 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.scss @@ -70,7 +70,7 @@ .title { text-align: center; font-size: 20px; - margin: 18px 0px 0px 0px; + margin: 18px 0px 18px 0px; } @media (max-width: 768px) { @@ -90,6 +90,18 @@ font-size: 10px; align-items: center; } + + .button-param { + flex-direction: column; + align-items: center; + } + + button { + width: 80%; + max-width: 300px; + text-align: center; + } + } @media (max-width: 344px) { @@ -109,6 +121,17 @@ font-size: 10px; align-items: center; } + + .button-param { + flex-direction: column; + align-items: center; + } + + button { + width: 80%; + max-width: 300px; + text-align: center; + } } .loading { @@ -128,4 +151,28 @@ font-size: 18px; } +.button-param { + display: flex; + justify-content: center; + flex-direction: row; + flex-wrap: wrap; + gap: 10px; + margin: 10px 0 10px 0px; +} + +button { + font-family: 'Onest', sans-serif; + margin: 0; + padding: 5px 10px; + background-color: #E5E5E5; + color: #16423C; + border: none; + border-radius: 10px; + transition: all 0.3s ease; +} + +button.active { + background-color: #16423C; + color: white; +} diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index fc19de7..b83afba 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, ElementRef, ViewChild, AfterViewInit, OnDestroy, OnChanges, Input, SimpleChanges, ChangeDetectorRef } from '@angular/core'; -import { Chart, registerables } from 'chart.js'; +import { Chart, registerables, Tooltip } from 'chart.js'; import { SensorService } from '../../../../cores/services/sensor.service'; import { ApiResponse, ParameterSensor } from '../../../../cores/interface/sensor-data'; import { CommonModule, formatDate } from '@angular/common'; @@ -52,6 +52,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang isNoDataNPK2: boolean = false; allNoData: boolean = false; + activeButton: string = 'vicitemperature'; sensorParameters: { [key: string]: string[] } = { dht: ['vicitemperature', 'vicihumidity', 'viciluminosity'], @@ -162,7 +163,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang const dEnd = endDate ? this.formatDate(endDate) : this.getDate(); if (timeRange === 'HOURLY') { - this.sensorService.getSensorDataHourly('dht', 'npk', hStart, hEnd, timeRange).subscribe({ + this.sensorService.getSensorDataHourly('dht', '', hStart, hEnd, timeRange).subscribe({ next: (response) => { this.isLoadingDHT = false; if (response.statusCode === 200 && response.data.dht?.length > 0) { @@ -280,7 +281,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang updateCharts(): void { const interval = this.selectedInterval; - Object.keys(this.charts).forEach(key => { if (this.charts[key]) { this.charts[key]?.destroy(); @@ -298,8 +298,25 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.fetchNPK1Data(interval); this.fetchNPK2Data(interval); } + + if (this.charts['dht']) { + this.filterData(this.activeButton); + } } + filterData(parameter: string): void { + this.activeButton = parameter; + const chart = this.charts['dht']; + + if (chart) { + chart.data.datasets.forEach((dataset: any) => { + dataset.hidden = dataset.label !== this.parameterDisplayNames[parameter]; + }); + + chart.update(); + } + } + createChart(canvas: HTMLCanvasElement, response: ApiResponse, sensor: string, selectedOption: string): void { const ctx = canvas.getContext('2d'); @@ -327,6 +344,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang const pointRadius = data.length === 1 ? 5 : 0; const pointHoverRadius = data.length === 1 ? 7 : 0; + const isHidden = parameter !== this.activeButton; return { label: displayName, @@ -338,6 +356,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang tension: 0.5, pointRadius, pointHoverRadius, + hidden : isHidden }; }).filter(dataset => dataset !== null); } else { @@ -372,7 +391,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang const pointRadius = data.length === 1 ? 5 : 0; const pointHoverRadius = data.length === 1 ? 7 : 0; - return { label: displayName, data, @@ -397,48 +415,94 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang this.charts[sensor]?.destroy(); } - - this.charts[sensor] = new Chart(ctx, { - type: 'line', - data: { - labels: this.getLabels(response, sensor), - datasets, - }, - options: { - responsive: true, - maintainAspectRatio: false, - aspectRatio: 2, - plugins: { - tooltip: { - enabled: true, - mode: 'nearest', - intersect: false, - callbacks: { - label: (tooltipItem: any) => { - const paramLabel = tooltipItem.dataset.label; - const value = tooltipItem.formattedValue; - return `${paramLabel}: ${value}`; - } - } + if(sensor === 'dht'){ + this.charts[sensor] = new Chart(ctx, { + type: 'line', + data: { + labels: this.getLabels(response, sensor), + datasets, + }, + options: { + responsive: true, + maintainAspectRatio: false, + aspectRatio: 2, + plugins: { + tooltip: { + enabled: true, + mode: 'nearest', + intersect: false, + callbacks: { + label: (tooltipItem: any) => { + const paramLabel = tooltipItem.dataset.label; + const value = tooltipItem.formattedValue; + return `${paramLabel}: ${value}`; + } + } + }, + legend: { + display: false, }, - legend: { display: true } - }, - scales: { - x: { - grid: { display: false }, - beginAtZero: true, - ticks: { - callback: (value: string | number, index: number, values: any) => { - const labels = this.getLabels(response, sensor); - return labels[index] || value; - } - } + }, + scales: { + x: { + grid: { display: false }, + beginAtZero: true, + ticks: { + callback: (value: string | number, index: number, values: any) => { + const labels = this.getLabels(response, sensor); + return labels[index] || value; + } + } + }, + y: { grid: { display: false }, beginAtZero: true } + } + } + }); + }else if(sensor === 'npk1' || sensor === 'npk2'){ + this.charts[sensor] = new Chart(ctx, { + type: 'line', + data: { + labels: this.getLabels(response, sensor), + datasets, + }, + options: { + responsive: true, + maintainAspectRatio: false, + aspectRatio: 2, + plugins: { + tooltip: { + enabled: true, + mode: 'nearest', + intersect: false, + callbacks: { + label: (tooltipItem: any) => { + const paramLabel = tooltipItem.dataset.label; + const value = tooltipItem.formattedValue; + return `${paramLabel}: ${value}`; + } + } + }, + legend: { + display: true, }, - y: { grid: { display: false }, beginAtZero: true } - } - } - }); - + }, + scales: { + x: { + grid: { display: false }, + beginAtZero: true, + ticks: { + callback: (value: string | number, index: number, values: any) => { + const labels = this.getLabels(response, sensor); + return labels[index] || value; + } + } + }, + y: { grid: { display: false }, beginAtZero: true } + } + } + }); + } + } getDataFromResponse(response: ApiResponse, sensor: string, parameter: string): { data: number[], labels: string[] } { diff --git a/agrilink_vocpro/src/app/pages/register/register.component.html b/agrilink_vocpro/src/app/pages/register/register.component.html index f2e6c54..3d1ceff 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.html +++ b/agrilink_vocpro/src/app/pages/register/register.component.html @@ -55,7 +55,7 @@
    From d6e7c7696c389515e947bb9681cc926cee97c3c0 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 29 Nov 2024 14:09:05 +0700 Subject: [PATCH 47/53] fix(graph): adding satuan in sumbu Y --- .../dashboard/page/graph/graph.component.ts | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index b83afba..2b03688 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -312,7 +312,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang chart.data.datasets.forEach((dataset: any) => { dataset.hidden = dataset.label !== this.parameterDisplayNames[parameter]; }); - chart.update(); } } @@ -364,8 +363,6 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang .filter(parameter => { if (selectedOption === 'npk') { return ['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); - } else if (selectedOption === 'others') { - return !['soilphosphorus', 'soilnitrogen', 'soilpotassium'].includes(parameter); } else if (selectedOption === 'temperature') { return ['soiltemperature'].includes(parameter); } else if (selectedOption === 'humidity') { @@ -454,7 +451,22 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } } }, - y: { grid: { display: false }, beginAtZero: true } + y: { + grid: { display: false }, + beginAtZero: true, + ticks: { + callback: (value: number | string) => { + if (this.activeButton === 'vicitemperature') { + return `${value} °C`; + } else if (this.activeButton === 'vicihumidity') { + return `${value} %`; + } else if (this.activeButton === 'viciluminosity') { + return `${value} lux`; + } + return value; + } + }, + } } } }); @@ -497,7 +509,25 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } } }, - y: { grid: { display: false }, beginAtZero: true } + y: { + grid: { display: false }, + beginAtZero: true, + ticks:{ + callback: (value: number | string) => { + if(selectedOption === 'npk'){ + return `${value} mg/L`; + } else if(selectedOption === 'temperature'){ + return `${value} °C`; + } else if(selectedOption === 'humidity'){ + return `${value} %`; + } else if(selectedOption === 'conductivity'){ + return `${value} μS/cm`; + } else if(selectedOption === 'ph'){ + return `${value} pH`; + } return value; + } + }, + }, } } }); @@ -552,5 +582,5 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang const days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thrus', 'Fri', 'Sat']; return days[date.getDay()]; } - -} +}; + From a5fbb018c48de8a9081710d7c42314cb9c666d04 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 29 Nov 2024 14:14:44 +0700 Subject: [PATCH 48/53] fix(actualgraph): adding satuan in sumbu Y --- .../dashboard/page/actualgraph/actualgraph.component.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 2fe0ff3..2dd62d3 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -92,6 +92,11 @@ export class ActualgraphComponent implements OnInit { y: { stacked: true, beginAtZero: false, + ticks: { + callback: (value: number) => { + return value + ' mg/L'; + } + } } } } From 7c44188d6ebae2606a8311de91463b23393ed4b4 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 29 Nov 2024 15:01:29 +0700 Subject: [PATCH 49/53] fix(graph): fix pulign ticks satuan --- .../src/app/pages/dashboard/page/graph/graph.component.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 2b03688..9d29608 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -301,6 +301,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang if (this.charts['dht']) { this.filterData(this.activeButton); + console.log(this.activeButton); } } @@ -455,7 +456,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang grid: { display: false }, beginAtZero: true, ticks: { - callback: (value: number | string) => { + callback: (value: string | number, index: number, values: any) => { if (this.activeButton === 'vicitemperature') { return `${value} °C`; } else if (this.activeButton === 'vicihumidity') { @@ -513,7 +514,7 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang grid: { display: false }, beginAtZero: true, ticks:{ - callback: (value: number | string) => { + callback: (value: string | number, index: number, values: any) => { if(selectedOption === 'npk'){ return `${value} mg/L`; } else if(selectedOption === 'temperature'){ From 4377bb493d41a5e5a259dd6bbffe1071df51543d Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Fri, 29 Nov 2024 15:13:08 +0700 Subject: [PATCH 50/53] fix(actualgraph): fix satuan plugin --- .../dashboard/page/actualgraph/actualgraph.component.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts index 2dd62d3..cd5d024 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/actualgraph/actualgraph.component.ts @@ -93,9 +93,10 @@ export class ActualgraphComponent implements OnInit { stacked: true, beginAtZero: false, ticks: { - callback: (value: number) => { - return value + ' mg/L'; + callback: (value: string | number, index: number, values: any) => { + return `${value} mg/L`; } + } } } From 944a9fa5cb664bd71997fb55fc7853f346d91263 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 2 Dec 2024 15:03:21 +0700 Subject: [PATCH 51/53] fix(graph): fix graph for first load --- .../src/app/pages/dashboard/page/graph/graph.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts index 9d29608..5e3df2f 100644 --- a/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts +++ b/agrilink_vocpro/src/app/pages/dashboard/page/graph/graph.component.ts @@ -100,6 +100,9 @@ export class GraphComponent implements OnInit, AfterViewInit, OnDestroy, OnChang } ngAfterViewInit(): void { + setTimeout(() => { + this.updateCharts(); + }, 0); this.onResize(); } From 98ca03b55e533701e795386df0df73bb93fe24d7 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Thu, 12 Dec 2024 11:29:03 +0700 Subject: [PATCH 52/53] fix(register): fix handling error --- .../interceptors/http-error-interceptor.service.ts | 3 +++ .../src/app/pages/register/register.component.ts | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts b/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts index eb2420a..907f20b 100644 --- a/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts +++ b/agrilink_vocpro/src/app/cores/interceptors/http-error-interceptor.service.ts @@ -27,6 +27,9 @@ export const httpErrorInterceptor: HttpInterceptorFn = (req, next) => { case 404: errorMessage = 'Resource not found: The requested resource does not exist.'; break; + case 422: + errorMessage = 'Enter a different username or email'; + break; case 500: errorMessage = 'Server error: Please try again later.'; break; diff --git a/agrilink_vocpro/src/app/pages/register/register.component.ts b/agrilink_vocpro/src/app/pages/register/register.component.ts index c1767c7..1df196c 100644 --- a/agrilink_vocpro/src/app/pages/register/register.component.ts +++ b/agrilink_vocpro/src/app/pages/register/register.component.ts @@ -40,6 +40,17 @@ export class RegisterComponent implements OnInit { this.loading = false; this.toast.error('Please fill in all fields.'); return; + } else if(this.password.length<8){ + this.loading= false; + this.toast.error('Password must be at least 8 characters') + } else if(!this.email.includes('@')){ + this.loading=false; + this.toast.error('Invalid Email'); + } else { + (error: any) => { + this.loading = false; + this.toast.error(error.error.message); + } } const registrationData: RegistrationData = { From a4ab48ab20dc3918b05ac60227fae220860c14a5 Mon Sep 17 00:00:00 2001 From: Desy Ayurianti Date: Mon, 30 Dec 2024 12:01:27 +0700 Subject: [PATCH 53/53] fix(readme): update read me documentation --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 06107d4..abe1832 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ The data that will display on the graph is 24 hour trend data and there will be ## Technology Stack -- Angular 18 (Front-end Web Framework) +- Node JS version 18.20.4 +- Angular 18.2.4 (Front-end Web Framework) - REST API (Backend communication) - GitLab for version control @@ -45,21 +46,25 @@ git clone https://gitlab.com/profile-image/kedaireka/smartfarming/frontend-smart ``` cd agrilink_vocpro ``` -3. Run the project: +3. Install Dependencies: +``` +npm install +``` +4. Run the project: ``` ng serve ``` - ## Project Structure (Angular) - `src/app/`: Contains the Angular application source code. - `cores/`: Contains all constants, interfaces, and services needed for the project. + - `guards/`: Contains guards for + - `interceptors`: Contains handling error - `interfaces/`: Contains TypeScript interfaces for data models and types used throughout the application. - `services/`: Contains service files for managing API requests. - `pages/`: Contains Angular components and views representing different pages of the application. - - `angular.json`: Angular project configuration file. - `package.json`: Contains project dependencies and scripts for building and running the project.

    ZcEfb{tgtKzh}nD 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�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