diff --git a/.babelrc b/.babelrc deleted file mode 100644 index af0f0c3d..00000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["es2015"] -} \ No newline at end of file diff --git a/.eslintrc b/.eslintrc.js similarity index 87% rename from .eslintrc rename to .eslintrc.js index e5e9e20e..9c68ca66 100644 --- a/.eslintrc +++ b/.eslintrc.js @@ -1,37 +1,10 @@ -{ - "parser": "babel-eslint", - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 2017, - "ecmaFeatures": { - "experimentalObjectRestSpread": true, - "impliedStrict": true, - "modules": true, - "blockBindings": true, - "arrowFunctions": true, - "objectLiteralShorthandMethods": true, - "objectLiteralShorthandProperties": true, - "templateStrings": true, - "classes": true, - "jsx": true - }, - }, - +module.exports = { "env": { "es6": true, "node": true, "browser": true, - "mocha" : true + "jest": true }, - - "plugins": [ - "mocha", - "chai", - "json" - ], - - "globals": {}, - "rules": { "no-restricted-globals": ["error", "event"], "accessor-pairs": 2, @@ -149,6 +122,6 @@ "wrap-iife": [2, "any"], "yield-star-spacing": [2, "both"], "yoda": [2, "never"], - "prefer-const": 1, + "prefer-const": 1 } } diff --git a/.gitignore b/.gitignore index 00cbbdf5..cb232b61 100644 --- a/.gitignore +++ b/.gitignore @@ -4,56 +4,24 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Typescript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +# all projects setting files from IDEs +.idea/* + +.yarn/cache +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.pnp.cjs b/.pnp.cjs new file mode 100755 index 00000000..cd6db2a0 --- /dev/null +++ b/.pnp.cjs @@ -0,0 +1,14000 @@ +#!/usr/bin/env node +/* eslint-disable */ +// @ts-nocheck +"use strict"; + +const RAW_RUNTIME_STATE = +'{\ + "__info": [\ + "This file is automatically generated. Do not touch it, or risk",\ + "your modifications being lost."\ + ],\ + "dependencyTreeRoots": [\ + {\ + "name": "ledger-bridge",\ + "reference": "workspace:."\ + }\ + ],\ + "enableTopLevelFallback": true,\ + "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ + "fallbackExclusionList": [\ + ["ledger-bridge", ["workspace:."]]\ + ],\ + "fallbackPool": [\ + ],\ + "packageRegistryData": [\ + [null, [\ + [null, {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@ledgerhq/hw-app-eth", "npm:6.37.3"],\ + ["@ledgerhq/hw-transport-http", "npm:6.30.2"],\ + ["@ledgerhq/hw-transport-webhid", "npm:6.29.2"],\ + ["@ledgerhq/hw-transport-webusb", "npm:6.29.2"],\ + ["@vitejs/plugin-legacy", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.4.1"],\ + ["buffer", "npm:6.0.3"],\ + ["eslint", "npm:9.8.0"],\ + ["terser", "npm:5.31.3"],\ + ["vite", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.3.5"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["@ampproject/remapping", [\ + ["npm:2.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ampproject-remapping-npm-2.3.0-559c14eee4-10c0.zip/node_modules/@ampproject/remapping/",\ + "packageDependencies": [\ + ["@ampproject/remapping", "npm:2.3.0"],\ + ["@jridgewell/gen-mapping", "npm:0.3.5"],\ + ["@jridgewell/trace-mapping", "npm:0.3.25"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/code-frame", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-code-frame-npm-7.24.7-315a600a58-10c0.zip/node_modules/@babel/code-frame/",\ + "packageDependencies": [\ + ["@babel/code-frame", "npm:7.24.7"],\ + ["@babel/highlight", "npm:7.24.7"],\ + ["picocolors", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/compat-data", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-compat-data-npm-7.25.2-119057710e-10c0.zip/node_modules/@babel/compat-data/",\ + "packageDependencies": [\ + ["@babel/compat-data", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/core", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-core-npm-7.25.2-341930f809-10c0.zip/node_modules/@babel/core/",\ + "packageDependencies": [\ + ["@babel/core", "npm:7.25.2"],\ + ["@ampproject/remapping", "npm:2.3.0"],\ + ["@babel/code-frame", "npm:7.24.7"],\ + ["@babel/generator", "npm:7.25.0"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/helpers", "npm:7.25.0"],\ + ["@babel/parser", "npm:7.25.3"],\ + ["@babel/template", "npm:7.25.0"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"],\ + ["convert-source-map", "npm:2.0.0"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["gensync", "npm:1.0.0-beta.2"],\ + ["json5", "npm:2.2.3"],\ + ["semver", "npm:6.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/generator", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-generator-npm-7.25.0-4bba208756-10c0.zip/node_modules/@babel/generator/",\ + "packageDependencies": [\ + ["@babel/generator", "npm:7.25.0"],\ + ["@babel/types", "npm:7.25.2"],\ + ["@jridgewell/gen-mapping", "npm:0.3.5"],\ + ["@jridgewell/trace-mapping", "npm:0.3.25"],\ + ["jsesc", "npm:2.5.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-annotate-as-pure", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-annotate-as-pure-npm-7.24.7-537c5e8bf3-10c0.zip/node_modules/@babel/helper-annotate-as-pure/",\ + "packageDependencies": [\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-builder-binary-assignment-operator-visitor", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.24.7-1653e5773a-10c0.zip/node_modules/@babel/helper-builder-binary-assignment-operator-visitor/",\ + "packageDependencies": [\ + ["@babel/helper-builder-binary-assignment-operator-visitor", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-compilation-targets", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-compilation-targets-npm-7.25.2-27e0232144-10c0.zip/node_modules/@babel/helper-compilation-targets/",\ + "packageDependencies": [\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/compat-data", "npm:7.25.2"],\ + ["@babel/helper-validator-option", "npm:7.24.8"],\ + ["browserslist", "npm:4.23.3"],\ + ["lru-cache", "npm:5.1.1"],\ + ["semver", "npm:6.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-create-class-features-plugin", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-create-class-features-plugin-npm-7.25.0-8c1a9bf7ca-10c0.zip/node_modules/@babel/helper-create-class-features-plugin/",\ + "packageDependencies": [\ + ["@babel/helper-create-class-features-plugin", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-618c1ec397/3/.yarn/berry/cache/@babel-helper-create-class-features-plugin-npm-7.25.0-8c1a9bf7ca-10c0.zip/node_modules/@babel/helper-create-class-features-plugin/",\ + "packageDependencies": [\ + ["@babel/helper-create-class-features-plugin", "virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@babel/helper-member-expression-to-functions", "npm:7.24.8"],\ + ["@babel/helper-optimise-call-expression", "npm:7.24.7"],\ + ["@babel/helper-replace-supers", "virtual:618c1ec39785f29c568d69b786686ca305a8bbc105a3af0385a6cc9f674ad1a35cff8e41a517df1beeec14959e2891e6a93048fee5c8bd22fe1efe08c6dc11aa#npm:7.25.0"],\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null],\ + ["semver", "npm:6.3.1"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-create-regexp-features-plugin", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-create-regexp-features-plugin-npm-7.25.2-35b05e1e79-10c0.zip/node_modules/@babel/helper-create-regexp-features-plugin/",\ + "packageDependencies": [\ + ["@babel/helper-create-regexp-features-plugin", "npm:7.25.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-create-regexp-features-plugin-virtual-29926d060f/3/.yarn/berry/cache/@babel-helper-create-regexp-features-plugin-npm-7.25.2-35b05e1e79-10c0.zip/node_modules/@babel/helper-create-regexp-features-plugin/",\ + "packageDependencies": [\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@types/babel__core", null],\ + ["regexpu-core", "npm:5.3.2"],\ + ["semver", "npm:6.3.1"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-define-polyfill-provider", [\ + ["npm:0.6.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-define-polyfill-provider-npm-0.6.2-554cbf22ae-10c0.zip/node_modules/@babel/helper-define-polyfill-provider/",\ + "packageDependencies": [\ + ["@babel/helper-define-polyfill-provider", "npm:0.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:9390dd358b4a3531c0d14de3971bcc77ea79dce622c7a488d1d8e74f3f3053742f8b412438ea078e607b9937775f6c1af3bcfa4a7e4f67e065ba5cfe8ef1bea7#npm:0.6.2", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-define-polyfill-provider-virtual-94f8201de8/3/.yarn/berry/cache/@babel-helper-define-polyfill-provider-npm-0.6.2-554cbf22ae-10c0.zip/node_modules/@babel/helper-define-polyfill-provider/",\ + "packageDependencies": [\ + ["@babel/helper-define-polyfill-provider", "virtual:9390dd358b4a3531c0d14de3971bcc77ea79dce622c7a488d1d8e74f3f3053742f8b412438ea078e607b9937775f6c1af3bcfa4a7e4f67e065ba5cfe8ef1bea7#npm:0.6.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["lodash.debounce", "npm:4.0.8"],\ + ["resolve", "patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-member-expression-to-functions", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-member-expression-to-functions-npm-7.24.8-6042e98e38-10c0.zip/node_modules/@babel/helper-member-expression-to-functions/",\ + "packageDependencies": [\ + ["@babel/helper-member-expression-to-functions", "npm:7.24.8"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-module-imports", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-module-imports-npm-7.24.7-f60e66adbf-10c0.zip/node_modules/@babel/helper-module-imports/",\ + "packageDependencies": [\ + ["@babel/helper-module-imports", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-module-transforms", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-module-transforms-npm-7.25.2-2c8d511580-10c0.zip/node_modules/@babel/helper-module-transforms/",\ + "packageDependencies": [\ + ["@babel/helper-module-transforms", "npm:7.25.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-module-transforms-virtual-b14538d1e7/3/.yarn/berry/cache/@babel-helper-module-transforms-npm-7.25.2-2c8d511580-10c0.zip/node_modules/@babel/helper-module-transforms/",\ + "packageDependencies": [\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-imports", "npm:7.24.7"],\ + ["@babel/helper-simple-access", "npm:7.24.7"],\ + ["@babel/helper-validator-identifier", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-optimise-call-expression", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-optimise-call-expression-npm-7.24.7-59b5fb050d-10c0.zip/node_modules/@babel/helper-optimise-call-expression/",\ + "packageDependencies": [\ + ["@babel/helper-optimise-call-expression", "npm:7.24.7"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-plugin-utils", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-plugin-utils-npm-7.24.8-a288f101a7-10c0.zip/node_modules/@babel/helper-plugin-utils/",\ + "packageDependencies": [\ + ["@babel/helper-plugin-utils", "npm:7.24.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-remap-async-to-generator", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-remap-async-to-generator-npm-7.25.0-0f64f09501-10c0.zip/node_modules/@babel/helper-remap-async-to-generator/",\ + "packageDependencies": [\ + ["@babel/helper-remap-async-to-generator", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:ea696f6c17bd8b14c87b121a66a5448a9afd75ebdfa742f0d7f4666d4e1fd1418b2a84cafde94ff81a192ab075561891848010fe5b9474b2563010961d2a6db9#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-remap-async-to-generator-virtual-9b8f7abded/3/.yarn/berry/cache/@babel-helper-remap-async-to-generator-npm-7.25.0-0f64f09501-10c0.zip/node_modules/@babel/helper-remap-async-to-generator/",\ + "packageDependencies": [\ + ["@babel/helper-remap-async-to-generator", "virtual:ea696f6c17bd8b14c87b121a66a5448a9afd75ebdfa742f0d7f4666d4e1fd1418b2a84cafde94ff81a192ab075561891848010fe5b9474b2563010961d2a6db9#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@babel/helper-wrap-function", "npm:7.25.0"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-replace-supers", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-replace-supers-npm-7.25.0-7aaa2ff595-10c0.zip/node_modules/@babel/helper-replace-supers/",\ + "packageDependencies": [\ + ["@babel/helper-replace-supers", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:618c1ec39785f29c568d69b786686ca305a8bbc105a3af0385a6cc9f674ad1a35cff8e41a517df1beeec14959e2891e6a93048fee5c8bd22fe1efe08c6dc11aa#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-replace-supers-virtual-9c827d9a24/3/.yarn/berry/cache/@babel-helper-replace-supers-npm-7.25.0-7aaa2ff595-10c0.zip/node_modules/@babel/helper-replace-supers/",\ + "packageDependencies": [\ + ["@babel/helper-replace-supers", "virtual:618c1ec39785f29c568d69b786686ca305a8bbc105a3af0385a6cc9f674ad1a35cff8e41a517df1beeec14959e2891e6a93048fee5c8bd22fe1efe08c6dc11aa#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-member-expression-to-functions", "npm:7.24.8"],\ + ["@babel/helper-optimise-call-expression", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-simple-access", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-simple-access-npm-7.24.7-beddd00b0e-10c0.zip/node_modules/@babel/helper-simple-access/",\ + "packageDependencies": [\ + ["@babel/helper-simple-access", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-skip-transparent-expression-wrappers", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-skip-transparent-expression-wrappers-npm-7.24.7-f573fe40ee-10c0.zip/node_modules/@babel/helper-skip-transparent-expression-wrappers/",\ + "packageDependencies": [\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-string-parser", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-string-parser-npm-7.24.8-133b2e71e1-10c0.zip/node_modules/@babel/helper-string-parser/",\ + "packageDependencies": [\ + ["@babel/helper-string-parser", "npm:7.24.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-validator-identifier", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-validator-identifier-npm-7.24.7-748889c8d2-10c0.zip/node_modules/@babel/helper-validator-identifier/",\ + "packageDependencies": [\ + ["@babel/helper-validator-identifier", "npm:7.24.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-validator-option", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-validator-option-npm-7.24.8-e093ef5016-10c0.zip/node_modules/@babel/helper-validator-option/",\ + "packageDependencies": [\ + ["@babel/helper-validator-option", "npm:7.24.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-wrap-function", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helper-wrap-function-npm-7.25.0-c85147a474-10c0.zip/node_modules/@babel/helper-wrap-function/",\ + "packageDependencies": [\ + ["@babel/helper-wrap-function", "npm:7.25.0"],\ + ["@babel/template", "npm:7.25.0"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helpers", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-helpers-npm-7.25.0-f552d9aaf3-10c0.zip/node_modules/@babel/helpers/",\ + "packageDependencies": [\ + ["@babel/helpers", "npm:7.25.0"],\ + ["@babel/template", "npm:7.25.0"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/highlight", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-highlight-npm-7.24.7-d792bd8d9f-10c0.zip/node_modules/@babel/highlight/",\ + "packageDependencies": [\ + ["@babel/highlight", "npm:7.24.7"],\ + ["@babel/helper-validator-identifier", "npm:7.24.7"],\ + ["chalk", "npm:2.4.2"],\ + ["js-tokens", "npm:4.0.0"],\ + ["picocolors", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/parser", [\ + ["npm:7.25.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-parser-npm-7.25.3-e33bb4a0e6-10c0.zip/node_modules/@babel/parser/",\ + "packageDependencies": [\ + ["@babel/parser", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-bugfix-firefox-class-in-computed-class-key", [\ + ["npm:7.25.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-bugfix-firefox-class-in-computed-class-key-npm-7.25.3-d2e8ec6012-10c0.zip/node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-firefox-class-in-computed-class-key", "npm:7.25.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-firefox-class-in-computed-class-key-virtual-b1b3b5843a/3/.yarn/berry/cache/@babel-plugin-bugfix-firefox-class-in-computed-class-key-npm-7.25.3-d2e8ec6012-10c0.zip/node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-firefox-class-in-computed-class-key", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-bugfix-safari-class-field-initializer-scope", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-bugfix-safari-class-field-initializer-scope-npm-7.25.0-96be020ed4-10c0.zip/node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-safari-class-field-initializer-scope", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-safari-class-field-initializer-scope-virtual-82e787f381/3/.yarn/berry/cache/@babel-plugin-bugfix-safari-class-field-initializer-scope-npm-7.25.0-96be020ed4-10c0.zip/node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-safari-class-field-initializer-scope", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.25.0-cd338f5f19-10c0.zip/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-virtual-129c8536a4/3/.yarn/berry/cache/@babel-plugin-bugfix-safari-id-destructuring-collision-in-function-expression-npm-7.25.0-cd338f5f19-10c0.zip/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.24.7-a96e8cc868-10c0.zip/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-virtual-cbe4ee327f/3/.yarn/berry/cache/@babel-plugin-bugfix-v8-spread-parameters-in-optional-chaining-npm-7.24.7-a96e8cc868-10c0.zip/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@babel/plugin-transform-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-npm-7.25.0-0974fd41ef-10c0.zip/node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-virtual-51c7031851/3/.yarn/berry/cache/@babel-plugin-bugfix-v8-static-class-fields-redefine-readonly-npm-7.25.0-0974fd41ef-10c0.zip/node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/",\ + "packageDependencies": [\ + ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-proposal-private-property-in-object", [\ + ["npm:7.21.0-placeholder-for-preset-env.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-proposal-private-property-in-object-npm-7.21.0-placeholder-for-preset-env.2-eb70026c88-10c0.zip/node_modules/@babel/plugin-proposal-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-proposal-private-property-in-object", "npm:7.21.0-placeholder-for-preset-env.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.21.0-placeholder-for-preset-env.2", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-proposal-private-property-in-object-virtual-074e2039cb/3/.yarn/berry/cache/@babel-plugin-proposal-private-property-in-object-npm-7.21.0-placeholder-for-preset-env.2-eb70026c88-10c0.zip/node_modules/@babel/plugin-proposal-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-proposal-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.21.0-placeholder-for-preset-env.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-async-generators", [\ + ["npm:7.8.4", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-10c0.zip/node_modules/@babel/plugin-syntax-async-generators/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-async-generators", "npm:7.8.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.4", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-async-generators-virtual-e6da5765c5/3/.yarn/berry/cache/@babel-plugin-syntax-async-generators-npm-7.8.4-d10cf993c9-10c0.zip/node_modules/@babel/plugin-syntax-async-generators/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-async-generators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.4"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-class-properties", [\ + ["npm:7.12.13", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-10c0.zip/node_modules/@babel/plugin-syntax-class-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-class-properties", "npm:7.12.13"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.12.13", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-class-properties-virtual-cc3941f2cf/3/.yarn/berry/cache/@babel-plugin-syntax-class-properties-npm-7.12.13-002ee9d930-10c0.zip/node_modules/@babel/plugin-syntax-class-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-class-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.12.13"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-class-static-block", [\ + ["npm:7.14.5", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-10c0.zip/node_modules/@babel/plugin-syntax-class-static-block/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-class-static-block", "npm:7.14.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-class-static-block-virtual-1303a1f587/3/.yarn/berry/cache/@babel-plugin-syntax-class-static-block-npm-7.14.5-7bdd0ff1b3-10c0.zip/node_modules/@babel/plugin-syntax-class-static-block/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-class-static-block", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-dynamic-import", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-10c0.zip/node_modules/@babel/plugin-syntax-dynamic-import/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-dynamic-import", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-dynamic-import-virtual-b68cb1ea2a/3/.yarn/berry/cache/@babel-plugin-syntax-dynamic-import-npm-7.8.3-fb9ff5634a-10c0.zip/node_modules/@babel/plugin-syntax-dynamic-import/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-dynamic-import", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-export-namespace-from", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-10c0.zip/node_modules/@babel/plugin-syntax-export-namespace-from/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-export-namespace-from", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-export-namespace-from-virtual-bcb7ffb016/3/.yarn/berry/cache/@babel-plugin-syntax-export-namespace-from-npm-7.8.3-1747201aa9-10c0.zip/node_modules/@babel/plugin-syntax-export-namespace-from/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-export-namespace-from", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-import-assertions", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-import-assertions-npm-7.24.7-06924e77aa-10c0.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-assertions", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-assertions-virtual-17f1531148/3/.yarn/berry/cache/@babel-plugin-syntax-import-assertions-npm-7.24.7-06924e77aa-10c0.zip/node_modules/@babel/plugin-syntax-import-assertions/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-assertions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-import-attributes", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-import-attributes-npm-7.24.7-6101aa2bfb-10c0.zip/node_modules/@babel/plugin-syntax-import-attributes/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-attributes", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-attributes-virtual-3dcb6e5d78/3/.yarn/berry/cache/@babel-plugin-syntax-import-attributes-npm-7.24.7-6101aa2bfb-10c0.zip/node_modules/@babel/plugin-syntax-import-attributes/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-attributes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-import-meta", [\ + ["npm:7.10.4", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-10c0.zip/node_modules/@babel/plugin-syntax-import-meta/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-meta", "npm:7.10.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-import-meta-virtual-e9996c9aa8/3/.yarn/berry/cache/@babel-plugin-syntax-import-meta-npm-7.10.4-4a0a0158bc-10c0.zip/node_modules/@babel/plugin-syntax-import-meta/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-import-meta", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-json-strings", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-10c0.zip/node_modules/@babel/plugin-syntax-json-strings/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-json-strings", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-json-strings-virtual-b111328003/3/.yarn/berry/cache/@babel-plugin-syntax-json-strings-npm-7.8.3-6dc7848179-10c0.zip/node_modules/@babel/plugin-syntax-json-strings/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-json-strings", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-logical-assignment-operators", [\ + ["npm:7.10.4", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-10c0.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-logical-assignment-operators", "npm:7.10.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-logical-assignment-operators-virtual-d744f2d315/3/.yarn/berry/cache/@babel-plugin-syntax-logical-assignment-operators-npm-7.10.4-72ae00fdf6-10c0.zip/node_modules/@babel/plugin-syntax-logical-assignment-operators/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-logical-assignment-operators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-nullish-coalescing-operator", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-10c0.zip/node_modules/@babel/plugin-syntax-nullish-coalescing-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-nullish-coalescing-operator", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-nullish-coalescing-operator-virtual-a02e93e31a/3/.yarn/berry/cache/@babel-plugin-syntax-nullish-coalescing-operator-npm-7.8.3-8a723173b5-10c0.zip/node_modules/@babel/plugin-syntax-nullish-coalescing-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-numeric-separator", [\ + ["npm:7.10.4", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-10c0.zip/node_modules/@babel/plugin-syntax-numeric-separator/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-numeric-separator", "npm:7.10.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-numeric-separator-virtual-f4a0883853/3/.yarn/berry/cache/@babel-plugin-syntax-numeric-separator-npm-7.10.4-81444be605-10c0.zip/node_modules/@babel/plugin-syntax-numeric-separator/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-numeric-separator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-object-rest-spread", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-10c0.zip/node_modules/@babel/plugin-syntax-object-rest-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-object-rest-spread", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-object-rest-spread-virtual-248bddd896/3/.yarn/berry/cache/@babel-plugin-syntax-object-rest-spread-npm-7.8.3-60bd05b6ae-10c0.zip/node_modules/@babel/plugin-syntax-object-rest-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-object-rest-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-optional-catch-binding", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-10c0.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-optional-catch-binding", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-catch-binding-virtual-b1050c2753/3/.yarn/berry/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.8.3-ce337427d8-10c0.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-optional-catch-binding", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-optional-chaining", [\ + ["npm:7.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-10c0.zip/node_modules/@babel/plugin-syntax-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-optional-chaining", "npm:7.8.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-optional-chaining-virtual-ecf78febb6/3/.yarn/berry/cache/@babel-plugin-syntax-optional-chaining-npm-7.8.3-f3f3c79579-10c0.zip/node_modules/@babel/plugin-syntax-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-private-property-in-object", [\ + ["npm:7.14.5", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-10c0.zip/node_modules/@babel/plugin-syntax-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-private-property-in-object", "npm:7.14.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-private-property-in-object-virtual-1eacee687f/3/.yarn/berry/cache/@babel-plugin-syntax-private-property-in-object-npm-7.14.5-ee837fdbb2-10c0.zip/node_modules/@babel/plugin-syntax-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-top-level-await", [\ + ["npm:7.14.5", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-10c0.zip/node_modules/@babel/plugin-syntax-top-level-await/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-top-level-await", "npm:7.14.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-top-level-await-virtual-0c26803206/3/.yarn/berry/cache/@babel-plugin-syntax-top-level-await-npm-7.14.5-60a0a2e83b-10c0.zip/node_modules/@babel/plugin-syntax-top-level-await/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-top-level-await", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-syntax-unicode-sets-regex", [\ + ["npm:7.18.6", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-syntax-unicode-sets-regex-npm-7.18.6-b618a36bfd-10c0.zip/node_modules/@babel/plugin-syntax-unicode-sets-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-unicode-sets-regex", "npm:7.18.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.18.6", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-unicode-sets-regex-virtual-25d69cd843/3/.yarn/berry/cache/@babel-plugin-syntax-unicode-sets-regex-npm-7.18.6-b618a36bfd-10c0.zip/node_modules/@babel/plugin-syntax-unicode-sets-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-syntax-unicode-sets-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.18.6"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-arrow-functions", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-arrow-functions-npm-7.24.7-dc9654ba4f-10c0.zip/node_modules/@babel/plugin-transform-arrow-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-arrow-functions", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-arrow-functions-virtual-05d6a9c5ea/3/.yarn/berry/cache/@babel-plugin-transform-arrow-functions-npm-7.24.7-dc9654ba4f-10c0.zip/node_modules/@babel/plugin-transform-arrow-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-arrow-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-async-generator-functions", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-async-generator-functions-npm-7.25.0-f63107cabf-10c0.zip/node_modules/@babel/plugin-transform-async-generator-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-async-generator-functions", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-async-generator-functions-virtual-ea696f6c17/3/.yarn/berry/cache/@babel-plugin-transform-async-generator-functions-npm-7.25.0-f63107cabf-10c0.zip/node_modules/@babel/plugin-transform-async-generator-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-async-generator-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-remap-async-to-generator", "virtual:ea696f6c17bd8b14c87b121a66a5448a9afd75ebdfa742f0d7f4666d4e1fd1418b2a84cafde94ff81a192ab075561891848010fe5b9474b2563010961d2a6db9#npm:7.25.0"],\ + ["@babel/plugin-syntax-async-generators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.4"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-async-to-generator", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-async-to-generator-npm-7.24.7-335cbe94e0-10c0.zip/node_modules/@babel/plugin-transform-async-to-generator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-async-to-generator", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-async-to-generator-virtual-5e17dbe91b/3/.yarn/berry/cache/@babel-plugin-transform-async-to-generator-npm-7.24.7-335cbe94e0-10c0.zip/node_modules/@babel/plugin-transform-async-to-generator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-async-to-generator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-imports", "npm:7.24.7"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-remap-async-to-generator", "virtual:ea696f6c17bd8b14c87b121a66a5448a9afd75ebdfa742f0d7f4666d4e1fd1418b2a84cafde94ff81a192ab075561891848010fe5b9474b2563010961d2a6db9#npm:7.25.0"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-block-scoped-functions", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-block-scoped-functions-npm-7.24.7-3bde68de42-10c0.zip/node_modules/@babel/plugin-transform-block-scoped-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-block-scoped-functions", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-block-scoped-functions-virtual-2d9981aeae/3/.yarn/berry/cache/@babel-plugin-transform-block-scoped-functions-npm-7.24.7-3bde68de42-10c0.zip/node_modules/@babel/plugin-transform-block-scoped-functions/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-block-scoped-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-block-scoping", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-block-scoping-npm-7.25.0-3cb78e0e8f-10c0.zip/node_modules/@babel/plugin-transform-block-scoping/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-block-scoping", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-block-scoping-virtual-24c19829d5/3/.yarn/berry/cache/@babel-plugin-transform-block-scoping-npm-7.25.0-3cb78e0e8f-10c0.zip/node_modules/@babel/plugin-transform-block-scoping/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-block-scoping", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-class-properties", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-class-properties-npm-7.24.7-42a5aafd3c-10c0.zip/node_modules/@babel/plugin-transform-class-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-class-properties", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-class-properties-virtual-a3ca558fd9/3/.yarn/berry/cache/@babel-plugin-transform-class-properties-npm-7.24.7-42a5aafd3c-10c0.zip/node_modules/@babel/plugin-transform-class-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-class-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-class-features-plugin", "virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-class-static-block", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-class-static-block-npm-7.24.7-2ab97b4caf-10c0.zip/node_modules/@babel/plugin-transform-class-static-block/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-class-static-block", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-class-static-block-virtual-83eabe4c57/3/.yarn/berry/cache/@babel-plugin-transform-class-static-block-npm-7.24.7-2ab97b4caf-10c0.zip/node_modules/@babel/plugin-transform-class-static-block/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-class-static-block", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-class-features-plugin", "virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-class-static-block", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-classes", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-classes-npm-7.25.0-82eaa19fb4-10c0.zip/node_modules/@babel/plugin-transform-classes/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-classes", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-classes-virtual-0c2212618f/3/.yarn/berry/cache/@babel-plugin-transform-classes-npm-7.25.0-82eaa19fb4-10c0.zip/node_modules/@babel/plugin-transform-classes/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-classes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-replace-supers", "virtual:618c1ec39785f29c568d69b786686ca305a8bbc105a3af0385a6cc9f674ad1a35cff8e41a517df1beeec14959e2891e6a93048fee5c8bd22fe1efe08c6dc11aa#npm:7.25.0"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null],\ + ["globals", "npm:11.12.0"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-computed-properties", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-computed-properties-npm-7.24.7-707065a998-10c0.zip/node_modules/@babel/plugin-transform-computed-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-computed-properties", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-computed-properties-virtual-c2b50f054f/3/.yarn/berry/cache/@babel-plugin-transform-computed-properties-npm-7.24.7-707065a998-10c0.zip/node_modules/@babel/plugin-transform-computed-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-computed-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/template", "npm:7.25.0"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-destructuring", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-destructuring-npm-7.24.8-d05798f0dc-10c0.zip/node_modules/@babel/plugin-transform-destructuring/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-destructuring", "npm:7.24.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-destructuring-virtual-88bb4bde0c/3/.yarn/berry/cache/@babel-plugin-transform-destructuring-npm-7.24.8-d05798f0dc-10c0.zip/node_modules/@babel/plugin-transform-destructuring/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-destructuring", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-dotall-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-dotall-regex-npm-7.24.7-1e4ebcbb6c-10c0.zip/node_modules/@babel/plugin-transform-dotall-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-dotall-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-dotall-regex-virtual-2a16953007/3/.yarn/berry/cache/@babel-plugin-transform-dotall-regex-npm-7.24.7-1e4ebcbb6c-10c0.zip/node_modules/@babel/plugin-transform-dotall-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-dotall-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-duplicate-keys", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-duplicate-keys-npm-7.24.7-c999e46d25-10c0.zip/node_modules/@babel/plugin-transform-duplicate-keys/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-duplicate-keys", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-duplicate-keys-virtual-dd8c224b2f/3/.yarn/berry/cache/@babel-plugin-transform-duplicate-keys-npm-7.24.7-c999e46d25-10c0.zip/node_modules/@babel/plugin-transform-duplicate-keys/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-duplicate-keys", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-duplicate-named-capturing-groups-regex", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-duplicate-named-capturing-groups-regex-npm-7.25.0-4d6aab7c02-10c0.zip/node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-duplicate-named-capturing-groups-regex", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-duplicate-named-capturing-groups-regex-virtual-04aba4d2d3/3/.yarn/berry/cache/@babel-plugin-transform-duplicate-named-capturing-groups-regex-npm-7.25.0-4d6aab7c02-10c0.zip/node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-duplicate-named-capturing-groups-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-dynamic-import", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-dynamic-import-npm-7.24.7-e15a724c6c-10c0.zip/node_modules/@babel/plugin-transform-dynamic-import/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-dynamic-import", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-dynamic-import-virtual-cf56bc9d10/3/.yarn/berry/cache/@babel-plugin-transform-dynamic-import-npm-7.24.7-e15a724c6c-10c0.zip/node_modules/@babel/plugin-transform-dynamic-import/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-dynamic-import", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-dynamic-import", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-exponentiation-operator", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-exponentiation-operator-npm-7.24.7-1bd197e640-10c0.zip/node_modules/@babel/plugin-transform-exponentiation-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-exponentiation-operator", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-exponentiation-operator-virtual-d3b0136a75/3/.yarn/berry/cache/@babel-plugin-transform-exponentiation-operator-npm-7.24.7-1bd197e640-10c0.zip/node_modules/@babel/plugin-transform-exponentiation-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-exponentiation-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-builder-binary-assignment-operator-visitor", "npm:7.24.7"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-export-namespace-from", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-export-namespace-from-npm-7.24.7-2e43f5c58e-10c0.zip/node_modules/@babel/plugin-transform-export-namespace-from/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-export-namespace-from", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-export-namespace-from-virtual-bcbd6aca75/3/.yarn/berry/cache/@babel-plugin-transform-export-namespace-from-npm-7.24.7-2e43f5c58e-10c0.zip/node_modules/@babel/plugin-transform-export-namespace-from/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-export-namespace-from", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-export-namespace-from", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-for-of", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-for-of-npm-7.24.7-e85b1239ae-10c0.zip/node_modules/@babel/plugin-transform-for-of/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-for-of", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-for-of-virtual-3620d918ce/3/.yarn/berry/cache/@babel-plugin-transform-for-of-npm-7.24.7-e85b1239ae-10c0.zip/node_modules/@babel/plugin-transform-for-of/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-for-of", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-function-name", [\ + ["npm:7.25.1", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-function-name-npm-7.25.1-abd6b587c7-10c0.zip/node_modules/@babel/plugin-transform-function-name/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-function-name", "npm:7.25.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.1", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-function-name-virtual-4dbfaad62d/3/.yarn/berry/cache/@babel-plugin-transform-function-name-npm-7.25.1-abd6b587c7-10c0.zip/node_modules/@babel/plugin-transform-function-name/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-function-name", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.1"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-json-strings", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-json-strings-npm-7.24.7-17858f14f3-10c0.zip/node_modules/@babel/plugin-transform-json-strings/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-json-strings", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-json-strings-virtual-4222e48031/3/.yarn/berry/cache/@babel-plugin-transform-json-strings-npm-7.24.7-17858f14f3-10c0.zip/node_modules/@babel/plugin-transform-json-strings/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-json-strings", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-json-strings", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-literals", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-literals-npm-7.25.2-7f2fb8bbc9-10c0.zip/node_modules/@babel/plugin-transform-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-literals", "npm:7.25.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.2", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-literals-virtual-d1cfb701a3/3/.yarn/berry/cache/@babel-plugin-transform-literals-npm-7.25.2-7f2fb8bbc9-10c0.zip/node_modules/@babel/plugin-transform-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-logical-assignment-operators", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-logical-assignment-operators-npm-7.24.7-8d08c296f2-10c0.zip/node_modules/@babel/plugin-transform-logical-assignment-operators/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-logical-assignment-operators", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-logical-assignment-operators-virtual-180841f611/3/.yarn/berry/cache/@babel-plugin-transform-logical-assignment-operators-npm-7.24.7-8d08c296f2-10c0.zip/node_modules/@babel/plugin-transform-logical-assignment-operators/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-logical-assignment-operators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-logical-assignment-operators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-member-expression-literals", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-member-expression-literals-npm-7.24.7-566bef1c80-10c0.zip/node_modules/@babel/plugin-transform-member-expression-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-member-expression-literals", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-member-expression-literals-virtual-f78ba231c5/3/.yarn/berry/cache/@babel-plugin-transform-member-expression-literals-npm-7.24.7-566bef1c80-10c0.zip/node_modules/@babel/plugin-transform-member-expression-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-member-expression-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-modules-amd", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-modules-amd-npm-7.24.7-7b9b7c2d4b-10c0.zip/node_modules/@babel/plugin-transform-modules-amd/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-amd", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-amd-virtual-f956746857/3/.yarn/berry/cache/@babel-plugin-transform-modules-amd-npm-7.24.7-7b9b7c2d4b-10c0.zip/node_modules/@babel/plugin-transform-modules-amd/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-amd", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-modules-commonjs", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-modules-commonjs-npm-7.24.8-4d32ab4533-10c0.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-commonjs", "npm:7.24.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-7258790b17/3/.yarn/berry/cache/@babel-plugin-transform-modules-commonjs-npm-7.24.8-4d32ab4533-10c0.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-commonjs", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-simple-access", "npm:7.24.7"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-modules-systemjs", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-modules-systemjs-npm-7.25.0-838c85ab7f-10c0.zip/node_modules/@babel/plugin-transform-modules-systemjs/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-systemjs", "npm:7.25.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-systemjs-virtual-2907cd02d9/3/.yarn/berry/cache/@babel-plugin-transform-modules-systemjs-npm-7.25.0-838c85ab7f-10c0.zip/node_modules/@babel/plugin-transform-modules-systemjs/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-systemjs", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-validator-identifier", "npm:7.24.7"],\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-modules-umd", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-modules-umd-npm-7.24.7-46b61a2a8a-10c0.zip/node_modules/@babel/plugin-transform-modules-umd/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-umd", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-umd-virtual-6674baea52/3/.yarn/berry/cache/@babel-plugin-transform-modules-umd-npm-7.24.7-46b61a2a8a-10c0.zip/node_modules/@babel/plugin-transform-modules-umd/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-modules-umd", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-module-transforms", "virtual:341930f80996f4b1e479f0ee33257969b2165bf70992bcc76aa889af20d1c39a2bfc637461175a3ea65d6c75949d04c5fd87140f3b91c8912352de080c45e357#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-named-capturing-groups-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.24.7-68b2f48b40-10c0.zip/node_modules/@babel/plugin-transform-named-capturing-groups-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-named-capturing-groups-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-named-capturing-groups-regex-virtual-41be9468e9/3/.yarn/berry/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.24.7-68b2f48b40-10c0.zip/node_modules/@babel/plugin-transform-named-capturing-groups-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-named-capturing-groups-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-new-target", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-new-target-npm-7.24.7-cb95d780d4-10c0.zip/node_modules/@babel/plugin-transform-new-target/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-new-target", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-new-target-virtual-a64946d4b5/3/.yarn/berry/cache/@babel-plugin-transform-new-target-npm-7.24.7-cb95d780d4-10c0.zip/node_modules/@babel/plugin-transform-new-target/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-new-target", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-nullish-coalescing-operator", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-nullish-coalescing-operator-npm-7.24.7-91cfb40042-10c0.zip/node_modules/@babel/plugin-transform-nullish-coalescing-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-nullish-coalescing-operator", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-nullish-coalescing-operator-virtual-6fc60aae36/3/.yarn/berry/cache/@babel-plugin-transform-nullish-coalescing-operator-npm-7.24.7-91cfb40042-10c0.zip/node_modules/@babel/plugin-transform-nullish-coalescing-operator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-nullish-coalescing-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-numeric-separator", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-numeric-separator-npm-7.24.7-70370e84d8-10c0.zip/node_modules/@babel/plugin-transform-numeric-separator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-numeric-separator", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-numeric-separator-virtual-326743d356/3/.yarn/berry/cache/@babel-plugin-transform-numeric-separator-npm-7.24.7-70370e84d8-10c0.zip/node_modules/@babel/plugin-transform-numeric-separator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-numeric-separator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-numeric-separator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-object-rest-spread", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-object-rest-spread-npm-7.24.7-c5bcb6d635-10c0.zip/node_modules/@babel/plugin-transform-object-rest-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-object-rest-spread", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-object-rest-spread-virtual-cde7176725/3/.yarn/berry/cache/@babel-plugin-transform-object-rest-spread-npm-7.24.7-c5bcb6d635-10c0.zip/node_modules/@babel/plugin-transform-object-rest-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-object-rest-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-object-rest-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-transform-parameters", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-object-super", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-object-super-npm-7.24.7-8b4ef26bc1-10c0.zip/node_modules/@babel/plugin-transform-object-super/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-object-super", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-object-super-virtual-b181ebd9ca/3/.yarn/berry/cache/@babel-plugin-transform-object-super-npm-7.24.7-8b4ef26bc1-10c0.zip/node_modules/@babel/plugin-transform-object-super/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-object-super", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-replace-supers", "virtual:618c1ec39785f29c568d69b786686ca305a8bbc105a3af0385a6cc9f674ad1a35cff8e41a517df1beeec14959e2891e6a93048fee5c8bd22fe1efe08c6dc11aa#npm:7.25.0"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-optional-catch-binding", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-optional-catch-binding-npm-7.24.7-4dc481e34f-10c0.zip/node_modules/@babel/plugin-transform-optional-catch-binding/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-optional-catch-binding", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-optional-catch-binding-virtual-5872354046/3/.yarn/berry/cache/@babel-plugin-transform-optional-catch-binding-npm-7.24.7-4dc481e34f-10c0.zip/node_modules/@babel/plugin-transform-optional-catch-binding/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-optional-catch-binding", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-optional-catch-binding", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-optional-chaining", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-optional-chaining-npm-7.24.8-3f07208b22-10c0.zip/node_modules/@babel/plugin-transform-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-optional-chaining", "npm:7.24.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-optional-chaining-virtual-e28c06279c/3/.yarn/berry/cache/@babel-plugin-transform-optional-chaining-npm-7.24.8-3f07208b22-10c0.zip/node_modules/@babel/plugin-transform-optional-chaining/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@babel/plugin-syntax-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-parameters", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-parameters-npm-7.24.7-d18b1cfc71-10c0.zip/node_modules/@babel/plugin-transform-parameters/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-parameters", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-parameters-virtual-11c8e102f6/3/.yarn/berry/cache/@babel-plugin-transform-parameters-npm-7.24.7-d18b1cfc71-10c0.zip/node_modules/@babel/plugin-transform-parameters/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-parameters", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-private-methods", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-private-methods-npm-7.24.7-a20cce0583-10c0.zip/node_modules/@babel/plugin-transform-private-methods/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-private-methods", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-private-methods-virtual-b5040b1c0e/3/.yarn/berry/cache/@babel-plugin-transform-private-methods-npm-7.24.7-a20cce0583-10c0.zip/node_modules/@babel/plugin-transform-private-methods/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-private-methods", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-class-features-plugin", "virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-private-property-in-object", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-private-property-in-object-npm-7.24.7-96a62af9e6-10c0.zip/node_modules/@babel/plugin-transform-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-private-property-in-object", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-private-property-in-object-virtual-9fbcc56f26/3/.yarn/berry/cache/@babel-plugin-transform-private-property-in-object-npm-7.24.7-96a62af9e6-10c0.zip/node_modules/@babel/plugin-transform-private-property-in-object/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-annotate-as-pure", "npm:7.24.7"],\ + ["@babel/helper-create-class-features-plugin", "virtual:a3ca558fd93b24069037b82108b78d2e4f46fc65432c94e1e4f7498a488d9c8a68ba28e751e83ed78ba860ff7afdbfb724d98c9099d5ecb5c6b594f30d5e3b73#npm:7.25.0"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/plugin-syntax-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-property-literals", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-property-literals-npm-7.24.7-d2b997a7b0-10c0.zip/node_modules/@babel/plugin-transform-property-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-property-literals", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-property-literals-virtual-8488577635/3/.yarn/berry/cache/@babel-plugin-transform-property-literals-npm-7.24.7-d2b997a7b0-10c0.zip/node_modules/@babel/plugin-transform-property-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-property-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-regenerator", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-regenerator-npm-7.24.7-7ba719f821-10c0.zip/node_modules/@babel/plugin-transform-regenerator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-regenerator", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-regenerator-virtual-94fadff3d8/3/.yarn/berry/cache/@babel-plugin-transform-regenerator-npm-7.24.7-7ba719f821-10c0.zip/node_modules/@babel/plugin-transform-regenerator/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-regenerator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null],\ + ["regenerator-transform", "npm:0.15.2"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-reserved-words", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-reserved-words-npm-7.24.7-b2adfbf85a-10c0.zip/node_modules/@babel/plugin-transform-reserved-words/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-reserved-words", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-reserved-words-virtual-c7081d310a/3/.yarn/berry/cache/@babel-plugin-transform-reserved-words-npm-7.24.7-b2adfbf85a-10c0.zip/node_modules/@babel/plugin-transform-reserved-words/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-reserved-words", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-shorthand-properties", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-shorthand-properties-npm-7.24.7-bc90ee60de-10c0.zip/node_modules/@babel/plugin-transform-shorthand-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-shorthand-properties", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-shorthand-properties-virtual-c1ee269bd8/3/.yarn/berry/cache/@babel-plugin-transform-shorthand-properties-npm-7.24.7-bc90ee60de-10c0.zip/node_modules/@babel/plugin-transform-shorthand-properties/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-shorthand-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-spread", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-spread-npm-7.24.7-0009f44d3c-10c0.zip/node_modules/@babel/plugin-transform-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-spread", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-spread-virtual-96c28aeed4/3/.yarn/berry/cache/@babel-plugin-transform-spread-npm-7.24.7-0009f44d3c-10c0.zip/node_modules/@babel/plugin-transform-spread/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.24.7"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-sticky-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-sticky-regex-npm-7.24.7-98cd1af8a9-10c0.zip/node_modules/@babel/plugin-transform-sticky-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-sticky-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-sticky-regex-virtual-d212ec2b9f/3/.yarn/berry/cache/@babel-plugin-transform-sticky-regex-npm-7.24.7-98cd1af8a9-10c0.zip/node_modules/@babel/plugin-transform-sticky-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-sticky-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-template-literals", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-template-literals-npm-7.24.7-0ecb9f0cf5-10c0.zip/node_modules/@babel/plugin-transform-template-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-template-literals", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-template-literals-virtual-c22434a584/3/.yarn/berry/cache/@babel-plugin-transform-template-literals-npm-7.24.7-0ecb9f0cf5-10c0.zip/node_modules/@babel/plugin-transform-template-literals/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-template-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-typeof-symbol", [\ + ["npm:7.24.8", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-typeof-symbol-npm-7.24.8-105494a49d-10c0.zip/node_modules/@babel/plugin-transform-typeof-symbol/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-typeof-symbol", "npm:7.24.8"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typeof-symbol-virtual-846c990b58/3/.yarn/berry/cache/@babel-plugin-transform-typeof-symbol-npm-7.24.8-105494a49d-10c0.zip/node_modules/@babel/plugin-transform-typeof-symbol/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-typeof-symbol", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-unicode-escapes", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-unicode-escapes-npm-7.24.7-39ca160006-10c0.zip/node_modules/@babel/plugin-transform-unicode-escapes/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-escapes", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-escapes-virtual-192c96b699/3/.yarn/berry/cache/@babel-plugin-transform-unicode-escapes-npm-7.24.7-39ca160006-10c0.zip/node_modules/@babel/plugin-transform-unicode-escapes/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-escapes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-unicode-property-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-unicode-property-regex-npm-7.24.7-6d5a35d7ce-10c0.zip/node_modules/@babel/plugin-transform-unicode-property-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-property-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-property-regex-virtual-bf64a0bd43/3/.yarn/berry/cache/@babel-plugin-transform-unicode-property-regex-npm-7.24.7-6d5a35d7ce-10c0.zip/node_modules/@babel/plugin-transform-unicode-property-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-property-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-unicode-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-unicode-regex-npm-7.24.7-c5a44da0ea-10c0.zip/node_modules/@babel/plugin-transform-unicode-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-regex-virtual-23a653720f/3/.yarn/berry/cache/@babel-plugin-transform-unicode-regex-npm-7.24.7-c5a44da0ea-10c0.zip/node_modules/@babel/plugin-transform-unicode-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/plugin-transform-unicode-sets-regex", [\ + ["npm:7.24.7", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-plugin-transform-unicode-sets-regex-npm-7.24.7-f4501a8afb-10c0.zip/node_modules/@babel/plugin-transform-unicode-sets-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-sets-regex", "npm:7.24.7"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-unicode-sets-regex-virtual-e3ff9bb887/3/.yarn/berry/cache/@babel-plugin-transform-unicode-sets-regex-npm-7.24.7-f4501a8afb-10c0.zip/node_modules/@babel/plugin-transform-unicode-sets-regex/",\ + "packageDependencies": [\ + ["@babel/plugin-transform-unicode-sets-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-create-regexp-features-plugin", "virtual:25d69cd843e607baa2fd4e3e53c431f3437d324d9646bb35a9e7f5a6e1e041e1b344f586a5bf3776c4fe531da39a255027e8d89302afe3d29a50f5ac21046f7f#npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/preset-env", [\ + ["npm:7.25.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-preset-env-npm-7.25.3-a7ef94f447-10c0.zip/node_modules/@babel/preset-env/",\ + "packageDependencies": [\ + ["@babel/preset-env", "npm:7.25.3"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:7.25.3", {\ + "packageLocation": "./.yarn/__virtual__/@babel-preset-env-virtual-2853025c88/3/.yarn/berry/cache/@babel-preset-env-npm-7.25.3-a7ef94f447-10c0.zip/node_modules/@babel/preset-env/",\ + "packageDependencies": [\ + ["@babel/preset-env", "virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:7.25.3"],\ + ["@babel/compat-data", "npm:7.25.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-compilation-targets", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/helper-validator-option", "npm:7.24.8"],\ + ["@babel/plugin-bugfix-firefox-class-in-computed-class-key", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.3"],\ + ["@babel/plugin-bugfix-safari-class-field-initializer-scope", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-proposal-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.21.0-placeholder-for-preset-env.2"],\ + ["@babel/plugin-syntax-async-generators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.4"],\ + ["@babel/plugin-syntax-class-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.12.13"],\ + ["@babel/plugin-syntax-class-static-block", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/plugin-syntax-dynamic-import", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-export-namespace-from", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-import-assertions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-syntax-import-attributes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-syntax-import-meta", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/plugin-syntax-json-strings", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-logical-assignment-operators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/plugin-syntax-nullish-coalescing-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-numeric-separator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.10.4"],\ + ["@babel/plugin-syntax-object-rest-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-optional-catch-binding", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.8.3"],\ + ["@babel/plugin-syntax-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/plugin-syntax-top-level-await", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.14.5"],\ + ["@babel/plugin-syntax-unicode-sets-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.18.6"],\ + ["@babel/plugin-transform-arrow-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-async-generator-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-transform-async-to-generator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-block-scoped-functions", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-block-scoping", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-transform-class-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-class-static-block", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-classes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-transform-computed-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-destructuring", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/plugin-transform-dotall-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-duplicate-keys", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-duplicate-named-capturing-groups-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-transform-dynamic-import", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-exponentiation-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-export-namespace-from", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-for-of", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-function-name", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.1"],\ + ["@babel/plugin-transform-json-strings", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.2"],\ + ["@babel/plugin-transform-logical-assignment-operators", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-member-expression-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-modules-amd", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-modules-commonjs", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/plugin-transform-modules-systemjs", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.25.0"],\ + ["@babel/plugin-transform-modules-umd", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-named-capturing-groups-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-new-target", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-nullish-coalescing-operator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-numeric-separator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-object-rest-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-object-super", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-optional-catch-binding", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-optional-chaining", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/plugin-transform-parameters", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-private-methods", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-private-property-in-object", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-property-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-regenerator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-reserved-words", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-shorthand-properties", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-spread", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-sticky-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-template-literals", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-typeof-symbol", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.8"],\ + ["@babel/plugin-transform-unicode-escapes", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-unicode-property-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-unicode-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/plugin-transform-unicode-sets-regex", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:7.24.7"],\ + ["@babel/preset-modules", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.1.6-no-external-plugins"],\ + ["@types/babel__core", null],\ + ["babel-plugin-polyfill-corejs2", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.4.11"],\ + ["babel-plugin-polyfill-corejs3", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.10.4"],\ + ["babel-plugin-polyfill-regenerator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.6.2"],\ + ["core-js-compat", "npm:3.37.1"],\ + ["semver", "npm:6.3.1"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/preset-modules", [\ + ["npm:0.1.6-no-external-plugins", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-preset-modules-npm-0.1.6-no-external-plugins-0ae0b52ff3-10c0.zip/node_modules/@babel/preset-modules/",\ + "packageDependencies": [\ + ["@babel/preset-modules", "npm:0.1.6-no-external-plugins"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.1.6-no-external-plugins", {\ + "packageLocation": "./.yarn/__virtual__/@babel-preset-modules-virtual-b199f62b05/3/.yarn/berry/cache/@babel-preset-modules-npm-0.1.6-no-external-plugins-0ae0b52ff3-10c0.zip/node_modules/@babel/preset-modules/",\ + "packageDependencies": [\ + ["@babel/preset-modules", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.1.6-no-external-plugins"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-plugin-utils", "npm:7.24.8"],\ + ["@babel/types", "npm:7.25.2"],\ + ["@types/babel__core", null],\ + ["esutils", "npm:2.0.3"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/regjsgen", [\ + ["npm:0.8.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-regjsgen-npm-0.8.0-b0fbdbf644-10c0.zip/node_modules/@babel/regjsgen/",\ + "packageDependencies": [\ + ["@babel/regjsgen", "npm:0.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/runtime", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-runtime-npm-7.25.0-a7bca33687-10c0.zip/node_modules/@babel/runtime/",\ + "packageDependencies": [\ + ["@babel/runtime", "npm:7.25.0"],\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/template", [\ + ["npm:7.25.0", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-template-npm-7.25.0-2c6ddcb43a-10c0.zip/node_modules/@babel/template/",\ + "packageDependencies": [\ + ["@babel/template", "npm:7.25.0"],\ + ["@babel/code-frame", "npm:7.24.7"],\ + ["@babel/parser", "npm:7.25.3"],\ + ["@babel/types", "npm:7.25.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/traverse", [\ + ["npm:7.25.3", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-traverse-npm-7.25.3-69c3455e97-10c0.zip/node_modules/@babel/traverse/",\ + "packageDependencies": [\ + ["@babel/traverse", "npm:7.25.3"],\ + ["@babel/code-frame", "npm:7.24.7"],\ + ["@babel/generator", "npm:7.25.0"],\ + ["@babel/parser", "npm:7.25.3"],\ + ["@babel/template", "npm:7.25.0"],\ + ["@babel/types", "npm:7.25.2"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["globals", "npm:11.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/types", [\ + ["npm:7.25.2", {\ + "packageLocation": "../../.yarn/berry/cache/@babel-types-npm-7.25.2-7d3fc0ed1e-10c0.zip/node_modules/@babel/types/",\ + "packageDependencies": [\ + ["@babel/types", "npm:7.25.2"],\ + ["@babel/helper-string-parser", "npm:7.24.8"],\ + ["@babel/helper-validator-identifier", "npm:7.24.7"],\ + ["to-fast-properties", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/aix-ppc64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-aix-ppc64-npm-0.21.5-ebeb42da03/node_modules/@esbuild/aix-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/aix-ppc64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-arm", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.21.5-7e30e7b6d7/node_modules/@esbuild/android-arm/",\ + "packageDependencies": [\ + ["@esbuild/android-arm", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-arm64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.21.5-916e33d43e/node_modules/@esbuild/android-arm64/",\ + "packageDependencies": [\ + ["@esbuild/android-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/android-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.21.5-07abfd6fa9/node_modules/@esbuild/android-x64/",\ + "packageDependencies": [\ + ["@esbuild/android-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/darwin-arm64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.21.5-62349c1520/node_modules/@esbuild/darwin-arm64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/darwin-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.21.5-491c2ae06c/node_modules/@esbuild/darwin-x64/",\ + "packageDependencies": [\ + ["@esbuild/darwin-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/freebsd-arm64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.21.5-2465c8f200/node_modules/@esbuild/freebsd-arm64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/freebsd-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.21.5-f866a2f0cc/node_modules/@esbuild/freebsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/freebsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-arm", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.21.5-9485bcbfc7/node_modules/@esbuild/linux-arm/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-arm64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.21.5-c6a54cd648/node_modules/@esbuild/linux-arm64/",\ + "packageDependencies": [\ + ["@esbuild/linux-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-ia32", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.21.5-499a15b672/node_modules/@esbuild/linux-ia32/",\ + "packageDependencies": [\ + ["@esbuild/linux-ia32", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-loong64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.21.5-b2d213a264/node_modules/@esbuild/linux-loong64/",\ + "packageDependencies": [\ + ["@esbuild/linux-loong64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-mips64el", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.21.5-6534e468c0/node_modules/@esbuild/linux-mips64el/",\ + "packageDependencies": [\ + ["@esbuild/linux-mips64el", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-ppc64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.21.5-38298ce68c/node_modules/@esbuild/linux-ppc64/",\ + "packageDependencies": [\ + ["@esbuild/linux-ppc64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-riscv64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.21.5-73ca00d59e/node_modules/@esbuild/linux-riscv64/",\ + "packageDependencies": [\ + ["@esbuild/linux-riscv64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-s390x", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.21.5-44720430f0/node_modules/@esbuild/linux-s390x/",\ + "packageDependencies": [\ + ["@esbuild/linux-s390x", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/linux-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.21.5-88079726c4/node_modules/@esbuild/linux-x64/",\ + "packageDependencies": [\ + ["@esbuild/linux-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/netbsd-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.21.5-5f21539ffa/node_modules/@esbuild/netbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/netbsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/openbsd-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.21.5-23fbf4de2b/node_modules/@esbuild/openbsd-x64/",\ + "packageDependencies": [\ + ["@esbuild/openbsd-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/sunos-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.21.5-855a15205a/node_modules/@esbuild/sunos-x64/",\ + "packageDependencies": [\ + ["@esbuild/sunos-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-arm64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.21.5-d0ef444aab/node_modules/@esbuild/win32-arm64/",\ + "packageDependencies": [\ + ["@esbuild/win32-arm64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-ia32", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.21.5-a4fb03dad4/node_modules/@esbuild/win32-ia32/",\ + "packageDependencies": [\ + ["@esbuild/win32-ia32", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@esbuild/win32-x64", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.21.5-eddc2b5ad6/node_modules/@esbuild/win32-x64/",\ + "packageDependencies": [\ + ["@esbuild/win32-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint-community/eslint-utils", [\ + ["npm:4.4.0", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "npm:4.4.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:e0df5c5fa7cdbff2fc37004d10f570b049536244f914c47250b0103595a431c716501b68a888e871f7777ce7ce6d09b1d817f35f5c115639121d564f8a799aac#npm:4.4.0", {\ + "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-70bb646cfa/3/.yarn/berry/cache/@eslint-community-eslint-utils-npm-4.4.0-d1791bd5a3-10c0.zip/node_modules/@eslint-community/eslint-utils/",\ + "packageDependencies": [\ + ["@eslint-community/eslint-utils", "virtual:e0df5c5fa7cdbff2fc37004d10f570b049536244f914c47250b0103595a431c716501b68a888e871f7777ce7ce6d09b1d817f35f5c115639121d564f8a799aac#npm:4.4.0"],\ + ["@types/eslint", null],\ + ["eslint", "npm:9.8.0"],\ + ["eslint-visitor-keys", "npm:3.4.3"]\ + ],\ + "packagePeers": [\ + "@types/eslint",\ + "eslint"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint-community/regexpp", [\ + ["npm:4.11.0", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-community-regexpp-npm-4.11.0-dd7ae18a6d-10c0.zip/node_modules/@eslint-community/regexpp/",\ + "packageDependencies": [\ + ["@eslint-community/regexpp", "npm:4.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/config-array", [\ + ["npm:0.17.1", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-config-array-npm-0.17.1-a6cb4d2ce2-10c0.zip/node_modules/@eslint/config-array/",\ + "packageDependencies": [\ + ["@eslint/config-array", "npm:0.17.1"],\ + ["@eslint/object-schema", "npm:2.1.4"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["minimatch", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/eslintrc", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-eslintrc-npm-3.1.0-3837a202e2-10c0.zip/node_modules/@eslint/eslintrc/",\ + "packageDependencies": [\ + ["@eslint/eslintrc", "npm:3.1.0"],\ + ["ajv", "npm:6.12.6"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["espree", "npm:10.1.0"],\ + ["globals", "npm:14.0.0"],\ + ["ignore", "npm:5.3.1"],\ + ["import-fresh", "npm:3.3.0"],\ + ["js-yaml", "npm:4.1.0"],\ + ["minimatch", "npm:3.1.2"],\ + ["strip-json-comments", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/js", [\ + ["npm:9.8.0", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-js-npm-9.8.0-3434a17242-10c0.zip/node_modules/@eslint/js/",\ + "packageDependencies": [\ + ["@eslint/js", "npm:9.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@eslint/object-schema", [\ + ["npm:2.1.4", {\ + "packageLocation": "../../.yarn/berry/cache/@eslint-object-schema-npm-2.1.4-0546250476-10c0.zip/node_modules/@eslint/object-schema/",\ + "packageDependencies": [\ + ["@eslint/object-schema", "npm:2.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/abi", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-abi-npm-5.7.0-fdd80304df-10c0.zip/node_modules/@ethersproject/abi/",\ + "packageDependencies": [\ + ["@ethersproject/abi", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/abstract-provider", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-abstract-provider-npm-5.7.0-f94be4e0b0-10c0.zip/node_modules/@ethersproject/abstract-provider/",\ + "packageDependencies": [\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/networks", "npm:5.7.1"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/web", "npm:5.7.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/abstract-signer", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-abstract-signer-npm-5.7.0-f61d0a970e-10c0.zip/node_modules/@ethersproject/abstract-signer/",\ + "packageDependencies": [\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/address", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-address-npm-5.7.0-d27f4f2b80-10c0.zip/node_modules/@ethersproject/address/",\ + "packageDependencies": [\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/rlp", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/base64", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-base64-npm-5.7.0-ddf99521e0-10c0.zip/node_modules/@ethersproject/base64/",\ + "packageDependencies": [\ + ["@ethersproject/base64", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/basex", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-basex-npm-5.7.0-78ae312582-10c0.zip/node_modules/@ethersproject/basex/",\ + "packageDependencies": [\ + ["@ethersproject/basex", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/bignumber", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-bignumber-npm-5.7.0-cd761880ac-10c0.zip/node_modules/@ethersproject/bignumber/",\ + "packageDependencies": [\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["bn.js", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/bytes", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-bytes-npm-5.7.0-4454fe4cb0-10c0.zip/node_modules/@ethersproject/bytes/",\ + "packageDependencies": [\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/constants", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-constants-npm-5.7.0-24294ccfde-10c0.zip/node_modules/@ethersproject/constants/",\ + "packageDependencies": [\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/contracts", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-contracts-npm-5.7.0-4d3730222f-10c0.zip/node_modules/@ethersproject/contracts/",\ + "packageDependencies": [\ + ["@ethersproject/contracts", "npm:5.7.0"],\ + ["@ethersproject/abi", "npm:5.7.0"],\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/hash", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-hash-npm-5.7.0-7c00366b4e-10c0.zip/node_modules/@ethersproject/hash/",\ + "packageDependencies": [\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/base64", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/hdnode", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-hdnode-npm-5.7.0-c6d5c6aa1c-10c0.zip/node_modules/@ethersproject/hdnode/",\ + "packageDependencies": [\ + ["@ethersproject/hdnode", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/basex", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/pbkdf2", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/sha2", "npm:5.7.0"],\ + ["@ethersproject/signing-key", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/wordlists", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/json-wallets", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-json-wallets-npm-5.7.0-f73c4734e5-10c0.zip/node_modules/@ethersproject/json-wallets/",\ + "packageDependencies": [\ + ["@ethersproject/json-wallets", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/hdnode", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/pbkdf2", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/random", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["aes-js", "npm:3.0.0"],\ + ["scrypt-js", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/keccak256", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-keccak256-npm-5.7.0-be838547c4-10c0.zip/node_modules/@ethersproject/keccak256/",\ + "packageDependencies": [\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["js-sha3", "npm:0.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/logger", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-logger-npm-5.7.0-63fe9c3d29-10c0.zip/node_modules/@ethersproject/logger/",\ + "packageDependencies": [\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/networks", [\ + ["npm:5.7.1", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-networks-npm-5.7.1-eb06956095-10c0.zip/node_modules/@ethersproject/networks/",\ + "packageDependencies": [\ + ["@ethersproject/networks", "npm:5.7.1"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/pbkdf2", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-pbkdf2-npm-5.7.0-5b8e51d4b9-10c0.zip/node_modules/@ethersproject/pbkdf2/",\ + "packageDependencies": [\ + ["@ethersproject/pbkdf2", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/sha2", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/properties", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-properties-npm-5.7.0-00a99c747b-10c0.zip/node_modules/@ethersproject/properties/",\ + "packageDependencies": [\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/providers", [\ + ["npm:5.7.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-providers-npm-5.7.2-88293ff29f-10c0.zip/node_modules/@ethersproject/providers/",\ + "packageDependencies": [\ + ["@ethersproject/providers", "npm:5.7.2"],\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/base64", "npm:5.7.0"],\ + ["@ethersproject/basex", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/networks", "npm:5.7.1"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/random", "npm:5.7.0"],\ + ["@ethersproject/rlp", "npm:5.7.0"],\ + ["@ethersproject/sha2", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/web", "npm:5.7.1"],\ + ["bech32", "npm:1.1.4"],\ + ["ws", "virtual:88293ff29fa54efecc98d655f7a7551b282025b3465bc23ca5bb7a89a31c17930a7319e98225cf138bf4e6ccead5b30ae3c800738697b87af3441226d65f7ee3#npm:7.4.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/random", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-random-npm-5.7.0-a0466f53f9-10c0.zip/node_modules/@ethersproject/random/",\ + "packageDependencies": [\ + ["@ethersproject/random", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/rlp", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-rlp-npm-5.7.0-a6c9e763ff-10c0.zip/node_modules/@ethersproject/rlp/",\ + "packageDependencies": [\ + ["@ethersproject/rlp", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/sha2", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-sha2-npm-5.7.0-569c8bdff0-10c0.zip/node_modules/@ethersproject/sha2/",\ + "packageDependencies": [\ + ["@ethersproject/sha2", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["hash.js", "npm:1.1.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/signing-key", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-signing-key-npm-5.7.0-51cfa7708e-10c0.zip/node_modules/@ethersproject/signing-key/",\ + "packageDependencies": [\ + ["@ethersproject/signing-key", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["bn.js", "npm:5.2.1"],\ + ["elliptic", "npm:6.5.4"],\ + ["hash.js", "npm:1.1.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/solidity", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-solidity-npm-5.7.0-75baa4e133-10c0.zip/node_modules/@ethersproject/solidity/",\ + "packageDependencies": [\ + ["@ethersproject/solidity", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/sha2", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/strings", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-strings-npm-5.7.0-efcb671e56-10c0.zip/node_modules/@ethersproject/strings/",\ + "packageDependencies": [\ + ["@ethersproject/strings", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/transactions", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-transactions-npm-5.7.0-9a32c9e61a-10c0.zip/node_modules/@ethersproject/transactions/",\ + "packageDependencies": [\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/rlp", "npm:5.7.0"],\ + ["@ethersproject/signing-key", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/units", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-units-npm-5.7.0-1c1f5ec7ca-10c0.zip/node_modules/@ethersproject/units/",\ + "packageDependencies": [\ + ["@ethersproject/units", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/wallet", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-wallet-npm-5.7.0-f553c726b7-10c0.zip/node_modules/@ethersproject/wallet/",\ + "packageDependencies": [\ + ["@ethersproject/wallet", "npm:5.7.0"],\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/hdnode", "npm:5.7.0"],\ + ["@ethersproject/json-wallets", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/random", "npm:5.7.0"],\ + ["@ethersproject/signing-key", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/wordlists", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/web", [\ + ["npm:5.7.1", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-web-npm-5.7.1-dabb653410-10c0.zip/node_modules/@ethersproject/web/",\ + "packageDependencies": [\ + ["@ethersproject/web", "npm:5.7.1"],\ + ["@ethersproject/base64", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ethersproject/wordlists", [\ + ["npm:5.7.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ethersproject-wordlists-npm-5.7.0-00d314bfdb-10c0.zip/node_modules/@ethersproject/wordlists/",\ + "packageDependencies": [\ + ["@ethersproject/wordlists", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanwhocodes/module-importer", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/@humanwhocodes-module-importer-npm-1.0.1-9d07ed2e4a-10c0.zip/node_modules/@humanwhocodes/module-importer/",\ + "packageDependencies": [\ + ["@humanwhocodes/module-importer", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@humanwhocodes/retry", [\ + ["npm:0.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/@humanwhocodes-retry-npm-0.3.0-fd8faa0baa-10c0.zip/node_modules/@humanwhocodes/retry/",\ + "packageDependencies": [\ + ["@humanwhocodes/retry", "npm:0.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/cliui", [\ + ["npm:8.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-10c0.zip/node_modules/@isaacs/cliui/",\ + "packageDependencies": [\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["string-width", "npm:5.1.2"],\ + ["string-width-cjs", [\ + "string-width",\ + "npm:4.2.3"\ + ]],\ + ["strip-ansi", "npm:7.1.0"],\ + ["strip-ansi-cjs", [\ + "strip-ansi",\ + "npm:6.0.1"\ + ]],\ + ["wrap-ansi", "npm:8.1.0"],\ + ["wrap-ansi-cjs", [\ + "wrap-ansi",\ + "npm:7.0.0"\ + ]]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/gen-mapping", [\ + ["npm:0.3.5", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-gen-mapping-npm-0.3.5-d8b85ebeaf-10c0.zip/node_modules/@jridgewell/gen-mapping/",\ + "packageDependencies": [\ + ["@jridgewell/gen-mapping", "npm:0.3.5"],\ + ["@jridgewell/set-array", "npm:1.2.1"],\ + ["@jridgewell/sourcemap-codec", "npm:1.5.0"],\ + ["@jridgewell/trace-mapping", "npm:0.3.25"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/resolve-uri", [\ + ["npm:3.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-resolve-uri-npm-3.1.2-5bc4245992-10c0.zip/node_modules/@jridgewell/resolve-uri/",\ + "packageDependencies": [\ + ["@jridgewell/resolve-uri", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/set-array", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-set-array-npm-1.2.1-2312928209-10c0.zip/node_modules/@jridgewell/set-array/",\ + "packageDependencies": [\ + ["@jridgewell/set-array", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/source-map", [\ + ["npm:0.3.6", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-source-map-npm-0.3.6-fe0849eb05-10c0.zip/node_modules/@jridgewell/source-map/",\ + "packageDependencies": [\ + ["@jridgewell/source-map", "npm:0.3.6"],\ + ["@jridgewell/gen-mapping", "npm:0.3.5"],\ + ["@jridgewell/trace-mapping", "npm:0.3.25"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/sourcemap-codec", [\ + ["npm:1.5.0", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-sourcemap-codec-npm-1.5.0-dfd9126d71-10c0.zip/node_modules/@jridgewell/sourcemap-codec/",\ + "packageDependencies": [\ + ["@jridgewell/sourcemap-codec", "npm:1.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@jridgewell/trace-mapping", [\ + ["npm:0.3.25", {\ + "packageLocation": "../../.yarn/berry/cache/@jridgewell-trace-mapping-npm-0.3.25-c076fd2279-10c0.zip/node_modules/@jridgewell/trace-mapping/",\ + "packageDependencies": [\ + ["@jridgewell/trace-mapping", "npm:0.3.25"],\ + ["@jridgewell/resolve-uri", "npm:3.1.2"],\ + ["@jridgewell/sourcemap-codec", "npm:1.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/cryptoassets", [\ + ["npm:13.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-cryptoassets-npm-13.2.0-acdf66c7c8-10c0.zip/node_modules/@ledgerhq/cryptoassets/",\ + "packageDependencies": [\ + ["@ledgerhq/cryptoassets", "npm:13.2.0"],\ + ["axios", "npm:1.7.3"],\ + ["bs58check", "npm:2.1.2"],\ + ["invariant", "npm:2.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/devices", [\ + ["npm:8.4.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-devices-npm-8.4.2-ce3452518b-10c0.zip/node_modules/@ledgerhq/devices/",\ + "packageDependencies": [\ + ["@ledgerhq/devices", "npm:8.4.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["rxjs", "npm:7.8.1"],\ + ["semver", "npm:7.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/domain-service", [\ + ["npm:1.2.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-domain-service-npm-1.2.2-a35456aa28-10c0.zip/node_modules/@ledgerhq/domain-service/",\ + "packageDependencies": [\ + ["@ledgerhq/domain-service", "npm:1.2.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["@ledgerhq/types-live", "npm:6.49.0"],\ + ["axios", "npm:1.7.3"],\ + ["eip55", "npm:2.1.1"],\ + ["react", "npm:18.3.1"],\ + ["react-dom", "virtual:a35456aa28e2090787d057b5a7413779c6570b9118d1a2c8b7708154ae579e1358d377abd1aac323cdaaed60daffd283c38d034b47aeff8fee431f3b753506d5#npm:18.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/errors", [\ + ["npm:6.18.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-errors-npm-6.18.0-af213108f1-10c0.zip/node_modules/@ledgerhq/errors/",\ + "packageDependencies": [\ + ["@ledgerhq/errors", "npm:6.18.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/evm-tools", [\ + ["npm:1.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-evm-tools-npm-1.1.2-f968045a9b-10c0.zip/node_modules/@ledgerhq/evm-tools/",\ + "packageDependencies": [\ + ["@ledgerhq/evm-tools", "npm:1.1.2"],\ + ["@ledgerhq/cryptoassets", "npm:13.2.0"],\ + ["@ledgerhq/live-env", "npm:2.1.0"],\ + ["axios", "npm:1.7.3"],\ + ["crypto-js", "npm:4.2.0"],\ + ["ethers", "npm:5.7.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-app-eth", [\ + ["npm:6.37.3", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-app-eth-npm-6.37.3-56840a3edf-10c0.zip/node_modules/@ledgerhq/hw-app-eth/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-app-eth", "npm:6.37.3"],\ + ["@ethersproject/abi", "npm:5.7.0"],\ + ["@ethersproject/rlp", "npm:5.7.0"],\ + ["@ledgerhq/cryptoassets", "npm:13.2.0"],\ + ["@ledgerhq/domain-service", "npm:1.2.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/evm-tools", "npm:1.1.2"],\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/hw-transport-mocker", "npm:6.29.2"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["@ledgerhq/types-live", "npm:6.49.0"],\ + ["axios", "npm:1.7.3"],\ + ["bignumber.js", "npm:9.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-transport", [\ + ["npm:6.31.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-transport-npm-6.31.2-6fee697264-10c0.zip/node_modules/@ledgerhq/hw-transport/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/devices", "npm:8.4.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["events", "npm:3.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-transport-http", [\ + ["npm:6.30.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-transport-http-npm-6.30.2-12fb8ec36f-10c0.zip/node_modules/@ledgerhq/hw-transport-http/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-transport-http", "npm:6.30.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["axios", "npm:0.26.1"],\ + ["ws", "virtual:12fb8ec36f722e0769f1722c51fa8bc6ad2ed4e7b66e457888da8ccd11ed2cc7b2c22ebb0231589851e269aeac627113460306356ebb3249cfe1f409bd837edf#npm:7.5.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-transport-mocker", [\ + ["npm:6.29.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-transport-mocker-npm-6.29.2-f21deec732-10c0.zip/node_modules/@ledgerhq/hw-transport-mocker/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-transport-mocker", "npm:6.29.2"],\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/logs", "npm:6.12.0"],\ + ["rxjs", "npm:7.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-transport-webhid", [\ + ["npm:6.29.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-transport-webhid-npm-6.29.2-5beb5040e7-10c0.zip/node_modules/@ledgerhq/hw-transport-webhid/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-transport-webhid", "npm:6.29.2"],\ + ["@ledgerhq/devices", "npm:8.4.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/logs", "npm:6.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/hw-transport-webusb", [\ + ["npm:6.29.2", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-hw-transport-webusb-npm-6.29.2-e7b1c108dd-10c0.zip/node_modules/@ledgerhq/hw-transport-webusb/",\ + "packageDependencies": [\ + ["@ledgerhq/hw-transport-webusb", "npm:6.29.2"],\ + ["@ledgerhq/devices", "npm:8.4.2"],\ + ["@ledgerhq/errors", "npm:6.18.0"],\ + ["@ledgerhq/hw-transport", "npm:6.31.2"],\ + ["@ledgerhq/logs", "npm:6.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/live-env", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-live-env-npm-2.1.0-9cb98fe7e0-10c0.zip/node_modules/@ledgerhq/live-env/",\ + "packageDependencies": [\ + ["@ledgerhq/live-env", "npm:2.1.0"],\ + ["rxjs", "npm:7.8.1"],\ + ["utility-types", "npm:3.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/logs", [\ + ["npm:6.12.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-logs-npm-6.12.0-0d4b827e38-10c0.zip/node_modules/@ledgerhq/logs/",\ + "packageDependencies": [\ + ["@ledgerhq/logs", "npm:6.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ledgerhq/types-live", [\ + ["npm:6.49.0", {\ + "packageLocation": "../../.yarn/berry/cache/@ledgerhq-types-live-npm-6.49.0-5fe6220ae4-10c0.zip/node_modules/@ledgerhq/types-live/",\ + "packageDependencies": [\ + ["@ledgerhq/types-live", "npm:6.49.0"],\ + ["bignumber.js", "npm:9.1.2"],\ + ["rxjs", "npm:7.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.scandir", [\ + ["npm:2.1.5", {\ + "packageLocation": "../../.yarn/berry/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-10c0.zip/node_modules/@nodelib/fs.scandir/",\ + "packageDependencies": [\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["@nodelib/fs.stat", "npm:2.0.5"],\ + ["run-parallel", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.stat", [\ + ["npm:2.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-10c0.zip/node_modules/@nodelib/fs.stat/",\ + "packageDependencies": [\ + ["@nodelib/fs.stat", "npm:2.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.walk", [\ + ["npm:1.2.8", {\ + "packageLocation": "../../.yarn/berry/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-10c0.zip/node_modules/@nodelib/fs.walk/",\ + "packageDependencies": [\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["fastq", "npm:1.17.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@npmcli/agent", [\ + ["npm:2.2.2", {\ + "packageLocation": "../../.yarn/berry/cache/@npmcli-agent-npm-2.2.2-e2f559d6c0-10c0.zip/node_modules/@npmcli/agent/",\ + "packageDependencies": [\ + ["@npmcli/agent", "npm:2.2.2"],\ + ["agent-base", "npm:7.1.1"],\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["https-proxy-agent", "npm:7.0.5"],\ + ["lru-cache", "npm:10.4.3"],\ + ["socks-proxy-agent", "npm:8.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@npmcli/fs", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/@npmcli-fs-npm-3.1.1-c19bd09f3c-10c0.zip/node_modules/@npmcli/fs/",\ + "packageDependencies": [\ + ["@npmcli/fs", "npm:3.1.1"],\ + ["semver", "npm:7.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pkgjs/parseargs", [\ + ["npm:0.11.0", {\ + "packageLocation": "../../.yarn/berry/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-10c0.zip/node_modules/@pkgjs/parseargs/",\ + "packageDependencies": [\ + ["@pkgjs/parseargs", "npm:0.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-android-arm-eabi", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm-eabi-npm-4.19.2-ea458c063b/node_modules/@rollup/rollup-android-arm-eabi/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm-eabi", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-android-arm64", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-android-arm64-npm-4.19.2-814b8e50e7/node_modules/@rollup/rollup-android-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-android-arm64", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-darwin-arm64", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-arm64-npm-4.19.2-a51d1a9f89/node_modules/@rollup/rollup-darwin-arm64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-arm64", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-darwin-x64", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-darwin-x64-npm-4.19.2-3836c6c1a5/node_modules/@rollup/rollup-darwin-x64/",\ + "packageDependencies": [\ + ["@rollup/rollup-darwin-x64", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm-gnueabihf", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-gnueabihf-npm-4.19.2-6336ab68c6/node_modules/@rollup/rollup-linux-arm-gnueabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm-musleabihf", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm-musleabihf-npm-4.19.2-b07b0b48ab/node_modules/@rollup/rollup-linux-arm-musleabihf/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm64-gnu", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-gnu-npm-4.19.2-c54d4b6455/node_modules/@rollup/rollup-linux-arm64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-arm64-musl", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-arm64-musl-npm-4.19.2-56d7183c7d/node_modules/@rollup/rollup-linux-arm64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-powerpc64le-gnu", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-powerpc64le-gnu-npm-4.19.2-033a4b82a1/node_modules/@rollup/rollup-linux-powerpc64le-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-powerpc64le-gnu", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-riscv64-gnu", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-riscv64-gnu-npm-4.19.2-dc19781d4f/node_modules/@rollup/rollup-linux-riscv64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-s390x-gnu", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-s390x-gnu-npm-4.19.2-673eddf597/node_modules/@rollup/rollup-linux-s390x-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-x64-gnu", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-gnu-npm-4.19.2-cefaf08f1e/node_modules/@rollup/rollup-linux-x64-gnu/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-linux-x64-musl", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-linux-x64-musl-npm-4.19.2-c76be76bcb/node_modules/@rollup/rollup-linux-x64-musl/",\ + "packageDependencies": [\ + ["@rollup/rollup-linux-x64-musl", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-arm64-msvc", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-arm64-msvc-npm-4.19.2-8a6f0d6392/node_modules/@rollup/rollup-win32-arm64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-ia32-msvc", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-ia32-msvc-npm-4.19.2-715f81863d/node_modules/@rollup/rollup-win32-ia32-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rollup/rollup-win32-x64-msvc", [\ + ["npm:4.19.2", {\ + "packageLocation": "./.yarn/unplugged/@rollup-rollup-win32-x64-msvc-npm-4.19.2-7f27132d2b/node_modules/@rollup/rollup-win32-x64-msvc/",\ + "packageDependencies": [\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.19.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/estree", [\ + ["npm:1.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/@types-estree-npm-1.0.5-5b7faed3b4-10c0.zip/node_modules/@types/estree/",\ + "packageDependencies": [\ + ["@types/estree", "npm:1.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@vitejs/plugin-legacy", [\ + ["npm:5.4.1", {\ + "packageLocation": "../../.yarn/berry/cache/@vitejs-plugin-legacy-npm-5.4.1-1767f78b5e-10c0.zip/node_modules/@vitejs/plugin-legacy/",\ + "packageDependencies": [\ + ["@vitejs/plugin-legacy", "npm:5.4.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.4.1", {\ + "packageLocation": "./.yarn/__virtual__/@vitejs-plugin-legacy-virtual-759fd9dc51/3/.yarn/berry/cache/@vitejs-plugin-legacy-npm-5.4.1-1767f78b5e-10c0.zip/node_modules/@vitejs/plugin-legacy/",\ + "packageDependencies": [\ + ["@vitejs/plugin-legacy", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.4.1"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/preset-env", "virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:7.25.3"],\ + ["@types/terser", null],\ + ["@types/vite", null],\ + ["browserslist", "npm:4.23.3"],\ + ["browserslist-to-esbuild", "virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:2.1.1"],\ + ["core-js", "npm:3.37.1"],\ + ["magic-string", "npm:0.30.11"],\ + ["regenerator-runtime", "npm:0.14.1"],\ + ["systemjs", "npm:6.15.1"],\ + ["terser", "npm:5.31.3"],\ + ["vite", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.3.5"]\ + ],\ + "packagePeers": [\ + "@types/terser",\ + "@types/vite",\ + "terser",\ + "vite"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["abbrev", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/abbrev-npm-2.0.0-0eb38a17e5-10c0.zip/node_modules/abbrev/",\ + "packageDependencies": [\ + ["abbrev", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["acorn", [\ + ["npm:8.12.1", {\ + "packageLocation": "../../.yarn/berry/cache/acorn-npm-8.12.1-610871d57c-10c0.zip/node_modules/acorn/",\ + "packageDependencies": [\ + ["acorn", "npm:8.12.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["acorn-jsx", [\ + ["npm:5.3.2", {\ + "packageLocation": "../../.yarn/berry/cache/acorn-jsx-npm-5.3.2-d7594599ea-10c0.zip/node_modules/acorn-jsx/",\ + "packageDependencies": [\ + ["acorn-jsx", "npm:5.3.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6847541ce4a3dcf7a9a6a3e4dde955afca0e2dd6c48216b83d71222ffd93cf79a6473d48f3e37dabb82467ce0f37e8b8b4a49925ee47dda6e8922eae0b01ab6f#npm:5.3.2", {\ + "packageLocation": "./.yarn/__virtual__/acorn-jsx-virtual-316726bcca/3/.yarn/berry/cache/acorn-jsx-npm-5.3.2-d7594599ea-10c0.zip/node_modules/acorn-jsx/",\ + "packageDependencies": [\ + ["acorn-jsx", "virtual:6847541ce4a3dcf7a9a6a3e4dde955afca0e2dd6c48216b83d71222ffd93cf79a6473d48f3e37dabb82467ce0f37e8b8b4a49925ee47dda6e8922eae0b01ab6f#npm:5.3.2"],\ + ["@types/acorn", null],\ + ["acorn", "npm:8.12.1"]\ + ],\ + "packagePeers": [\ + "@types/acorn",\ + "acorn"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["aes-js", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/aes-js-npm-3.0.0-fdf135c6be-10c0.zip/node_modules/aes-js/",\ + "packageDependencies": [\ + ["aes-js", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["agent-base", [\ + ["npm:7.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/agent-base-npm-7.1.1-c9e1a4b59e-10c0.zip/node_modules/agent-base/",\ + "packageDependencies": [\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["aggregate-error", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/aggregate-error-npm-3.1.0-415a406f4e-10c0.zip/node_modules/aggregate-error/",\ + "packageDependencies": [\ + ["aggregate-error", "npm:3.1.0"],\ + ["clean-stack", "npm:2.2.0"],\ + ["indent-string", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ajv", [\ + ["npm:6.12.6", {\ + "packageLocation": "../../.yarn/berry/cache/ajv-npm-6.12.6-4b5105e2b2-10c0.zip/node_modules/ajv/",\ + "packageDependencies": [\ + ["ajv", "npm:6.12.6"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["fast-json-stable-stringify", "npm:2.1.0"],\ + ["json-schema-traverse", "npm:0.4.1"],\ + ["uri-js", "npm:4.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-regex", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/ansi-regex-npm-5.0.1-c963a48615-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/ansi-regex-npm-6.0.1-8d663a607d-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-styles", [\ + ["npm:3.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/ansi-styles-npm-3.2.1-8cb8107983-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:3.2.1"],\ + ["color-convert", "npm:1.9.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/ansi-styles-npm-4.3.0-245c7d42c7-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["color-convert", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/ansi-styles-npm-6.2.1-d43647018c-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["argparse", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/argparse-npm-2.0.1-faff7999e6-10c0.zip/node_modules/argparse/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["asynckit", [\ + ["npm:0.4.0", {\ + "packageLocation": "../../.yarn/berry/cache/asynckit-npm-0.4.0-c718858525-10c0.zip/node_modules/asynckit/",\ + "packageDependencies": [\ + ["asynckit", "npm:0.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["axios", [\ + ["npm:0.26.1", {\ + "packageLocation": "../../.yarn/berry/cache/axios-npm-0.26.1-a6641ce4e3-10c0.zip/node_modules/axios/",\ + "packageDependencies": [\ + ["axios", "npm:0.26.1"],\ + ["follow-redirects", "virtual:a63743a5822c3f4f0080debf0a45615212b5bd005b763a14221b5559794a4eab59edf521118fa1c78a2444ffb22b1d205323e984eccd051abda1334fb302f130#npm:1.15.6"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.7.3", {\ + "packageLocation": "../../.yarn/berry/cache/axios-npm-1.7.3-a63743a582-10c0.zip/node_modules/axios/",\ + "packageDependencies": [\ + ["axios", "npm:1.7.3"],\ + ["follow-redirects", "virtual:a63743a5822c3f4f0080debf0a45615212b5bd005b763a14221b5559794a4eab59edf521118fa1c78a2444ffb22b1d205323e984eccd051abda1334fb302f130#npm:1.15.6"],\ + ["form-data", "npm:4.0.0"],\ + ["proxy-from-env", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["babel-plugin-polyfill-corejs2", [\ + ["npm:0.4.11", {\ + "packageLocation": "../../.yarn/berry/cache/babel-plugin-polyfill-corejs2-npm-0.4.11-77e1239277-10c0.zip/node_modules/babel-plugin-polyfill-corejs2/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-corejs2", "npm:0.4.11"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.4.11", {\ + "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-corejs2-virtual-9390dd358b/3/.yarn/berry/cache/babel-plugin-polyfill-corejs2-npm-0.4.11-77e1239277-10c0.zip/node_modules/babel-plugin-polyfill-corejs2/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-corejs2", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.4.11"],\ + ["@babel/compat-data", "npm:7.25.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-define-polyfill-provider", "virtual:9390dd358b4a3531c0d14de3971bcc77ea79dce622c7a488d1d8e74f3f3053742f8b412438ea078e607b9937775f6c1af3bcfa4a7e4f67e065ba5cfe8ef1bea7#npm:0.6.2"],\ + ["@types/babel__core", null],\ + ["semver", "npm:6.3.1"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["babel-plugin-polyfill-corejs3", [\ + ["npm:0.10.4", {\ + "packageLocation": "../../.yarn/berry/cache/babel-plugin-polyfill-corejs3-npm-0.10.4-f40fa174d8-10c0.zip/node_modules/babel-plugin-polyfill-corejs3/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-corejs3", "npm:0.10.4"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.10.4", {\ + "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-corejs3-virtual-0c32bd565d/3/.yarn/berry/cache/babel-plugin-polyfill-corejs3-npm-0.10.4-f40fa174d8-10c0.zip/node_modules/babel-plugin-polyfill-corejs3/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-corejs3", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.10.4"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-define-polyfill-provider", "virtual:9390dd358b4a3531c0d14de3971bcc77ea79dce622c7a488d1d8e74f3f3053742f8b412438ea078e607b9937775f6c1af3bcfa4a7e4f67e065ba5cfe8ef1bea7#npm:0.6.2"],\ + ["@types/babel__core", null],\ + ["core-js-compat", "npm:3.37.1"]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["babel-plugin-polyfill-regenerator", [\ + ["npm:0.6.2", {\ + "packageLocation": "../../.yarn/berry/cache/babel-plugin-polyfill-regenerator-npm-0.6.2-c6dd64788f-10c0.zip/node_modules/babel-plugin-polyfill-regenerator/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-regenerator", "npm:0.6.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.6.2", {\ + "packageLocation": "./.yarn/__virtual__/babel-plugin-polyfill-regenerator-virtual-9408b5f332/3/.yarn/berry/cache/babel-plugin-polyfill-regenerator-npm-0.6.2-c6dd64788f-10c0.zip/node_modules/babel-plugin-polyfill-regenerator/",\ + "packageDependencies": [\ + ["babel-plugin-polyfill-regenerator", "virtual:2853025c8871695fa6f2181e9a28ef74d4323e7d4b20798be68666e4c716916d9d18500059fc716d106bb2d7f7f3df8fe965681aab8b59c82ec1cb3bfc708c56#npm:0.6.2"],\ + ["@babel/core", "npm:7.25.2"],\ + ["@babel/helper-define-polyfill-provider", "virtual:9390dd358b4a3531c0d14de3971bcc77ea79dce622c7a488d1d8e74f3f3053742f8b412438ea078e607b9937775f6c1af3bcfa4a7e4f67e065ba5cfe8ef1bea7#npm:0.6.2"],\ + ["@types/babel__core", null]\ + ],\ + "packagePeers": [\ + "@babel/core",\ + "@types/babel__core"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["balanced-match", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/balanced-match-npm-1.0.2-a53c126459-10c0.zip/node_modules/balanced-match/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["base-x", [\ + ["npm:3.0.10", {\ + "packageLocation": "../../.yarn/berry/cache/base-x-npm-3.0.10-2d05c06792-10c0.zip/node_modules/base-x/",\ + "packageDependencies": [\ + ["base-x", "npm:3.0.10"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["base64-js", [\ + ["npm:1.5.1", {\ + "packageLocation": "../../.yarn/berry/cache/base64-js-npm-1.5.1-b2f7275641-10c0.zip/node_modules/base64-js/",\ + "packageDependencies": [\ + ["base64-js", "npm:1.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bech32", [\ + ["npm:1.1.4", {\ + "packageLocation": "../../.yarn/berry/cache/bech32-npm-1.1.4-87b69922f7-10c0.zip/node_modules/bech32/",\ + "packageDependencies": [\ + ["bech32", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bignumber.js", [\ + ["npm:9.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/bignumber.js-npm-9.1.2-c2228c6a4a-10c0.zip/node_modules/bignumber.js/",\ + "packageDependencies": [\ + ["bignumber.js", "npm:9.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bn.js", [\ + ["npm:4.12.0", {\ + "packageLocation": "../../.yarn/berry/cache/bn.js-npm-4.12.0-3ec6c884f6-10c0.zip/node_modules/bn.js/",\ + "packageDependencies": [\ + ["bn.js", "npm:4.12.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/bn.js-npm-5.2.1-dc952b1965-10c0.zip/node_modules/bn.js/",\ + "packageDependencies": [\ + ["bn.js", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["brace-expansion", [\ + ["npm:1.1.11", {\ + "packageLocation": "../../.yarn/berry/cache/brace-expansion-npm-1.1.11-fb95eb05ad-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:1.1.11"],\ + ["balanced-match", "npm:1.0.2"],\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/brace-expansion-npm-2.0.1-17aa2616f9-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:2.0.1"],\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["brorand", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/brorand-npm-1.1.0-ea86634c4b-10c0.zip/node_modules/brorand/",\ + "packageDependencies": [\ + ["brorand", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["browserslist", [\ + ["npm:4.23.3", {\ + "packageLocation": "../../.yarn/berry/cache/browserslist-npm-4.23.3-4e727c7b5b-10c0.zip/node_modules/browserslist/",\ + "packageDependencies": [\ + ["browserslist", "npm:4.23.3"],\ + ["caniuse-lite", "npm:1.0.30001646"],\ + ["electron-to-chromium", "npm:1.5.4"],\ + ["node-releases", "npm:2.0.18"],\ + ["update-browserslist-db", "virtual:4e727c7b5b033f8d5ac7299f9860cb61f5802656f7b4fea2accd32d68dc1a767387a6d23f0724065d3c65e61cb31b9eec2438ae937ce36e7602b4586ede55af6#npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["browserslist-to-esbuild", [\ + ["npm:2.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/browserslist-to-esbuild-npm-2.1.1-bad2681152-10c0.zip/node_modules/browserslist-to-esbuild/",\ + "packageDependencies": [\ + ["browserslist-to-esbuild", "npm:2.1.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:2.1.1", {\ + "packageLocation": "./.yarn/__virtual__/browserslist-to-esbuild-virtual-b1a1b282bb/3/.yarn/berry/cache/browserslist-to-esbuild-npm-2.1.1-bad2681152-10c0.zip/node_modules/browserslist-to-esbuild/",\ + "packageDependencies": [\ + ["browserslist-to-esbuild", "virtual:759fd9dc51d75d33f3ce3bfa5c3fe7a6314ed35750ffd47aa2ad11abd856181cc7ac37f680b8850f9f49daf440f9476d5e8937c978ad338498a83751830c343b#npm:2.1.1"],\ + ["@types/browserslist", null],\ + ["browserslist", "npm:4.23.3"],\ + ["meow", "npm:13.2.0"]\ + ],\ + "packagePeers": [\ + "@types/browserslist",\ + "browserslist"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bs58", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/bs58-npm-4.0.1-8d2a7822b1-10c0.zip/node_modules/bs58/",\ + "packageDependencies": [\ + ["bs58", "npm:4.0.1"],\ + ["base-x", "npm:3.0.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bs58check", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/bs58check-npm-2.1.2-4e87e40195-10c0.zip/node_modules/bs58check/",\ + "packageDependencies": [\ + ["bs58check", "npm:2.1.2"],\ + ["bs58", "npm:4.0.1"],\ + ["create-hash", "npm:1.2.0"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer", [\ + ["npm:6.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/buffer-npm-6.0.3-cd90dfedfe-10c0.zip/node_modules/buffer/",\ + "packageDependencies": [\ + ["buffer", "npm:6.0.3"],\ + ["base64-js", "npm:1.5.1"],\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer-from", [\ + ["npm:1.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/buffer-from-npm-1.1.2-03d2f20d7e-10c0.zip/node_modules/buffer-from/",\ + "packageDependencies": [\ + ["buffer-from", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cacache", [\ + ["npm:18.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/cacache-npm-18.0.4-3dc4edc849-10c0.zip/node_modules/cacache/",\ + "packageDependencies": [\ + ["cacache", "npm:18.0.4"],\ + ["@npmcli/fs", "npm:3.1.1"],\ + ["fs-minipass", "npm:3.0.3"],\ + ["glob", "npm:10.4.5"],\ + ["lru-cache", "npm:10.4.3"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-collect", "npm:2.0.1"],\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["p-map", "npm:4.0.0"],\ + ["ssri", "npm:10.0.6"],\ + ["tar", "npm:6.2.1"],\ + ["unique-filename", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["callsites", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/callsites-npm-3.1.0-268f989910-10c0.zip/node_modules/callsites/",\ + "packageDependencies": [\ + ["callsites", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["caniuse-lite", [\ + ["npm:1.0.30001646", {\ + "packageLocation": "../../.yarn/berry/cache/caniuse-lite-npm-1.0.30001646-2501598beb-10c0.zip/node_modules/caniuse-lite/",\ + "packageDependencies": [\ + ["caniuse-lite", "npm:1.0.30001646"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chalk", [\ + ["npm:2.4.2", {\ + "packageLocation": "../../.yarn/berry/cache/chalk-npm-2.4.2-3ea16dd91e-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["chalk", "npm:2.4.2"],\ + ["ansi-styles", "npm:3.2.1"],\ + ["escape-string-regexp", "npm:1.0.5"],\ + ["supports-color", "npm:5.5.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/chalk-npm-4.1.2-ba8b67ab80-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["chalk", "npm:4.1.2"],\ + ["ansi-styles", "npm:4.3.0"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chownr", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/chownr-npm-2.0.0-638f1c9c61-10c0.zip/node_modules/chownr/",\ + "packageDependencies": [\ + ["chownr", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cipher-base", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/cipher-base-npm-1.0.4-2e98b97140-10c0.zip/node_modules/cipher-base/",\ + "packageDependencies": [\ + ["cipher-base", "npm:1.0.4"],\ + ["inherits", "npm:2.0.4"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["clean-stack", [\ + ["npm:2.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/clean-stack-npm-2.2.0-a8ce435a5c-10c0.zip/node_modules/clean-stack/",\ + "packageDependencies": [\ + ["clean-stack", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-convert", [\ + ["npm:1.9.3", {\ + "packageLocation": "../../.yarn/berry/cache/color-convert-npm-1.9.3-1fe690075e-10c0.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:1.9.3"],\ + ["color-name", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/color-convert-npm-2.0.1-79730e935b-10c0.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:2.0.1"],\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-name", [\ + ["npm:1.1.3", {\ + "packageLocation": "../../.yarn/berry/cache/color-name-npm-1.1.3-728b7b5d39-10c0.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.1.4", {\ + "packageLocation": "../../.yarn/berry/cache/color-name-npm-1.1.4-025792b0ea-10c0.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["combined-stream", [\ + ["npm:1.0.8", {\ + "packageLocation": "../../.yarn/berry/cache/combined-stream-npm-1.0.8-dc14d4a63a-10c0.zip/node_modules/combined-stream/",\ + "packageDependencies": [\ + ["combined-stream", "npm:1.0.8"],\ + ["delayed-stream", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["commander", [\ + ["npm:2.20.3", {\ + "packageLocation": "../../.yarn/berry/cache/commander-npm-2.20.3-d8dcbaa39b-10c0.zip/node_modules/commander/",\ + "packageDependencies": [\ + ["commander", "npm:2.20.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["concat-map", [\ + ["npm:0.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/concat-map-npm-0.0.1-85a921b7ee-10c0.zip/node_modules/concat-map/",\ + "packageDependencies": [\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["convert-source-map", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/convert-source-map-npm-2.0.0-7ab664dc4e-10c0.zip/node_modules/convert-source-map/",\ + "packageDependencies": [\ + ["convert-source-map", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["core-js", [\ + ["npm:3.37.1", {\ + "packageLocation": "./.yarn/unplugged/core-js-npm-3.37.1-b1db5e7c23/node_modules/core-js/",\ + "packageDependencies": [\ + ["core-js", "npm:3.37.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["core-js-compat", [\ + ["npm:3.37.1", {\ + "packageLocation": "../../.yarn/berry/cache/core-js-compat-npm-3.37.1-51cca8bb53-10c0.zip/node_modules/core-js-compat/",\ + "packageDependencies": [\ + ["core-js-compat", "npm:3.37.1"],\ + ["browserslist", "npm:4.23.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["create-hash", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/create-hash-npm-1.2.0-afd048e1ce-10c0.zip/node_modules/create-hash/",\ + "packageDependencies": [\ + ["create-hash", "npm:1.2.0"],\ + ["cipher-base", "npm:1.0.4"],\ + ["inherits", "npm:2.0.4"],\ + ["md5.js", "npm:1.3.5"],\ + ["ripemd160", "npm:2.0.2"],\ + ["sha.js", "npm:2.4.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cross-spawn", [\ + ["npm:7.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-10c0.zip/node_modules/cross-spawn/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.3"],\ + ["path-key", "npm:3.1.1"],\ + ["shebang-command", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["crypto-js", [\ + ["npm:4.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/crypto-js-npm-4.2.0-d6f7744e63-10c0.zip/node_modules/crypto-js/",\ + "packageDependencies": [\ + ["crypto-js", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["debug", [\ + ["npm:4.3.6", {\ + "packageLocation": "../../.yarn/berry/cache/debug-npm-4.3.6-ecb233d831-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.3.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-5ebbdf5dd4/3/.yarn/berry/cache/debug-npm-4.3.6-ecb233d831-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["@types/supports-color", null],\ + ["ms", "npm:2.1.2"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["deep-is", [\ + ["npm:0.1.4", {\ + "packageLocation": "../../.yarn/berry/cache/deep-is-npm-0.1.4-88938b5a67-10c0.zip/node_modules/deep-is/",\ + "packageDependencies": [\ + ["deep-is", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["delayed-stream", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-10c0.zip/node_modules/delayed-stream/",\ + "packageDependencies": [\ + ["delayed-stream", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eastasianwidth", [\ + ["npm:0.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-10c0.zip/node_modules/eastasianwidth/",\ + "packageDependencies": [\ + ["eastasianwidth", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eip55", [\ + ["npm:2.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/eip55-npm-2.1.1-782ce66c3c-10c0.zip/node_modules/eip55/",\ + "packageDependencies": [\ + ["eip55", "npm:2.1.1"],\ + ["keccak", "npm:3.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["electron-to-chromium", [\ + ["npm:1.5.4", {\ + "packageLocation": "../../.yarn/berry/cache/electron-to-chromium-npm-1.5.4-58d50ae1f7-10c0.zip/node_modules/electron-to-chromium/",\ + "packageDependencies": [\ + ["electron-to-chromium", "npm:1.5.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["elliptic", [\ + ["npm:6.5.4", {\ + "packageLocation": "../../.yarn/berry/cache/elliptic-npm-6.5.4-0ca8204a86-10c0.zip/node_modules/elliptic/",\ + "packageDependencies": [\ + ["elliptic", "npm:6.5.4"],\ + ["bn.js", "npm:4.12.0"],\ + ["brorand", "npm:1.1.0"],\ + ["hash.js", "npm:1.1.7"],\ + ["hmac-drbg", "npm:1.0.1"],\ + ["inherits", "npm:2.0.4"],\ + ["minimalistic-assert", "npm:1.0.1"],\ + ["minimalistic-crypto-utils", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["emoji-regex", [\ + ["npm:8.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/emoji-regex-npm-8.0.0-213764015c-10c0.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:8.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.2.2", {\ + "packageLocation": "../../.yarn/berry/cache/emoji-regex-npm-9.2.2-e6fac8d058-10c0.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:9.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["encoding", [\ + ["npm:0.1.13", {\ + "packageLocation": "../../.yarn/berry/cache/encoding-npm-0.1.13-82a1837d30-10c0.zip/node_modules/encoding/",\ + "packageDependencies": [\ + ["encoding", "npm:0.1.13"],\ + ["iconv-lite", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["env-paths", [\ + ["npm:2.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/env-paths-npm-2.2.1-7c7577428c-10c0.zip/node_modules/env-paths/",\ + "packageDependencies": [\ + ["env-paths", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["err-code", [\ + ["npm:2.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/err-code-npm-2.0.3-082e0ff9a7-10c0.zip/node_modules/err-code/",\ + "packageDependencies": [\ + ["err-code", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esbuild", [\ + ["npm:0.21.5", {\ + "packageLocation": "./.yarn/unplugged/esbuild-npm-0.21.5-d85dfbc965/node_modules/esbuild/",\ + "packageDependencies": [\ + ["esbuild", "npm:0.21.5"],\ + ["@esbuild/aix-ppc64", "npm:0.21.5"],\ + ["@esbuild/android-arm", "npm:0.21.5"],\ + ["@esbuild/android-arm64", "npm:0.21.5"],\ + ["@esbuild/android-x64", "npm:0.21.5"],\ + ["@esbuild/darwin-arm64", "npm:0.21.5"],\ + ["@esbuild/darwin-x64", "npm:0.21.5"],\ + ["@esbuild/freebsd-arm64", "npm:0.21.5"],\ + ["@esbuild/freebsd-x64", "npm:0.21.5"],\ + ["@esbuild/linux-arm", "npm:0.21.5"],\ + ["@esbuild/linux-arm64", "npm:0.21.5"],\ + ["@esbuild/linux-ia32", "npm:0.21.5"],\ + ["@esbuild/linux-loong64", "npm:0.21.5"],\ + ["@esbuild/linux-mips64el", "npm:0.21.5"],\ + ["@esbuild/linux-ppc64", "npm:0.21.5"],\ + ["@esbuild/linux-riscv64", "npm:0.21.5"],\ + ["@esbuild/linux-s390x", "npm:0.21.5"],\ + ["@esbuild/linux-x64", "npm:0.21.5"],\ + ["@esbuild/netbsd-x64", "npm:0.21.5"],\ + ["@esbuild/openbsd-x64", "npm:0.21.5"],\ + ["@esbuild/sunos-x64", "npm:0.21.5"],\ + ["@esbuild/win32-arm64", "npm:0.21.5"],\ + ["@esbuild/win32-ia32", "npm:0.21.5"],\ + ["@esbuild/win32-x64", "npm:0.21.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escalade", [\ + ["npm:3.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/escalade-npm-3.1.2-5826d31cf8-10c0.zip/node_modules/escalade/",\ + "packageDependencies": [\ + ["escalade", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escape-string-regexp", [\ + ["npm:1.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/escape-string-regexp-npm-1.0.5-3284de402f-10c0.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:1.0.5"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-10c0.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint", [\ + ["npm:9.8.0", {\ + "packageLocation": "../../.yarn/berry/cache/eslint-npm-9.8.0-e0df5c5fa7-10c0.zip/node_modules/eslint/",\ + "packageDependencies": [\ + ["eslint", "npm:9.8.0"],\ + ["@eslint-community/eslint-utils", "virtual:e0df5c5fa7cdbff2fc37004d10f570b049536244f914c47250b0103595a431c716501b68a888e871f7777ce7ce6d09b1d817f35f5c115639121d564f8a799aac#npm:4.4.0"],\ + ["@eslint-community/regexpp", "npm:4.11.0"],\ + ["@eslint/config-array", "npm:0.17.1"],\ + ["@eslint/eslintrc", "npm:3.1.0"],\ + ["@eslint/js", "npm:9.8.0"],\ + ["@humanwhocodes/module-importer", "npm:1.0.1"],\ + ["@humanwhocodes/retry", "npm:0.3.0"],\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["ajv", "npm:6.12.6"],\ + ["chalk", "npm:4.1.2"],\ + ["cross-spawn", "npm:7.0.3"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["escape-string-regexp", "npm:4.0.0"],\ + ["eslint-scope", "npm:8.0.2"],\ + ["eslint-visitor-keys", "npm:4.0.0"],\ + ["espree", "npm:10.1.0"],\ + ["esquery", "npm:1.6.0"],\ + ["esutils", "npm:2.0.3"],\ + ["fast-deep-equal", "npm:3.1.3"],\ + ["file-entry-cache", "npm:8.0.0"],\ + ["find-up", "npm:5.0.0"],\ + ["glob-parent", "npm:6.0.2"],\ + ["ignore", "npm:5.3.1"],\ + ["imurmurhash", "npm:0.1.4"],\ + ["is-glob", "npm:4.0.3"],\ + ["is-path-inside", "npm:3.0.3"],\ + ["json-stable-stringify-without-jsonify", "npm:1.0.1"],\ + ["levn", "npm:0.4.1"],\ + ["lodash.merge", "npm:4.6.2"],\ + ["minimatch", "npm:3.1.2"],\ + ["natural-compare", "npm:1.4.0"],\ + ["optionator", "npm:0.9.4"],\ + ["strip-ansi", "npm:6.0.1"],\ + ["text-table", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-scope", [\ + ["npm:8.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/eslint-scope-npm-8.0.2-984149bd64-10c0.zip/node_modules/eslint-scope/",\ + "packageDependencies": [\ + ["eslint-scope", "npm:8.0.2"],\ + ["esrecurse", "npm:4.3.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eslint-visitor-keys", [\ + ["npm:3.4.3", {\ + "packageLocation": "../../.yarn/berry/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-10c0.zip/node_modules/eslint-visitor-keys/",\ + "packageDependencies": [\ + ["eslint-visitor-keys", "npm:3.4.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/eslint-visitor-keys-npm-4.0.0-9098eefd77-10c0.zip/node_modules/eslint-visitor-keys/",\ + "packageDependencies": [\ + ["eslint-visitor-keys", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["espree", [\ + ["npm:10.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/espree-npm-10.1.0-6847541ce4-10c0.zip/node_modules/espree/",\ + "packageDependencies": [\ + ["espree", "npm:10.1.0"],\ + ["acorn", "npm:8.12.1"],\ + ["acorn-jsx", "virtual:6847541ce4a3dcf7a9a6a3e4dde955afca0e2dd6c48216b83d71222ffd93cf79a6473d48f3e37dabb82467ce0f37e8b8b4a49925ee47dda6e8922eae0b01ab6f#npm:5.3.2"],\ + ["eslint-visitor-keys", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esquery", [\ + ["npm:1.6.0", {\ + "packageLocation": "../../.yarn/berry/cache/esquery-npm-1.6.0-16fee31531-10c0.zip/node_modules/esquery/",\ + "packageDependencies": [\ + ["esquery", "npm:1.6.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esrecurse", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/esrecurse-npm-4.3.0-10b86a887a-10c0.zip/node_modules/esrecurse/",\ + "packageDependencies": [\ + ["esrecurse", "npm:4.3.0"],\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["estraverse", [\ + ["npm:5.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/estraverse-npm-5.3.0-03284f8f63-10c0.zip/node_modules/estraverse/",\ + "packageDependencies": [\ + ["estraverse", "npm:5.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["esutils", [\ + ["npm:2.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/esutils-npm-2.0.3-f865beafd5-10c0.zip/node_modules/esutils/",\ + "packageDependencies": [\ + ["esutils", "npm:2.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ethers", [\ + ["npm:5.7.2", {\ + "packageLocation": "../../.yarn/berry/cache/ethers-npm-5.7.2-eba7d781ee-10c0.zip/node_modules/ethers/",\ + "packageDependencies": [\ + ["ethers", "npm:5.7.2"],\ + ["@ethersproject/abi", "npm:5.7.0"],\ + ["@ethersproject/abstract-provider", "npm:5.7.0"],\ + ["@ethersproject/abstract-signer", "npm:5.7.0"],\ + ["@ethersproject/address", "npm:5.7.0"],\ + ["@ethersproject/base64", "npm:5.7.0"],\ + ["@ethersproject/basex", "npm:5.7.0"],\ + ["@ethersproject/bignumber", "npm:5.7.0"],\ + ["@ethersproject/bytes", "npm:5.7.0"],\ + ["@ethersproject/constants", "npm:5.7.0"],\ + ["@ethersproject/contracts", "npm:5.7.0"],\ + ["@ethersproject/hash", "npm:5.7.0"],\ + ["@ethersproject/hdnode", "npm:5.7.0"],\ + ["@ethersproject/json-wallets", "npm:5.7.0"],\ + ["@ethersproject/keccak256", "npm:5.7.0"],\ + ["@ethersproject/logger", "npm:5.7.0"],\ + ["@ethersproject/networks", "npm:5.7.1"],\ + ["@ethersproject/pbkdf2", "npm:5.7.0"],\ + ["@ethersproject/properties", "npm:5.7.0"],\ + ["@ethersproject/providers", "npm:5.7.2"],\ + ["@ethersproject/random", "npm:5.7.0"],\ + ["@ethersproject/rlp", "npm:5.7.0"],\ + ["@ethersproject/sha2", "npm:5.7.0"],\ + ["@ethersproject/signing-key", "npm:5.7.0"],\ + ["@ethersproject/solidity", "npm:5.7.0"],\ + ["@ethersproject/strings", "npm:5.7.0"],\ + ["@ethersproject/transactions", "npm:5.7.0"],\ + ["@ethersproject/units", "npm:5.7.0"],\ + ["@ethersproject/wallet", "npm:5.7.0"],\ + ["@ethersproject/web", "npm:5.7.1"],\ + ["@ethersproject/wordlists", "npm:5.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["events", [\ + ["npm:3.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/events-npm-3.3.0-c280bc7e48-10c0.zip/node_modules/events/",\ + "packageDependencies": [\ + ["events", "npm:3.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["exponential-backoff", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/exponential-backoff-npm-3.1.1-04df458b30-10c0.zip/node_modules/exponential-backoff/",\ + "packageDependencies": [\ + ["exponential-backoff", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-deep-equal", [\ + ["npm:3.1.3", {\ + "packageLocation": "../../.yarn/berry/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-10c0.zip/node_modules/fast-deep-equal/",\ + "packageDependencies": [\ + ["fast-deep-equal", "npm:3.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-json-stable-stringify", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-10c0.zip/node_modules/fast-json-stable-stringify/",\ + "packageDependencies": [\ + ["fast-json-stable-stringify", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-levenshtein", [\ + ["npm:2.0.6", {\ + "packageLocation": "../../.yarn/berry/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-10c0.zip/node_modules/fast-levenshtein/",\ + "packageDependencies": [\ + ["fast-levenshtein", "npm:2.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fastq", [\ + ["npm:1.17.1", {\ + "packageLocation": "../../.yarn/berry/cache/fastq-npm-1.17.1-56d4554993-10c0.zip/node_modules/fastq/",\ + "packageDependencies": [\ + ["fastq", "npm:1.17.1"],\ + ["reusify", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["file-entry-cache", [\ + ["npm:8.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/file-entry-cache-npm-8.0.0-5b09d19a83-10c0.zip/node_modules/file-entry-cache/",\ + "packageDependencies": [\ + ["file-entry-cache", "npm:8.0.0"],\ + ["flat-cache", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["find-up", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/find-up-npm-5.0.0-e03e9b796d-10c0.zip/node_modules/find-up/",\ + "packageDependencies": [\ + ["find-up", "npm:5.0.0"],\ + ["locate-path", "npm:6.0.0"],\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["flat-cache", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/flat-cache-npm-4.0.1-12bf2455f7-10c0.zip/node_modules/flat-cache/",\ + "packageDependencies": [\ + ["flat-cache", "npm:4.0.1"],\ + ["flatted", "npm:3.3.1"],\ + ["keyv", "npm:4.5.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["flatted", [\ + ["npm:3.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/flatted-npm-3.3.1-458870f59b-10c0.zip/node_modules/flatted/",\ + "packageDependencies": [\ + ["flatted", "npm:3.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["follow-redirects", [\ + ["npm:1.15.6", {\ + "packageLocation": "../../.yarn/berry/cache/follow-redirects-npm-1.15.6-50635fe51d-10c0.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["follow-redirects", "npm:1.15.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:a63743a5822c3f4f0080debf0a45615212b5bd005b763a14221b5559794a4eab59edf521118fa1c78a2444ffb22b1d205323e984eccd051abda1334fb302f130#npm:1.15.6", {\ + "packageLocation": "./.yarn/__virtual__/follow-redirects-virtual-74498d9869/3/.yarn/berry/cache/follow-redirects-npm-1.15.6-50635fe51d-10c0.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["follow-redirects", "virtual:a63743a5822c3f4f0080debf0a45615212b5bd005b763a14221b5559794a4eab59edf521118fa1c78a2444ffb22b1d205323e984eccd051abda1334fb302f130#npm:1.15.6"],\ + ["@types/debug", null],\ + ["debug", null]\ + ],\ + "packagePeers": [\ + "@types/debug",\ + "debug"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["foreground-child", [\ + ["npm:3.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/foreground-child-npm-3.2.1-788dc2267e-10c0.zip/node_modules/foreground-child/",\ + "packageDependencies": [\ + ["foreground-child", "npm:3.2.1"],\ + ["cross-spawn", "npm:7.0.3"],\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["form-data", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/form-data-npm-4.0.0-916facec2d-10c0.zip/node_modules/form-data/",\ + "packageDependencies": [\ + ["form-data", "npm:4.0.0"],\ + ["asynckit", "npm:0.4.0"],\ + ["combined-stream", "npm:1.0.8"],\ + ["mime-types", "npm:2.1.35"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs-minipass", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/fs-minipass-npm-2.1.0-501ef87306-10c0.zip/node_modules/fs-minipass/",\ + "packageDependencies": [\ + ["fs-minipass", "npm:2.1.0"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/fs-minipass-npm-3.0.3-d148d6ac19-10c0.zip/node_modules/fs-minipass/",\ + "packageDependencies": [\ + ["fs-minipass", "npm:3.0.3"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fsevents", [\ + ["patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1", {\ + "packageLocation": "./.yarn/unplugged/fsevents-patch-6b67494872/node_modules/fsevents/",\ + "packageDependencies": [\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["node-gyp", "npm:10.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["function-bind", [\ + ["npm:1.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/function-bind-npm-1.1.2-7a55be9b03-10c0.zip/node_modules/function-bind/",\ + "packageDependencies": [\ + ["function-bind", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["gensync", [\ + ["npm:1.0.0-beta.2", {\ + "packageLocation": "../../.yarn/berry/cache/gensync-npm-1.0.0-beta.2-224666d72f-10c0.zip/node_modules/gensync/",\ + "packageDependencies": [\ + ["gensync", "npm:1.0.0-beta.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob", [\ + ["npm:10.4.5", {\ + "packageLocation": "../../.yarn/berry/cache/glob-npm-10.4.5-8c63175f05-10c0.zip/node_modules/glob/",\ + "packageDependencies": [\ + ["glob", "npm:10.4.5"],\ + ["foreground-child", "npm:3.2.1"],\ + ["jackspeak", "npm:3.4.3"],\ + ["minimatch", "npm:9.0.5"],\ + ["minipass", "npm:7.1.2"],\ + ["package-json-from-dist", "npm:1.0.0"],\ + ["path-scurry", "npm:1.11.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob-parent", [\ + ["npm:6.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/glob-parent-npm-6.0.2-2cbef12738-10c0.zip/node_modules/glob-parent/",\ + "packageDependencies": [\ + ["glob-parent", "npm:6.0.2"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["globals", [\ + ["npm:11.12.0", {\ + "packageLocation": "../../.yarn/berry/cache/globals-npm-11.12.0-1fa7f41a6c-10c0.zip/node_modules/globals/",\ + "packageDependencies": [\ + ["globals", "npm:11.12.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:14.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/globals-npm-14.0.0-5fc3d8d5da-10c0.zip/node_modules/globals/",\ + "packageDependencies": [\ + ["globals", "npm:14.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graceful-fs", [\ + ["npm:4.2.11", {\ + "packageLocation": "../../.yarn/berry/cache/graceful-fs-npm-4.2.11-24bb648a68-10c0.zip/node_modules/graceful-fs/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-flag", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/has-flag-npm-3.0.0-16ac11fe05-10c0.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/has-flag-npm-4.0.0-32af9f0536-10c0.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hash-base", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/hash-base-npm-3.1.0-26fc5711dd-10c0.zip/node_modules/hash-base/",\ + "packageDependencies": [\ + ["hash-base", "npm:3.1.0"],\ + ["inherits", "npm:2.0.4"],\ + ["readable-stream", "npm:3.6.2"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hash.js", [\ + ["npm:1.1.7", {\ + "packageLocation": "../../.yarn/berry/cache/hash.js-npm-1.1.7-f1ad187358-10c0.zip/node_modules/hash.js/",\ + "packageDependencies": [\ + ["hash.js", "npm:1.1.7"],\ + ["inherits", "npm:2.0.4"],\ + ["minimalistic-assert", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hasown", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/hasown-npm-2.0.2-80fe6c9901-10c0.zip/node_modules/hasown/",\ + "packageDependencies": [\ + ["hasown", "npm:2.0.2"],\ + ["function-bind", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hmac-drbg", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/hmac-drbg-npm-1.0.1-3499ad31cd-10c0.zip/node_modules/hmac-drbg/",\ + "packageDependencies": [\ + ["hmac-drbg", "npm:1.0.1"],\ + ["hash.js", "npm:1.1.7"],\ + ["minimalistic-assert", "npm:1.0.1"],\ + ["minimalistic-crypto-utils", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["http-cache-semantics", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/http-cache-semantics-npm-4.1.1-1120131375-10c0.zip/node_modules/http-cache-semantics/",\ + "packageDependencies": [\ + ["http-cache-semantics", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["http-proxy-agent", [\ + ["npm:7.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-10c0.zip/node_modules/http-proxy-agent/",\ + "packageDependencies": [\ + ["http-proxy-agent", "npm:7.0.2"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["https-proxy-agent", [\ + ["npm:7.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/https-proxy-agent-npm-7.0.5-94c14d4619-10c0.zip/node_modules/https-proxy-agent/",\ + "packageDependencies": [\ + ["https-proxy-agent", "npm:7.0.5"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["iconv-lite", [\ + ["npm:0.6.3", {\ + "packageLocation": "../../.yarn/berry/cache/iconv-lite-npm-0.6.3-24b8aae27e-10c0.zip/node_modules/iconv-lite/",\ + "packageDependencies": [\ + ["iconv-lite", "npm:0.6.3"],\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ieee754", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/ieee754-npm-1.2.1-fb63b3caeb-10c0.zip/node_modules/ieee754/",\ + "packageDependencies": [\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ignore", [\ + ["npm:5.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/ignore-npm-5.3.1-f6947c5df7-10c0.zip/node_modules/ignore/",\ + "packageDependencies": [\ + ["ignore", "npm:5.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["import-fresh", [\ + ["npm:3.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/import-fresh-npm-3.3.0-3e34265ca9-10c0.zip/node_modules/import-fresh/",\ + "packageDependencies": [\ + ["import-fresh", "npm:3.3.0"],\ + ["parent-module", "npm:1.0.1"],\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["imurmurhash", [\ + ["npm:0.1.4", {\ + "packageLocation": "../../.yarn/berry/cache/imurmurhash-npm-0.1.4-610c5068a0-10c0.zip/node_modules/imurmurhash/",\ + "packageDependencies": [\ + ["imurmurhash", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["indent-string", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/indent-string-npm-4.0.0-7b717435b2-10c0.zip/node_modules/indent-string/",\ + "packageDependencies": [\ + ["indent-string", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inherits", [\ + ["npm:2.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/inherits-npm-2.0.4-c66b3957a0-10c0.zip/node_modules/inherits/",\ + "packageDependencies": [\ + ["inherits", "npm:2.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["invariant", [\ + ["npm:2.2.4", {\ + "packageLocation": "../../.yarn/berry/cache/invariant-npm-2.2.4-717fbdb119-10c0.zip/node_modules/invariant/",\ + "packageDependencies": [\ + ["invariant", "npm:2.2.4"],\ + ["loose-envify", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ip-address", [\ + ["npm:9.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/ip-address-npm-9.0.5-9fa024d42a-10c0.zip/node_modules/ip-address/",\ + "packageDependencies": [\ + ["ip-address", "npm:9.0.5"],\ + ["jsbn", "npm:1.1.0"],\ + ["sprintf-js", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-core-module", [\ + ["npm:2.15.0", {\ + "packageLocation": "../../.yarn/berry/cache/is-core-module-npm-2.15.0-c262aaf790-10c0.zip/node_modules/is-core-module/",\ + "packageDependencies": [\ + ["is-core-module", "npm:2.15.0"],\ + ["hasown", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-extglob", [\ + ["npm:2.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/is-extglob-npm-2.1.1-0870ea68b5-10c0.zip/node_modules/is-extglob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-fullwidth-code-point", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-10c0.zip/node_modules/is-fullwidth-code-point/",\ + "packageDependencies": [\ + ["is-fullwidth-code-point", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-glob", [\ + ["npm:4.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/is-glob-npm-4.0.3-cb87bf1bdb-10c0.zip/node_modules/is-glob/",\ + "packageDependencies": [\ + ["is-glob", "npm:4.0.3"],\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-lambda", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/is-lambda-npm-1.0.1-7ab55bc8a8-10c0.zip/node_modules/is-lambda/",\ + "packageDependencies": [\ + ["is-lambda", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-path-inside", [\ + ["npm:3.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/is-path-inside-npm-3.0.3-2ea0ef44fd-10c0.zip/node_modules/is-path-inside/",\ + "packageDependencies": [\ + ["is-path-inside", "npm:3.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isexe", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-10c0.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/isexe-npm-3.1.1-9c0061eead-10c0.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jackspeak", [\ + ["npm:3.4.3", {\ + "packageLocation": "../../.yarn/berry/cache/jackspeak-npm-3.4.3-546bfad080-10c0.zip/node_modules/jackspeak/",\ + "packageDependencies": [\ + ["jackspeak", "npm:3.4.3"],\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["@pkgjs/parseargs", "npm:0.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-sha3", [\ + ["npm:0.8.0", {\ + "packageLocation": "../../.yarn/berry/cache/js-sha3-npm-0.8.0-decf3ddcfa-10c0.zip/node_modules/js-sha3/",\ + "packageDependencies": [\ + ["js-sha3", "npm:0.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-tokens", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/js-tokens-npm-4.0.0-0ac852e9e2-10c0.zip/node_modules/js-tokens/",\ + "packageDependencies": [\ + ["js-tokens", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-yaml", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/js-yaml-npm-4.1.0-3606f32312-10c0.zip/node_modules/js-yaml/",\ + "packageDependencies": [\ + ["js-yaml", "npm:4.1.0"],\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jsbn", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/jsbn-npm-1.1.0-1da0181838-10c0.zip/node_modules/jsbn/",\ + "packageDependencies": [\ + ["jsbn", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jsesc", [\ + ["npm:0.5.0", {\ + "packageLocation": "../../.yarn/berry/cache/jsesc-npm-0.5.0-6827074492-10c0.zip/node_modules/jsesc/",\ + "packageDependencies": [\ + ["jsesc", "npm:0.5.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.5.2", {\ + "packageLocation": "../../.yarn/berry/cache/jsesc-npm-2.5.2-c5acb78804-10c0.zip/node_modules/jsesc/",\ + "packageDependencies": [\ + ["jsesc", "npm:2.5.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-buffer", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/json-buffer-npm-3.0.1-f8f6d20603-10c0.zip/node_modules/json-buffer/",\ + "packageDependencies": [\ + ["json-buffer", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-schema-traverse", [\ + ["npm:0.4.1", {\ + "packageLocation": "../../.yarn/berry/cache/json-schema-traverse-npm-0.4.1-4759091693-10c0.zip/node_modules/json-schema-traverse/",\ + "packageDependencies": [\ + ["json-schema-traverse", "npm:0.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-stable-stringify-without-jsonify", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/json-stable-stringify-without-jsonify-npm-1.0.1-b65772b28b-10c0.zip/node_modules/json-stable-stringify-without-jsonify/",\ + "packageDependencies": [\ + ["json-stable-stringify-without-jsonify", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json5", [\ + ["npm:2.2.3", {\ + "packageLocation": "../../.yarn/berry/cache/json5-npm-2.2.3-9962c55073-10c0.zip/node_modules/json5/",\ + "packageDependencies": [\ + ["json5", "npm:2.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["keccak", [\ + ["npm:3.0.4", {\ + "packageLocation": "./.yarn/unplugged/keccak-npm-3.0.4-a84763aab8/node_modules/keccak/",\ + "packageDependencies": [\ + ["keccak", "npm:3.0.4"],\ + ["node-addon-api", "npm:2.0.2"],\ + ["node-gyp", "npm:10.2.0"],\ + ["node-gyp-build", "npm:4.8.1"],\ + ["readable-stream", "npm:3.6.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["keyv", [\ + ["npm:4.5.4", {\ + "packageLocation": "../../.yarn/berry/cache/keyv-npm-4.5.4-4c8e2cf7f7-10c0.zip/node_modules/keyv/",\ + "packageDependencies": [\ + ["keyv", "npm:4.5.4"],\ + ["json-buffer", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ledger-bridge", [\ + ["workspace:.", {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["ledger-bridge", "workspace:."],\ + ["@ledgerhq/hw-app-eth", "npm:6.37.3"],\ + ["@ledgerhq/hw-transport-http", "npm:6.30.2"],\ + ["@ledgerhq/hw-transport-webhid", "npm:6.29.2"],\ + ["@ledgerhq/hw-transport-webusb", "npm:6.29.2"],\ + ["@vitejs/plugin-legacy", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.4.1"],\ + ["buffer", "npm:6.0.3"],\ + ["eslint", "npm:9.8.0"],\ + ["terser", "npm:5.31.3"],\ + ["vite", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.3.5"]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["levn", [\ + ["npm:0.4.1", {\ + "packageLocation": "../../.yarn/berry/cache/levn-npm-0.4.1-d183b2d7bb-10c0.zip/node_modules/levn/",\ + "packageDependencies": [\ + ["levn", "npm:0.4.1"],\ + ["prelude-ls", "npm:1.2.1"],\ + ["type-check", "npm:0.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["locate-path", [\ + ["npm:6.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/locate-path-npm-6.0.0-06a1e4c528-10c0.zip/node_modules/locate-path/",\ + "packageDependencies": [\ + ["locate-path", "npm:6.0.0"],\ + ["p-locate", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.debounce", [\ + ["npm:4.0.8", {\ + "packageLocation": "../../.yarn/berry/cache/lodash.debounce-npm-4.0.8-f1d6e09799-10c0.zip/node_modules/lodash.debounce/",\ + "packageDependencies": [\ + ["lodash.debounce", "npm:4.0.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.merge", [\ + ["npm:4.6.2", {\ + "packageLocation": "../../.yarn/berry/cache/lodash.merge-npm-4.6.2-77cb4416bf-10c0.zip/node_modules/lodash.merge/",\ + "packageDependencies": [\ + ["lodash.merge", "npm:4.6.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["loose-envify", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../.yarn/berry/cache/loose-envify-npm-1.4.0-6307b72ccf-10c0.zip/node_modules/loose-envify/",\ + "packageDependencies": [\ + ["loose-envify", "npm:1.4.0"],\ + ["js-tokens", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lru-cache", [\ + ["npm:10.4.3", {\ + "packageLocation": "../../.yarn/berry/cache/lru-cache-npm-10.4.3-30c10b861a-10c0.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:10.4.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/lru-cache-npm-5.1.1-f475882a51-10c0.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:5.1.1"],\ + ["yallist", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["magic-string", [\ + ["npm:0.30.11", {\ + "packageLocation": "../../.yarn/berry/cache/magic-string-npm-0.30.11-4e76dc2f30-10c0.zip/node_modules/magic-string/",\ + "packageDependencies": [\ + ["magic-string", "npm:0.30.11"],\ + ["@jridgewell/sourcemap-codec", "npm:1.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["make-fetch-happen", [\ + ["npm:13.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/make-fetch-happen-npm-13.0.1-4180f2aaa8-10c0.zip/node_modules/make-fetch-happen/",\ + "packageDependencies": [\ + ["make-fetch-happen", "npm:13.0.1"],\ + ["@npmcli/agent", "npm:2.2.2"],\ + ["cacache", "npm:18.0.4"],\ + ["http-cache-semantics", "npm:4.1.1"],\ + ["is-lambda", "npm:1.0.1"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-fetch", "npm:3.0.5"],\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["negotiator", "npm:0.6.3"],\ + ["proc-log", "npm:4.2.0"],\ + ["promise-retry", "npm:2.0.1"],\ + ["ssri", "npm:10.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["md5.js", [\ + ["npm:1.3.5", {\ + "packageLocation": "../../.yarn/berry/cache/md5.js-npm-1.3.5-130901125a-10c0.zip/node_modules/md5.js/",\ + "packageDependencies": [\ + ["md5.js", "npm:1.3.5"],\ + ["hash-base", "npm:3.1.0"],\ + ["inherits", "npm:2.0.4"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["meow", [\ + ["npm:13.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/meow-npm-13.2.0-9907f89171-10c0.zip/node_modules/meow/",\ + "packageDependencies": [\ + ["meow", "npm:13.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mime-db", [\ + ["npm:1.52.0", {\ + "packageLocation": "../../.yarn/berry/cache/mime-db-npm-1.52.0-b5371d6fd2-10c0.zip/node_modules/mime-db/",\ + "packageDependencies": [\ + ["mime-db", "npm:1.52.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mime-types", [\ + ["npm:2.1.35", {\ + "packageLocation": "../../.yarn/berry/cache/mime-types-npm-2.1.35-dd9ea9f3e2-10c0.zip/node_modules/mime-types/",\ + "packageDependencies": [\ + ["mime-types", "npm:2.1.35"],\ + ["mime-db", "npm:1.52.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimalistic-assert", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/minimalistic-assert-npm-1.0.1-dc8bb23d29-10c0.zip/node_modules/minimalistic-assert/",\ + "packageDependencies": [\ + ["minimalistic-assert", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimalistic-crypto-utils", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/minimalistic-crypto-utils-npm-1.0.1-e66b10822e-10c0.zip/node_modules/minimalistic-crypto-utils/",\ + "packageDependencies": [\ + ["minimalistic-crypto-utils", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimatch", [\ + ["npm:3.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/minimatch-npm-3.1.2-9405269906-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["minimatch", "npm:3.1.2"],\ + ["brace-expansion", "npm:1.1.11"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/minimatch-npm-9.0.5-9aa93d97fa-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["minimatch", "npm:9.0.5"],\ + ["brace-expansion", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass", [\ + ["npm:3.3.6", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-npm-3.3.6-b8d93a945b-10c0.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:3.3.6"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-npm-5.0.0-c64fb63c92-10c0.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-npm-7.1.2-3a5327d36d-10c0.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-collect", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-collect-npm-2.0.1-73d3907e40-10c0.zip/node_modules/minipass-collect/",\ + "packageDependencies": [\ + ["minipass-collect", "npm:2.0.1"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-fetch", [\ + ["npm:3.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-fetch-npm-3.0.5-ed78529694-10c0.zip/node_modules/minipass-fetch/",\ + "packageDependencies": [\ + ["minipass-fetch", "npm:3.0.5"],\ + ["encoding", "npm:0.1.13"],\ + ["minipass", "npm:7.1.2"],\ + ["minipass-sized", "npm:1.0.3"],\ + ["minizlib", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-flush", [\ + ["npm:1.0.5", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-flush-npm-1.0.5-efe79d9826-10c0.zip/node_modules/minipass-flush/",\ + "packageDependencies": [\ + ["minipass-flush", "npm:1.0.5"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-pipeline", [\ + ["npm:1.2.4", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-pipeline-npm-1.2.4-5924cb077f-10c0.zip/node_modules/minipass-pipeline/",\ + "packageDependencies": [\ + ["minipass-pipeline", "npm:1.2.4"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass-sized", [\ + ["npm:1.0.3", {\ + "packageLocation": "../../.yarn/berry/cache/minipass-sized-npm-1.0.3-306d86f432-10c0.zip/node_modules/minipass-sized/",\ + "packageDependencies": [\ + ["minipass-sized", "npm:1.0.3"],\ + ["minipass", "npm:3.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minizlib", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/minizlib-npm-2.1.2-ea89cd0cfb-10c0.zip/node_modules/minizlib/",\ + "packageDependencies": [\ + ["minizlib", "npm:2.1.2"],\ + ["minipass", "npm:3.3.6"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mkdirp", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/mkdirp-npm-1.0.4-37f6ef56b9-10c0.zip/node_modules/mkdirp/",\ + "packageDependencies": [\ + ["mkdirp", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ms", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/ms-npm-2.1.2-ec0c1512ff-10c0.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nanoid", [\ + ["npm:3.3.7", {\ + "packageLocation": "../../.yarn/berry/cache/nanoid-npm-3.3.7-98824ba130-10c0.zip/node_modules/nanoid/",\ + "packageDependencies": [\ + ["nanoid", "npm:3.3.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["natural-compare", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../.yarn/berry/cache/natural-compare-npm-1.4.0-97b75b362d-10c0.zip/node_modules/natural-compare/",\ + "packageDependencies": [\ + ["natural-compare", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["negotiator", [\ + ["npm:0.6.3", {\ + "packageLocation": "../../.yarn/berry/cache/negotiator-npm-0.6.3-9d50e36171-10c0.zip/node_modules/negotiator/",\ + "packageDependencies": [\ + ["negotiator", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-addon-api", [\ + ["npm:2.0.2", {\ + "packageLocation": "./.yarn/unplugged/node-addon-api-npm-2.0.2-8c2c1e9782/node_modules/node-addon-api/",\ + "packageDependencies": [\ + ["node-addon-api", "npm:2.0.2"],\ + ["node-gyp", "npm:10.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-gyp", [\ + ["npm:10.2.0", {\ + "packageLocation": "./.yarn/unplugged/node-gyp-npm-10.2.0-cad1109948/node_modules/node-gyp/",\ + "packageDependencies": [\ + ["node-gyp", "npm:10.2.0"],\ + ["env-paths", "npm:2.2.1"],\ + ["exponential-backoff", "npm:3.1.1"],\ + ["glob", "npm:10.4.5"],\ + ["graceful-fs", "npm:4.2.11"],\ + ["make-fetch-happen", "npm:13.0.1"],\ + ["nopt", "npm:7.2.1"],\ + ["proc-log", "npm:4.2.0"],\ + ["semver", "npm:7.6.3"],\ + ["tar", "npm:6.2.1"],\ + ["which", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-gyp-build", [\ + ["npm:4.8.1", {\ + "packageLocation": "../../.yarn/berry/cache/node-gyp-build-npm-4.8.1-828de76ddb-10c0.zip/node_modules/node-gyp-build/",\ + "packageDependencies": [\ + ["node-gyp-build", "npm:4.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["node-releases", [\ + ["npm:2.0.18", {\ + "packageLocation": "../../.yarn/berry/cache/node-releases-npm-2.0.18-51abc46668-10c0.zip/node_modules/node-releases/",\ + "packageDependencies": [\ + ["node-releases", "npm:2.0.18"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nopt", [\ + ["npm:7.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/nopt-npm-7.2.1-635b7da949-10c0.zip/node_modules/nopt/",\ + "packageDependencies": [\ + ["nopt", "npm:7.2.1"],\ + ["abbrev", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["optionator", [\ + ["npm:0.9.4", {\ + "packageLocation": "../../.yarn/berry/cache/optionator-npm-0.9.4-1f114b00e8-10c0.zip/node_modules/optionator/",\ + "packageDependencies": [\ + ["optionator", "npm:0.9.4"],\ + ["deep-is", "npm:0.1.4"],\ + ["fast-levenshtein", "npm:2.0.6"],\ + ["levn", "npm:0.4.1"],\ + ["prelude-ls", "npm:1.2.1"],\ + ["type-check", "npm:0.4.0"],\ + ["word-wrap", "npm:1.2.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-limit", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/p-limit-npm-3.1.0-05d2ede37f-10c0.zip/node_modules/p-limit/",\ + "packageDependencies": [\ + ["p-limit", "npm:3.1.0"],\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-locate", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/p-locate-npm-5.0.0-92cc7c7a3e-10c0.zip/node_modules/p-locate/",\ + "packageDependencies": [\ + ["p-locate", "npm:5.0.0"],\ + ["p-limit", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-map", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/p-map-npm-4.0.0-4677ae07c7-10c0.zip/node_modules/p-map/",\ + "packageDependencies": [\ + ["p-map", "npm:4.0.0"],\ + ["aggregate-error", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["package-json-from-dist", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/package-json-from-dist-npm-1.0.0-961f0fcb3b-10c0.zip/node_modules/package-json-from-dist/",\ + "packageDependencies": [\ + ["package-json-from-dist", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["parent-module", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/parent-module-npm-1.0.1-1fae11b095-10c0.zip/node_modules/parent-module/",\ + "packageDependencies": [\ + ["parent-module", "npm:1.0.1"],\ + ["callsites", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-exists", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/path-exists-npm-4.0.0-e9e4f63eb0-10c0.zip/node_modules/path-exists/",\ + "packageDependencies": [\ + ["path-exists", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-key", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/path-key-npm-3.1.1-0e66ea8321-10c0.zip/node_modules/path-key/",\ + "packageDependencies": [\ + ["path-key", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-parse", [\ + ["npm:1.0.7", {\ + "packageLocation": "../../.yarn/berry/cache/path-parse-npm-1.0.7-09564527b7-10c0.zip/node_modules/path-parse/",\ + "packageDependencies": [\ + ["path-parse", "npm:1.0.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-scurry", [\ + ["npm:1.11.1", {\ + "packageLocation": "../../.yarn/berry/cache/path-scurry-npm-1.11.1-aaf8c339af-10c0.zip/node_modules/path-scurry/",\ + "packageDependencies": [\ + ["path-scurry", "npm:1.11.1"],\ + ["lru-cache", "npm:10.4.3"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["picocolors", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/picocolors-npm-1.0.1-39442f3da8-10c0.zip/node_modules/picocolors/",\ + "packageDependencies": [\ + ["picocolors", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["postcss", [\ + ["npm:8.4.40", {\ + "packageLocation": "../../.yarn/berry/cache/postcss-npm-8.4.40-bd95efba25-10c0.zip/node_modules/postcss/",\ + "packageDependencies": [\ + ["postcss", "npm:8.4.40"],\ + ["nanoid", "npm:3.3.7"],\ + ["picocolors", "npm:1.0.1"],\ + ["source-map-js", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prelude-ls", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/prelude-ls-npm-1.2.1-3e4d272a55-10c0.zip/node_modules/prelude-ls/",\ + "packageDependencies": [\ + ["prelude-ls", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["proc-log", [\ + ["npm:4.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/proc-log-npm-4.2.0-4d65296a9d-10c0.zip/node_modules/proc-log/",\ + "packageDependencies": [\ + ["proc-log", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["promise-retry", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/promise-retry-npm-2.0.1-871f0b01b7-10c0.zip/node_modules/promise-retry/",\ + "packageDependencies": [\ + ["promise-retry", "npm:2.0.1"],\ + ["err-code", "npm:2.0.3"],\ + ["retry", "npm:0.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["proxy-from-env", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/proxy-from-env-npm-1.1.0-c13d07f26b-10c0.zip/node_modules/proxy-from-env/",\ + "packageDependencies": [\ + ["proxy-from-env", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["punycode", [\ + ["npm:2.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/punycode-npm-2.3.1-97543c420d-10c0.zip/node_modules/punycode/",\ + "packageDependencies": [\ + ["punycode", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["queue-microtask", [\ + ["npm:1.2.3", {\ + "packageLocation": "../../.yarn/berry/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-10c0.zip/node_modules/queue-microtask/",\ + "packageDependencies": [\ + ["queue-microtask", "npm:1.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["react", [\ + ["npm:18.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/react-npm-18.3.1-af38f3c1ae-10c0.zip/node_modules/react/",\ + "packageDependencies": [\ + ["react", "npm:18.3.1"],\ + ["loose-envify", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["react-dom", [\ + ["npm:18.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/react-dom-npm-18.3.1-a805663f38-10c0.zip/node_modules/react-dom/",\ + "packageDependencies": [\ + ["react-dom", "npm:18.3.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:a35456aa28e2090787d057b5a7413779c6570b9118d1a2c8b7708154ae579e1358d377abd1aac323cdaaed60daffd283c38d034b47aeff8fee431f3b753506d5#npm:18.3.1", {\ + "packageLocation": "./.yarn/__virtual__/react-dom-virtual-8247d514dd/3/.yarn/berry/cache/react-dom-npm-18.3.1-a805663f38-10c0.zip/node_modules/react-dom/",\ + "packageDependencies": [\ + ["react-dom", "virtual:a35456aa28e2090787d057b5a7413779c6570b9118d1a2c8b7708154ae579e1358d377abd1aac323cdaaed60daffd283c38d034b47aeff8fee431f3b753506d5#npm:18.3.1"],\ + ["@types/react", null],\ + ["loose-envify", "npm:1.4.0"],\ + ["react", "npm:18.3.1"],\ + ["scheduler", "npm:0.23.2"]\ + ],\ + "packagePeers": [\ + "@types/react",\ + "react"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["readable-stream", [\ + ["npm:3.6.2", {\ + "packageLocation": "../../.yarn/berry/cache/readable-stream-npm-3.6.2-d2a6069158-10c0.zip/node_modules/readable-stream/",\ + "packageDependencies": [\ + ["readable-stream", "npm:3.6.2"],\ + ["inherits", "npm:2.0.4"],\ + ["string_decoder", "npm:1.3.0"],\ + ["util-deprecate", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regenerate", [\ + ["npm:1.4.2", {\ + "packageLocation": "../../.yarn/berry/cache/regenerate-npm-1.4.2-b296c5b63a-10c0.zip/node_modules/regenerate/",\ + "packageDependencies": [\ + ["regenerate", "npm:1.4.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regenerate-unicode-properties", [\ + ["npm:10.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/regenerate-unicode-properties-npm-10.1.1-07b52ba05f-10c0.zip/node_modules/regenerate-unicode-properties/",\ + "packageDependencies": [\ + ["regenerate-unicode-properties", "npm:10.1.1"],\ + ["regenerate", "npm:1.4.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regenerator-runtime", [\ + ["npm:0.14.1", {\ + "packageLocation": "../../.yarn/berry/cache/regenerator-runtime-npm-0.14.1-a6c97c609a-10c0.zip/node_modules/regenerator-runtime/",\ + "packageDependencies": [\ + ["regenerator-runtime", "npm:0.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regenerator-transform", [\ + ["npm:0.15.2", {\ + "packageLocation": "../../.yarn/berry/cache/regenerator-transform-npm-0.15.2-109e57a69f-10c0.zip/node_modules/regenerator-transform/",\ + "packageDependencies": [\ + ["regenerator-transform", "npm:0.15.2"],\ + ["@babel/runtime", "npm:7.25.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regexpu-core", [\ + ["npm:5.3.2", {\ + "packageLocation": "../../.yarn/berry/cache/regexpu-core-npm-5.3.2-89effc52a2-10c0.zip/node_modules/regexpu-core/",\ + "packageDependencies": [\ + ["regexpu-core", "npm:5.3.2"],\ + ["@babel/regjsgen", "npm:0.8.0"],\ + ["regenerate", "npm:1.4.2"],\ + ["regenerate-unicode-properties", "npm:10.1.1"],\ + ["regjsparser", "npm:0.9.1"],\ + ["unicode-match-property-ecmascript", "npm:2.0.0"],\ + ["unicode-match-property-value-ecmascript", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["regjsparser", [\ + ["npm:0.9.1", {\ + "packageLocation": "../../.yarn/berry/cache/regjsparser-npm-0.9.1-47cd7c2ee2-10c0.zip/node_modules/regjsparser/",\ + "packageDependencies": [\ + ["regjsparser", "npm:0.9.1"],\ + ["jsesc", "npm:0.5.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["resolve", [\ + ["patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d", {\ + "packageLocation": "../../.yarn/berry/cache/resolve-patch-4254c24959-10c0.zip/node_modules/resolve/",\ + "packageDependencies": [\ + ["resolve", "patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"],\ + ["is-core-module", "npm:2.15.0"],\ + ["path-parse", "npm:1.0.7"],\ + ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["resolve-from", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/resolve-from-npm-4.0.0-f758ec21bf-10c0.zip/node_modules/resolve-from/",\ + "packageDependencies": [\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["retry", [\ + ["npm:0.12.0", {\ + "packageLocation": "../../.yarn/berry/cache/retry-npm-0.12.0-72ac7fb4cc-10c0.zip/node_modules/retry/",\ + "packageDependencies": [\ + ["retry", "npm:0.12.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["reusify", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/reusify-npm-1.0.4-95ac4aec11-10c0.zip/node_modules/reusify/",\ + "packageDependencies": [\ + ["reusify", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ripemd160", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/ripemd160-npm-2.0.2-7b1fb8dc76-10c0.zip/node_modules/ripemd160/",\ + "packageDependencies": [\ + ["ripemd160", "npm:2.0.2"],\ + ["hash-base", "npm:3.1.0"],\ + ["inherits", "npm:2.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rollup", [\ + ["npm:4.19.2", {\ + "packageLocation": "../../.yarn/berry/cache/rollup-npm-4.19.2-163d73d4e2-10c0.zip/node_modules/rollup/",\ + "packageDependencies": [\ + ["rollup", "npm:4.19.2"],\ + ["@rollup/rollup-android-arm-eabi", "npm:4.19.2"],\ + ["@rollup/rollup-android-arm64", "npm:4.19.2"],\ + ["@rollup/rollup-darwin-arm64", "npm:4.19.2"],\ + ["@rollup/rollup-darwin-x64", "npm:4.19.2"],\ + ["@rollup/rollup-linux-arm-gnueabihf", "npm:4.19.2"],\ + ["@rollup/rollup-linux-arm-musleabihf", "npm:4.19.2"],\ + ["@rollup/rollup-linux-arm64-gnu", "npm:4.19.2"],\ + ["@rollup/rollup-linux-arm64-musl", "npm:4.19.2"],\ + ["@rollup/rollup-linux-powerpc64le-gnu", "npm:4.19.2"],\ + ["@rollup/rollup-linux-riscv64-gnu", "npm:4.19.2"],\ + ["@rollup/rollup-linux-s390x-gnu", "npm:4.19.2"],\ + ["@rollup/rollup-linux-x64-gnu", "npm:4.19.2"],\ + ["@rollup/rollup-linux-x64-musl", "npm:4.19.2"],\ + ["@rollup/rollup-win32-arm64-msvc", "npm:4.19.2"],\ + ["@rollup/rollup-win32-ia32-msvc", "npm:4.19.2"],\ + ["@rollup/rollup-win32-x64-msvc", "npm:4.19.2"],\ + ["@types/estree", "npm:1.0.5"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["run-parallel", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/run-parallel-npm-1.2.0-3f47ff2034-10c0.zip/node_modules/run-parallel/",\ + "packageDependencies": [\ + ["run-parallel", "npm:1.2.0"],\ + ["queue-microtask", "npm:1.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rxjs", [\ + ["npm:7.8.1", {\ + "packageLocation": "../../.yarn/berry/cache/rxjs-npm-7.8.1-41c443a75b-10c0.zip/node_modules/rxjs/",\ + "packageDependencies": [\ + ["rxjs", "npm:7.8.1"],\ + ["tslib", "npm:2.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safe-buffer", [\ + ["npm:5.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/safe-buffer-npm-5.2.1-3481c8aa9b-10c0.zip/node_modules/safe-buffer/",\ + "packageDependencies": [\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safer-buffer", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/safer-buffer-npm-2.1.2-8d5c0b705e-10c0.zip/node_modules/safer-buffer/",\ + "packageDependencies": [\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["scheduler", [\ + ["npm:0.23.2", {\ + "packageLocation": "../../.yarn/berry/cache/scheduler-npm-0.23.2-6d1dd9c2b7-10c0.zip/node_modules/scheduler/",\ + "packageDependencies": [\ + ["scheduler", "npm:0.23.2"],\ + ["loose-envify", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["scrypt-js", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/scrypt-js-npm-3.0.1-fd2d3fa606-10c0.zip/node_modules/scrypt-js/",\ + "packageDependencies": [\ + ["scrypt-js", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["semver", [\ + ["npm:6.3.1", {\ + "packageLocation": "../../.yarn/berry/cache/semver-npm-6.3.1-bcba31fdbe-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:6.3.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.6.3", {\ + "packageLocation": "../../.yarn/berry/cache/semver-npm-7.6.3-57e82c14d5-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["sha.js", [\ + ["npm:2.4.11", {\ + "packageLocation": "../../.yarn/berry/cache/sha.js-npm-2.4.11-14868df4ca-10c0.zip/node_modules/sha.js/",\ + "packageDependencies": [\ + ["sha.js", "npm:2.4.11"],\ + ["inherits", "npm:2.0.4"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-command", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/shebang-command-npm-2.0.0-eb2b01921d-10c0.zip/node_modules/shebang-command/",\ + "packageDependencies": [\ + ["shebang-command", "npm:2.0.0"],\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-regex", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/shebang-regex-npm-3.0.0-899a0cd65e-10c0.zip/node_modules/shebang-regex/",\ + "packageDependencies": [\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["signal-exit", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/signal-exit-npm-4.1.0-61fb957687-10c0.zip/node_modules/signal-exit/",\ + "packageDependencies": [\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["smart-buffer", [\ + ["npm:4.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/smart-buffer-npm-4.2.0-5ac3f668bb-10c0.zip/node_modules/smart-buffer/",\ + "packageDependencies": [\ + ["smart-buffer", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["socks", [\ + ["npm:2.8.3", {\ + "packageLocation": "../../.yarn/berry/cache/socks-npm-2.8.3-3532b59899-10c0.zip/node_modules/socks/",\ + "packageDependencies": [\ + ["socks", "npm:2.8.3"],\ + ["ip-address", "npm:9.0.5"],\ + ["smart-buffer", "npm:4.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["socks-proxy-agent", [\ + ["npm:8.0.4", {\ + "packageLocation": "../../.yarn/berry/cache/socks-proxy-agent-npm-8.0.4-991722041a-10c0.zip/node_modules/socks-proxy-agent/",\ + "packageDependencies": [\ + ["socks-proxy-agent", "npm:8.0.4"],\ + ["agent-base", "npm:7.1.1"],\ + ["debug", "virtual:c9e1a4b59e37cb479517edede3bf2093b28c0ca1a9d0e517f3c345075bd1e468980b94b4957e389116607ee7155441dfd7d09e19a4229d5d09bcf06244401590#npm:4.3.6"],\ + ["socks", "npm:2.8.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map", [\ + ["npm:0.6.1", {\ + "packageLocation": "../../.yarn/berry/cache/source-map-npm-0.6.1-1a3621db16-10c0.zip/node_modules/source-map/",\ + "packageDependencies": [\ + ["source-map", "npm:0.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map-js", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/source-map-js-npm-1.2.0-6e63f357e5-10c0.zip/node_modules/source-map-js/",\ + "packageDependencies": [\ + ["source-map-js", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map-support", [\ + ["npm:0.5.21", {\ + "packageLocation": "../../.yarn/berry/cache/source-map-support-npm-0.5.21-09ca99e250-10c0.zip/node_modules/source-map-support/",\ + "packageDependencies": [\ + ["source-map-support", "npm:0.5.21"],\ + ["buffer-from", "npm:1.1.2"],\ + ["source-map", "npm:0.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["sprintf-js", [\ + ["npm:1.1.3", {\ + "packageLocation": "../../.yarn/berry/cache/sprintf-js-npm-1.1.3-b99efd75b2-10c0.zip/node_modules/sprintf-js/",\ + "packageDependencies": [\ + ["sprintf-js", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ssri", [\ + ["npm:10.0.6", {\ + "packageLocation": "../../.yarn/berry/cache/ssri-npm-10.0.6-6b8eaec5ce-10c0.zip/node_modules/ssri/",\ + "packageDependencies": [\ + ["ssri", "npm:10.0.6"],\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string-width", [\ + ["npm:4.2.3", {\ + "packageLocation": "../../.yarn/berry/cache/string-width-npm-4.2.3-2c27177bae-10c0.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["string-width", "npm:4.2.3"],\ + ["emoji-regex", "npm:8.0.0"],\ + ["is-fullwidth-code-point", "npm:3.0.0"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.2", {\ + "packageLocation": "../../.yarn/berry/cache/string-width-npm-5.1.2-bf60531341-10c0.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["string-width", "npm:5.1.2"],\ + ["eastasianwidth", "npm:0.2.0"],\ + ["emoji-regex", "npm:9.2.2"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string_decoder", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../.yarn/berry/cache/string_decoder-npm-1.3.0-2422117fd0-10c0.zip/node_modules/string_decoder/",\ + "packageDependencies": [\ + ["string_decoder", "npm:1.3.0"],\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-ansi", [\ + ["npm:6.0.1", {\ + "packageLocation": "../../.yarn/berry/cache/strip-ansi-npm-6.0.1-caddc7cb40-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["strip-ansi", "npm:6.0.1"],\ + ["ansi-regex", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/strip-ansi-npm-7.1.0-7453b80b79-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["strip-ansi", "npm:7.1.0"],\ + ["ansi-regex", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-json-comments", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/strip-json-comments-npm-3.1.1-dcb2324823-10c0.zip/node_modules/strip-json-comments/",\ + "packageDependencies": [\ + ["strip-json-comments", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["supports-color", [\ + ["npm:5.5.0", {\ + "packageLocation": "../../.yarn/berry/cache/supports-color-npm-5.5.0-183ac537bc-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["supports-color", "npm:5.5.0"],\ + ["has-flag", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/supports-color-npm-7.2.0-606bfcf7da-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["supports-color", "npm:7.2.0"],\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["supports-preserve-symlinks-flag", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-10c0.zip/node_modules/supports-preserve-symlinks-flag/",\ + "packageDependencies": [\ + ["supports-preserve-symlinks-flag", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["systemjs", [\ + ["npm:6.15.1", {\ + "packageLocation": "../../.yarn/berry/cache/systemjs-npm-6.15.1-4ff7fdfc01-10c0.zip/node_modules/systemjs/",\ + "packageDependencies": [\ + ["systemjs", "npm:6.15.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tar", [\ + ["npm:6.2.1", {\ + "packageLocation": "../../.yarn/berry/cache/tar-npm-6.2.1-237800bb20-10c0.zip/node_modules/tar/",\ + "packageDependencies": [\ + ["tar", "npm:6.2.1"],\ + ["chownr", "npm:2.0.0"],\ + ["fs-minipass", "npm:2.1.0"],\ + ["minipass", "npm:5.0.0"],\ + ["minizlib", "npm:2.1.2"],\ + ["mkdirp", "npm:1.0.4"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["terser", [\ + ["npm:5.31.3", {\ + "packageLocation": "../../.yarn/berry/cache/terser-npm-5.31.3-0d82b5f3a6-10c0.zip/node_modules/terser/",\ + "packageDependencies": [\ + ["terser", "npm:5.31.3"],\ + ["@jridgewell/source-map", "npm:0.3.6"],\ + ["acorn", "npm:8.12.1"],\ + ["commander", "npm:2.20.3"],\ + ["source-map-support", "npm:0.5.21"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["text-table", [\ + ["npm:0.2.0", {\ + "packageLocation": "../../.yarn/berry/cache/text-table-npm-0.2.0-d92a778b59-10c0.zip/node_modules/text-table/",\ + "packageDependencies": [\ + ["text-table", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["to-fast-properties", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/to-fast-properties-npm-2.0.0-0dc60cc481-10c0.zip/node_modules/to-fast-properties/",\ + "packageDependencies": [\ + ["to-fast-properties", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tslib", [\ + ["npm:2.6.3", {\ + "packageLocation": "../../.yarn/berry/cache/tslib-npm-2.6.3-0fd136b3be-10c0.zip/node_modules/tslib/",\ + "packageDependencies": [\ + ["tslib", "npm:2.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["type-check", [\ + ["npm:0.4.0", {\ + "packageLocation": "../../.yarn/berry/cache/type-check-npm-0.4.0-60565800ce-10c0.zip/node_modules/type-check/",\ + "packageDependencies": [\ + ["type-check", "npm:0.4.0"],\ + ["prelude-ls", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unicode-canonical-property-names-ecmascript", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/unicode-canonical-property-names-ecmascript-npm-2.0.0-d2d8554a14-10c0.zip/node_modules/unicode-canonical-property-names-ecmascript/",\ + "packageDependencies": [\ + ["unicode-canonical-property-names-ecmascript", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unicode-match-property-ecmascript", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/unicode-match-property-ecmascript-npm-2.0.0-97a00fd52c-10c0.zip/node_modules/unicode-match-property-ecmascript/",\ + "packageDependencies": [\ + ["unicode-match-property-ecmascript", "npm:2.0.0"],\ + ["unicode-canonical-property-names-ecmascript", "npm:2.0.0"],\ + ["unicode-property-aliases-ecmascript", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unicode-match-property-value-ecmascript", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/unicode-match-property-value-ecmascript-npm-2.1.0-65e24443e6-10c0.zip/node_modules/unicode-match-property-value-ecmascript/",\ + "packageDependencies": [\ + ["unicode-match-property-value-ecmascript", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unicode-property-aliases-ecmascript", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/unicode-property-aliases-ecmascript-npm-2.1.0-46779595f4-10c0.zip/node_modules/unicode-property-aliases-ecmascript/",\ + "packageDependencies": [\ + ["unicode-property-aliases-ecmascript", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unique-filename", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/unique-filename-npm-3.0.0-77d68e0a45-10c0.zip/node_modules/unique-filename/",\ + "packageDependencies": [\ + ["unique-filename", "npm:3.0.0"],\ + ["unique-slug", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["unique-slug", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/unique-slug-npm-4.0.0-e6b08f28aa-10c0.zip/node_modules/unique-slug/",\ + "packageDependencies": [\ + ["unique-slug", "npm:4.0.0"],\ + ["imurmurhash", "npm:0.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["update-browserslist-db", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-10c0.zip/node_modules/update-browserslist-db/",\ + "packageDependencies": [\ + ["update-browserslist-db", "npm:1.1.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:4e727c7b5b033f8d5ac7299f9860cb61f5802656f7b4fea2accd32d68dc1a767387a6d23f0724065d3c65e61cb31b9eec2438ae937ce36e7602b4586ede55af6#npm:1.1.0", {\ + "packageLocation": "./.yarn/__virtual__/update-browserslist-db-virtual-e5d722ea57/3/.yarn/berry/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-10c0.zip/node_modules/update-browserslist-db/",\ + "packageDependencies": [\ + ["update-browserslist-db", "virtual:4e727c7b5b033f8d5ac7299f9860cb61f5802656f7b4fea2accd32d68dc1a767387a6d23f0724065d3c65e61cb31b9eec2438ae937ce36e7602b4586ede55af6#npm:1.1.0"],\ + ["@types/browserslist", null],\ + ["browserslist", "npm:4.23.3"],\ + ["escalade", "npm:3.1.2"],\ + ["picocolors", "npm:1.0.1"]\ + ],\ + "packagePeers": [\ + "@types/browserslist",\ + "browserslist"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uri-js", [\ + ["npm:4.4.1", {\ + "packageLocation": "../../.yarn/berry/cache/uri-js-npm-4.4.1-66d11cbcaf-10c0.zip/node_modules/uri-js/",\ + "packageDependencies": [\ + ["uri-js", "npm:4.4.1"],\ + ["punycode", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["util-deprecate", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/util-deprecate-npm-1.0.2-e3fe1a219c-10c0.zip/node_modules/util-deprecate/",\ + "packageDependencies": [\ + ["util-deprecate", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["utility-types", [\ + ["npm:3.11.0", {\ + "packageLocation": "../../.yarn/berry/cache/utility-types-npm-3.11.0-5b9c56f39f-10c0.zip/node_modules/utility-types/",\ + "packageDependencies": [\ + ["utility-types", "npm:3.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["vite", [\ + ["npm:5.3.5", {\ + "packageLocation": "../../.yarn/berry/cache/vite-npm-5.3.5-3cbb728ee4-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "npm:5.3.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.3.5", {\ + "packageLocation": "./.yarn/__virtual__/vite-virtual-accd15cc84/3/.yarn/berry/cache/vite-npm-5.3.5-3cbb728ee4-10c0.zip/node_modules/vite/",\ + "packageDependencies": [\ + ["vite", "virtual:29a9cb98b59df74f3e5c084915c1e5e45cd1599774b32da78976838f0171b5e6766ca10ed34782383daa7077f25643ea001f569856c8a75bf281b311549e3469#npm:5.3.5"],\ + ["@types/less", null],\ + ["@types/lightningcss", null],\ + ["@types/node", null],\ + ["@types/sass", null],\ + ["@types/stylus", null],\ + ["@types/sugarss", null],\ + ["@types/terser", null],\ + ["esbuild", "npm:0.21.5"],\ + ["fsevents", "patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"],\ + ["less", null],\ + ["lightningcss", null],\ + ["postcss", "npm:8.4.40"],\ + ["rollup", "npm:4.19.2"],\ + ["sass", null],\ + ["stylus", null],\ + ["sugarss", null],\ + ["terser", "npm:5.31.3"]\ + ],\ + "packagePeers": [\ + "@types/less",\ + "@types/lightningcss",\ + "@types/node",\ + "@types/sass",\ + "@types/stylus",\ + "@types/sugarss",\ + "@types/terser",\ + "less",\ + "lightningcss",\ + "sass",\ + "stylus",\ + "sugarss",\ + "terser"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["which", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-10c0.zip/node_modules/which/",\ + "packageDependencies": [\ + ["which", "npm:2.0.2"],\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/which-npm-4.0.0-dd31cd4928-10c0.zip/node_modules/which/",\ + "packageDependencies": [\ + ["which", "npm:4.0.0"],\ + ["isexe", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["word-wrap", [\ + ["npm:1.2.5", {\ + "packageLocation": "../../.yarn/berry/cache/word-wrap-npm-1.2.5-42d00c4b09-10c0.zip/node_modules/word-wrap/",\ + "packageDependencies": [\ + ["word-wrap", "npm:1.2.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrap-ansi", [\ + ["npm:7.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["wrap-ansi", "npm:7.0.0"],\ + ["ansi-styles", "npm:4.3.0"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["wrap-ansi", "npm:8.1.0"],\ + ["ansi-styles", "npm:6.2.1"],\ + ["string-width", "npm:5.1.2"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ws", [\ + ["npm:7.4.6", {\ + "packageLocation": "../../.yarn/berry/cache/ws-npm-7.4.6-9c9a725604-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:7.4.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:7.5.10", {\ + "packageLocation": "../../.yarn/berry/cache/ws-npm-7.5.10-878ccb886b-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:7.5.10"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:12fb8ec36f722e0769f1722c51fa8bc6ad2ed4e7b66e457888da8ccd11ed2cc7b2c22ebb0231589851e269aeac627113460306356ebb3249cfe1f409bd837edf#npm:7.5.10", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-dcc2f76ac2/3/.yarn/berry/cache/ws-npm-7.5.10-878ccb886b-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:12fb8ec36f722e0769f1722c51fa8bc6ad2ed4e7b66e457888da8ccd11ed2cc7b2c22ebb0231589851e269aeac627113460306356ebb3249cfe1f409bd837edf#npm:7.5.10"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:88293ff29fa54efecc98d655f7a7551b282025b3465bc23ca5bb7a89a31c17930a7319e98225cf138bf4e6ccead5b30ae3c800738697b87af3441226d65f7ee3#npm:7.4.6", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-e1e964a4e5/3/.yarn/berry/cache/ws-npm-7.4.6-9c9a725604-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "virtual:88293ff29fa54efecc98d655f7a7551b282025b3465bc23ca5bb7a89a31c17930a7319e98225cf138bf4e6ccead5b30ae3c800738697b87af3441226d65f7ee3#npm:7.4.6"],\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yallist", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../.yarn/berry/cache/yallist-npm-3.1.1-a568a556b4-10c0.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-10c0.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yocto-queue", [\ + ["npm:0.1.0", {\ + "packageLocation": "../../.yarn/berry/cache/yocto-queue-npm-0.1.0-c6c9a7db29-10c0.zip/node_modules/yocto-queue/",\ + "packageDependencies": [\ + ["yocto-queue", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]]\ + ]\ +}'; + +function $$SETUP_STATE(hydrateRuntimeState, basePath) { + return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +} + +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const os = require('os'); +const events = require('events'); +const nodeUtils = require('util'); +const stream = require('stream'); +const zlib = require('zlib'); +const require$$0 = require('module'); +const StringDecoder = require('string_decoder'); +const url = require('url'); +const buffer = require('buffer'); +const readline = require('readline'); +const assert = require('assert'); + +const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + const n = Object.create(null); + if (e) { + for (const k in e) { + if (k !== 'default') { + const d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: () => e[k] + }); + } + } + } + n.default = e; + return Object.freeze(n); +} + +const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +const path__default = /*#__PURE__*/_interopDefaultLegacy(path); +const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); +const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); +const buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer); +const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); + +const S_IFMT = 61440; +const S_IFDIR = 16384; +const S_IFREG = 32768; +const S_IFLNK = 40960; +const SAFE_TIME = 456789e3; + +function makeError$1(code, message) { + return Object.assign(new Error(`${code}: ${message}`), { code }); +} +function EBUSY(message) { + return makeError$1(`EBUSY`, message); +} +function ENOSYS(message, reason) { + return makeError$1(`ENOSYS`, `${message}, ${reason}`); +} +function EINVAL(reason) { + return makeError$1(`EINVAL`, `invalid argument, ${reason}`); +} +function EBADF(reason) { + return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); +} +function ENOENT(reason) { + return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); +} +function ENOTDIR(reason) { + return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); +} +function EISDIR(reason) { + return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); +} +function EEXIST(reason) { + return makeError$1(`EEXIST`, `file already exists, ${reason}`); +} +function EROFS(reason) { + return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); +} +function ENOTEMPTY(reason) { + return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); +} +function EOPNOTSUPP(reason) { + return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); +} +function ERR_DIR_CLOSED() { + return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); +} + +const DEFAULT_MODE = S_IFREG | 420; +class StatEntry { + constructor() { + this.uid = 0; + this.gid = 0; + this.size = 0; + this.blksize = 0; + this.atimeMs = 0; + this.mtimeMs = 0; + this.ctimeMs = 0; + this.birthtimeMs = 0; + this.atime = new Date(0); + this.mtime = new Date(0); + this.ctime = new Date(0); + this.birthtime = new Date(0); + this.dev = 0; + this.ino = 0; + this.mode = DEFAULT_MODE; + this.nlink = 1; + this.rdev = 0; + this.blocks = 1; + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +class BigIntStatsEntry { + constructor() { + this.uid = BigInt(0); + this.gid = BigInt(0); + this.size = BigInt(0); + this.blksize = BigInt(0); + this.atimeMs = BigInt(0); + this.mtimeMs = BigInt(0); + this.ctimeMs = BigInt(0); + this.birthtimeMs = BigInt(0); + this.atimeNs = BigInt(0); + this.mtimeNs = BigInt(0); + this.ctimeNs = BigInt(0); + this.birthtimeNs = BigInt(0); + this.atime = new Date(0); + this.mtime = new Date(0); + this.ctime = new Date(0); + this.birthtime = new Date(0); + this.dev = BigInt(0); + this.ino = BigInt(0); + this.mode = BigInt(DEFAULT_MODE); + this.nlink = BigInt(1); + this.rdev = BigInt(0); + this.blocks = BigInt(1); + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); + } +} +function makeDefaultStats() { + return new StatEntry(); +} +function clearStats(stats) { + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + stats[key] = 0; + } else if (typeof element === `bigint`) { + stats[key] = BigInt(0); + } else if (nodeUtils__namespace.types.isDate(element)) { + stats[key] = new Date(0); + } + } + } + return stats; +} +function convertToBigIntStats(stats) { + const bigintStats = new BigIntStatsEntry(); + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + bigintStats[key] = BigInt(element); + } else if (nodeUtils__namespace.types.isDate(element)) { + bigintStats[key] = new Date(element); + } + } + } + bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6); + bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6); + bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6); + bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6); + return bigintStats; +} +function areStatsEqual(a, b) { + if (a.atimeMs !== b.atimeMs) + return false; + if (a.birthtimeMs !== b.birthtimeMs) + return false; + if (a.blksize !== b.blksize) + return false; + if (a.blocks !== b.blocks) + return false; + if (a.ctimeMs !== b.ctimeMs) + return false; + if (a.dev !== b.dev) + return false; + if (a.gid !== b.gid) + return false; + if (a.ino !== b.ino) + return false; + if (a.isBlockDevice() !== b.isBlockDevice()) + return false; + if (a.isCharacterDevice() !== b.isCharacterDevice()) + return false; + if (a.isDirectory() !== b.isDirectory()) + return false; + if (a.isFIFO() !== b.isFIFO()) + return false; + if (a.isFile() !== b.isFile()) + return false; + if (a.isSocket() !== b.isSocket()) + return false; + if (a.isSymbolicLink() !== b.isSymbolicLink()) + return false; + if (a.mode !== b.mode) + return false; + if (a.mtimeMs !== b.mtimeMs) + return false; + if (a.nlink !== b.nlink) + return false; + if (a.rdev !== b.rdev) + return false; + if (a.size !== b.size) + return false; + if (a.uid !== b.uid) + return false; + const aN = a; + const bN = b; + if (aN.atimeNs !== bN.atimeNs) + return false; + if (aN.mtimeNs !== bN.mtimeNs) + return false; + if (aN.ctimeNs !== bN.ctimeNs) + return false; + if (aN.birthtimeNs !== bN.birthtimeNs) + return false; + return true; +} + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const Filename = { + home: `~`, + nodeModules: `node_modules`, + manifest: `package.json`, + lockfile: `yarn.lock`, + virtual: `__virtual__`, + pnpJs: `.pnp.js`, + pnpCjs: `.pnp.cjs`, + pnpData: `.pnp.data.json`, + pnpEsmLoader: `.pnp.loader.mjs`, + rc: `.yarnrc.yml`, + env: `.env` +}; +const npath = Object.create(path__default.default); +const ppath = Object.create(path__default.default.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path__default.default.posix.resolve(...segments); + } else { + return path__default.default.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch (e) { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class CustomDir { + constructor(path, nextDirent, opts = {}) { + this.path = path; + this.nextDirent = nextDirent; + this.opts = opts; + this.closed = false; + } + throwIfClosed() { + if (this.closed) { + throw ERR_DIR_CLOSED(); + } + } + async *[Symbol.asyncIterator]() { + try { + let dirent; + while ((dirent = await this.read()) !== null) { + yield dirent; + } + } finally { + await this.close(); + } + } + read(cb) { + const dirent = this.readSync(); + if (typeof cb !== `undefined`) + return cb(null, dirent); + return Promise.resolve(dirent); + } + readSync() { + this.throwIfClosed(); + return this.nextDirent(); + } + close(cb) { + this.closeSync(); + if (typeof cb !== `undefined`) + return cb(null); + return Promise.resolve(); + } + closeSync() { + this.throwIfClosed(); + this.opts.onClose?.(); + this.closed = true; + } +} +function opendir(fakeFs, path, entries, opts) { + const nextDirent = () => { + const filename = entries.shift(); + if (typeof filename === `undefined`) + return null; + const entryPath = fakeFs.pathUtils.join(path, filename); + return Object.assign(fakeFs.statSync(entryPath), { + name: filename, + path: void 0 + }); + }; + return new CustomDir(path, nextDirent, opts); +} + +function assertStatus(current, expected) { + if (current !== expected) { + throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); + } +} +class CustomStatWatcher extends events.EventEmitter { + constructor(fakeFs, path, { bigint = false } = {}) { + super(); + this.status = "ready" /* Ready */; + this.changeListeners = /* @__PURE__ */ new Map(); + this.startTimeout = null; + this.fakeFs = fakeFs; + this.path = path; + this.bigint = bigint; + this.lastStats = this.stat(); + } + static create(fakeFs, path, opts) { + const statWatcher = new CustomStatWatcher(fakeFs, path, opts); + statWatcher.start(); + return statWatcher; + } + start() { + assertStatus(this.status, "ready" /* Ready */); + this.status = "running" /* Running */; + this.startTimeout = setTimeout(() => { + this.startTimeout = null; + if (!this.fakeFs.existsSync(this.path)) { + this.emit("change" /* Change */, this.lastStats, this.lastStats); + } + }, 3); + } + stop() { + assertStatus(this.status, "running" /* Running */); + this.status = "stopped" /* Stopped */; + if (this.startTimeout !== null) { + clearTimeout(this.startTimeout); + this.startTimeout = null; + } + this.emit("stop" /* Stop */); + } + stat() { + try { + return this.fakeFs.statSync(this.path, { bigint: this.bigint }); + } catch (error) { + const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); + return clearStats(statInstance); + } + } + makeInterval(opts) { + const interval = setInterval(() => { + const currentStats = this.stat(); + const previousStats = this.lastStats; + if (areStatsEqual(currentStats, previousStats)) + return; + this.lastStats = currentStats; + this.emit("change" /* Change */, currentStats, previousStats); + }, opts.interval); + return opts.persistent ? interval : interval.unref(); + } + registerChangeListener(listener, opts) { + this.addListener("change" /* Change */, listener); + this.changeListeners.set(listener, this.makeInterval(opts)); + } + unregisterChangeListener(listener) { + this.removeListener("change" /* Change */, listener); + const interval = this.changeListeners.get(listener); + if (typeof interval !== `undefined`) + clearInterval(interval); + this.changeListeners.delete(listener); + } + unregisterAllChangeListeners() { + for (const listener of this.changeListeners.keys()) { + this.unregisterChangeListener(listener); + } + } + hasChangeListeners() { + return this.changeListeners.size > 0; + } + ref() { + for (const interval of this.changeListeners.values()) + interval.ref(); + return this; + } + unref() { + for (const interval of this.changeListeners.values()) + interval.unref(); + return this; + } +} + +const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); +function watchFile(fakeFs, path, a, b) { + let bigint; + let persistent; + let interval; + let listener; + switch (typeof a) { + case `function`: + { + bigint = false; + persistent = true; + interval = 5007; + listener = a; + } + break; + default: + { + ({ + bigint = false, + persistent = true, + interval = 5007 + } = a); + listener = b; + } + break; + } + let statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); + let statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) { + statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); + statWatchers.set(path, statWatcher); + } + statWatcher.registerChangeListener(listener, { persistent, interval }); + return statWatcher; +} +function unwatchFile(fakeFs, path, cb) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + const statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) + return; + if (typeof cb === `undefined`) + statWatcher.unregisterAllChangeListeners(); + else + statWatcher.unregisterChangeListener(cb); + if (!statWatcher.hasChangeListeners()) { + statWatcher.stop(); + statWatchers.delete(path); + } +} +function unwatchAllFiles(fakeFs) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + for (const path of statWatchers.keys()) { + unwatchFile(fakeFs, path); + } +} + +class FakeFS { + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = crypto.createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch (error) { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch (error) { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch (error2) { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch (error) { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return os.EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + constructor(realFs = fs__default.default) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const MOUNT_MASK = 4278190080; +class MountFS extends BasePortableFakeFS { + constructor({ baseFs = new NodeFS(), filter = null, magicByte = 42, maxOpenFiles = Infinity, useCache = true, maxAge = 5e3, typeCheck = fs.constants.S_IFREG, getMountPoint, factoryPromise, factorySync }) { + if (Math.floor(magicByte) !== magicByte || !(magicByte > 1 && magicByte <= 127)) + throw new Error(`The magic byte must be set to a round value between 1 and 127 included`); + super(); + this.fdMap = /* @__PURE__ */ new Map(); + this.nextFd = 3; + this.isMount = /* @__PURE__ */ new Set(); + this.notMount = /* @__PURE__ */ new Set(); + this.realPaths = /* @__PURE__ */ new Map(); + this.limitOpenFilesTimeout = null; + this.baseFs = baseFs; + this.mountInstances = useCache ? /* @__PURE__ */ new Map() : null; + this.factoryPromise = factoryPromise; + this.factorySync = factorySync; + this.filter = filter; + this.getMountPoint = getMountPoint; + this.magic = magicByte << 24; + this.maxAge = maxAge; + this.maxOpenFiles = maxOpenFiles; + this.typeCheck = typeCheck; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + } + } + } + discardAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.discardAndClose?.(); + this.mountInstances.delete(path); + } + } + } + resolve(p) { + return this.baseFs.resolve(p); + } + remapFd(mountFs, fd) { + const remappedFd = this.nextFd++ | this.magic; + this.fdMap.set(remappedFd, [mountFs, fd]); + return remappedFd; + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (mountFs, { subPath }) => { + return this.remapFd(mountFs, await mountFs.openPromise(subPath, flags, mode)); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (mountFs, { subPath }) => { + return this.remapFd(mountFs, mountFs.openSync(subPath, flags, mode)); + }); + } + async opendirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.opendirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.opendirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + opendirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.opendirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.opendirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readPromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const [mountFs, realFd] = entry; + return await mountFs.readPromise(realFd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.readSync(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`readSync`); + const [mountFs, realFd] = entry; + return mountFs.readSync(realFd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`write`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return await mountFs.writePromise(realFd, buffer, offset); + } else { + return await mountFs.writePromise(realFd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`writeSync`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return mountFs.writeSync(realFd, buffer, offset); + } else { + return mountFs.writeSync(realFd, buffer, offset, length, position); + } + } + async closePromise(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.closePromise(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`close`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return await mountFs.closePromise(realFd); + } + closeSync(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.closeSync(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`closeSync`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return mountFs.closeSync(realFd); + } + createReadStream(p, opts) { + if (p === null) + return this.baseFs.createReadStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (mountFs, { archivePath, subPath }) => { + const stream = mountFs.createReadStream(subPath, opts); + stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); + return stream; + }); + } + createWriteStream(p, opts) { + if (p === null) + return this.baseFs.createWriteStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = await this.baseFs.realpathPromise(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await mountFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = this.baseFs.realpathSync(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, mountFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (mountFs, { subPath }) => { + return mountFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (mountFs, { subPath }) => { + return await mountFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (mountFs, { subPath }) => { + return mountFs.accessSync(subPath, mode); + }); + } + async statPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.statPromise(subPath, opts); + }); + } + statSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.statSync(subPath, opts); + }); + } + async fstatPromise(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatPromise(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstat`); + const [mountFs, realFd] = entry; + return mountFs.fstatPromise(realFd, opts); + } + fstatSync(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatSync(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const [mountFs, realFd] = entry; + return mountFs.fstatSync(realFd, opts); + } + async lstatPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.lstatPromise(subPath, opts); + }); + } + lstatSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.lstatSync(subPath, opts); + }); + } + async fchmodPromise(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodPromise(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmod`); + const [mountFs, realFd] = entry; + return mountFs.fchmodPromise(realFd, mask); + } + fchmodSync(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodSync(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmodSync`); + const [mountFs, realFd] = entry; + return mountFs.fchmodSync(realFd, mask); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (mountFs, { subPath }) => { + return await mountFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (mountFs, { subPath }) => { + return mountFs.chmodSync(subPath, mask); + }); + } + async fchownPromise(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownPromise(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchown`); + const [zipFs, realFd] = entry; + return zipFs.fchownPromise(realFd, uid, gid); + } + fchownSync(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownSync(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchownSync`); + const [zipFs, realFd] = entry; + return zipFs.fchownSync(realFd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chownPromise(p, uid, gid); + }, async (mountFs, { subPath }) => { + return await mountFs.chownPromise(subPath, uid, gid); + }); + } + chownSync(p, uid, gid) { + return this.makeCallSync(p, () => { + return this.baseFs.chownSync(p, uid, gid); + }, (mountFs, { subPath }) => { + return mountFs.chownSync(subPath, uid, gid); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (mountFsO, { subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return await mountFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (mountFsO, { subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return mountFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP2); + } catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP2, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (mountFsD, { subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, async (mountFsS, { subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(mountFsS, subPathS, this.baseFs, destP); + }, async (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return await fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return await mountFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP2); + } catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP2, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (mountFsD, { subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, (mountFsS, { subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(mountFsS, subPathS, this.baseFs, destP); + }, (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return mountFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async appendFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.appendFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.appendFilePromise(subPath, content, opts); + }); + } + appendFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.appendFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.appendFileSync(subPath, content, opts); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.utimesSync(subPath, atime, mtime); + }); + } + async lutimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lutimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.lutimesPromise(subPath, atime, mtime); + }); + } + lutimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.lutimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.lutimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.mkdirPromise(subPath, opts); + }); + } + mkdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.mkdirSync(subPath, opts); + }); + } + async rmdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmdirPromise(subPath, opts); + }); + } + rmdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmdirSync(subPath, opts); + }); + } + async rmPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmPromise(subPath, opts); + }); + } + rmSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmSync(subPath, opts); + }); + } + async linkPromise(existingP, newP) { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.linkPromise(existingP, newP); + }, async (mountFs, { subPath }) => { + return await mountFs.linkPromise(existingP, subPath); + }); + } + linkSync(existingP, newP) { + return this.makeCallSync(newP, () => { + return this.baseFs.linkSync(existingP, newP); + }, (mountFs, { subPath }) => { + return mountFs.linkSync(existingP, subPath); + }); + } + async symlinkPromise(target, p, type) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p, type); + }, async (mountFs, { subPath }) => { + return await mountFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p, type) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p, type); + }, (mountFs, { subPath }) => { + return mountFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + return await this.baseFs.readFilePromise(p, encoding); + }, async (mountFs, { subPath }) => { + return await mountFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + return this.baseFs.readFileSync(p, encoding); + }, (mountFs, { subPath }) => { + return mountFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.readdirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + readdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.readdirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.readlinkSync(subPath); + }); + } + async truncatePromise(p, len) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.truncatePromise(p, len); + }, async (mountFs, { subPath }) => { + return await mountFs.truncatePromise(subPath, len); + }); + } + truncateSync(p, len) { + return this.makeCallSync(p, () => { + return this.baseFs.truncateSync(p, len); + }, (mountFs, { subPath }) => { + return mountFs.truncateSync(subPath, len); + }); + } + async ftruncatePromise(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncatePromise(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncate`); + const [mountFs, realFd] = entry; + return mountFs.ftruncatePromise(realFd, len); + } + ftruncateSync(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncateSync(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncateSync`); + const [mountFs, realFd] = entry; + return mountFs.ftruncateSync(realFd, len); + } + watch(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watch( + p, + a, + b + ); + }, (mountFs, { subPath }) => { + return mountFs.watch( + subPath, + a, + b + ); + }); + } + watchFile(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watchFile( + p, + a, + b + ); + }, () => { + return watchFile(this, p, a, b); + }); + } + unwatchFile(p, cb) { + return this.makeCallSync(p, () => { + return this.baseFs.unwatchFile(p, cb); + }, () => { + return unwatchFile(this, p, cb); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return await discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return await discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return await discard(); + return await this.getMountPromise(mountInfo.archivePath, async (mountFs) => await accept(mountFs, mountInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return discard(); + return this.getMountSync(mountInfo.archivePath, (mountFs) => accept(mountFs, mountInfo)); + } + findMount(p) { + if (this.filter && !this.filter.test(p)) + return null; + let filePath = ``; + while (true) { + const pathPartWithArchive = p.substring(filePath.length); + const mountPoint = this.getMountPoint(pathPartWithArchive, filePath); + if (!mountPoint) + return null; + filePath = this.pathUtils.join(filePath, mountPoint); + if (!this.isMount.has(filePath)) { + if (this.notMount.has(filePath)) + continue; + try { + if (this.typeCheck !== null && (this.baseFs.lstatSync(filePath).mode & fs.constants.S_IFMT) !== this.typeCheck) { + this.notMount.add(filePath); + continue; + } + } catch { + return null; + } + this.isMount.add(filePath); + } + return { + archivePath: filePath, + subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) + }; + } + } + limitOpenFiles(max) { + if (this.mountInstances === null) + return; + const now = Date.now(); + let nextExpiresAt = now + this.maxAge; + let closeCount = max === null ? 0 : this.mountInstances.size - max; + for (const [path, { childFs, expiresAt, refCount }] of this.mountInstances.entries()) { + if (refCount !== 0 || childFs.hasOpenFileHandles?.()) { + continue; + } else if (now >= expiresAt) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + continue; + } else if (max === null || closeCount <= 0) { + nextExpiresAt = expiresAt; + break; + } + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + } + if (this.limitOpenFilesTimeout === null && (max === null && this.mountInstances.size > 0 || max !== null) && isFinite(nextExpiresAt)) { + this.limitOpenFilesTimeout = setTimeout(() => { + this.limitOpenFilesTimeout = null; + this.limitOpenFiles(null); + }, nextExpiresAt - now).unref(); + } + } + async getMountPromise(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + const createFsInstance = await this.factoryPromise(this.baseFs, p); + cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: createFsInstance(), + expiresAt: 0, + refCount: 0 + }; + } + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + cachedMountFs.refCount += 1; + try { + return await accept(cachedMountFs.childFs); + } finally { + cachedMountFs.refCount -= 1; + } + } else { + const mountFs = (await this.factoryPromise(this.baseFs, p))(); + try { + return await accept(mountFs); + } finally { + mountFs.saveAndClose?.(); + } + } + } + getMountSync(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: this.factorySync(this.baseFs, p), + expiresAt: 0, + refCount: 0 + }; + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + return accept(cachedMountFs.childFs); + } else { + const childFs = this.factorySync(this.baseFs, p); + try { + return accept(childFs); + } finally { + childFs.saveAndClose?.(); + } + } + } +} + +class PosixFS extends ProxiedFS { + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return npath.fromPortablePath(path); + } + mapToBase(path) { + return npath.toPortablePath(path); + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL; + +class NodePathFS extends ProxiedFS { + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return path; + } + mapToBase(path) { + if (typeof path === `string`) + return path; + if (path instanceof URL) + return url.fileURLToPath(path); + if (Buffer.isBuffer(path)) { + const str = path.toString(); + if (!isUtf8(path, str)) + throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); + return str; + } + throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); + } +} +function isUtf8(buf, str) { + if (typeof buffer__default.default.isUtf8 !== `undefined`) + return buffer__default.default.isUtf8(buf); + return Buffer.byteLength(str) === buf.byteLength; +} + +var _a, _b, _c, _d; +const kBaseFs = Symbol(`kBaseFs`); +const kFd = Symbol(`kFd`); +const kClosePromise = Symbol(`kClosePromise`); +const kCloseResolve = Symbol(`kCloseResolve`); +const kCloseReject = Symbol(`kCloseReject`); +const kRefs = Symbol(`kRefs`); +const kRef = Symbol(`kRef`); +const kUnref = Symbol(`kUnref`); +class FileHandle { + constructor(fd, baseFs) { + this[_a] = 1; + this[_b] = void 0; + this[_c] = void 0; + this[_d] = void 0; + this[kBaseFs] = baseFs; + this[kFd] = fd; + } + get fd() { + return this[kFd]; + } + async appendFile(data, options) { + try { + this[kRef](this.appendFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); + } finally { + this[kUnref](); + } + } + async chown(uid, gid) { + try { + this[kRef](this.chown); + return await this[kBaseFs].fchownPromise(this.fd, uid, gid); + } finally { + this[kUnref](); + } + } + async chmod(mode) { + try { + this[kRef](this.chmod); + return await this[kBaseFs].fchmodPromise(this.fd, mode); + } finally { + this[kUnref](); + } + } + createReadStream(options) { + return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); + } + createWriteStream(options) { + return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); + } + datasync() { + throw new Error(`Method not implemented.`); + } + sync() { + throw new Error(`Method not implemented.`); + } + async read(bufferOrOptions, offset, length, position) { + try { + this[kRef](this.read); + let buffer; + if (!Buffer.isBuffer(bufferOrOptions)) { + bufferOrOptions ??= {}; + buffer = bufferOrOptions.buffer ?? Buffer.alloc(16384); + offset = bufferOrOptions.offset || 0; + length = bufferOrOptions.length ?? buffer.byteLength; + position = bufferOrOptions.position ?? null; + } else { + buffer = bufferOrOptions; + } + offset ??= 0; + length ??= 0; + if (length === 0) { + return { + bytesRead: length, + buffer + }; + } + const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position); + return { + bytesRead, + buffer + }; + } finally { + this[kUnref](); + } + } + async readFile(options) { + try { + this[kRef](this.readFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].readFilePromise(this.fd, encoding); + } finally { + this[kUnref](); + } + } + readLines(options) { + return readline.createInterface({ + input: this.createReadStream(options), + crlfDelay: Infinity + }); + } + async stat(opts) { + try { + this[kRef](this.stat); + return await this[kBaseFs].fstatPromise(this.fd, opts); + } finally { + this[kUnref](); + } + } + async truncate(len) { + try { + this[kRef](this.truncate); + return await this[kBaseFs].ftruncatePromise(this.fd, len); + } finally { + this[kUnref](); + } + } + utimes(atime, mtime) { + throw new Error(`Method not implemented.`); + } + async writeFile(data, options) { + try { + this[kRef](this.writeFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + await this[kBaseFs].writeFilePromise(this.fd, data, encoding); + } finally { + this[kUnref](); + } + } + async write(...args) { + try { + this[kRef](this.write); + if (ArrayBuffer.isView(args[0])) { + const [buffer, offset, length, position] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0); + return { bytesWritten, buffer }; + } else { + const [data, position, encoding] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); + return { bytesWritten, buffer: data }; + } + } finally { + this[kUnref](); + } + } + async writev(buffers, position) { + try { + this[kRef](this.writev); + let bytesWritten = 0; + if (typeof position !== `undefined`) { + for (const buffer of buffers) { + const writeResult = await this.write(buffer, void 0, void 0, position); + bytesWritten += writeResult.bytesWritten; + position += writeResult.bytesWritten; + } + } else { + for (const buffer of buffers) { + const writeResult = await this.write(buffer); + bytesWritten += writeResult.bytesWritten; + } + } + return { + buffers, + bytesWritten + }; + } finally { + this[kUnref](); + } + } + readv(buffers, position) { + throw new Error(`Method not implemented.`); + } + close() { + if (this[kFd] === -1) + return Promise.resolve(); + if (this[kClosePromise]) + return this[kClosePromise]; + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { + this[kClosePromise] = void 0; + }); + } else { + this[kClosePromise] = new Promise((resolve, reject) => { + this[kCloseResolve] = resolve; + this[kCloseReject] = reject; + }).finally(() => { + this[kClosePromise] = void 0; + this[kCloseReject] = void 0; + this[kCloseResolve] = void 0; + }); + } + return this[kClosePromise]; + } + [(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) { + if (this[kFd] === -1) { + const err = new Error(`file closed`); + err.code = `EBADF`; + err.syscall = caller.name; + throw err; + } + this[kRefs]++; + } + [kUnref]() { + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); + } + } +} + +const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessSync`, + `appendFileSync`, + `createReadStream`, + `createWriteStream`, + `chmodSync`, + `fchmodSync`, + `chownSync`, + `fchownSync`, + `closeSync`, + `copyFileSync`, + `linkSync`, + `lstatSync`, + `fstatSync`, + `lutimesSync`, + `mkdirSync`, + `openSync`, + `opendirSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `renameSync`, + `rmdirSync`, + `rmSync`, + `statSync`, + `symlinkSync`, + `truncateSync`, + `ftruncateSync`, + `unlinkSync`, + `unwatchFile`, + `utimesSync`, + `watch`, + `watchFile`, + `writeFileSync`, + `writeSync` +]); +const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessPromise`, + `appendFilePromise`, + `fchmodPromise`, + `chmodPromise`, + `fchownPromise`, + `chownPromise`, + `closePromise`, + `copyFilePromise`, + `linkPromise`, + `fstatPromise`, + `lstatPromise`, + `lutimesPromise`, + `mkdirPromise`, + `openPromise`, + `opendirPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `renamePromise`, + `rmdirPromise`, + `rmPromise`, + `statPromise`, + `symlinkPromise`, + `truncatePromise`, + `ftruncatePromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + `writeSync` +]); +function patchFs(patchedFs, fakeFs) { + fakeFs = new NodePathFS(fakeFs); + const setupFn = (target, name, replacement) => { + const orig = target[name]; + target[name] = replacement; + if (typeof orig?.[nodeUtils.promisify.custom] !== `undefined`) { + replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; + } + }; + { + setupFn(patchedFs, `exists`, (p, ...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeFs.existsPromise(p).then((exists) => { + callback(exists); + }, () => { + callback(false); + }); + }); + }); + setupFn(patchedFs, `read`, (...args) => { + let [fd, buffer, offset, length, position, callback] = args; + if (args.length <= 3) { + let options = {}; + if (args.length < 3) { + callback = args[1]; + } else { + options = args[1]; + callback = args[2]; + } + ({ + buffer = Buffer.alloc(16384), + offset = 0, + length = buffer.byteLength, + position + } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) { + process.nextTick(() => { + callback(null, 0, buffer); + }); + return; + } + if (position == null) + position = -1; + process.nextTick(() => { + fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { + callback(null, bytesRead, buffer); + }, (error) => { + callback(error, 0, buffer); + }); + }); + }); + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + const wrapper = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeImpl.apply(fakeFs, args).then((result) => { + callback(null, result); + }, (error) => { + callback(error); + }); + }); + }; + setupFn(patchedFs, origName, wrapper); + } + patchedFs.realpath.native = patchedFs.realpath; + } + { + setupFn(patchedFs, `existsSync`, (p) => { + try { + return fakeFs.existsSync(p); + } catch (error) { + return false; + } + }); + setupFn(patchedFs, `readSync`, (...args) => { + let [fd, buffer, offset, length, position] = args; + if (args.length <= 3) { + const options = args[2] || {}; + ({ offset = 0, length = buffer.byteLength, position } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) + return 0; + if (position == null) + position = -1; + return fakeFs.readSync(fd, buffer, offset, length, position); + }); + for (const fnName of SYNC_IMPLEMENTATIONS) { + const origName = fnName; + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + } + { + const patchedFsPromises = patchedFs.promises; + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFsPromises[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + if (fnName === `open`) + continue; + setupFn(patchedFsPromises, origName, (pathLike, ...args) => { + if (pathLike instanceof FileHandle) { + return pathLike[origName].apply(pathLike, args); + } else { + return fakeImpl.call(fakeFs, pathLike, ...args); + } + }); + } + setupFn(patchedFsPromises, `open`, async (...args) => { + const fd = await fakeFs.openPromise(...args); + return new FileHandle(fd, fakeFs); + }); + } + { + patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.readPromise(fd, buffer, ...args); + return { bytesRead: await res, buffer }; + }; + patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.writePromise(fd, buffer, ...args); + return { bytesWritten: await res, buffer }; + }; + } +} + +let cachedInstance; +let registeredFactory = () => { + throw new Error(`Assertion failed: No libzip instance is available, and no factory was configured`); +}; +function setFactory(factory) { + registeredFactory = factory; +} +function getInstance() { + if (typeof cachedInstance === `undefined`) + cachedInstance = registeredFactory(); + return cachedInstance; +} + +var libzipSync = {exports: {}}; + +(function (module, exports) { +var frozenFs = Object.assign({}, fs__default.default); +var createModule = function() { + var _scriptDir = void 0; + if (typeof __filename !== "undefined") + _scriptDir = _scriptDir || __filename; + return function(createModule2) { + createModule2 = createModule2 || {}; + var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var moduleOverrides = {}; + var key; + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } + } + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readBinary; + var nodeFS; + var nodePath; + { + { + scriptDirectory = __dirname + "/"; + } + read_ = function shell_read(filename, binary) { + var ret = tryParseAsDataURI(filename); + if (ret) { + return binary ? ret : ret.toString(); + } + if (!nodeFS) + nodeFS = frozenFs; + if (!nodePath) + nodePath = path__default.default; + filename = nodePath["normalize"](filename); + return nodeFS["readFileSync"](filename, binary ? null : "utf8"); + }; + readBinary = function readBinary2(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + if (process["argv"].length > 1) { + process["argv"][1].replace(/\\/g, "/"); + } + process["argv"].slice(2); + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } + Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } + } + moduleOverrides = null; + if (Module["arguments"]) + ; + if (Module["thisProgram"]) + ; + if (Module["quit"]) + ; + var wasmBinary; + if (Module["wasmBinary"]) + wasmBinary = Module["wasmBinary"]; + Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + function getValue(ptr, type, noSafe) { + type = type || "i8"; + if (type.charAt(type.length - 1) === "*") + type = "i32"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return LE_HEAP_LOAD_I16((ptr >> 1) * 2); + case "i32": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "i64": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "float": + return LE_HEAP_LOAD_F32((ptr >> 2) * 4); + case "double": + return LE_HEAP_LOAD_F64((ptr >> 3) * 8); + default: + abort("invalid type for getValue: " + type); + } + return null; + } + var wasmMemory; + var ABORT = false; + function assert(condition, text) { + if (!condition) { + abort("Assertion failed: " + text); + } + } + function getCFunc(ident) { + var func = Module["_" + ident]; + assert( + func, + "Cannot call unknown function " + ident + ", make sure it is exported" + ); + return func; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + string: function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, + array: function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } + }; + function convertReturnValue(ret2) { + if (returnType === "string") + return UTF8ToString(ret2); + if (returnType === "boolean") + return Boolean(ret2); + return ret2; + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) + stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + ret = convertReturnValue(ret); + if (stack !== 0) + stackRestore(stack); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments); + }; + } + var UTF8Decoder = new TextDecoder("utf8"); + function UTF8ToString(ptr, maxBytesToRead) { + if (!ptr) + return ""; + var maxPtr = ptr + maxBytesToRead; + for (var end = ptr; !(end >= maxPtr) && HEAPU8[end]; ) + ++end; + return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) + return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) + break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) + break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) + break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) + break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) + ++len; + else if (u <= 2047) + len += 2; + else if (u <= 65535) + len += 3; + else + len += 4; + } + return len; + } + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) + stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + function writeArrayToMemory(array, buffer2) { + HEAP8.set(array, buffer2); + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer, HEAP8, HEAPU8; + var HEAP_DATA_VIEW; + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(buf); + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = new Int16Array(buf); + Module["HEAP32"] = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = new Uint16Array(buf); + Module["HEAPU32"] = new Uint32Array(buf); + Module["HEAPF32"] = new Float32Array(buf); + Module["HEAPF64"] = new Float64Array(buf); + } + Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + callRuntimeCallbacks(__ATINIT__); + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + what += ""; + err(what); + ABORT = true; + what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + var wasmBinaryFile = "data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w=="; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + var binary = tryParseAsDataURI(file); + if (binary) { + return binary; + } + if (readBinary) { + return readBinary(file); + } else { + throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; + } + } catch (err2) { + abort(err2); + } + } + function instantiateSync(file, info) { + var instance; + var module2; + var binary; + try { + binary = getBinary(file); + module2 = new WebAssembly.Module(binary); + instance = new WebAssembly.Instance(module2, info); + } catch (e) { + var str = e.toString(); + err("failed to compile wasm module: " + str); + if (str.includes("imported Memory") || str.includes("memory import")) { + err( + "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." + ); + } + throw e; + } + return [instance, module2]; + } + function createWasm() { + var info = { a: asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["g"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["W"]; + addOnInit(Module["asm"]["h"]); + removeRunDependency(); + } + addRunDependency(); + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + var result = instantiateSync(wasmBinaryFile, info); + receiveInstance(result[0]); + return Module["asm"]; + } + function LE_HEAP_LOAD_F32(byteOffset) { + return HEAP_DATA_VIEW.getFloat32(byteOffset, true); + } + function LE_HEAP_LOAD_F64(byteOffset) { + return HEAP_DATA_VIEW.getFloat64(byteOffset, true); + } + function LE_HEAP_LOAD_I16(byteOffset) { + return HEAP_DATA_VIEW.getInt16(byteOffset, true); + } + function LE_HEAP_LOAD_I32(byteOffset) { + return HEAP_DATA_VIEW.getInt32(byteOffset, true); + } + function LE_HEAP_STORE_I32(byteOffset, value) { + HEAP_DATA_VIEW.setInt32(byteOffset, value, true); + } + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func = callback.func; + if (typeof func === "number") { + if (callback.arg === void 0) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === void 0 ? null : callback.arg); + } + } + } + function _gmtime_r(time, tmPtr) { + var date = new Date(LE_HEAP_LOAD_I32((time >> 2) * 4) * 1e3); + LE_HEAP_STORE_I32((tmPtr >> 2) * 4, date.getUTCSeconds()); + LE_HEAP_STORE_I32((tmPtr + 4 >> 2) * 4, date.getUTCMinutes()); + LE_HEAP_STORE_I32((tmPtr + 8 >> 2) * 4, date.getUTCHours()); + LE_HEAP_STORE_I32((tmPtr + 12 >> 2) * 4, date.getUTCDate()); + LE_HEAP_STORE_I32((tmPtr + 16 >> 2) * 4, date.getUTCMonth()); + LE_HEAP_STORE_I32((tmPtr + 20 >> 2) * 4, date.getUTCFullYear() - 1900); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + LE_HEAP_STORE_I32((tmPtr + 36 >> 2) * 4, 0); + LE_HEAP_STORE_I32((tmPtr + 32 >> 2) * 4, 0); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + if (!_gmtime_r.GMTString) + _gmtime_r.GMTString = allocateUTF8("GMT"); + LE_HEAP_STORE_I32((tmPtr + 40 >> 2) * 4, _gmtime_r.GMTString); + return tmPtr; + } + function ___gmtime_r(a0, a1) { + return _gmtime_r(a0, a1); + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = 2147483648; + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min( + overGrownHeapSize, + requestedSize + 100663296 + ); + var newSize = Math.min( + maxHeapSize, + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) + ); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + function _setTempRet0(val) { + } + function _time(ptr) { + var ret = Date.now() / 1e3 | 0; + if (ptr) { + LE_HEAP_STORE_I32((ptr >> 2) * 4, ret); + } + return ret; + } + function _tzset() { + if (_tzset.called) + return; + _tzset.called = true; + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + LE_HEAP_STORE_I32((__get_timezone() >> 2) * 4, stdTimezoneOffset * 60); + LE_HEAP_STORE_I32( + (__get_daylight() >> 2) * 4, + Number(winterOffset != summerOffset) + ); + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, winterNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, summerNamePtr); + } else { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, summerNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, winterNamePtr); + } + } + function _timegm(tmPtr) { + _tzset(); + var time = Date.UTC( + LE_HEAP_LOAD_I32((tmPtr + 20 >> 2) * 4) + 1900, + LE_HEAP_LOAD_I32((tmPtr + 16 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 12 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 8 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 4 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr >> 2) * 4), + 0 + ); + var date = new Date(time); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + return date.getTime() / 1e3 | 0; + } + function intArrayFromBase64(s) { + { + var buf; + try { + buf = Buffer.from(s, "base64"); + } catch (_) { + buf = new Buffer(s, "base64"); + } + return new Uint8Array( + buf["buffer"], + buf["byteOffset"], + buf["byteLength"] + ); + } + } + function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); + } + var asmLibraryArg = { + e: ___gmtime_r, + c: _emscripten_memcpy_big, + d: _emscripten_resize_heap, + a: _setTempRet0, + b: _time, + f: _timegm + }; + var asm = createWasm(); + Module["___wasm_call_ctors"] = asm["h"]; + Module["_zip_ext_count_symlinks"] = asm["i"]; + Module["_zip_file_get_external_attributes"] = asm["j"]; + Module["_zipstruct_statS"] = asm["k"]; + Module["_zipstruct_stat_size"] = asm["l"]; + Module["_zipstruct_stat_mtime"] = asm["m"]; + Module["_zipstruct_stat_crc"] = asm["n"]; + Module["_zipstruct_errorS"] = asm["o"]; + Module["_zipstruct_error_code_zip"] = asm["p"]; + Module["_zipstruct_stat_comp_size"] = asm["q"]; + Module["_zipstruct_stat_comp_method"] = asm["r"]; + Module["_zip_close"] = asm["s"]; + Module["_zip_delete"] = asm["t"]; + Module["_zip_dir_add"] = asm["u"]; + Module["_zip_discard"] = asm["v"]; + Module["_zip_error_init_with_code"] = asm["w"]; + Module["_zip_get_error"] = asm["x"]; + Module["_zip_file_get_error"] = asm["y"]; + Module["_zip_error_strerror"] = asm["z"]; + Module["_zip_fclose"] = asm["A"]; + Module["_zip_file_add"] = asm["B"]; + Module["_free"] = asm["C"]; + var _malloc = Module["_malloc"] = asm["D"]; + Module["_zip_source_error"] = asm["E"]; + Module["_zip_source_seek"] = asm["F"]; + Module["_zip_file_set_external_attributes"] = asm["G"]; + Module["_zip_file_set_mtime"] = asm["H"]; + Module["_zip_fopen_index"] = asm["I"]; + Module["_zip_fread"] = asm["J"]; + Module["_zip_get_name"] = asm["K"]; + Module["_zip_get_num_entries"] = asm["L"]; + Module["_zip_source_read"] = asm["M"]; + Module["_zip_name_locate"] = asm["N"]; + Module["_zip_open_from_source"] = asm["O"]; + Module["_zip_set_file_compression"] = asm["P"]; + Module["_zip_source_buffer"] = asm["Q"]; + Module["_zip_source_buffer_create"] = asm["R"]; + Module["_zip_source_close"] = asm["S"]; + Module["_zip_source_free"] = asm["T"]; + Module["_zip_source_keep"] = asm["U"]; + Module["_zip_source_open"] = asm["V"]; + Module["_zip_source_tell"] = asm["X"]; + Module["_zip_stat_index"] = asm["Y"]; + var __get_tzname = Module["__get_tzname"] = asm["Z"]; + var __get_daylight = Module["__get_daylight"] = asm["_"]; + var __get_timezone = Module["__get_timezone"] = asm["$"]; + var stackSave = Module["stackSave"] = asm["aa"]; + var stackRestore = Module["stackRestore"] = asm["ba"]; + var stackAlloc = Module["stackAlloc"] = asm["ca"]; + Module["cwrap"] = cwrap; + Module["getValue"] = getValue; + var calledRun; + dependenciesFulfilled = function runCaller() { + if (!calledRun) + run(); + if (!calledRun) + dependenciesFulfilled = runCaller; + }; + function run(args) { + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) + return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) + return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) + Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + return createModule2; + }; +}(); +module.exports = createModule; +}(libzipSync)); + +const createModule = libzipSync.exports; + +const number64 = [ + `number`, + `number` +]; +var Errors = /* @__PURE__ */ ((Errors2) => { + Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; + Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; + Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; + Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; + Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; + Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; + Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; + Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; + Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; + Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; + Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; + Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; + Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; + Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; + Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; + Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; + Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; + Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; + Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; + Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; + Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; + Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; + Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; + Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; + Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; + Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; + Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; + Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; + Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; + Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; + Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; + Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; + return Errors2; +})(Errors || {}); +const makeInterface = (emZip) => ({ + get HEAPU8() { + return emZip.HEAPU8; + }, + errors: Errors, + SEEK_SET: 0, + SEEK_CUR: 1, + SEEK_END: 2, + ZIP_CHECKCONS: 4, + ZIP_EXCL: 2, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_FL_COMPRESSED: 4, + ZIP_OPSYS_DOS: 0, + ZIP_OPSYS_AMIGA: 1, + ZIP_OPSYS_OPENVMS: 2, + ZIP_OPSYS_UNIX: 3, + ZIP_OPSYS_VM_CMS: 4, + ZIP_OPSYS_ATARI_ST: 5, + ZIP_OPSYS_OS_2: 6, + ZIP_OPSYS_MACINTOSH: 7, + ZIP_OPSYS_Z_SYSTEM: 8, + ZIP_OPSYS_CPM: 9, + ZIP_OPSYS_WINDOWS_NTFS: 10, + ZIP_OPSYS_MVS: 11, + ZIP_OPSYS_VSE: 12, + ZIP_OPSYS_ACORN_RISC: 13, + ZIP_OPSYS_VFAT: 14, + ZIP_OPSYS_ALTERNATE_MVS: 15, + ZIP_OPSYS_BEOS: 16, + ZIP_OPSYS_TANDEM: 17, + ZIP_OPSYS_OS_400: 18, + ZIP_OPSYS_OS_X: 19, + ZIP_CM_DEFAULT: -1, + ZIP_CM_STORE: 0, + ZIP_CM_DEFLATE: 8, + uint08S: emZip._malloc(1), + uint32S: emZip._malloc(4), + malloc: emZip._malloc, + free: emZip._free, + getValue: emZip.getValue, + openFromSource: emZip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), + close: emZip.cwrap(`zip_close`, `number`, [`number`]), + discard: emZip.cwrap(`zip_discard`, null, [`number`]), + getError: emZip.cwrap(`zip_get_error`, `number`, [`number`]), + getName: emZip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: emZip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + delete: emZip.cwrap(`zip_delete`, `number`, [`number`, `number`]), + statIndex: emZip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopenIndex: emZip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: emZip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: emZip.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: emZip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) + }, + file: { + add: emZip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: emZip.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: emZip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: emZip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: emZip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + setCompression: emZip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) + }, + ext: { + countSymlinks: emZip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) + }, + error: { + initWithCode: emZip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), + strerror: emZip.cwrap(`zip_error_strerror`, `string`, [`number`]) + }, + name: { + locate: emZip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) + }, + source: { + fromUnattachedBuffer: emZip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), + fromBuffer: emZip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + free: emZip.cwrap(`zip_source_free`, null, [`number`]), + keep: emZip.cwrap(`zip_source_keep`, null, [`number`]), + open: emZip.cwrap(`zip_source_open`, `number`, [`number`]), + close: emZip.cwrap(`zip_source_close`, `number`, [`number`]), + seek: emZip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), + tell: emZip.cwrap(`zip_source_tell`, `number`, [`number`]), + read: emZip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), + error: emZip.cwrap(`zip_source_error`, `number`, [`number`]) + }, + struct: { + statS: emZip.cwrap(`zipstruct_statS`, `number`, []), + statSize: emZip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statCompSize: emZip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), + statCompMethod: emZip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), + statMtime: emZip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + statCrc: emZip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), + errorS: emZip.cwrap(`zipstruct_errorS`, `number`, []), + errorCodeZip: emZip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) + } +}); + +function getArchivePart(path, extension) { + let idx = path.indexOf(extension); + if (idx <= 0) + return null; + let nextCharIdx = idx; + while (idx >= 0) { + nextCharIdx = idx + extension.length; + if (path[nextCharIdx] === ppath.sep) + break; + if (path[idx - 1] === ppath.sep) + return null; + idx = path.indexOf(extension, nextCharIdx); + } + if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) + return null; + return path.slice(0, nextCharIdx); +} +class ZipOpenFS extends MountFS { + static async openPromise(fn, opts) { + const zipOpenFs = new ZipOpenFS(opts); + try { + return await fn(zipOpenFs); + } finally { + zipOpenFs.saveAndClose(); + } + } + constructor(opts = {}) { + const fileExtensions = opts.fileExtensions; + const readOnlyArchives = opts.readOnlyArchives; + const getMountPoint = typeof fileExtensions === `undefined` ? (path) => getArchivePart(path, `.zip`) : (path) => { + for (const extension of fileExtensions) { + const result = getArchivePart(path, extension); + if (result) { + return result; + } + } + return null; + }; + const factorySync = (baseFs, p) => { + return new ZipFS(p, { + baseFs, + readOnly: readOnlyArchives, + stats: baseFs.statSync(p) + }); + }; + const factoryPromise = async (baseFs, p) => { + const zipOptions = { + baseFs, + readOnly: readOnlyArchives, + stats: await baseFs.statPromise(p) + }; + return () => { + return new ZipFS(p, zipOptions); + }; + }; + super({ + ...opts, + factorySync, + factoryPromise, + getMountPoint + }); + } +} + +const DEFAULT_COMPRESSION_LEVEL = `mixed`; +function toUnixTimestamp(time) { + if (typeof time === `string` && String(+time) === time) + return +time; + if (typeof time === `number` && Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1e3; + } else { + return time; + } + } + if (nodeUtils.types.isDate(time)) + return time.getTime() / 1e3; + throw new Error(`Invalid time`); +} +function makeEmptyArchive() { + return Buffer.from([ + 80, + 75, + 5, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]); +} +class LibzipError extends Error { + constructor(message, code) { + super(message); + this.name = `Libzip Error`; + this.code = code; + } +} +class ZipFS extends BasePortableFakeFS { + constructor(source, opts = {}) { + super(); + this.listings = /* @__PURE__ */ new Map(); + this.entries = /* @__PURE__ */ new Map(); + this.fileSources = /* @__PURE__ */ new Map(); + this.fds = /* @__PURE__ */ new Map(); + this.nextFd = 0; + this.ready = false; + this.readOnly = false; + const pathOptions = opts; + this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; + source ??= makeEmptyArchive(); + if (typeof source === `string`) { + const { baseFs = new NodeFS() } = pathOptions; + this.baseFs = baseFs; + this.path = source; + } else { + this.path = null; + this.baseFs = null; + } + if (opts.stats) { + this.stats = opts.stats; + } else { + if (typeof source === `string`) { + try { + this.stats = this.baseFs.statSync(source); + } catch (error) { + if (error.code === `ENOENT` && pathOptions.create) { + this.stats = makeDefaultStats(); + } else { + throw error; + } + } + } else { + this.stats = makeDefaultStats(); + } + } + this.libzip = getInstance(); + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (opts.readOnly) { + flags |= this.libzip.ZIP_RDONLY; + this.readOnly = true; + } + if (typeof source === `string`) + source = pathOptions.create ? makeEmptyArchive() : this.baseFs.readFileSync(source); + const lzSource = this.allocateUnattachedSource(source); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); + const entryCount = this.libzip.getNumEntries(this.zip, 0); + for (let t = 0; t < entryCount; ++t) { + const raw = this.libzip.getName(this.zip, t, 0); + if (ppath.isAbsolute(raw)) + continue; + const p = ppath.resolve(PortablePath.root, raw); + this.registerEntry(p, t); + if (raw.endsWith(`/`)) { + this.registerListing(p); + } + } + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.ready = true; + } + makeLibzipError(error) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + return libzipError; + } + getExtractHint(hints) { + for (const fileName of this.entries.keys()) { + const ext = this.pathUtils.extname(fileName); + if (hints.relevantExtensions.has(ext)) { + return true; + } + } + return false; + } + getAllFiles() { + return Array.from(this.entries.keys()); + } + getRealPath() { + if (!this.path) + throw new Error(`ZipFS don't have real paths when loaded from a buffer`); + return this.path; + } + prepareClose() { + if (!this.ready) + throw EBUSY(`archive closed, close`); + unwatchAllFiles(this); + } + getBufferAndClose() { + this.prepareClose(); + if (this.entries.size === 0) { + this.discardAndClose(); + return makeEmptyArchive(); + } + try { + this.libzip.source.keep(this.lzSource); + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); + if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) + result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); + return result; + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + this.ready = false; + } + } + discardAndClose() { + this.prepareClose(); + this.libzip.discard(this.zip); + this.ready = false; + } + saveAndClose() { + if (!this.path || !this.baseFs) + throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); + if (this.readOnly) { + this.discardAndClose(); + return; + } + const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; + this.baseFs.writeFileSync(this.path, this.getBufferAndClose(), { mode: newMode }); + this.ready = false; + } + resolve(p) { + return ppath.resolve(PortablePath.root, p); + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + const fd = this.nextFd++; + this.fds.set(fd, { cursor: 0, p }); + return fd; + } + hasOpenFileHandles() { + return !!this.fds.size; + } + async opendirPromise(p, opts) { + return this.opendirSync(p, opts); + } + opendirSync(p, opts = {}) { + const resolvedP = this.resolveFilename(`opendir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`opendir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`opendir '${p}'`); + const entries = [...directoryListing]; + const fd = this.openSync(resolvedP, `r`); + const onClose = () => { + this.closeSync(fd); + }; + return opendir(this, resolvedP, entries, { onClose }); + } + async readPromise(fd, buffer, offset, length, position) { + return this.readSync(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const realPosition = position === -1 || position === null ? entry.cursor : position; + const source = this.readFileSync(entry.p); + source.copy(buffer, offset, realPosition, realPosition + length); + const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); + if (position === -1 || position === null) + entry.cursor += bytesRead; + return bytesRead; + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.writeSync(fd, buffer, position); + } else { + return this.writeSync(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + return this.closeSync(fd); + } + closeSync(fd) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + this.fds.delete(fd); + } + createReadStream(p, { encoding } = {}) { + if (p === null) + throw new Error(`Unimplemented`); + const fd = this.openSync(p, `r`); + const stream$1 = Object.assign( + new stream.PassThrough({ + emitClose: true, + autoDestroy: true, + destroy: (error, callback) => { + clearImmediate(immediate); + this.closeSync(fd); + callback(error); + } + }), + { + close() { + stream$1.destroy(); + }, + bytesRead: 0, + path: p, + pending: false + } + ); + const immediate = setImmediate(async () => { + try { + const data = await this.readFilePromise(p, encoding); + stream$1.bytesRead = data.length; + stream$1.end(data); + } catch (error) { + stream$1.destroy(error); + } + }); + return stream$1; + } + createWriteStream(p, { encoding } = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (p === null) + throw new Error(`Unimplemented`); + const chunks = []; + const fd = this.openSync(p, `w`); + const stream$1 = Object.assign( + new stream.PassThrough({ + autoDestroy: true, + emitClose: true, + destroy: (error, callback) => { + try { + if (error) { + callback(error); + } else { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + callback(null); + } + } catch (err) { + callback(err); + } finally { + this.closeSync(fd); + } + } + }), + { + close() { + stream$1.destroy(); + }, + bytesWritten: 0, + path: p, + pending: false + } + ); + stream$1.on(`data`, (chunk) => { + const chunkBuffer = Buffer.from(chunk); + stream$1.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + return stream$1; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`lstat '${p}'`); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + if (!this.ready) + throw EBUSY(`archive closed, existsSync '${p}'`); + if (this.symlinkCount === 0) { + const resolvedP2 = ppath.resolve(PortablePath.root, p); + return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); + } + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); + } catch (error) { + return false; + } + if (resolvedP === void 0) + return false; + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode = fs.constants.F_OK) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`access '${p}'`); + if (this.readOnly && mode & fs.constants.W_OK) { + throw EROFS(`access '${p}'`); + } + } + async statPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.statSync(p, { bigint: true }); + return this.statSync(p); + } + statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`stat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`stat '${p}'`, resolvedP, opts); + } + async fstatPromise(fd, opts) { + return this.fstatSync(fd, opts); + } + fstatSync(fd, opts) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const { p } = entry; + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`stat '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`fstat '${p}'`, resolvedP, opts); + } + async lstatPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.lstatSync(p, { bigint: true }); + return this.lstatSync(p); + } + lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`lstat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`lstat '${p}'`); + return this.statImpl(`lstat '${p}'`, resolvedP, opts); + } + statImpl(reason, p, opts = {}) { + const entry = this.entries.get(p); + if (typeof entry !== `undefined`) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = this.libzip.struct.statSize(stat) >>> 0; + const blksize = 512; + const blocks = Math.ceil(size / blksize); + const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3; + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG; + const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420; + const mode = type | this.getUnixMode(entry, defaultMode) & 511; + const crc = this.libzip.struct.statCrc(stat); + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = fs.constants.S_IFDIR | 493; + const crc = 0; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + return defaultMode; + return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + } + registerListing(p) { + const existingListing = this.listings.get(p); + if (existingListing) + return existingListing; + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + const newListing = /* @__PURE__ */ new Set(); + this.listings.set(p, newListing); + return newListing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + this.entries.set(p, index); + } + unregisterListing(p) { + this.listings.delete(p); + const parentListing = this.listings.get(ppath.dirname(p)); + parentListing?.delete(ppath.basename(p)); + } + unregisterEntry(p) { + this.unregisterListing(p); + const entry = this.entries.get(p); + this.entries.delete(p); + if (typeof entry === `undefined`) + return; + this.fileSources.delete(entry); + if (this.isSymbolicLink(entry)) { + this.symlinkCount--; + } + } + deleteEntry(p, index) { + this.unregisterEntry(p); + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { + if (!this.ready) + throw EBUSY(`archive closed, ${reason}`); + let resolvedP = ppath.resolve(PortablePath.root, p); + if (resolvedP === `/`) + return PortablePath.root; + const fileIndex = this.entries.get(resolvedP); + if (resolveLastComponent && fileIndex !== void 0) { + if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { + const target = this.getFileSource(fileIndex).toString(); + return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); + } else { + return resolvedP; + } + } + while (true) { + const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); + if (parentP === void 0) + return parentP; + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) { + if (throwIfNoEntry === false) + return void 0; + throw ENOENT(reason); + } + if (!isDir) + throw ENOTDIR(reason); + resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); + if (!resolveLastComponent || this.symlinkCount === 0) + break; + const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); + } else { + break; + } + } + return resolvedP; + } + allocateBuffer(content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + return { buffer, byteLength: content.byteLength }; + } + allocateUnattachedSource(content) { + const error = this.libzip.struct.errorS(); + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + return source; + } + allocateSource(content) { + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + return source; + } + setFileSource(p, content) { + const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); + const target = ppath.relative(PortablePath.root, p); + const lzSource = this.allocateSource(content); + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.level !== `mixed`) { + const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE; + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + this.fileSources.set(newIndex, buffer); + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + isSymbolicLink(index) { + if (this.symlinkCount === 0) + return false; + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + return false; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK; + } + getFileSource(index, opts = { asyncDecompress: false }) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return cachedFileSource; + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + try { + const rc2 = this.libzip.fread(file, buffer, size, 0); + if (rc2 === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc2 < size) + throw new Error(`Incomplete read`); + else if (rc2 > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + if (compressionMethod === 0) { + this.fileSources.set(index, data); + return data; + } else if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib__default.default.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + this.fileSources.set(index, result); + resolve(result); + } + }); + }); + } else { + const decompressedData = zlib__default.default.inflateRawSync(data); + this.fileSources.set(index, decompressedData); + return decompressedData; + } + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + async fchmodPromise(fd, mask) { + return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); + } + fchmodSync(fd, mask) { + return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + if (this.readOnly) + throw EROFS(`chmod '${p}'`); + mask &= 493; + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + const entry = this.entries.get(resolvedP); + if (typeof entry === `undefined`) + throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); + const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0); + const newMod = oldMod & ~511 | mask; + const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + async fchownPromise(fd, uid, gid) { + return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); + } + fchownSync(fd, uid, gid) { + return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); + } + async chownPromise(p, uid, gid) { + return this.chownSync(p, uid, gid); + } + chownSync(p, uid, gid) { + throw new Error(`Unimplemented`); + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = await this.getFileSource(indexSource, { asyncDecompress: true }); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + copyFileSync(sourceP, destP, flags = 0) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + prepareCopyFile(sourceP, destP, flags = 0) { + if (this.readOnly) + throw EROFS(`copyfile '${sourceP} -> '${destP}'`); + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); + return { + indexSource, + resolvedDestP, + indexDest + }; + } + async appendFilePromise(p, content, opts) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFilePromise(p, content, opts); + } + appendFileSync(p, content, opts = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFileSync(p, content, opts); + } + fdToPath(fd, reason) { + const path = this.fds.get(fd)?.p; + if (typeof path === `undefined`) + throw EBADF(reason); + return path; + } + async writeFilePromise(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + await this.chmodPromise(resolvedP, mode); + } + } + writeFileSync(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + this.chmodSync(resolvedP, mode); + } + } + prepareWriteFile(p, opts) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + if (this.readOnly) + throw EROFS(`open '${p}'`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`open '${p}'`); + let encoding = null, mode = null; + if (typeof opts === `string`) { + encoding = opts; + } else if (typeof opts === `object`) { + ({ + encoding = null, + mode = null + } = opts); + } + const index = this.entries.get(resolvedP); + return { + encoding, + mode, + resolvedP, + index + }; + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + if (this.readOnly) + throw EROFS(`unlink '${p}'`); + const resolvedP = this.resolveFilename(`unlink '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`unlink '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`unlink '${p}'`); + this.deleteEntry(resolvedP, index); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`utimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p); + this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`lutimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); + this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) { + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + } + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + async mkdirPromise(p, opts) { + return this.mkdirSync(p, opts); + } + mkdirSync(p, { mode = 493, recursive = false } = {}) { + if (recursive) + return this.mkdirpSync(p, { chmod: mode }); + if (this.readOnly) + throw EROFS(`mkdir '${p}'`); + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw EEXIST(`mkdir '${p}'`); + this.hydrateDirectory(resolvedP); + this.chmodSync(resolvedP, mode); + return void 0; + } + async rmdirPromise(p, opts) { + return this.rmdirSync(p, opts); + } + rmdirSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rmdir '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rmdir '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rmdir '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rmdir '${p}'`); + this.deleteEntry(p, index); + } + async rmPromise(p, opts) { + return this.rmSync(p, opts); + } + rmSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rm '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rm '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rm '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rm '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rm '${p}'`); + this.deleteEntry(p, index); + } + hydrateDirectory(resolvedP) { + const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP)); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async linkPromise(existingP, newP) { + return this.linkSync(existingP, newP); + } + linkSync(existingP, newP) { + throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + if (this.readOnly) + throw EROFS(`symlink '${target}' -> '${p}'`); + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`symlink '${target}' -> '${p}'`); + if (this.entries.has(resolvedP)) + throw EEXIST(`symlink '${target}' -> '${p}'`); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (fs.constants.S_IFLNK | 511) << 16); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.symlinkCount += 1; + } + async readFilePromise(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = await this.readFileBuffer(p, { asyncDecompress: true }); + return encoding ? data.toString(encoding) : data; + } + readFileSync(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = this.readFileBuffer(p); + return encoding ? data.toString(encoding) : data; + } + readFileBuffer(p, opts = { asyncDecompress: false }) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`open '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EISDIR(`read`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + return this.getFileSource(entry, opts); + } + async readdirPromise(p, opts) { + return this.readdirSync(p, opts); + } + readdirSync(p, opts) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`scandir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`scandir '${p}'`); + if (opts?.recursive) { + if (opts?.withFileTypes) { + const entries = Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: PortablePath.dot + }); + }); + for (const entry of entries) { + if (!entry.isDirectory()) + continue; + const subPath = ppath.join(entry.path, entry.name); + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + for (const child of subListing) { + entries.push(Object.assign(this.statImpl(`lstat`, ppath.join(p, subPath, child)), { + name: child, + path: subPath + })); + } + } + return entries; + } else { + const entries = [...directoryListing]; + for (const subPath of entries) { + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + if (typeof subListing === `undefined`) + continue; + for (const child of subListing) { + entries.push(ppath.join(subPath, child)); + } + } + return entries; + } + } else if (opts?.withFileTypes) { + return Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: void 0 + }); + }); + } else { + return [...directoryListing]; + } + } + async readlinkPromise(p) { + const entry = this.prepareReadlink(p); + return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); + } + readlinkSync(p) { + const entry = this.prepareReadlink(p); + return this.getFileSource(entry).toString(); + } + prepareReadlink(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`readlink '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EINVAL(`readlink '${p}'`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + if (!this.isSymbolicLink(entry)) + throw EINVAL(`readlink '${p}'`); + return entry; + } + async truncatePromise(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = await this.getFileSource(index, { asyncDecompress: true }); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return await this.writeFilePromise(p, truncated); + } + truncateSync(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = this.getFileSource(index); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return this.writeFileSync(p, truncated); + } + async ftruncatePromise(fd, len) { + return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); + } + ftruncateSync(fd, len) { + return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); + } + watch(p, a, b) { + let persistent; + switch (typeof a) { + case `function`: + case `string`: + case `undefined`: + { + persistent = true; + } + break; + default: + { + ({ persistent = true } = a); + } + break; + } + if (!persistent) + return { on: () => { + }, close: () => { + } }; + const interval = setInterval(() => { + }, 24 * 60 * 60 * 1e3); + return { on: () => { + }, close: () => { + clearInterval(interval); + } }; + } + watchFile(p, a, b) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return watchFile(this, resolvedP, a, b); + } + unwatchFile(p, cb) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return unwatchFile(this, resolvedP, cb); + } +} + +setFactory(() => { + const emZip = createModule(); + return makeInterface(emZip); +}); + +var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { + ErrorCode2["API_ERROR"] = `API_ERROR`; + ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; + ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; + ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; + ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; + ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; + ErrorCode2["INTERNAL"] = `INTERNAL`; + ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; + ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; + return ErrorCode2; +})(ErrorCode || {}); +const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ + "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, + "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, + "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, + "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, + "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ +]); +function makeError(pnpCode, message, data = {}, code) { + code ??= MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; + const propertySpec = { + configurable: true, + writable: true, + enumerable: false + }; + return Object.defineProperties(new Error(message), { + code: { + ...propertySpec, + value: code + }, + pnpCode: { + ...propertySpec, + value: pnpCode + }, + data: { + ...propertySpec, + value: data + } + }); +} +function getIssuerModule(parent) { + let issuer = parent; + while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) + issuer = issuer.parent; + return issuer || null; +} +function getPathForDisplay(p) { + return npath.normalize(npath.fromPortablePath(p)); +} + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs__default.default.existsSync(jsonPath)) + return null; + return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); +} +function ERR_REQUIRE_ESM(filename, parentPath = null) { + const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); + const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. +Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; + const err = new Error(msg); + err.code = `ERR_REQUIRE_ESM`; + return err; +} +function reportRequiredFilesToWatchMode(files) { + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename)))); + if (WATCH_MODE_MESSAGE_USES_ARRAYS) { + process.send({ "watch:require": files }); + } else { + for (const filename of files) { + process.send({ "watch:require": filename }); + } + } + } +} + +function applyPatch(pnpapi, opts) { + let enableNativeHooks = true; + process.versions.pnp = String(pnpapi.VERSIONS.std); + const moduleExports = require$$0__default.default; + moduleExports.findPnpApi = (lookupSource) => { + const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource; + const apiPath = opts.manager.findApiPathFor(lookupPath); + if (apiPath === null) + return null; + const apiEntry = opts.manager.getApiEntry(apiPath, true); + return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; + }; + function getRequireStack(parent) { + const requireStack = []; + for (let cursor = parent; cursor; cursor = cursor.parent) + requireStack.push(cursor.filename || cursor.id); + return requireStack; + } + const originalModuleLoad = require$$0.Module._load; + require$$0.Module._load = function(request, parent, isMain) { + if (request === `pnpapi`) { + const parentApiPath = opts.manager.getApiPathFromParent(parent); + if (parentApiPath) { + return opts.manager.getApiEntry(parentApiPath, true).instance; + } + } + return originalModuleLoad.call(require$$0.Module, request, parent, isMain); + }; + function getIssuerSpecsFromPaths(paths) { + return paths.map((path) => ({ + apiPath: opts.manager.findApiPathFor(path), + path, + module: null + })); + } + function getIssuerSpecsFromModule(module) { + if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { + return [{ + apiPath: opts.manager.findApiPathFor(module.paths[0]), + path: module.paths[0], + module + }]; + } + const issuer = getIssuerModule(module); + if (issuer !== null) { + const path = npath.dirname(issuer.filename); + const apiPath = opts.manager.getApiPathFromParent(issuer); + return [{ apiPath, path, module }]; + } else { + const path = process.cwd(); + const apiPath = opts.manager.findApiPathFor(npath.join(path, `[file]`)) ?? opts.manager.getApiPathFromParent(null); + return [{ apiPath, path, module }]; + } + } + function makeFakeParent(path) { + const fakeParent = new require$$0.Module(``); + const fakeFilePath = npath.join(path, `[file]`); + fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); + return fakeParent; + } + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const originalModuleResolveFilename = require$$0.Module._resolveFilename; + require$$0.Module._resolveFilename = function(request, parent, isMain, options) { + if (require$$0.isBuiltin(request)) + return request; + if (!enableNativeHooks) + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); + if (options && options.plugnplay === false) { + const { plugnplay, ...forwardedOptions } = options; + try { + enableNativeHooks = false; + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); + } finally { + enableNativeHooks = true; + } + } + if (options) { + const optionNames = new Set(Object.keys(options)); + optionNames.delete(`paths`); + optionNames.delete(`plugnplay`); + if (optionNames.size > 0) { + throw makeError( + ErrorCode.UNSUPPORTED, + `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` + ); + } + } + const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); + if (request.match(pathRegExp) === null) { + const parentDirectory = parent?.filename != null ? npath.dirname(parent.filename) : null; + const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; + if (absoluteRequest !== null) { + const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); + if (apiPath !== null) { + issuerSpecs.unshift({ + apiPath, + path: parentDirectory, + module: null + }); + } + } + } + let firstError; + for (const { apiPath, path, module } of issuerSpecs) { + let resolution; + const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; + try { + if (issuerApi !== null) { + resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null); + } else { + if (path === null) + throw new Error(`Assertion failed: Expected the path to be set`); + resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain); + } + } catch (error) { + firstError = firstError || error; + continue; + } + if (resolution !== null) { + return resolution; + } + } + const requireStack = getRequireStack(parent); + Object.defineProperty(firstError, `requireStack`, { + configurable: true, + writable: true, + enumerable: false, + value: requireStack + }); + if (requireStack.length > 0) + firstError.message += ` +Require stack: +- ${requireStack.join(` +- `)}`; + if (typeof firstError.pnpCode === `string`) + Error.captureStackTrace(firstError); + throw firstError; + }; + const originalFindPath = require$$0.Module._findPath; + require$$0.Module._findPath = function(request, paths, isMain) { + if (request === `pnpapi`) + return false; + if (!enableNativeHooks) + return originalFindPath.call(require$$0.Module, request, paths, isMain); + const isAbsolute = npath.isAbsolute(request); + if (isAbsolute) + paths = [``]; + else if (!paths || paths.length === 0) + return false; + for (const path of paths) { + let resolution; + try { + const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); + if (pnpApiPath !== null) { + const api = opts.manager.getApiEntry(pnpApiPath, true).instance; + resolution = api.resolveRequest(request, path) || false; + } else { + resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); + } + } catch (error) { + continue; + } + if (resolution) { + return resolution; + } + } + return false; + }; + const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; + require$$0.Module._extensions[`.js`] = function(module, filename) { + if (filename.endsWith(`.js`)) { + const pkg = readPackageScope(filename); + if (pkg && pkg.data?.type === `module`) { + const err = ERR_REQUIRE_ESM(filename, module.parent?.filename); + Error.captureStackTrace(err); + throw err; + } + } + originalExtensionJSFunction.call(this, module, filename); + }; + const originalDlopen = process.dlopen; + process.dlopen = function(...args) { + const [module, filename, ...rest] = args; + return originalDlopen.call( + this, + module, + npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), + ...rest + ); + }; + const originalEmit = process.emit; + process.emit = function(name, data, ...args) { + if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) + return false; + return originalEmit.apply(process, arguments); + }; + patchFs(fs__default.default, new PosixFS(opts.fakeFs)); +} + +function hydrateRuntimeState(data, { basePath }) { + const portablePath = npath.toPortablePath(basePath); + const absolutePortablePath = ppath.resolve(portablePath); + const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; + const packageLocatorsByLocations = /* @__PURE__ */ new Map(); + const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { + return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { + if (packageName === null !== (packageReference === null)) + throw new Error(`Assertion failed: The name and reference should be null, or neither should`); + const discardFromLookup = packageInformationData.discardFromLookup ?? false; + const packageLocator = { name: packageName, reference: packageReference }; + const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); + if (!entry) { + packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); + } else { + entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; + if (!discardFromLookup) { + entry.locator = packageLocator; + } + } + let resolvedPackageLocation = null; + return [packageReference, { + packageDependencies: new Map(packageInformationData.packageDependencies), + packagePeers: new Set(packageInformationData.packagePeers), + linkType: packageInformationData.linkType, + discardFromLookup, + get packageLocation() { + return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); + } + }]; + }))]; + })); + const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { + return [packageName, new Set(packageReferences)]; + })); + const fallbackPool = new Map(data.fallbackPool); + const dependencyTreeRoots = data.dependencyTreeRoots; + const enableTopLevelFallback = data.enableTopLevelFallback; + return { + basePath: portablePath, + dependencyTreeRoots, + enableTopLevelFallback, + fallbackExclusionList, + fallbackPool, + ignorePattern, + packageLocatorsByLocations, + packageRegistry + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert__default.default(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); +const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( + "ERR_PACKAGE_PATH_NOT_EXPORTED", + (pkgPath, subpath, base = void 0) => { + if (subpath === ".") + return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + url.fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = url.fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), + url.fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && url.fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && url.fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") + return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) + return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) + continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) + return -1; + if (baseLenB > baseLenA) + return 1; + if (aPatternIndex === -1) + return 1; + if (bPatternIndex === -1) + return -1; + if (a.length > b.length) + return -1; + if (b.length > a.length) + return 1; + return 0; +} +function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { + if (typeof exports === "string" || ArrayIsArray(exports)) + return true; + if (typeof exports !== "object" || exports === null) + return false; + const keys = ObjectGetOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + const curIsConditionalSugar = key === "" || key[0] !== "."; + if (i++ === 0) { + isConditionalSugar = curIsConditionalSugar; + } else if (isConditionalSugar !== curIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` + ); + } + } + return isConditionalSugar; +} +function throwExportsNotFound(subpath, packageJSONUrl, base) { + throw new ERR_PACKAGE_PATH_NOT_EXPORTED( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + base && url.fileURLToPath(base) + ); +} +const emittedPackageWarnings = /* @__PURE__ */ new Set(); +function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { + const pjsonPath = url.fileURLToPath(pjsonUrl); + if (emittedPackageWarnings.has(pjsonPath + "|" + match)) + return; + emittedPackageWarnings.add(pjsonPath + "|" + match); + process.emitWarning( + `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, + "DeprecationWarning", + "DEP0155" + ); +} +function packageExportsResolve({ + packageJSONUrl, + packageSubpath, + exports, + base, + conditions +}) { + if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) + exports = { ".": exports }; + if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { + const target = exports[packageSubpath]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + "", + packageSubpath, + base, + false, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(exports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + packageSubpath, + StringPrototypeSlice(key, 0, patternIndex) + )) { + if (StringPrototypeEndsWith(packageSubpath, "/")) + emitTrailingSlashPatternDeprecation( + packageSubpath, + packageJSONUrl, + base + ); + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + packageSubpath, + patternIndex, + packageSubpath.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = exports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + throwExportsNotFound(packageSubpath, packageJSONUrl, base); +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +const flagSymbol = Symbol('arg flag'); + +class ArgError extends Error { + constructor(msg, code) { + super(msg); + this.name = 'ArgError'; + this.code = code; + + Object.setPrototypeOf(this, ArgError.prototype); + } +} + +function arg( + opts, + { + argv = process.argv.slice(2), + permissive = false, + stopAtPositional = false + } = {} +) { + if (!opts) { + throw new ArgError( + 'argument specification object is required', + 'ARG_CONFIG_NO_SPEC' + ); + } + + const result = { _: [] }; + + const aliases = {}; + const handlers = {}; + + for (const key of Object.keys(opts)) { + if (!key) { + throw new ArgError( + 'argument key cannot be an empty string', + 'ARG_CONFIG_EMPTY_KEY' + ); + } + + if (key[0] !== '-') { + throw new ArgError( + `argument key must start with '-' but found: '${key}'`, + 'ARG_CONFIG_NONOPT_KEY' + ); + } + + if (key.length === 1) { + throw new ArgError( + `argument key must have a name; singular '-' keys are not allowed: ${key}`, + 'ARG_CONFIG_NONAME_KEY' + ); + } + + if (typeof opts[key] === 'string') { + aliases[key] = opts[key]; + continue; + } + + let type = opts[key]; + let isFlag = false; + + if ( + Array.isArray(type) && + type.length === 1 && + typeof type[0] === 'function' + ) { + const [fn] = type; + type = (value, name, prev = []) => { + prev.push(fn(value, name, prev[prev.length - 1])); + return prev; + }; + isFlag = fn === Boolean || fn[flagSymbol] === true; + } else if (typeof type === 'function') { + isFlag = type === Boolean || type[flagSymbol] === true; + } else { + throw new ArgError( + `type missing or not a function or valid array type: ${key}`, + 'ARG_CONFIG_VAD_TYPE' + ); + } + + if (key[1] !== '-' && key.length > 2) { + throw new ArgError( + `short argument keys (with a single hyphen) must have only one character: ${key}`, + 'ARG_CONFIG_SHORTOPT_TOOLONG' + ); + } + + handlers[key] = [type, isFlag]; + } + + for (let i = 0, len = argv.length; i < len; i++) { + const wholeArg = argv[i]; + + if (stopAtPositional && result._.length > 0) { + result._ = result._.concat(argv.slice(i)); + break; + } + + if (wholeArg === '--') { + result._ = result._.concat(argv.slice(i + 1)); + break; + } + + if (wholeArg.length > 1 && wholeArg[0] === '-') { + /* eslint-disable operator-linebreak */ + const separatedArguments = + wholeArg[1] === '-' || wholeArg.length === 2 + ? [wholeArg] + : wholeArg + .slice(1) + .split('') + .map((a) => `-${a}`); + /* eslint-enable operator-linebreak */ + + for (let j = 0; j < separatedArguments.length; j++) { + const arg = separatedArguments[j]; + const [originalArgName, argStr] = + arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; + + let argName = originalArgName; + while (argName in aliases) { + argName = aliases[argName]; + } + + if (!(argName in handlers)) { + if (permissive) { + result._.push(arg); + continue; + } else { + throw new ArgError( + `unknown or unexpected option: ${originalArgName}`, + 'ARG_UNKNOWN_OPTION' + ); + } + } + + const [type, isFlag] = handlers[argName]; + + if (!isFlag && j + 1 < separatedArguments.length) { + throw new ArgError( + `option requires argument (but was followed by another short argument): ${originalArgName}`, + 'ARG_MISSING_REQUIRED_SHORTARG' + ); + } + + if (isFlag) { + result[argName] = type(true, argName, result[argName]); + } else if (argStr === undefined) { + if ( + argv.length < i + 2 || + (argv[i + 1].length > 1 && + argv[i + 1][0] === '-' && + !( + argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && + (type === Number || + // eslint-disable-next-line no-undef + (typeof BigInt !== 'undefined' && type === BigInt)) + )) + ) { + const extended = + originalArgName === argName ? '' : ` (alias for ${argName})`; + throw new ArgError( + `option requires argument: ${originalArgName}${extended}`, + 'ARG_MISSING_REQUIRED_LONGARG' + ); + } + + result[argName] = type(argv[i + 1], argName, result[argName]); + ++i; + } else { + result[argName] = type(argStr, argName, result[argName]); + } + } + } else { + result._.push(wholeArg); + } + } + + return result; +} + +arg.flag = (fn) => { + fn[flagSymbol] = true; + return fn; +}; + +// Utility types +arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); + +// Expose error class +arg.ArgError = ArgError; + +var arg_1 = arg; + +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ +function getOptionValue(opt) { + parseOptions(); + return options[opt]; +} +let options; +function parseOptions() { + if (!options) { + options = { + "--conditions": [], + ...parseArgv(getNodeOptionsEnvArgv()), + ...parseArgv(process.execArgv) + }; + } +} +function parseArgv(argv) { + return arg_1( + { + "--conditions": [String], + "-C": "--conditions" + }, + { + argv, + permissive: true + } + ); +} +function getNodeOptionsEnvArgv() { + const errors = []; + const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); + if (errors.length !== 0) ; + return envArgv; +} +function ParseNodeOptionsEnvVar(node_options, errors) { + const env_argv = []; + let is_in_string = false; + let will_start_new_arg = true; + for (let index = 0; index < node_options.length; ++index) { + let c = node_options[index]; + if (c === "\\" && is_in_string) { + if (index + 1 === node_options.length) { + errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); + return env_argv; + } else { + c = node_options[++index]; + } + } else if (c === " " && !is_in_string) { + will_start_new_arg = true; + continue; + } else if (c === '"') { + is_in_string = !is_in_string; + continue; + } + if (will_start_new_arg) { + env_argv.push(c); + will_start_new_arg = false; + } else { + env_argv[env_argv.length - 1] += c; + } + } + if (is_in_string) { + errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); + } + return env_argv; +} + +function makeApi(runtimeState, opts) { + const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; + const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; + const isDirRegExp = /\/$/; + const isRelativeRegexp = /^\.{0,2}\//; + const topLevelLocator = { name: null, reference: null }; + const fallbackLocators = []; + const emittedWarnings = /* @__PURE__ */ new Set(); + if (runtimeState.enableTopLevelFallback === true) + fallbackLocators.push(topLevelLocator); + if (opts.compatibilityMode !== false) { + for (const name of [`react-scripts`, `gatsby`]) { + const packageStore = runtimeState.packageRegistry.get(name); + if (packageStore) { + for (const reference of packageStore.keys()) { + if (reference === null) { + throw new Error(`Assertion failed: This reference shouldn't be null`); + } else { + fallbackLocators.push({ name, reference }); + } + } + } + } + } + const { + ignorePattern, + packageRegistry, + packageLocatorsByLocations + } = runtimeState; + function makeLogEntry(name, args) { + return { + fn: name, + args, + error: null, + result: null + }; + } + function trace(entry) { + const colors = process.stderr?.hasColors?.() ?? process.stdout.isTTY; + const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; + const error = entry.error; + if (error) + console.error(c(`31;1`, `\u2716 ${entry.error?.message.replace(/\n.*/s, ``)}`)); + else + console.error(c(`33;1`, `\u203C Resolution`)); + if (entry.args.length > 0) + console.error(); + for (const arg of entry.args) + console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); + if (entry.result) { + console.error(); + console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); + } + const stack = new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2) ?? []; + if (stack.length > 0) { + console.error(); + for (const line of stack) { + console.error(` ${c(`38;5;244`, line)}`); + } + } + console.error(); + } + function maybeLog(name, fn) { + if (opts.allowDebug === false) + return fn; + if (Number.isFinite(debugLevel)) { + if (debugLevel >= 2) { + return (...args) => { + const logEntry = makeLogEntry(name, args); + try { + return logEntry.result = fn(...args); + } catch (error) { + throw logEntry.error = error; + } finally { + trace(logEntry); + } + }; + } else if (debugLevel >= 1) { + return (...args) => { + try { + return fn(...args); + } catch (error) { + const logEntry = makeLogEntry(name, args); + logEntry.error = error; + trace(logEntry); + throw error; + } + }; + } + } + return fn; + } + function getPackageInformationSafe(packageLocator) { + const packageInformation = getPackageInformation(packageLocator); + if (!packageInformation) { + throw makeError( + ErrorCode.INTERNAL, + `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` + ); + } + return packageInformation; + } + function isDependencyTreeRoot(packageLocator) { + if (packageLocator.name === null) + return true; + for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) + if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) + return true; + return false; + } + const defaultExportsConditions = /* @__PURE__ */ new Set([ + `node`, + `require`, + ...getOptionValue(`--conditions`) + ]); + function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { + const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { + resolveIgnored: true, + includeDiscardFromLookup: true + }); + if (locator === null) { + throw makeError( + ErrorCode.INTERNAL, + `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` + ); + } + const { packageLocation } = getPackageInformationSafe(locator); + const manifestPath = ppath.join(packageLocation, Filename.manifest); + if (!opts.fakeFs.existsSync(manifestPath)) + return null; + const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); + if (pkgJson.exports == null) + return null; + let subpath = ppath.contains(packageLocation, unqualifiedPath); + if (subpath === null) { + throw makeError( + ErrorCode.INTERNAL, + `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` + ); + } + if (subpath !== `.` && !isRelativeRegexp.test(subpath)) + subpath = `./${subpath}`; + try { + const resolvedExport = packageExportsResolve({ + packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), + packageSubpath: subpath, + exports: pkgJson.exports, + base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, + conditions + }); + return npath.toPortablePath(url.fileURLToPath(resolvedExport)); + } catch (error) { + throw makeError( + ErrorCode.EXPORTS_RESOLUTION_FAILED, + error.message, + { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, + error.code + ); + } + } + function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { + let stat; + try { + candidates.push(unqualifiedPath); + stat = opts.fakeFs.statSync(unqualifiedPath); + } catch (error) { + } + if (stat && !stat.isDirectory()) + return opts.fakeFs.realpathSync(unqualifiedPath); + if (stat && stat.isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); + } catch (error) { + } + let nextUnqualifiedPath; + if (pkgJson && pkgJson.main) + nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); + if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { + const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); + if (resolution !== null) { + return resolution; + } + } + } + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = `${unqualifiedPath}${extensions[i]}`; + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + if (stat && stat.isDirectory()) { + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + } + return null; + } + function makeFakeModule(path) { + const fakeModule = new require$$0.Module(path, null); + fakeModule.filename = path; + fakeModule.paths = require$$0.Module._nodeModulePaths(path); + return fakeModule; + } + function callNativeResolution(request, issuer) { + if (issuer.endsWith(`/`)) + issuer = ppath.join(issuer, `internal.js`); + return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); + } + function isPathIgnored(path) { + if (ignorePattern === null) + return false; + const subPath = ppath.contains(runtimeState.basePath, path); + if (subPath === null) + return false; + if (ignorePattern.test(subPath.replace(/\/$/, ``))) { + return true; + } else { + return false; + } + } + const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; + const topLevel = topLevelLocator; + function getPackageInformation({ name, reference }) { + const packageInformationStore = packageRegistry.get(name); + if (!packageInformationStore) + return null; + const packageInformation = packageInformationStore.get(reference); + if (!packageInformation) + return null; + return packageInformation; + } + function findPackageDependents({ name, reference }) { + const dependents = []; + for (const [dependentName, packageInformationStore] of packageRegistry) { + if (dependentName === null) + continue; + for (const [dependentReference, packageInformation] of packageInformationStore) { + if (dependentReference === null) + continue; + const dependencyReference = packageInformation.packageDependencies.get(name); + if (dependencyReference !== reference) + continue; + if (dependentName === name && dependentReference === reference) + continue; + dependents.push({ + name: dependentName, + reference: dependentReference + }); + } + } + return dependents; + } + function findBrokenPeerDependencies(dependency, initialPackage) { + const brokenPackages = /* @__PURE__ */ new Map(); + const alreadyVisited = /* @__PURE__ */ new Set(); + const traversal = (currentPackage) => { + const identifier = JSON.stringify(currentPackage.name); + if (alreadyVisited.has(identifier)) + return; + alreadyVisited.add(identifier); + const dependents = findPackageDependents(currentPackage); + for (const dependent of dependents) { + const dependentInformation = getPackageInformationSafe(dependent); + if (dependentInformation.packagePeers.has(dependency)) { + traversal(dependent); + } else { + let brokenSet = brokenPackages.get(dependent.name); + if (typeof brokenSet === `undefined`) + brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); + brokenSet.add(dependent.reference); + } + } + }; + traversal(initialPackage); + const brokenList = []; + for (const name of [...brokenPackages.keys()].sort()) + for (const reference of [...brokenPackages.get(name)].sort()) + brokenList.push({ name, reference }); + return brokenList; + } + function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { + if (isPathIgnored(location) && !resolveIgnored) + return null; + let relativeLocation = ppath.relative(runtimeState.basePath, location); + if (!relativeLocation.match(isStrictRegExp)) + relativeLocation = `./${relativeLocation}`; + if (!relativeLocation.endsWith(`/`)) + relativeLocation = `${relativeLocation}/`; + do { + const entry = packageLocatorsByLocations.get(relativeLocation); + if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { + relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); + continue; + } + return entry.locator; + } while (relativeLocation !== ``); + return null; + } + function tryReadFile(filePath) { + try { + return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } + } + function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { + if (request.startsWith(`#`)) + throw new Error(`resolveToUnqualified can not handle private import mappings`); + if (request === `pnpapi`) + return npath.toPortablePath(opts.pnpapiResolution); + if (considerBuiltins && require$$0.isBuiltin(request)) + return null; + const requestForDisplay = getPathForDisplay(request); + const issuerForDisplay = issuer && getPathForDisplay(issuer); + if (issuer && isPathIgnored(issuer)) { + if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + } + let unqualifiedPath; + const dependencyNameMatch = request.match(pathRegExp); + if (!dependencyNameMatch) { + if (ppath.isAbsolute(request)) { + unqualifiedPath = ppath.normalize(request); + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const absoluteIssuer = ppath.resolve(issuer); + if (issuer.match(isDirRegExp)) { + unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); + } else { + unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); + } + } + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const [, dependencyName, subPath] = dependencyNameMatch; + const issuerLocator = findPackageLocator(issuer); + if (!issuerLocator) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + const issuerInformation = getPackageInformationSafe(issuerLocator); + let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); + let fallbackReference = null; + if (dependencyReference == null) { + if (issuerLocator.name !== null) { + const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); + const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); + if (canUseFallbacks) { + for (let t = 0, T = fallbackLocators.length; t < T; ++t) { + const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); + const reference = fallbackInformation.packageDependencies.get(dependencyName); + if (reference == null) + continue; + if (alwaysWarnOnFallback) + fallbackReference = reference; + else + dependencyReference = reference; + break; + } + if (runtimeState.enableTopLevelFallback) { + if (dependencyReference == null && fallbackReference === null) { + const reference = runtimeState.fallbackPool.get(dependencyName); + if (reference != null) { + fallbackReference = reference; + } + } + } + } + } + } + let error = null; + if (dependencyReference === null) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); + if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } else { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) + +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } + } + } else if (dependencyReference === void 0) { + if (!considerBuiltins && require$$0.isBuiltin(request)) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } else { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } + } + if (dependencyReference == null) { + if (fallbackReference === null || error === null) + throw error || new Error(`Assertion failed: Expected an error to have been set`); + dependencyReference = fallbackReference; + const message = error.message.replace(/\n.*/g, ``); + error.message = message; + if (!emittedWarnings.has(message) && debugLevel !== 0) { + emittedWarnings.add(message); + process.emitWarning(error); + } + } + const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; + const dependencyInformation = getPackageInformationSafe(dependencyLocator); + if (!dependencyInformation.packageLocation) { + throw makeError( + ErrorCode.MISSING_DEPENDENCY, + `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } + ); + } + const dependencyLocation = dependencyInformation.packageLocation; + if (subPath) { + unqualifiedPath = ppath.join(dependencyLocation, subPath); + } else { + unqualifiedPath = dependencyLocation; + } + } + return ppath.normalize(unqualifiedPath); + } + function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { + if (isStrictRegExp.test(request)) + return unqualifiedPath; + const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); + if (unqualifiedExportPath) { + return ppath.normalize(unqualifiedExportPath); + } else { + return unqualifiedPath; + } + } + function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { + const candidates = []; + const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); + if (qualifiedPath) { + return ppath.normalize(qualifiedPath); + } else { + reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate))); + const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); + const containingPackage = findPackageLocator(unqualifiedPath); + if (containingPackage) { + const { packageLocation } = getPackageInformationSafe(containingPackage); + let exists = true; + try { + opts.fakeFs.accessSync(packageLocation); + } catch (err) { + if (err?.code === `ENOENT`) { + exists = false; + } else { + const readableError = (err?.message ?? err ?? `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); + throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); + } + } + if (!exists) { + const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `${errorMessage} + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${unqualifiedPathForDisplay} +${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} +`).join(``)}`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + function resolvePrivateRequest(request, issuer, opts2) { + if (!issuer) + throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); + const resolved = packageImportsResolve({ + name: request, + base: url.pathToFileURL(npath.fromPortablePath(issuer)), + conditions: opts2.conditions ?? defaultExportsConditions, + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolveRequest(resolved, issuer, opts2); + } + } + function resolveRequest(request, issuer, opts2 = {}) { + try { + if (request.startsWith(`#`)) + return resolvePrivateRequest(request, issuer, opts2); + const { considerBuiltins, extensions, conditions } = opts2; + const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); + if (request === `pnpapi`) + return unqualifiedPath; + if (unqualifiedPath === null) + return null; + const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; + const remappedPath = (!considerBuiltins || !require$$0.isBuiltin(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; + return resolveUnqualified(remappedPath, { extensions }); + } catch (error) { + if (Object.hasOwn(error, `pnpCode`)) + Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); + throw error; + } + } + function resolveVirtual(request) { + const normalized = ppath.normalize(request); + const resolved = VirtualFS.resolveVirtual(normalized); + return resolved !== normalized ? resolved : null; + } + return { + VERSIONS, + topLevel, + getLocator: (name, referencish) => { + if (Array.isArray(referencish)) { + return { name: referencish[0], reference: referencish[1] }; + } else { + return { name, reference: referencish }; + } + }, + getDependencyTreeRoots: () => { + return [...runtimeState.dependencyTreeRoots]; + }, + getAllLocators() { + const locators = []; + for (const [name, entry] of packageRegistry) + for (const reference of entry.keys()) + if (name !== null && reference !== null) + locators.push({ name, reference }); + return locators; + }, + getPackageInformation: (locator) => { + const info = getPackageInformation(locator); + if (info === null) + return null; + const packageLocation = npath.fromPortablePath(info.packageLocation); + const nativeInfo = { ...info, packageLocation }; + return nativeInfo; + }, + findPackageLocator: (path) => { + return findPackageLocator(npath.toPortablePath(path)); + }, + resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { + return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); + }), + resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveVirtual: maybeLog(`resolveVirtual`, (path) => { + const result = resolveVirtual(npath.toPortablePath(path)); + if (result !== null) { + return npath.fromPortablePath(result); + } else { + return null; + } + }) + }; +} + +function makeManager(pnpapi, opts) { + const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); + const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); + const apiMetadata = /* @__PURE__ */ new Map([ + [initialApiPath, { + instance: pnpapi, + stats: initialApiStats, + lastRefreshCheck: Date.now() + }] + ]); + function loadApiInstance(pnpApiPath) { + const nativePath = npath.fromPortablePath(pnpApiPath); + const module = new require$$0.Module(nativePath, null); + module.load(nativePath); + return module.exports; + } + function refreshApiEntry(pnpApiPath, apiEntry) { + const timeNow = Date.now(); + if (timeNow - apiEntry.lastRefreshCheck < 500) + return; + apiEntry.lastRefreshCheck = timeNow; + const stats = opts.fakeFs.statSync(pnpApiPath); + if (stats.mtime > apiEntry.stats.mtime) { + process.emitWarning(`[Warning] The runtime detected new information in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); + apiEntry.stats = stats; + apiEntry.instance = loadApiInstance(pnpApiPath); + } + } + function getApiEntry(pnpApiPath, refresh = false) { + let apiEntry = apiMetadata.get(pnpApiPath); + if (typeof apiEntry !== `undefined`) { + if (refresh) { + refreshApiEntry(pnpApiPath, apiEntry); + } + } else { + apiMetadata.set(pnpApiPath, apiEntry = { + instance: loadApiInstance(pnpApiPath), + stats: opts.fakeFs.statSync(pnpApiPath), + lastRefreshCheck: Date.now() + }); + } + return apiEntry; + } + const findApiPathCache = /* @__PURE__ */ new Map(); + function addToCacheAndReturn(start, end, target) { + if (target !== null) { + target = VirtualFS.resolveVirtual(target); + target = opts.fakeFs.realpathSync(target); + } + let curr; + let next = start; + do { + curr = next; + findApiPathCache.set(curr, target); + next = ppath.dirname(curr); + } while (curr !== end); + return target; + } + function findApiPathFor(modulePath) { + let bestCandidate = null; + for (const [apiPath, apiEntry] of apiMetadata) { + const locator = apiEntry.instance.findPackageLocator(modulePath); + if (!locator) + continue; + if (apiMetadata.size === 1) + return apiPath; + const packageInformation = apiEntry.instance.getPackageInformation(locator); + if (!packageInformation) + throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); + if (!bestCandidate) + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; + if (packageInformation.packageLocation === bestCandidate.packageLocation) { + bestCandidate.apiPaths.push(apiPath); + } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; + } + } + if (bestCandidate) { + if (bestCandidate.apiPaths.length === 1) + return bestCandidate.apiPaths[0]; + const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` +`); + throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. +This is usually caused by using the global cache (enableGlobalCache: true) + +Controlled by: +${controlSegment} +`); + } + const start = ppath.resolve(npath.toPortablePath(modulePath)); + let curr; + let next = start; + do { + curr = next; + const cached = findApiPathCache.get(curr); + if (cached !== void 0) + return addToCacheAndReturn(start, curr, cached); + const cjsCandidate = ppath.join(curr, Filename.pnpCjs); + if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, cjsCandidate); + const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); + if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, legacyCjsCandidate); + next = ppath.dirname(curr); + } while (curr !== PortablePath.root); + return addToCacheAndReturn(start, curr, null); + } + const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); + function getApiPathFromParent(parent) { + if (parent == null) + return initialApiPath; + let apiPath = moduleToApiPathCache.get(parent); + if (typeof apiPath !== `undefined`) + return apiPath; + apiPath = parent.filename ? findApiPathFor(parent.filename) : null; + moduleToApiPathCache.set(parent, apiPath); + return apiPath; + } + return { + getApiPathFromParent, + findApiPathFor, + getApiEntry + }; +} + +const localFs = { ...fs__default.default }; +const nodeFs = new NodeFS(localFs); +const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); +const defaultPnpapiResolution = __filename; +const defaultFsLayer = new VirtualFS({ + baseFs: new ZipOpenFS({ + baseFs: nodeFs, + maxOpenFiles: 80, + readOnlyArchives: true + }) +}); +class DynamicFS extends ProxiedFS { + constructor() { + super(ppath); + this.baseFs = defaultFsLayer; + } + mapToBase(p) { + return p; + } + mapFromBase(p) { + return p; + } +} +const dynamicFsLayer = new DynamicFS(); +let manager; +const defaultApi = Object.assign(makeApi(defaultRuntimeState, { + fakeFs: dynamicFsLayer, + pnpapiResolution: defaultPnpapiResolution +}), { + makeApi: ({ + basePath = void 0, + fakeFs = dynamicFsLayer, + pnpapiResolution = defaultPnpapiResolution, + ...rest + }) => { + const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; + return makeApi(apiRuntimeState, { + fakeFs, + pnpapiResolution, + ...rest + }); + }, + setup: (api) => { + applyPatch(api || defaultApi, { + fakeFs: defaultFsLayer, + manager + }); + dynamicFsLayer.baseFs = new NodeFS(fs__default.default); + } +}); +manager = makeManager(defaultApi, { + fakeFs: dynamicFsLayer +}); +if (module.parent && module.parent.id === `internal/preload`) { + defaultApi.setup(); + if (module.filename) { + delete require$$0__default.default._cache[module.filename]; + } +} +if (process.mainModule === module) { + const reportError = (code, message, data) => { + process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} +`); + }; + const reportSuccess = (resolution) => { + process.stdout.write(`${JSON.stringify([null, resolution])} +`); + }; + const processResolution = (request, issuer) => { + try { + reportSuccess(defaultApi.resolveRequest(request, issuer)); + } catch (error) { + reportError(error.code, error.message, error.data); + } + }; + const processRequest = (data) => { + try { + const [request, issuer] = JSON.parse(data); + processResolution(request, issuer); + } catch (error) { + reportError(`INVALID_JSON`, error.message, error.data); + } + }; + if (process.argv.length > 2) { + if (process.argv.length !== 4) { + process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} +`); + process.exitCode = 64; + } else { + processResolution(process.argv[2], process.argv[3]); + } + } else { + let buffer = ``; + const decoder = new StringDecoder__default.default.StringDecoder(); + process.stdin.on(`data`, (chunk) => { + buffer += decoder.write(chunk); + do { + const index = buffer.indexOf(` +`); + if (index === -1) + break; + const line = buffer.slice(0, index); + buffer = buffer.slice(index + 1); + processRequest(line); + } while (true); + }); + } +} + +module.exports = defaultApi; diff --git a/.pnp.loader.mjs b/.pnp.loader.mjs new file mode 100644 index 00000000..0d287915 --- /dev/null +++ b/.pnp.loader.mjs @@ -0,0 +1,2116 @@ +/* eslint-disable */ +// @ts-nocheck + +import fs from 'fs'; +import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; +import path from 'path'; +import { createHash } from 'crypto'; +import { EOL } from 'os'; +import esmModule, { createRequire, isBuiltin } from 'module'; +import assert from 'assert'; + +const SAFE_TIME = 456789e3; + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const npath = Object.create(path); +const ppath = Object.create(path.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path.posix.resolve(...segments); + } else { + return path.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch (e) { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class FakeFS { + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch (error) { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch (error) { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch (error) { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch (error) { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch (error2) { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch (error) { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + constructor(realFs = fs) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL; + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; +const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3; +const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20; +const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs.existsSync(jsonPath)) + return null; + return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); +} + +async function tryReadFile$1(path2) { + try { + return await fs.promises.readFile(path2, `utf8`); + } catch (error) { + if (error.code === `ENOENT`) + return null; + throw error; + } +} +function tryParseURL(str, base) { + try { + return new URL(str, base); + } catch { + return null; + } +} +let entrypointPath = null; +function setEntrypointPath(file) { + entrypointPath = file; +} +function getFileFormat(filepath) { + const ext = path.extname(filepath); + switch (ext) { + case `.mjs`: { + return `module`; + } + case `.cjs`: { + return `commonjs`; + } + case `.wasm`: { + throw new Error( + `Unknown file extension ".wasm" for ${filepath}` + ); + } + case `.json`: { + return `json`; + } + case `.js`: { + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + return pkg.data.type ?? `commonjs`; + } + default: { + if (entrypointPath !== filepath) + return null; + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + if (pkg.data.type === `module`) + return null; + return pkg.data.type ?? `commonjs`; + } + } +} + +async function load$1(urlString, context, nextLoad) { + const url = tryParseURL(urlString); + if (url?.protocol !== `file:`) + return nextLoad(urlString, context, nextLoad); + const filePath = fileURLToPath(url); + const format = getFileFormat(filePath); + if (!format) + return nextLoad(urlString, context, nextLoad); + if (format === `json`) { + if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) { + if (context.importAttributes?.type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ATTRIBUTE_MISSING]: Module "${urlString}" needs an import attribute of "type: json"`); + err.code = `ERR_IMPORT_ATTRIBUTE_MISSING`; + throw err; + } + } else { + const type = `importAttributes` in context ? context.importAttributes?.type : context.importAssertions?.type; + if (type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import ${SUPPORTS_IMPORT_ATTRIBUTES ? `attribute` : `assertion`} of type "json"`); + err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; + throw err; + } + } + } + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + const pathToSend = pathToFileURL( + npath.fromPortablePath( + VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) + ) + ).href; + process.send({ + "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend + }); + } + return { + format, + source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`), + shortCircuit: true + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), + fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") + return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) + return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) + continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) + return -1; + if (baseLenB > baseLenA) + return 1; + if (aPatternIndex === -1) + return 1; + if (bPatternIndex === -1) + return -1; + if (a.length > b.length) + return -1; + if (b.length > a.length) + return 1; + return 0; +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +let findPnpApi = esmModule.findPnpApi; +if (!findPnpApi) { + const require = createRequire(import.meta.url); + const pnpApi = require(`./.pnp.cjs`); + pnpApi.setup(); + findPnpApi = esmModule.findPnpApi; +} +const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; +const isRelativeRegexp = /^\.{0,2}\//; +function tryReadFile(filePath) { + try { + return fs.readFileSync(filePath, `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } +} +async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { + const resolved = packageImportsResolve({ + name: specifier, + base: pathToFileURL(issuer), + conditions: new Set(context.conditions), + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return { url: resolved.href, shortCircuit: true }; + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolve$1(resolved, context, nextResolve); + } +} +async function resolve$1(originalSpecifier, context, nextResolve) { + if (!findPnpApi || isBuiltin(originalSpecifier)) + return nextResolve(originalSpecifier, context, nextResolve); + let specifier = originalSpecifier; + const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); + if (url) { + if (url.protocol !== `file:`) + return nextResolve(originalSpecifier, context, nextResolve); + specifier = fileURLToPath(url); + } + const { parentURL, conditions = [] } = context; + const issuer = parentURL && tryParseURL(parentURL)?.protocol === `file:` ? fileURLToPath(parentURL) : process.cwd(); + const pnpapi = findPnpApi(issuer) ?? (url ? findPnpApi(specifier) : null); + if (!pnpapi) + return nextResolve(originalSpecifier, context, nextResolve); + if (specifier.startsWith(`#`)) + return resolvePrivateRequest(specifier, issuer, context, nextResolve); + const dependencyNameMatch = specifier.match(pathRegExp); + let allowLegacyResolve = false; + if (dependencyNameMatch) { + const [, dependencyName, subPath] = dependencyNameMatch; + if (subPath === `` && dependencyName !== `pnpapi`) { + const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); + if (resolved) { + const content = await tryReadFile$1(resolved); + if (content) { + const pkg = JSON.parse(content); + allowLegacyResolve = pkg.exports == null; + } + } + } + } + let result; + try { + result = pnpapi.resolveRequest(specifier, issuer, { + conditions: new Set(conditions), + extensions: allowLegacyResolve ? void 0 : [] + }); + } catch (err) { + if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) + err.code = `ERR_MODULE_NOT_FOUND`; + throw err; + } + if (!result) + throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); + const resultURL = pathToFileURL(result); + if (url) { + resultURL.search = url.search; + resultURL.hash = url.hash; + } + if (!parentURL) + setEntrypointPath(fileURLToPath(resultURL)); + return { + url: resultURL.href, + shortCircuit: true + }; +} + +if (!HAS_LAZY_LOADED_TRANSLATORS) { + const binding = process.binding(`fs`); + const originalReadFile = binding.readFileUtf8 || binding.readFileSync; + if (originalReadFile) { + binding[originalReadFile.name] = function(...args) { + try { + return fs.readFileSync(args[0], { + encoding: `utf8`, + flag: args[1] + }); + } catch { + } + return originalReadFile.apply(this, args); + }; + } else { + const binding2 = process.binding(`fs`); + const originalfstat = binding2.fstat; + const ZIP_MASK = 4278190080; + const ZIP_MAGIC = 704643072; + binding2.fstat = function(...args) { + const [fd, useBigint, req] = args; + if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { + try { + const stats = fs.fstatSync(fd); + return new Float64Array([ + stats.dev, + stats.mode, + stats.nlink, + stats.uid, + stats.gid, + stats.rdev, + stats.blksize, + stats.ino, + stats.size, + stats.blocks + ]); + } catch { + } + } + return originalfstat.apply(this, args); + }; + } +} + +const resolve = resolve$1; +const load = load$1; + +export { load, resolve }; diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 00000000..3c477e31 Binary files /dev/null and b/.yarn/install-state.gz differ diff --git a/bundle.js b/bundle.js deleted file mode 100644 index 5e5c562f..00000000 --- a/bundle.js +++ /dev/null @@ -1,44397 +0,0 @@ -(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}; - - try { - if (this.transportType === 'ledgerLive') { - var reestablish = false; - try { - await _WebSocketTransport2.default.check(BRIDGE_URL); - } catch (_err) { - window.open('ledgerlive://bridge?appName=Ethereum'); - await this.checkTransportLoop(); - reestablish = true; - } - if (!this.app || reestablish) { - this.transport = await _WebSocketTransport2.default.open(BRIDGE_URL); - this.app = new _hwAppEth2.default(this.transport); - } - } else if (this.transportType === 'webhid') { - var device = this.transport && this.transport.device; - var nameOfDeviceType = device && device.constructor.name; - var deviceIsOpen = device && device.opened; - if (this.app && nameOfDeviceType === 'HIDDevice' && deviceIsOpen) { - return; - } - this.transport = config.openOnly ? await _hwTransportWebhid2.default.openConnected() : await _hwTransportWebhid2.default.create(); - this.app = new _hwAppEth2.default(this.transport); - } else { - this.transport = await _hwTransportU2f2.default.create(); - this.app = new _hwAppEth2.default(this.transport); - } - } catch (e) { - console.log('LEDGER:::CREATE APP ERROR', e); - throw e; - } - } - }, { - key: 'updateTransportTypePreference', - value: function updateTransportTypePreference(replyAction, transportType, messageId) { - this.transportType = transportType; - this.cleanUp(); - this.sendMessageToExtension({ - action: replyAction, - success: true, - messageId: messageId - }); - } - }, { - key: 'cleanUp', - value: async function cleanUp(replyAction, messageId) { - this.app = null; - if (this.transport) { - await this.transport.close(); - this.transport = null; - } - if (replyAction) { - this.sendMessageToExtension({ - action: replyAction, - success: true, - messageId: messageId - }); - } - } - }, { - key: 'unlock', - value: async function unlock(replyAction, hdPath, messageId) { - try { - await this.makeApp(); - var res = await this.app.getAddress(hdPath, false, true); - this.sendMessageToExtension({ - action: replyAction, - success: true, - payload: res, - messageId: messageId - }); - } catch (err) { - var e = this.ledgerErrToMessage(err); - this.sendMessageToExtension({ - action: replyAction, - success: false, - payload: { error: e }, - messageId: messageId - }); - } finally { - if (this.transportType !== 'ledgerLive') { - this.cleanUp(); - } - } - } - }, { - key: 'signTransaction', - value: async function signTransaction(replyAction, hdPath, tx, messageId) { - try { - await this.makeApp(); - var res = await this.app.signTransaction(hdPath, tx); - this.sendMessageToExtension({ - action: replyAction, - success: true, - payload: res, - messageId: messageId - }); - } catch (err) { - var e = this.ledgerErrToMessage(err); - this.sendMessageToExtension({ - action: replyAction, - success: false, - payload: { error: e }, - messageId: messageId - }); - } finally { - if (this.transportType !== 'ledgerLive') { - this.cleanUp(); - } - } - } - }, { - key: 'signPersonalMessage', - value: async function signPersonalMessage(replyAction, hdPath, message, messageId) { - try { - await this.makeApp(); - - var res = await this.app.signPersonalMessage(hdPath, message); - this.sendMessageToExtension({ - action: replyAction, - success: true, - payload: res, - messageId: messageId - }); - } catch (err) { - var e = this.ledgerErrToMessage(err); - this.sendMessageToExtension({ - action: replyAction, - success: false, - payload: { error: e }, - messageId: messageId - }); - } finally { - if (this.transportType !== 'ledgerLive') { - this.cleanUp(); - } - } - } - }, { - key: 'signTypedData', - value: async function signTypedData(replyAction, hdPath, domainSeparatorHex, hashStructMessageHex, messageId) { - try { - await this.makeApp(); - var res = await this.app.signEIP712HashedMessage(hdPath, domainSeparatorHex, hashStructMessageHex); - - this.sendMessageToExtension({ - action: replyAction, - success: true, - payload: res, - messageId: messageId - }); - } catch (err) { - var e = this.ledgerErrToMessage(err); - this.sendMessageToExtension({ - action: replyAction, - success: false, - payload: { error: e }, - messageId: messageId - }); - } finally { - this.cleanUp(); - } - } - }, { - key: 'ledgerErrToMessage', - value: function ledgerErrToMessage(err) { - var isU2FError = function isU2FError(err) { - return !!err && !!err.metaData; - }; - var isStringError = function isStringError(err) { - return typeof err === 'string'; - }; - var isErrorWithId = function isErrorWithId(err) { - return err.hasOwnProperty('id') && err.hasOwnProperty('message'); - }; - var isWrongAppError = function isWrongAppError(err) { - return String(err.message || err).includes('6804'); - }; - var isLedgerLockedError = function isLedgerLockedError(err) { - return err.message && err.message.includes('OpenFailed'); - }; - - // https://developers.yubico.com/U2F/Libraries/Client_error_codes.html - if (isU2FError(err)) { - if (err.metaData.code === 5) { - return new Error('LEDGER_TIMEOUT'); - } - return err.metaData.type; - } - - if (isWrongAppError(err)) { - return new Error('LEDGER_WRONG_APP'); - } - - if (isLedgerLockedError(err) || isStringError(err) && err.includes('6801')) { - return new Error('LEDGER_LOCKED'); - } - - if (isErrorWithId(err)) { - // Browser doesn't support U2F - if (err.message.includes('U2F not supported')) { - return new Error('U2F_NOT_SUPPORTED'); - } - } - - // Other - return err; - } - }]); - - return LedgerBridge; -}(); - -exports.default = LedgerBridge; - -},{"@ledgerhq/hw-app-eth":125,"@ledgerhq/hw-transport-http/lib/WebSocketTransport":161,"@ledgerhq/hw-transport-u2f":165,"@ledgerhq/hw-transport-webhid":166,"buffer":226}],2:[function(require,module,exports){ -'use strict'; - -var _ledgerBridge = require('./ledger-bridge'); - -var _ledgerBridge2 = _interopRequireDefault(_ledgerBridge); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(async function () { - var bridge = new _ledgerBridge2.default(); -})(); -console.log('MetaMask < = > Ledger Bridge initialized from ' + window.location + '!'); - -},{"./ledger-bridge":1}],3:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "abi/5.5.0"; - -},{}],4:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.defaultAbiCoder = exports.AbiCoder = void 0; -// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var abstract_coder_1 = require("./coders/abstract-coder"); -var address_1 = require("./coders/address"); -var array_1 = require("./coders/array"); -var boolean_1 = require("./coders/boolean"); -var bytes_2 = require("./coders/bytes"); -var fixed_bytes_1 = require("./coders/fixed-bytes"); -var null_1 = require("./coders/null"); -var number_1 = require("./coders/number"); -var string_1 = require("./coders/string"); -var tuple_1 = require("./coders/tuple"); -var fragments_1 = require("./fragments"); -var paramTypeBytes = new RegExp(/^bytes([0-9]*)$/); -var paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/); -var AbiCoder = /** @class */ (function () { - function AbiCoder(coerceFunc) { - var _newTarget = this.constructor; - logger.checkNew(_newTarget, AbiCoder); - (0, properties_1.defineReadOnly)(this, "coerceFunc", coerceFunc || null); - } - AbiCoder.prototype._getCoder = function (param) { - var _this = this; - switch (param.baseType) { - case "address": - return new address_1.AddressCoder(param.name); - case "bool": - return new boolean_1.BooleanCoder(param.name); - case "string": - return new string_1.StringCoder(param.name); - case "bytes": - return new bytes_2.BytesCoder(param.name); - case "array": - return new array_1.ArrayCoder(this._getCoder(param.arrayChildren), param.arrayLength, param.name); - case "tuple": - return new tuple_1.TupleCoder((param.components || []).map(function (component) { - return _this._getCoder(component); - }), param.name); - case "": - return new null_1.NullCoder(param.name); - } - // u?int[0-9]* - var match = param.type.match(paramTypeNumber); - if (match) { - var size = parseInt(match[2] || "256"); - if (size === 0 || size > 256 || (size % 8) !== 0) { - logger.throwArgumentError("invalid " + match[1] + " bit length", "param", param); - } - return new number_1.NumberCoder(size / 8, (match[1] === "int"), param.name); - } - // bytes[0-9]+ - match = param.type.match(paramTypeBytes); - if (match) { - var size = parseInt(match[1]); - if (size === 0 || size > 32) { - logger.throwArgumentError("invalid bytes length", "param", param); - } - return new fixed_bytes_1.FixedBytesCoder(size, param.name); - } - return logger.throwArgumentError("invalid type", "type", param.type); - }; - AbiCoder.prototype._getWordSize = function () { return 32; }; - AbiCoder.prototype._getReader = function (data, allowLoose) { - return new abstract_coder_1.Reader(data, this._getWordSize(), this.coerceFunc, allowLoose); - }; - AbiCoder.prototype._getWriter = function () { - return new abstract_coder_1.Writer(this._getWordSize()); - }; - AbiCoder.prototype.getDefaultValue = function (types) { - var _this = this; - var coders = types.map(function (type) { return _this._getCoder(fragments_1.ParamType.from(type)); }); - var coder = new tuple_1.TupleCoder(coders, "_"); - return coder.defaultValue(); - }; - AbiCoder.prototype.encode = function (types, values) { - var _this = this; - if (types.length !== values.length) { - logger.throwError("types/values length mismatch", logger_1.Logger.errors.INVALID_ARGUMENT, { - count: { types: types.length, values: values.length }, - value: { types: types, values: values } - }); - } - var coders = types.map(function (type) { return _this._getCoder(fragments_1.ParamType.from(type)); }); - var coder = (new tuple_1.TupleCoder(coders, "_")); - var writer = this._getWriter(); - coder.encode(writer, values); - return writer.data; - }; - AbiCoder.prototype.decode = function (types, data, loose) { - var _this = this; - var coders = types.map(function (type) { return _this._getCoder(fragments_1.ParamType.from(type)); }); - var coder = new tuple_1.TupleCoder(coders, "_"); - return coder.decode(this._getReader((0, bytes_1.arrayify)(data), loose)); - }; - return AbiCoder; -}()); -exports.AbiCoder = AbiCoder; -exports.defaultAbiCoder = new AbiCoder(); - -},{"./_version":3,"./coders/abstract-coder":5,"./coders/address":6,"./coders/array":8,"./coders/boolean":9,"./coders/bytes":10,"./coders/fixed-bytes":11,"./coders/null":12,"./coders/number":13,"./coders/string":14,"./coders/tuple":15,"./fragments":16,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63}],5:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Reader = exports.Writer = exports.Coder = exports.checkResultErrors = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var bignumber_1 = require("@ethersproject/bignumber"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("../_version"); -var logger = new logger_1.Logger(_version_1.version); -function checkResultErrors(result) { - // Find the first error (if any) - var errors = []; - var checkErrors = function (path, object) { - if (!Array.isArray(object)) { - return; - } - for (var key in object) { - var childPath = path.slice(); - childPath.push(key); - try { - checkErrors(childPath, object[key]); - } - catch (error) { - errors.push({ path: childPath, error: error }); - } - } - }; - checkErrors([], result); - return errors; -} -exports.checkResultErrors = checkResultErrors; -var Coder = /** @class */ (function () { - function Coder(name, type, localName, dynamic) { - // @TODO: defineReadOnly these - this.name = name; - this.type = type; - this.localName = localName; - this.dynamic = dynamic; - } - Coder.prototype._throwError = function (message, value) { - logger.throwArgumentError(message, this.localName, value); - }; - return Coder; -}()); -exports.Coder = Coder; -var Writer = /** @class */ (function () { - function Writer(wordSize) { - (0, properties_1.defineReadOnly)(this, "wordSize", wordSize || 32); - this._data = []; - this._dataLength = 0; - this._padding = new Uint8Array(wordSize); - } - Object.defineProperty(Writer.prototype, "data", { - get: function () { - return (0, bytes_1.hexConcat)(this._data); - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Writer.prototype, "length", { - get: function () { return this._dataLength; }, - enumerable: false, - configurable: true - }); - Writer.prototype._writeData = function (data) { - this._data.push(data); - this._dataLength += data.length; - return data.length; - }; - Writer.prototype.appendWriter = function (writer) { - return this._writeData((0, bytes_1.concat)(writer._data)); - }; - // Arrayish items; padded on the right to wordSize - Writer.prototype.writeBytes = function (value) { - var bytes = (0, bytes_1.arrayify)(value); - var paddingOffset = bytes.length % this.wordSize; - if (paddingOffset) { - bytes = (0, bytes_1.concat)([bytes, this._padding.slice(paddingOffset)]); - } - return this._writeData(bytes); - }; - Writer.prototype._getValue = function (value) { - var bytes = (0, bytes_1.arrayify)(bignumber_1.BigNumber.from(value)); - if (bytes.length > this.wordSize) { - logger.throwError("value out-of-bounds", logger_1.Logger.errors.BUFFER_OVERRUN, { - length: this.wordSize, - offset: bytes.length - }); - } - if (bytes.length % this.wordSize) { - bytes = (0, bytes_1.concat)([this._padding.slice(bytes.length % this.wordSize), bytes]); - } - return bytes; - }; - // BigNumberish items; padded on the left to wordSize - Writer.prototype.writeValue = function (value) { - return this._writeData(this._getValue(value)); - }; - Writer.prototype.writeUpdatableValue = function () { - var _this = this; - var offset = this._data.length; - this._data.push(this._padding); - this._dataLength += this.wordSize; - return function (value) { - _this._data[offset] = _this._getValue(value); - }; - }; - return Writer; -}()); -exports.Writer = Writer; -var Reader = /** @class */ (function () { - function Reader(data, wordSize, coerceFunc, allowLoose) { - (0, properties_1.defineReadOnly)(this, "_data", (0, bytes_1.arrayify)(data)); - (0, properties_1.defineReadOnly)(this, "wordSize", wordSize || 32); - (0, properties_1.defineReadOnly)(this, "_coerceFunc", coerceFunc); - (0, properties_1.defineReadOnly)(this, "allowLoose", allowLoose); - this._offset = 0; - } - Object.defineProperty(Reader.prototype, "data", { - get: function () { return (0, bytes_1.hexlify)(this._data); }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Reader.prototype, "consumed", { - get: function () { return this._offset; }, - enumerable: false, - configurable: true - }); - // The default Coerce function - Reader.coerce = function (name, value) { - var match = name.match("^u?int([0-9]+)$"); - if (match && parseInt(match[1]) <= 48) { - value = value.toNumber(); - } - return value; - }; - Reader.prototype.coerce = function (name, value) { - if (this._coerceFunc) { - return this._coerceFunc(name, value); - } - return Reader.coerce(name, value); - }; - Reader.prototype._peekBytes = function (offset, length, loose) { - var alignedLength = Math.ceil(length / this.wordSize) * this.wordSize; - if (this._offset + alignedLength > this._data.length) { - if (this.allowLoose && loose && this._offset + length <= this._data.length) { - alignedLength = length; - } - else { - logger.throwError("data out-of-bounds", logger_1.Logger.errors.BUFFER_OVERRUN, { - length: this._data.length, - offset: this._offset + alignedLength - }); - } - } - return this._data.slice(this._offset, this._offset + alignedLength); - }; - Reader.prototype.subReader = function (offset) { - return new Reader(this._data.slice(this._offset + offset), this.wordSize, this._coerceFunc, this.allowLoose); - }; - Reader.prototype.readBytes = function (length, loose) { - var bytes = this._peekBytes(0, length, !!loose); - this._offset += bytes.length; - // @TODO: Make sure the length..end bytes are all 0? - return bytes.slice(0, length); - }; - Reader.prototype.readValue = function () { - return bignumber_1.BigNumber.from(this.readBytes(this.wordSize)); - }; - return Reader; -}()); -exports.Reader = Reader; - -},{"../_version":3,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63}],6:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AddressCoder = void 0; -var address_1 = require("@ethersproject/address"); -var bytes_1 = require("@ethersproject/bytes"); -var abstract_coder_1 = require("./abstract-coder"); -var AddressCoder = /** @class */ (function (_super) { - __extends(AddressCoder, _super); - function AddressCoder(localName) { - return _super.call(this, "address", "address", localName, false) || this; - } - AddressCoder.prototype.defaultValue = function () { - return "0x0000000000000000000000000000000000000000"; - }; - AddressCoder.prototype.encode = function (writer, value) { - try { - value = (0, address_1.getAddress)(value); - } - catch (error) { - this._throwError(error.message, value); - } - return writer.writeValue(value); - }; - AddressCoder.prototype.decode = function (reader) { - return (0, address_1.getAddress)((0, bytes_1.hexZeroPad)(reader.readValue().toHexString(), 20)); - }; - return AddressCoder; -}(abstract_coder_1.Coder)); -exports.AddressCoder = AddressCoder; - -},{"./abstract-coder":5,"@ethersproject/address":24,"@ethersproject/bytes":33}],7:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AnonymousCoder = void 0; -var abstract_coder_1 = require("./abstract-coder"); -// Clones the functionality of an existing Coder, but without a localName -var AnonymousCoder = /** @class */ (function (_super) { - __extends(AnonymousCoder, _super); - function AnonymousCoder(coder) { - var _this = _super.call(this, coder.name, coder.type, undefined, coder.dynamic) || this; - _this.coder = coder; - return _this; - } - AnonymousCoder.prototype.defaultValue = function () { - return this.coder.defaultValue(); - }; - AnonymousCoder.prototype.encode = function (writer, value) { - return this.coder.encode(writer, value); - }; - AnonymousCoder.prototype.decode = function (reader) { - return this.coder.decode(reader); - }; - return AnonymousCoder; -}(abstract_coder_1.Coder)); -exports.AnonymousCoder = AnonymousCoder; - -},{"./abstract-coder":5}],8:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ArrayCoder = exports.unpack = exports.pack = void 0; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("../_version"); -var logger = new logger_1.Logger(_version_1.version); -var abstract_coder_1 = require("./abstract-coder"); -var anonymous_1 = require("./anonymous"); -function pack(writer, coders, values) { - var arrayValues = null; - if (Array.isArray(values)) { - arrayValues = values; - } - else if (values && typeof (values) === "object") { - var unique_1 = {}; - arrayValues = coders.map(function (coder) { - var name = coder.localName; - if (!name) { - logger.throwError("cannot encode object for signature with missing names", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "values", - coder: coder, - value: values - }); - } - if (unique_1[name]) { - logger.throwError("cannot encode object for signature with duplicate names", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "values", - coder: coder, - value: values - }); - } - unique_1[name] = true; - return values[name]; - }); - } - else { - logger.throwArgumentError("invalid tuple value", "tuple", values); - } - if (coders.length !== arrayValues.length) { - logger.throwArgumentError("types/value length mismatch", "tuple", values); - } - var staticWriter = new abstract_coder_1.Writer(writer.wordSize); - var dynamicWriter = new abstract_coder_1.Writer(writer.wordSize); - var updateFuncs = []; - coders.forEach(function (coder, index) { - var value = arrayValues[index]; - if (coder.dynamic) { - // Get current dynamic offset (for the future pointer) - var dynamicOffset_1 = dynamicWriter.length; - // Encode the dynamic value into the dynamicWriter - coder.encode(dynamicWriter, value); - // Prepare to populate the correct offset once we are done - var updateFunc_1 = staticWriter.writeUpdatableValue(); - updateFuncs.push(function (baseOffset) { - updateFunc_1(baseOffset + dynamicOffset_1); - }); - } - else { - coder.encode(staticWriter, value); - } - }); - // Backfill all the dynamic offsets, now that we know the static length - updateFuncs.forEach(function (func) { func(staticWriter.length); }); - var length = writer.appendWriter(staticWriter); - length += writer.appendWriter(dynamicWriter); - return length; -} -exports.pack = pack; -function unpack(reader, coders) { - var values = []; - // A reader anchored to this base - var baseReader = reader.subReader(0); - coders.forEach(function (coder) { - var value = null; - if (coder.dynamic) { - var offset = reader.readValue(); - var offsetReader = baseReader.subReader(offset.toNumber()); - try { - value = coder.decode(offsetReader); - } - catch (error) { - // Cannot recover from this - if (error.code === logger_1.Logger.errors.BUFFER_OVERRUN) { - throw error; - } - value = error; - value.baseType = coder.name; - value.name = coder.localName; - value.type = coder.type; - } - } - else { - try { - value = coder.decode(reader); - } - catch (error) { - // Cannot recover from this - if (error.code === logger_1.Logger.errors.BUFFER_OVERRUN) { - throw error; - } - value = error; - value.baseType = coder.name; - value.name = coder.localName; - value.type = coder.type; - } - } - if (value != undefined) { - values.push(value); - } - }); - // We only output named properties for uniquely named coders - var uniqueNames = coders.reduce(function (accum, coder) { - var name = coder.localName; - if (name) { - if (!accum[name]) { - accum[name] = 0; - } - accum[name]++; - } - return accum; - }, {}); - // Add any named parameters (i.e. tuples) - coders.forEach(function (coder, index) { - var name = coder.localName; - if (!name || uniqueNames[name] !== 1) { - return; - } - if (name === "length") { - name = "_length"; - } - if (values[name] != null) { - return; - } - var value = values[index]; - if (value instanceof Error) { - Object.defineProperty(values, name, { - enumerable: true, - get: function () { throw value; } - }); - } - else { - values[name] = value; - } - }); - var _loop_1 = function (i) { - var value = values[i]; - if (value instanceof Error) { - Object.defineProperty(values, i, { - enumerable: true, - get: function () { throw value; } - }); - } - }; - for (var i = 0; i < values.length; i++) { - _loop_1(i); - } - return Object.freeze(values); -} -exports.unpack = unpack; -var ArrayCoder = /** @class */ (function (_super) { - __extends(ArrayCoder, _super); - function ArrayCoder(coder, length, localName) { - var _this = this; - var type = (coder.type + "[" + (length >= 0 ? length : "") + "]"); - var dynamic = (length === -1 || coder.dynamic); - _this = _super.call(this, "array", type, localName, dynamic) || this; - _this.coder = coder; - _this.length = length; - return _this; - } - ArrayCoder.prototype.defaultValue = function () { - // Verifies the child coder is valid (even if the array is dynamic or 0-length) - var defaultChild = this.coder.defaultValue(); - var result = []; - for (var i = 0; i < this.length; i++) { - result.push(defaultChild); - } - return result; - }; - ArrayCoder.prototype.encode = function (writer, value) { - if (!Array.isArray(value)) { - this._throwError("expected array value", value); - } - var count = this.length; - if (count === -1) { - count = value.length; - writer.writeValue(value.length); - } - logger.checkArgumentCount(value.length, count, "coder array" + (this.localName ? (" " + this.localName) : "")); - var coders = []; - for (var i = 0; i < value.length; i++) { - coders.push(this.coder); - } - return pack(writer, coders, value); - }; - ArrayCoder.prototype.decode = function (reader) { - var count = this.length; - if (count === -1) { - count = reader.readValue().toNumber(); - // Check that there is *roughly* enough data to ensure - // stray random data is not being read as a length. Each - // slot requires at least 32 bytes for their value (or 32 - // bytes as a link to the data). This could use a much - // tighter bound, but we are erroring on the side of safety. - if (count * 32 > reader._data.length) { - logger.throwError("insufficient data length", logger_1.Logger.errors.BUFFER_OVERRUN, { - length: reader._data.length, - count: count - }); - } - } - var coders = []; - for (var i = 0; i < count; i++) { - coders.push(new anonymous_1.AnonymousCoder(this.coder)); - } - return reader.coerce(this.name, unpack(reader, coders)); - }; - return ArrayCoder; -}(abstract_coder_1.Coder)); -exports.ArrayCoder = ArrayCoder; - -},{"../_version":3,"./abstract-coder":5,"./anonymous":7,"@ethersproject/logger":57}],9:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BooleanCoder = void 0; -var abstract_coder_1 = require("./abstract-coder"); -var BooleanCoder = /** @class */ (function (_super) { - __extends(BooleanCoder, _super); - function BooleanCoder(localName) { - return _super.call(this, "bool", "bool", localName, false) || this; - } - BooleanCoder.prototype.defaultValue = function () { - return false; - }; - BooleanCoder.prototype.encode = function (writer, value) { - return writer.writeValue(value ? 1 : 0); - }; - BooleanCoder.prototype.decode = function (reader) { - return reader.coerce(this.type, !reader.readValue().isZero()); - }; - return BooleanCoder; -}(abstract_coder_1.Coder)); -exports.BooleanCoder = BooleanCoder; - -},{"./abstract-coder":5}],10:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BytesCoder = exports.DynamicBytesCoder = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var abstract_coder_1 = require("./abstract-coder"); -var DynamicBytesCoder = /** @class */ (function (_super) { - __extends(DynamicBytesCoder, _super); - function DynamicBytesCoder(type, localName) { - return _super.call(this, type, type, localName, true) || this; - } - DynamicBytesCoder.prototype.defaultValue = function () { - return "0x"; - }; - DynamicBytesCoder.prototype.encode = function (writer, value) { - value = (0, bytes_1.arrayify)(value); - var length = writer.writeValue(value.length); - length += writer.writeBytes(value); - return length; - }; - DynamicBytesCoder.prototype.decode = function (reader) { - return reader.readBytes(reader.readValue().toNumber(), true); - }; - return DynamicBytesCoder; -}(abstract_coder_1.Coder)); -exports.DynamicBytesCoder = DynamicBytesCoder; -var BytesCoder = /** @class */ (function (_super) { - __extends(BytesCoder, _super); - function BytesCoder(localName) { - return _super.call(this, "bytes", localName) || this; - } - BytesCoder.prototype.decode = function (reader) { - return reader.coerce(this.name, (0, bytes_1.hexlify)(_super.prototype.decode.call(this, reader))); - }; - return BytesCoder; -}(DynamicBytesCoder)); -exports.BytesCoder = BytesCoder; - -},{"./abstract-coder":5,"@ethersproject/bytes":33}],11:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FixedBytesCoder = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var abstract_coder_1 = require("./abstract-coder"); -// @TODO: Merge this with bytes -var FixedBytesCoder = /** @class */ (function (_super) { - __extends(FixedBytesCoder, _super); - function FixedBytesCoder(size, localName) { - var _this = this; - var name = "bytes" + String(size); - _this = _super.call(this, name, name, localName, false) || this; - _this.size = size; - return _this; - } - FixedBytesCoder.prototype.defaultValue = function () { - return ("0x0000000000000000000000000000000000000000000000000000000000000000").substring(0, 2 + this.size * 2); - }; - FixedBytesCoder.prototype.encode = function (writer, value) { - var data = (0, bytes_1.arrayify)(value); - if (data.length !== this.size) { - this._throwError("incorrect data length", value); - } - return writer.writeBytes(data); - }; - FixedBytesCoder.prototype.decode = function (reader) { - return reader.coerce(this.name, (0, bytes_1.hexlify)(reader.readBytes(this.size))); - }; - return FixedBytesCoder; -}(abstract_coder_1.Coder)); -exports.FixedBytesCoder = FixedBytesCoder; - -},{"./abstract-coder":5,"@ethersproject/bytes":33}],12:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NullCoder = void 0; -var abstract_coder_1 = require("./abstract-coder"); -var NullCoder = /** @class */ (function (_super) { - __extends(NullCoder, _super); - function NullCoder(localName) { - return _super.call(this, "null", "", localName, false) || this; - } - NullCoder.prototype.defaultValue = function () { - return null; - }; - NullCoder.prototype.encode = function (writer, value) { - if (value != null) { - this._throwError("not null", value); - } - return writer.writeBytes([]); - }; - NullCoder.prototype.decode = function (reader) { - reader.readBytes(0); - return reader.coerce(this.name, null); - }; - return NullCoder; -}(abstract_coder_1.Coder)); -exports.NullCoder = NullCoder; - -},{"./abstract-coder":5}],13:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NumberCoder = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var constants_1 = require("@ethersproject/constants"); -var abstract_coder_1 = require("./abstract-coder"); -var NumberCoder = /** @class */ (function (_super) { - __extends(NumberCoder, _super); - function NumberCoder(size, signed, localName) { - var _this = this; - var name = ((signed ? "int" : "uint") + (size * 8)); - _this = _super.call(this, name, name, localName, false) || this; - _this.size = size; - _this.signed = signed; - return _this; - } - NumberCoder.prototype.defaultValue = function () { - return 0; - }; - NumberCoder.prototype.encode = function (writer, value) { - var v = bignumber_1.BigNumber.from(value); - // Check bounds are safe for encoding - var maxUintValue = constants_1.MaxUint256.mask(writer.wordSize * 8); - if (this.signed) { - var bounds = maxUintValue.mask(this.size * 8 - 1); - if (v.gt(bounds) || v.lt(bounds.add(constants_1.One).mul(constants_1.NegativeOne))) { - this._throwError("value out-of-bounds", value); - } - } - else if (v.lt(constants_1.Zero) || v.gt(maxUintValue.mask(this.size * 8))) { - this._throwError("value out-of-bounds", value); - } - v = v.toTwos(this.size * 8).mask(this.size * 8); - if (this.signed) { - v = v.fromTwos(this.size * 8).toTwos(8 * writer.wordSize); - } - return writer.writeValue(v); - }; - NumberCoder.prototype.decode = function (reader) { - var value = reader.readValue().mask(this.size * 8); - if (this.signed) { - value = value.fromTwos(this.size * 8); - } - return reader.coerce(this.name, value); - }; - return NumberCoder; -}(abstract_coder_1.Coder)); -exports.NumberCoder = NumberCoder; - -},{"./abstract-coder":5,"@ethersproject/bignumber":31,"@ethersproject/constants":37}],14:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StringCoder = void 0; -var strings_1 = require("@ethersproject/strings"); -var bytes_1 = require("./bytes"); -var StringCoder = /** @class */ (function (_super) { - __extends(StringCoder, _super); - function StringCoder(localName) { - return _super.call(this, "string", localName) || this; - } - StringCoder.prototype.defaultValue = function () { - return ""; - }; - StringCoder.prototype.encode = function (writer, value) { - return _super.prototype.encode.call(this, writer, (0, strings_1.toUtf8Bytes)(value)); - }; - StringCoder.prototype.decode = function (reader) { - return (0, strings_1.toUtf8String)(_super.prototype.decode.call(this, reader)); - }; - return StringCoder; -}(bytes_1.DynamicBytesCoder)); -exports.StringCoder = StringCoder; - -},{"./bytes":10,"@ethersproject/strings":100}],15:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TupleCoder = void 0; -var abstract_coder_1 = require("./abstract-coder"); -var array_1 = require("./array"); -var TupleCoder = /** @class */ (function (_super) { - __extends(TupleCoder, _super); - function TupleCoder(coders, localName) { - var _this = this; - var dynamic = false; - var types = []; - coders.forEach(function (coder) { - if (coder.dynamic) { - dynamic = true; - } - types.push(coder.type); - }); - var type = ("tuple(" + types.join(",") + ")"); - _this = _super.call(this, "tuple", type, localName, dynamic) || this; - _this.coders = coders; - return _this; - } - TupleCoder.prototype.defaultValue = function () { - var values = []; - this.coders.forEach(function (coder) { - values.push(coder.defaultValue()); - }); - // We only output named properties for uniquely named coders - var uniqueNames = this.coders.reduce(function (accum, coder) { - var name = coder.localName; - if (name) { - if (!accum[name]) { - accum[name] = 0; - } - accum[name]++; - } - return accum; - }, {}); - // Add named values - this.coders.forEach(function (coder, index) { - var name = coder.localName; - if (!name || uniqueNames[name] !== 1) { - return; - } - if (name === "length") { - name = "_length"; - } - if (values[name] != null) { - return; - } - values[name] = values[index]; - }); - return Object.freeze(values); - }; - TupleCoder.prototype.encode = function (writer, value) { - return (0, array_1.pack)(writer, this.coders, value); - }; - TupleCoder.prototype.decode = function (reader) { - return reader.coerce(this.name, (0, array_1.unpack)(reader, this.coders)); - }; - return TupleCoder; -}(abstract_coder_1.Coder)); -exports.TupleCoder = TupleCoder; - -},{"./abstract-coder":5,"./array":8}],16:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ErrorFragment = exports.FunctionFragment = exports.ConstructorFragment = exports.EventFragment = exports.Fragment = exports.ParamType = exports.FormatTypes = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -; -var _constructorGuard = {}; -var ModifiersBytes = { calldata: true, memory: true, storage: true }; -var ModifiersNest = { calldata: true, memory: true }; -function checkModifier(type, name) { - if (type === "bytes" || type === "string") { - if (ModifiersBytes[name]) { - return true; - } - } - else if (type === "address") { - if (name === "payable") { - return true; - } - } - else if (type.indexOf("[") >= 0 || type === "tuple") { - if (ModifiersNest[name]) { - return true; - } - } - if (ModifiersBytes[name] || name === "payable") { - logger.throwArgumentError("invalid modifier", "name", name); - } - return false; -} -// @TODO: Make sure that children of an indexed tuple are marked with a null indexed -function parseParamType(param, allowIndexed) { - var originalParam = param; - function throwError(i) { - logger.throwArgumentError("unexpected character at position " + i, "param", param); - } - param = param.replace(/\s/g, " "); - function newNode(parent) { - var node = { type: "", name: "", parent: parent, state: { allowType: true } }; - if (allowIndexed) { - node.indexed = false; - } - return node; - } - var parent = { type: "", name: "", state: { allowType: true } }; - var node = parent; - for (var i = 0; i < param.length; i++) { - var c = param[i]; - switch (c) { - case "(": - if (node.state.allowType && node.type === "") { - node.type = "tuple"; - } - else if (!node.state.allowParams) { - throwError(i); - } - node.state.allowType = false; - node.type = verifyType(node.type); - node.components = [newNode(node)]; - node = node.components[0]; - break; - case ")": - delete node.state; - if (node.name === "indexed") { - if (!allowIndexed) { - throwError(i); - } - node.indexed = true; - node.name = ""; - } - if (checkModifier(node.type, node.name)) { - node.name = ""; - } - node.type = verifyType(node.type); - var child = node; - node = node.parent; - if (!node) { - throwError(i); - } - delete child.parent; - node.state.allowParams = false; - node.state.allowName = true; - node.state.allowArray = true; - break; - case ",": - delete node.state; - if (node.name === "indexed") { - if (!allowIndexed) { - throwError(i); - } - node.indexed = true; - node.name = ""; - } - if (checkModifier(node.type, node.name)) { - node.name = ""; - } - node.type = verifyType(node.type); - var sibling = newNode(node.parent); - //{ type: "", name: "", parent: node.parent, state: { allowType: true } }; - node.parent.components.push(sibling); - delete node.parent; - node = sibling; - break; - // Hit a space... - case " ": - // If reading type, the type is done and may read a param or name - if (node.state.allowType) { - if (node.type !== "") { - node.type = verifyType(node.type); - delete node.state.allowType; - node.state.allowName = true; - node.state.allowParams = true; - } - } - // If reading name, the name is done - if (node.state.allowName) { - if (node.name !== "") { - if (node.name === "indexed") { - if (!allowIndexed) { - throwError(i); - } - if (node.indexed) { - throwError(i); - } - node.indexed = true; - node.name = ""; - } - else if (checkModifier(node.type, node.name)) { - node.name = ""; - } - else { - node.state.allowName = false; - } - } - } - break; - case "[": - if (!node.state.allowArray) { - throwError(i); - } - node.type += c; - node.state.allowArray = false; - node.state.allowName = false; - node.state.readArray = true; - break; - case "]": - if (!node.state.readArray) { - throwError(i); - } - node.type += c; - node.state.readArray = false; - node.state.allowArray = true; - node.state.allowName = true; - break; - default: - if (node.state.allowType) { - node.type += c; - node.state.allowParams = true; - node.state.allowArray = true; - } - else if (node.state.allowName) { - node.name += c; - delete node.state.allowArray; - } - else if (node.state.readArray) { - node.type += c; - } - else { - throwError(i); - } - } - } - if (node.parent) { - logger.throwArgumentError("unexpected eof", "param", param); - } - delete parent.state; - if (node.name === "indexed") { - if (!allowIndexed) { - throwError(originalParam.length - 7); - } - if (node.indexed) { - throwError(originalParam.length - 7); - } - node.indexed = true; - node.name = ""; - } - else if (checkModifier(node.type, node.name)) { - node.name = ""; - } - parent.type = verifyType(parent.type); - return parent; -} -function populate(object, params) { - for (var key in params) { - (0, properties_1.defineReadOnly)(object, key, params[key]); - } -} -exports.FormatTypes = Object.freeze({ - // Bare formatting, as is needed for computing a sighash of an event or function - sighash: "sighash", - // Human-Readable with Minimal spacing and without names (compact human-readable) - minimal: "minimal", - // Human-Readable with nice spacing, including all names - full: "full", - // JSON-format a la Solidity - json: "json" -}); -var paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/); -var ParamType = /** @class */ (function () { - function ParamType(constructorGuard, params) { - if (constructorGuard !== _constructorGuard) { - logger.throwError("use fromString", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new ParamType()" - }); - } - populate(this, params); - var match = this.type.match(paramTypeArray); - if (match) { - populate(this, { - arrayLength: parseInt(match[2] || "-1"), - arrayChildren: ParamType.fromObject({ - type: match[1], - components: this.components - }), - baseType: "array" - }); - } - else { - populate(this, { - arrayLength: null, - arrayChildren: null, - baseType: ((this.components != null) ? "tuple" : this.type) - }); - } - this._isParamType = true; - Object.freeze(this); - } - // Format the parameter fragment - // - sighash: "(uint256,address)" - // - minimal: "tuple(uint256,address) indexed" - // - full: "tuple(uint256 foo, address bar) indexed baz" - ParamType.prototype.format = function (format) { - if (!format) { - format = exports.FormatTypes.sighash; - } - if (!exports.FormatTypes[format]) { - logger.throwArgumentError("invalid format type", "format", format); - } - if (format === exports.FormatTypes.json) { - var result_1 = { - type: ((this.baseType === "tuple") ? "tuple" : this.type), - name: (this.name || undefined) - }; - if (typeof (this.indexed) === "boolean") { - result_1.indexed = this.indexed; - } - if (this.components) { - result_1.components = this.components.map(function (comp) { return JSON.parse(comp.format(format)); }); - } - return JSON.stringify(result_1); - } - var result = ""; - // Array - if (this.baseType === "array") { - result += this.arrayChildren.format(format); - result += "[" + (this.arrayLength < 0 ? "" : String(this.arrayLength)) + "]"; - } - else { - if (this.baseType === "tuple") { - if (format !== exports.FormatTypes.sighash) { - result += this.type; - } - result += "(" + this.components.map(function (comp) { return comp.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ")"; - } - else { - result += this.type; - } - } - if (format !== exports.FormatTypes.sighash) { - if (this.indexed === true) { - result += " indexed"; - } - if (format === exports.FormatTypes.full && this.name) { - result += " " + this.name; - } - } - return result; - }; - ParamType.from = function (value, allowIndexed) { - if (typeof (value) === "string") { - return ParamType.fromString(value, allowIndexed); - } - return ParamType.fromObject(value); - }; - ParamType.fromObject = function (value) { - if (ParamType.isParamType(value)) { - return value; - } - return new ParamType(_constructorGuard, { - name: (value.name || null), - type: verifyType(value.type), - indexed: ((value.indexed == null) ? null : !!value.indexed), - components: (value.components ? value.components.map(ParamType.fromObject) : null) - }); - }; - ParamType.fromString = function (value, allowIndexed) { - function ParamTypify(node) { - return ParamType.fromObject({ - name: node.name, - type: node.type, - indexed: node.indexed, - components: node.components - }); - } - return ParamTypify(parseParamType(value, !!allowIndexed)); - }; - ParamType.isParamType = function (value) { - return !!(value != null && value._isParamType); - }; - return ParamType; -}()); -exports.ParamType = ParamType; -; -function parseParams(value, allowIndex) { - return splitNesting(value).map(function (param) { return ParamType.fromString(param, allowIndex); }); -} -var Fragment = /** @class */ (function () { - function Fragment(constructorGuard, params) { - if (constructorGuard !== _constructorGuard) { - logger.throwError("use a static from method", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new Fragment()" - }); - } - populate(this, params); - this._isFragment = true; - Object.freeze(this); - } - Fragment.from = function (value) { - if (Fragment.isFragment(value)) { - return value; - } - if (typeof (value) === "string") { - return Fragment.fromString(value); - } - return Fragment.fromObject(value); - }; - Fragment.fromObject = function (value) { - if (Fragment.isFragment(value)) { - return value; - } - switch (value.type) { - case "function": - return FunctionFragment.fromObject(value); - case "event": - return EventFragment.fromObject(value); - case "constructor": - return ConstructorFragment.fromObject(value); - case "error": - return ErrorFragment.fromObject(value); - case "fallback": - case "receive": - // @TODO: Something? Maybe return a FunctionFragment? A custom DefaultFunctionFragment? - return null; - } - return logger.throwArgumentError("invalid fragment object", "value", value); - }; - Fragment.fromString = function (value) { - // Make sure the "returns" is surrounded by a space and all whitespace is exactly one space - value = value.replace(/\s/g, " "); - value = value.replace(/\(/g, " (").replace(/\)/g, ") ").replace(/\s+/g, " "); - value = value.trim(); - if (value.split(" ")[0] === "event") { - return EventFragment.fromString(value.substring(5).trim()); - } - else if (value.split(" ")[0] === "function") { - return FunctionFragment.fromString(value.substring(8).trim()); - } - else if (value.split("(")[0].trim() === "constructor") { - return ConstructorFragment.fromString(value.trim()); - } - else if (value.split(" ")[0] === "error") { - return ErrorFragment.fromString(value.substring(5).trim()); - } - return logger.throwArgumentError("unsupported fragment", "value", value); - }; - Fragment.isFragment = function (value) { - return !!(value && value._isFragment); - }; - return Fragment; -}()); -exports.Fragment = Fragment; -var EventFragment = /** @class */ (function (_super) { - __extends(EventFragment, _super); - function EventFragment() { - return _super !== null && _super.apply(this, arguments) || this; - } - EventFragment.prototype.format = function (format) { - if (!format) { - format = exports.FormatTypes.sighash; - } - if (!exports.FormatTypes[format]) { - logger.throwArgumentError("invalid format type", "format", format); - } - if (format === exports.FormatTypes.json) { - return JSON.stringify({ - type: "event", - anonymous: this.anonymous, - name: this.name, - inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }) - }); - } - var result = ""; - if (format !== exports.FormatTypes.sighash) { - result += "event "; - } - result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") "; - if (format !== exports.FormatTypes.sighash) { - if (this.anonymous) { - result += "anonymous "; - } - } - return result.trim(); - }; - EventFragment.from = function (value) { - if (typeof (value) === "string") { - return EventFragment.fromString(value); - } - return EventFragment.fromObject(value); - }; - EventFragment.fromObject = function (value) { - if (EventFragment.isEventFragment(value)) { - return value; - } - if (value.type !== "event") { - logger.throwArgumentError("invalid event object", "value", value); - } - var params = { - name: verifyIdentifier(value.name), - anonymous: value.anonymous, - inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []), - type: "event" - }; - return new EventFragment(_constructorGuard, params); - }; - EventFragment.fromString = function (value) { - var match = value.match(regexParen); - if (!match) { - logger.throwArgumentError("invalid event string", "value", value); - } - var anonymous = false; - match[3].split(" ").forEach(function (modifier) { - switch (modifier.trim()) { - case "anonymous": - anonymous = true; - break; - case "": - break; - default: - logger.warn("unknown modifier: " + modifier); - } - }); - return EventFragment.fromObject({ - name: match[1].trim(), - anonymous: anonymous, - inputs: parseParams(match[2], true), - type: "event" - }); - }; - EventFragment.isEventFragment = function (value) { - return (value && value._isFragment && value.type === "event"); - }; - return EventFragment; -}(Fragment)); -exports.EventFragment = EventFragment; -function parseGas(value, params) { - params.gas = null; - var comps = value.split("@"); - if (comps.length !== 1) { - if (comps.length > 2) { - logger.throwArgumentError("invalid human-readable ABI signature", "value", value); - } - if (!comps[1].match(/^[0-9]+$/)) { - logger.throwArgumentError("invalid human-readable ABI signature gas", "value", value); - } - params.gas = bignumber_1.BigNumber.from(comps[1]); - return comps[0]; - } - return value; -} -function parseModifiers(value, params) { - params.constant = false; - params.payable = false; - params.stateMutability = "nonpayable"; - value.split(" ").forEach(function (modifier) { - switch (modifier.trim()) { - case "constant": - params.constant = true; - break; - case "payable": - params.payable = true; - params.stateMutability = "payable"; - break; - case "nonpayable": - params.payable = false; - params.stateMutability = "nonpayable"; - break; - case "pure": - params.constant = true; - params.stateMutability = "pure"; - break; - case "view": - params.constant = true; - params.stateMutability = "view"; - break; - case "external": - case "public": - case "": - break; - default: - console.log("unknown modifier: " + modifier); - } - }); -} -function verifyState(value) { - var result = { - constant: false, - payable: true, - stateMutability: "payable" - }; - if (value.stateMutability != null) { - result.stateMutability = value.stateMutability; - // Set (and check things are consistent) the constant property - result.constant = (result.stateMutability === "view" || result.stateMutability === "pure"); - if (value.constant != null) { - if ((!!value.constant) !== result.constant) { - logger.throwArgumentError("cannot have constant function with mutability " + result.stateMutability, "value", value); - } - } - // Set (and check things are consistent) the payable property - result.payable = (result.stateMutability === "payable"); - if (value.payable != null) { - if ((!!value.payable) !== result.payable) { - logger.throwArgumentError("cannot have payable function with mutability " + result.stateMutability, "value", value); - } - } - } - else if (value.payable != null) { - result.payable = !!value.payable; - // If payable we can assume non-constant; otherwise we can't assume - if (value.constant == null && !result.payable && value.type !== "constructor") { - logger.throwArgumentError("unable to determine stateMutability", "value", value); - } - result.constant = !!value.constant; - if (result.constant) { - result.stateMutability = "view"; - } - else { - result.stateMutability = (result.payable ? "payable" : "nonpayable"); - } - if (result.payable && result.constant) { - logger.throwArgumentError("cannot have constant payable function", "value", value); - } - } - else if (value.constant != null) { - result.constant = !!value.constant; - result.payable = !result.constant; - result.stateMutability = (result.constant ? "view" : "payable"); - } - else if (value.type !== "constructor") { - logger.throwArgumentError("unable to determine stateMutability", "value", value); - } - return result; -} -var ConstructorFragment = /** @class */ (function (_super) { - __extends(ConstructorFragment, _super); - function ConstructorFragment() { - return _super !== null && _super.apply(this, arguments) || this; - } - ConstructorFragment.prototype.format = function (format) { - if (!format) { - format = exports.FormatTypes.sighash; - } - if (!exports.FormatTypes[format]) { - logger.throwArgumentError("invalid format type", "format", format); - } - if (format === exports.FormatTypes.json) { - return JSON.stringify({ - type: "constructor", - stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined), - payable: this.payable, - gas: (this.gas ? this.gas.toNumber() : undefined), - inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }) - }); - } - if (format === exports.FormatTypes.sighash) { - logger.throwError("cannot format a constructor for sighash", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "format(sighash)" - }); - } - var result = "constructor(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") "; - if (this.stateMutability && this.stateMutability !== "nonpayable") { - result += this.stateMutability + " "; - } - return result.trim(); - }; - ConstructorFragment.from = function (value) { - if (typeof (value) === "string") { - return ConstructorFragment.fromString(value); - } - return ConstructorFragment.fromObject(value); - }; - ConstructorFragment.fromObject = function (value) { - if (ConstructorFragment.isConstructorFragment(value)) { - return value; - } - if (value.type !== "constructor") { - logger.throwArgumentError("invalid constructor object", "value", value); - } - var state = verifyState(value); - if (state.constant) { - logger.throwArgumentError("constructor cannot be constant", "value", value); - } - var params = { - name: null, - type: value.type, - inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []), - payable: state.payable, - stateMutability: state.stateMutability, - gas: (value.gas ? bignumber_1.BigNumber.from(value.gas) : null) - }; - return new ConstructorFragment(_constructorGuard, params); - }; - ConstructorFragment.fromString = function (value) { - var params = { type: "constructor" }; - value = parseGas(value, params); - var parens = value.match(regexParen); - if (!parens || parens[1].trim() !== "constructor") { - logger.throwArgumentError("invalid constructor string", "value", value); - } - params.inputs = parseParams(parens[2].trim(), false); - parseModifiers(parens[3].trim(), params); - return ConstructorFragment.fromObject(params); - }; - ConstructorFragment.isConstructorFragment = function (value) { - return (value && value._isFragment && value.type === "constructor"); - }; - return ConstructorFragment; -}(Fragment)); -exports.ConstructorFragment = ConstructorFragment; -var FunctionFragment = /** @class */ (function (_super) { - __extends(FunctionFragment, _super); - function FunctionFragment() { - return _super !== null && _super.apply(this, arguments) || this; - } - FunctionFragment.prototype.format = function (format) { - if (!format) { - format = exports.FormatTypes.sighash; - } - if (!exports.FormatTypes[format]) { - logger.throwArgumentError("invalid format type", "format", format); - } - if (format === exports.FormatTypes.json) { - return JSON.stringify({ - type: "function", - name: this.name, - constant: this.constant, - stateMutability: ((this.stateMutability !== "nonpayable") ? this.stateMutability : undefined), - payable: this.payable, - gas: (this.gas ? this.gas.toNumber() : undefined), - inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }), - outputs: this.outputs.map(function (output) { return JSON.parse(output.format(format)); }), - }); - } - var result = ""; - if (format !== exports.FormatTypes.sighash) { - result += "function "; - } - result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") "; - if (format !== exports.FormatTypes.sighash) { - if (this.stateMutability) { - if (this.stateMutability !== "nonpayable") { - result += (this.stateMutability + " "); - } - } - else if (this.constant) { - result += "view "; - } - if (this.outputs && this.outputs.length) { - result += "returns (" + this.outputs.map(function (output) { return output.format(format); }).join(", ") + ") "; - } - if (this.gas != null) { - result += "@" + this.gas.toString() + " "; - } - } - return result.trim(); - }; - FunctionFragment.from = function (value) { - if (typeof (value) === "string") { - return FunctionFragment.fromString(value); - } - return FunctionFragment.fromObject(value); - }; - FunctionFragment.fromObject = function (value) { - if (FunctionFragment.isFunctionFragment(value)) { - return value; - } - if (value.type !== "function") { - logger.throwArgumentError("invalid function object", "value", value); - } - var state = verifyState(value); - var params = { - type: value.type, - name: verifyIdentifier(value.name), - constant: state.constant, - inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []), - outputs: (value.outputs ? value.outputs.map(ParamType.fromObject) : []), - payable: state.payable, - stateMutability: state.stateMutability, - gas: (value.gas ? bignumber_1.BigNumber.from(value.gas) : null) - }; - return new FunctionFragment(_constructorGuard, params); - }; - FunctionFragment.fromString = function (value) { - var params = { type: "function" }; - value = parseGas(value, params); - var comps = value.split(" returns "); - if (comps.length > 2) { - logger.throwArgumentError("invalid function string", "value", value); - } - var parens = comps[0].match(regexParen); - if (!parens) { - logger.throwArgumentError("invalid function signature", "value", value); - } - params.name = parens[1].trim(); - if (params.name) { - verifyIdentifier(params.name); - } - params.inputs = parseParams(parens[2], false); - parseModifiers(parens[3].trim(), params); - // We have outputs - if (comps.length > 1) { - var returns = comps[1].match(regexParen); - if (returns[1].trim() != "" || returns[3].trim() != "") { - logger.throwArgumentError("unexpected tokens", "value", value); - } - params.outputs = parseParams(returns[2], false); - } - else { - params.outputs = []; - } - return FunctionFragment.fromObject(params); - }; - FunctionFragment.isFunctionFragment = function (value) { - return (value && value._isFragment && value.type === "function"); - }; - return FunctionFragment; -}(ConstructorFragment)); -exports.FunctionFragment = FunctionFragment; -//export class StructFragment extends Fragment { -//} -function checkForbidden(fragment) { - var sig = fragment.format(); - if (sig === "Error(string)" || sig === "Panic(uint256)") { - logger.throwArgumentError("cannot specify user defined " + sig + " error", "fragment", fragment); - } - return fragment; -} -var ErrorFragment = /** @class */ (function (_super) { - __extends(ErrorFragment, _super); - function ErrorFragment() { - return _super !== null && _super.apply(this, arguments) || this; - } - ErrorFragment.prototype.format = function (format) { - if (!format) { - format = exports.FormatTypes.sighash; - } - if (!exports.FormatTypes[format]) { - logger.throwArgumentError("invalid format type", "format", format); - } - if (format === exports.FormatTypes.json) { - return JSON.stringify({ - type: "error", - name: this.name, - inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }), - }); - } - var result = ""; - if (format !== exports.FormatTypes.sighash) { - result += "error "; - } - result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === exports.FormatTypes.full) ? ", " : ",") + ") "; - return result.trim(); - }; - ErrorFragment.from = function (value) { - if (typeof (value) === "string") { - return ErrorFragment.fromString(value); - } - return ErrorFragment.fromObject(value); - }; - ErrorFragment.fromObject = function (value) { - if (ErrorFragment.isErrorFragment(value)) { - return value; - } - if (value.type !== "error") { - logger.throwArgumentError("invalid error object", "value", value); - } - var params = { - type: value.type, - name: verifyIdentifier(value.name), - inputs: (value.inputs ? value.inputs.map(ParamType.fromObject) : []) - }; - return checkForbidden(new ErrorFragment(_constructorGuard, params)); - }; - ErrorFragment.fromString = function (value) { - var params = { type: "error" }; - var parens = value.match(regexParen); - if (!parens) { - logger.throwArgumentError("invalid error signature", "value", value); - } - params.name = parens[1].trim(); - if (params.name) { - verifyIdentifier(params.name); - } - params.inputs = parseParams(parens[2], false); - return checkForbidden(ErrorFragment.fromObject(params)); - }; - ErrorFragment.isErrorFragment = function (value) { - return (value && value._isFragment && value.type === "error"); - }; - return ErrorFragment; -}(Fragment)); -exports.ErrorFragment = ErrorFragment; -function verifyType(type) { - // These need to be transformed to their full description - if (type.match(/^uint($|[^1-9])/)) { - type = "uint256" + type.substring(4); - } - else if (type.match(/^int($|[^1-9])/)) { - type = "int256" + type.substring(3); - } - // @TODO: more verification - return type; -} -// See: https://github.com/ethereum/solidity/blob/1f8f1a3db93a548d0555e3e14cfc55a10e25b60e/docs/grammar/SolidityLexer.g4#L234 -var regexIdentifier = new RegExp("^[a-zA-Z$_][a-zA-Z0-9$_]*$"); -function verifyIdentifier(value) { - if (!value || !value.match(regexIdentifier)) { - logger.throwArgumentError("invalid identifier \"" + value + "\"", "value", value); - } - return value; -} -var regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$"); -function splitNesting(value) { - value = value.trim(); - var result = []; - var accum = ""; - var depth = 0; - for (var offset = 0; offset < value.length; offset++) { - var c = value[offset]; - if (c === "," && depth === 0) { - result.push(accum); - accum = ""; - } - else { - accum += c; - if (c === "(") { - depth++; - } - else if (c === ")") { - depth--; - if (depth === -1) { - logger.throwArgumentError("unbalanced parenthesis", "value", value); - } - } - } - } - if (accum) { - result.push(accum); - } - return result; -} - -},{"./_version":3,"@ethersproject/bignumber":31,"@ethersproject/logger":57,"@ethersproject/properties":63}],17:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TransactionDescription = exports.LogDescription = exports.checkResultErrors = exports.Indexed = exports.Interface = exports.defaultAbiCoder = exports.AbiCoder = exports.FormatTypes = exports.ParamType = exports.FunctionFragment = exports.Fragment = exports.EventFragment = exports.ErrorFragment = exports.ConstructorFragment = void 0; -var fragments_1 = require("./fragments"); -Object.defineProperty(exports, "ConstructorFragment", { enumerable: true, get: function () { return fragments_1.ConstructorFragment; } }); -Object.defineProperty(exports, "ErrorFragment", { enumerable: true, get: function () { return fragments_1.ErrorFragment; } }); -Object.defineProperty(exports, "EventFragment", { enumerable: true, get: function () { return fragments_1.EventFragment; } }); -Object.defineProperty(exports, "FormatTypes", { enumerable: true, get: function () { return fragments_1.FormatTypes; } }); -Object.defineProperty(exports, "Fragment", { enumerable: true, get: function () { return fragments_1.Fragment; } }); -Object.defineProperty(exports, "FunctionFragment", { enumerable: true, get: function () { return fragments_1.FunctionFragment; } }); -Object.defineProperty(exports, "ParamType", { enumerable: true, get: function () { return fragments_1.ParamType; } }); -var abi_coder_1 = require("./abi-coder"); -Object.defineProperty(exports, "AbiCoder", { enumerable: true, get: function () { return abi_coder_1.AbiCoder; } }); -Object.defineProperty(exports, "defaultAbiCoder", { enumerable: true, get: function () { return abi_coder_1.defaultAbiCoder; } }); -var interface_1 = require("./interface"); -Object.defineProperty(exports, "checkResultErrors", { enumerable: true, get: function () { return interface_1.checkResultErrors; } }); -Object.defineProperty(exports, "Indexed", { enumerable: true, get: function () { return interface_1.Indexed; } }); -Object.defineProperty(exports, "Interface", { enumerable: true, get: function () { return interface_1.Interface; } }); -Object.defineProperty(exports, "LogDescription", { enumerable: true, get: function () { return interface_1.LogDescription; } }); -Object.defineProperty(exports, "TransactionDescription", { enumerable: true, get: function () { return interface_1.TransactionDescription; } }); - -},{"./abi-coder":4,"./fragments":16,"./interface":18}],18:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Interface = exports.Indexed = exports.ErrorDescription = exports.TransactionDescription = exports.LogDescription = exports.checkResultErrors = void 0; -var address_1 = require("@ethersproject/address"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var hash_1 = require("@ethersproject/hash"); -var keccak256_1 = require("@ethersproject/keccak256"); -var properties_1 = require("@ethersproject/properties"); -var abi_coder_1 = require("./abi-coder"); -var abstract_coder_1 = require("./coders/abstract-coder"); -Object.defineProperty(exports, "checkResultErrors", { enumerable: true, get: function () { return abstract_coder_1.checkResultErrors; } }); -var fragments_1 = require("./fragments"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var LogDescription = /** @class */ (function (_super) { - __extends(LogDescription, _super); - function LogDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - return LogDescription; -}(properties_1.Description)); -exports.LogDescription = LogDescription; -var TransactionDescription = /** @class */ (function (_super) { - __extends(TransactionDescription, _super); - function TransactionDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - return TransactionDescription; -}(properties_1.Description)); -exports.TransactionDescription = TransactionDescription; -var ErrorDescription = /** @class */ (function (_super) { - __extends(ErrorDescription, _super); - function ErrorDescription() { - return _super !== null && _super.apply(this, arguments) || this; - } - return ErrorDescription; -}(properties_1.Description)); -exports.ErrorDescription = ErrorDescription; -var Indexed = /** @class */ (function (_super) { - __extends(Indexed, _super); - function Indexed() { - return _super !== null && _super.apply(this, arguments) || this; - } - Indexed.isIndexed = function (value) { - return !!(value && value._isIndexed); - }; - return Indexed; -}(properties_1.Description)); -exports.Indexed = Indexed; -var BuiltinErrors = { - "0x08c379a0": { signature: "Error(string)", name: "Error", inputs: ["string"], reason: true }, - "0x4e487b71": { signature: "Panic(uint256)", name: "Panic", inputs: ["uint256"] } -}; -function wrapAccessError(property, error) { - var wrap = new Error("deferred error during ABI decoding triggered accessing " + property); - wrap.error = error; - return wrap; -} -/* -function checkNames(fragment: Fragment, type: "input" | "output", params: Array): void { - params.reduce((accum, param) => { - if (param.name) { - if (accum[param.name]) { - logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format("full") }`, "fragment", fragment); - } - accum[param.name] = true; - } - return accum; - }, <{ [ name: string ]: boolean }>{ }); -} -*/ -var Interface = /** @class */ (function () { - function Interface(fragments) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, Interface); - var abi = []; - if (typeof (fragments) === "string") { - abi = JSON.parse(fragments); - } - else { - abi = fragments; - } - (0, properties_1.defineReadOnly)(this, "fragments", abi.map(function (fragment) { - return fragments_1.Fragment.from(fragment); - }).filter(function (fragment) { return (fragment != null); })); - (0, properties_1.defineReadOnly)(this, "_abiCoder", (0, properties_1.getStatic)(_newTarget, "getAbiCoder")()); - (0, properties_1.defineReadOnly)(this, "functions", {}); - (0, properties_1.defineReadOnly)(this, "errors", {}); - (0, properties_1.defineReadOnly)(this, "events", {}); - (0, properties_1.defineReadOnly)(this, "structs", {}); - // Add all fragments by their signature - this.fragments.forEach(function (fragment) { - var bucket = null; - switch (fragment.type) { - case "constructor": - if (_this.deploy) { - logger.warn("duplicate definition - constructor"); - return; - } - //checkNames(fragment, "input", fragment.inputs); - (0, properties_1.defineReadOnly)(_this, "deploy", fragment); - return; - case "function": - //checkNames(fragment, "input", fragment.inputs); - //checkNames(fragment, "output", (fragment).outputs); - bucket = _this.functions; - break; - case "event": - //checkNames(fragment, "input", fragment.inputs); - bucket = _this.events; - break; - case "error": - bucket = _this.errors; - break; - default: - return; - } - var signature = fragment.format(); - if (bucket[signature]) { - logger.warn("duplicate definition - " + signature); - return; - } - bucket[signature] = fragment; - }); - // If we do not have a constructor add a default - if (!this.deploy) { - (0, properties_1.defineReadOnly)(this, "deploy", fragments_1.ConstructorFragment.from({ - payable: false, - type: "constructor" - })); - } - (0, properties_1.defineReadOnly)(this, "_isInterface", true); - } - Interface.prototype.format = function (format) { - if (!format) { - format = fragments_1.FormatTypes.full; - } - if (format === fragments_1.FormatTypes.sighash) { - logger.throwArgumentError("interface does not support formatting sighash", "format", format); - } - var abi = this.fragments.map(function (fragment) { return fragment.format(format); }); - // We need to re-bundle the JSON fragments a bit - if (format === fragments_1.FormatTypes.json) { - return JSON.stringify(abi.map(function (j) { return JSON.parse(j); })); - } - return abi; - }; - // Sub-classes can override these to handle other blockchains - Interface.getAbiCoder = function () { - return abi_coder_1.defaultAbiCoder; - }; - Interface.getAddress = function (address) { - return (0, address_1.getAddress)(address); - }; - Interface.getSighash = function (fragment) { - return (0, bytes_1.hexDataSlice)((0, hash_1.id)(fragment.format()), 0, 4); - }; - Interface.getEventTopic = function (eventFragment) { - return (0, hash_1.id)(eventFragment.format()); - }; - // Find a function definition by any means necessary (unless it is ambiguous) - Interface.prototype.getFunction = function (nameOrSignatureOrSighash) { - if ((0, bytes_1.isHexString)(nameOrSignatureOrSighash)) { - for (var name_1 in this.functions) { - if (nameOrSignatureOrSighash === this.getSighash(name_1)) { - return this.functions[name_1]; - } - } - logger.throwArgumentError("no matching function", "sighash", nameOrSignatureOrSighash); - } - // It is a bare name, look up the function (will return null if ambiguous) - if (nameOrSignatureOrSighash.indexOf("(") === -1) { - var name_2 = nameOrSignatureOrSighash.trim(); - var matching = Object.keys(this.functions).filter(function (f) { return (f.split("(" /* fix:) */)[0] === name_2); }); - if (matching.length === 0) { - logger.throwArgumentError("no matching function", "name", name_2); - } - else if (matching.length > 1) { - logger.throwArgumentError("multiple matching functions", "name", name_2); - } - return this.functions[matching[0]]; - } - // Normalize the signature and lookup the function - var result = this.functions[fragments_1.FunctionFragment.fromString(nameOrSignatureOrSighash).format()]; - if (!result) { - logger.throwArgumentError("no matching function", "signature", nameOrSignatureOrSighash); - } - return result; - }; - // Find an event definition by any means necessary (unless it is ambiguous) - Interface.prototype.getEvent = function (nameOrSignatureOrTopic) { - if ((0, bytes_1.isHexString)(nameOrSignatureOrTopic)) { - var topichash = nameOrSignatureOrTopic.toLowerCase(); - for (var name_3 in this.events) { - if (topichash === this.getEventTopic(name_3)) { - return this.events[name_3]; - } - } - logger.throwArgumentError("no matching event", "topichash", topichash); - } - // It is a bare name, look up the function (will return null if ambiguous) - if (nameOrSignatureOrTopic.indexOf("(") === -1) { - var name_4 = nameOrSignatureOrTopic.trim(); - var matching = Object.keys(this.events).filter(function (f) { return (f.split("(" /* fix:) */)[0] === name_4); }); - if (matching.length === 0) { - logger.throwArgumentError("no matching event", "name", name_4); - } - else if (matching.length > 1) { - logger.throwArgumentError("multiple matching events", "name", name_4); - } - return this.events[matching[0]]; - } - // Normalize the signature and lookup the function - var result = this.events[fragments_1.EventFragment.fromString(nameOrSignatureOrTopic).format()]; - if (!result) { - logger.throwArgumentError("no matching event", "signature", nameOrSignatureOrTopic); - } - return result; - }; - // Find a function definition by any means necessary (unless it is ambiguous) - Interface.prototype.getError = function (nameOrSignatureOrSighash) { - if ((0, bytes_1.isHexString)(nameOrSignatureOrSighash)) { - var getSighash = (0, properties_1.getStatic)(this.constructor, "getSighash"); - for (var name_5 in this.errors) { - var error = this.errors[name_5]; - if (nameOrSignatureOrSighash === getSighash(error)) { - return this.errors[name_5]; - } - } - logger.throwArgumentError("no matching error", "sighash", nameOrSignatureOrSighash); - } - // It is a bare name, look up the function (will return null if ambiguous) - if (nameOrSignatureOrSighash.indexOf("(") === -1) { - var name_6 = nameOrSignatureOrSighash.trim(); - var matching = Object.keys(this.errors).filter(function (f) { return (f.split("(" /* fix:) */)[0] === name_6); }); - if (matching.length === 0) { - logger.throwArgumentError("no matching error", "name", name_6); - } - else if (matching.length > 1) { - logger.throwArgumentError("multiple matching errors", "name", name_6); - } - return this.errors[matching[0]]; - } - // Normalize the signature and lookup the function - var result = this.errors[fragments_1.FunctionFragment.fromString(nameOrSignatureOrSighash).format()]; - if (!result) { - logger.throwArgumentError("no matching error", "signature", nameOrSignatureOrSighash); - } - return result; - }; - // Get the sighash (the bytes4 selector) used by Solidity to identify a function - Interface.prototype.getSighash = function (fragment) { - if (typeof (fragment) === "string") { - try { - fragment = this.getFunction(fragment); - } - catch (error) { - try { - fragment = this.getError(fragment); - } - catch (_) { - throw error; - } - } - } - return (0, properties_1.getStatic)(this.constructor, "getSighash")(fragment); - }; - // Get the topic (the bytes32 hash) used by Solidity to identify an event - Interface.prototype.getEventTopic = function (eventFragment) { - if (typeof (eventFragment) === "string") { - eventFragment = this.getEvent(eventFragment); - } - return (0, properties_1.getStatic)(this.constructor, "getEventTopic")(eventFragment); - }; - Interface.prototype._decodeParams = function (params, data) { - return this._abiCoder.decode(params, data); - }; - Interface.prototype._encodeParams = function (params, values) { - return this._abiCoder.encode(params, values); - }; - Interface.prototype.encodeDeploy = function (values) { - return this._encodeParams(this.deploy.inputs, values || []); - }; - Interface.prototype.decodeErrorResult = function (fragment, data) { - if (typeof (fragment) === "string") { - fragment = this.getError(fragment); - } - var bytes = (0, bytes_1.arrayify)(data); - if ((0, bytes_1.hexlify)(bytes.slice(0, 4)) !== this.getSighash(fragment)) { - logger.throwArgumentError("data signature does not match error " + fragment.name + ".", "data", (0, bytes_1.hexlify)(bytes)); - } - return this._decodeParams(fragment.inputs, bytes.slice(4)); - }; - Interface.prototype.encodeErrorResult = function (fragment, values) { - if (typeof (fragment) === "string") { - fragment = this.getError(fragment); - } - return (0, bytes_1.hexlify)((0, bytes_1.concat)([ - this.getSighash(fragment), - this._encodeParams(fragment.inputs, values || []) - ])); - }; - // Decode the data for a function call (e.g. tx.data) - Interface.prototype.decodeFunctionData = function (functionFragment, data) { - if (typeof (functionFragment) === "string") { - functionFragment = this.getFunction(functionFragment); - } - var bytes = (0, bytes_1.arrayify)(data); - if ((0, bytes_1.hexlify)(bytes.slice(0, 4)) !== this.getSighash(functionFragment)) { - logger.throwArgumentError("data signature does not match function " + functionFragment.name + ".", "data", (0, bytes_1.hexlify)(bytes)); - } - return this._decodeParams(functionFragment.inputs, bytes.slice(4)); - }; - // Encode the data for a function call (e.g. tx.data) - Interface.prototype.encodeFunctionData = function (functionFragment, values) { - if (typeof (functionFragment) === "string") { - functionFragment = this.getFunction(functionFragment); - } - return (0, bytes_1.hexlify)((0, bytes_1.concat)([ - this.getSighash(functionFragment), - this._encodeParams(functionFragment.inputs, values || []) - ])); - }; - // Decode the result from a function call (e.g. from eth_call) - Interface.prototype.decodeFunctionResult = function (functionFragment, data) { - if (typeof (functionFragment) === "string") { - functionFragment = this.getFunction(functionFragment); - } - var bytes = (0, bytes_1.arrayify)(data); - var reason = null; - var errorArgs = null; - var errorName = null; - var errorSignature = null; - switch (bytes.length % this._abiCoder._getWordSize()) { - case 0: - try { - return this._abiCoder.decode(functionFragment.outputs, bytes); - } - catch (error) { } - break; - case 4: { - var selector = (0, bytes_1.hexlify)(bytes.slice(0, 4)); - var builtin = BuiltinErrors[selector]; - if (builtin) { - errorArgs = this._abiCoder.decode(builtin.inputs, bytes.slice(4)); - errorName = builtin.name; - errorSignature = builtin.signature; - if (builtin.reason) { - reason = errorArgs[0]; - } - } - else { - try { - var error = this.getError(selector); - errorArgs = this._abiCoder.decode(error.inputs, bytes.slice(4)); - errorName = error.name; - errorSignature = error.format(); - } - catch (error) { - console.log(error); - } - } - break; - } - } - return logger.throwError("call revert exception", logger_1.Logger.errors.CALL_EXCEPTION, { - method: functionFragment.format(), - errorArgs: errorArgs, - errorName: errorName, - errorSignature: errorSignature, - reason: reason - }); - }; - // Encode the result for a function call (e.g. for eth_call) - Interface.prototype.encodeFunctionResult = function (functionFragment, values) { - if (typeof (functionFragment) === "string") { - functionFragment = this.getFunction(functionFragment); - } - return (0, bytes_1.hexlify)(this._abiCoder.encode(functionFragment.outputs, values || [])); - }; - // Create the filter for the event with search criteria (e.g. for eth_filterLog) - Interface.prototype.encodeFilterTopics = function (eventFragment, values) { - var _this = this; - if (typeof (eventFragment) === "string") { - eventFragment = this.getEvent(eventFragment); - } - if (values.length > eventFragment.inputs.length) { - logger.throwError("too many arguments for " + eventFragment.format(), logger_1.Logger.errors.UNEXPECTED_ARGUMENT, { - argument: "values", - value: values - }); - } - var topics = []; - if (!eventFragment.anonymous) { - topics.push(this.getEventTopic(eventFragment)); - } - var encodeTopic = function (param, value) { - if (param.type === "string") { - return (0, hash_1.id)(value); - } - else if (param.type === "bytes") { - return (0, keccak256_1.keccak256)((0, bytes_1.hexlify)(value)); - } - // Check addresses are valid - if (param.type === "address") { - _this._abiCoder.encode(["address"], [value]); - } - return (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(value), 32); - }; - values.forEach(function (value, index) { - var param = eventFragment.inputs[index]; - if (!param.indexed) { - if (value != null) { - logger.throwArgumentError("cannot filter non-indexed parameters; must be null", ("contract." + param.name), value); - } - return; - } - if (value == null) { - topics.push(null); - } - else if (param.baseType === "array" || param.baseType === "tuple") { - logger.throwArgumentError("filtering with tuples or arrays not supported", ("contract." + param.name), value); - } - else if (Array.isArray(value)) { - topics.push(value.map(function (value) { return encodeTopic(param, value); })); - } - else { - topics.push(encodeTopic(param, value)); - } - }); - // Trim off trailing nulls - while (topics.length && topics[topics.length - 1] === null) { - topics.pop(); - } - return topics; - }; - Interface.prototype.encodeEventLog = function (eventFragment, values) { - var _this = this; - if (typeof (eventFragment) === "string") { - eventFragment = this.getEvent(eventFragment); - } - var topics = []; - var dataTypes = []; - var dataValues = []; - if (!eventFragment.anonymous) { - topics.push(this.getEventTopic(eventFragment)); - } - if (values.length !== eventFragment.inputs.length) { - logger.throwArgumentError("event arguments/values mismatch", "values", values); - } - eventFragment.inputs.forEach(function (param, index) { - var value = values[index]; - if (param.indexed) { - if (param.type === "string") { - topics.push((0, hash_1.id)(value)); - } - else if (param.type === "bytes") { - topics.push((0, keccak256_1.keccak256)(value)); - } - else if (param.baseType === "tuple" || param.baseType === "array") { - // @TODO - throw new Error("not implemented"); - } - else { - topics.push(_this._abiCoder.encode([param.type], [value])); - } - } - else { - dataTypes.push(param); - dataValues.push(value); - } - }); - return { - data: this._abiCoder.encode(dataTypes, dataValues), - topics: topics - }; - }; - // Decode a filter for the event and the search criteria - Interface.prototype.decodeEventLog = function (eventFragment, data, topics) { - if (typeof (eventFragment) === "string") { - eventFragment = this.getEvent(eventFragment); - } - if (topics != null && !eventFragment.anonymous) { - var topicHash = this.getEventTopic(eventFragment); - if (!(0, bytes_1.isHexString)(topics[0], 32) || topics[0].toLowerCase() !== topicHash) { - logger.throwError("fragment/topic mismatch", logger_1.Logger.errors.INVALID_ARGUMENT, { argument: "topics[0]", expected: topicHash, value: topics[0] }); - } - topics = topics.slice(1); - } - var indexed = []; - var nonIndexed = []; - var dynamic = []; - eventFragment.inputs.forEach(function (param, index) { - if (param.indexed) { - if (param.type === "string" || param.type === "bytes" || param.baseType === "tuple" || param.baseType === "array") { - indexed.push(fragments_1.ParamType.fromObject({ type: "bytes32", name: param.name })); - dynamic.push(true); - } - else { - indexed.push(param); - dynamic.push(false); - } - } - else { - nonIndexed.push(param); - dynamic.push(false); - } - }); - var resultIndexed = (topics != null) ? this._abiCoder.decode(indexed, (0, bytes_1.concat)(topics)) : null; - var resultNonIndexed = this._abiCoder.decode(nonIndexed, data, true); - var result = []; - var nonIndexedIndex = 0, indexedIndex = 0; - eventFragment.inputs.forEach(function (param, index) { - if (param.indexed) { - if (resultIndexed == null) { - result[index] = new Indexed({ _isIndexed: true, hash: null }); - } - else if (dynamic[index]) { - result[index] = new Indexed({ _isIndexed: true, hash: resultIndexed[indexedIndex++] }); - } - else { - try { - result[index] = resultIndexed[indexedIndex++]; - } - catch (error) { - result[index] = error; - } - } - } - else { - try { - result[index] = resultNonIndexed[nonIndexedIndex++]; - } - catch (error) { - result[index] = error; - } - } - // Add the keyword argument if named and safe - if (param.name && result[param.name] == null) { - var value_1 = result[index]; - // Make error named values throw on access - if (value_1 instanceof Error) { - Object.defineProperty(result, param.name, { - enumerable: true, - get: function () { throw wrapAccessError("property " + JSON.stringify(param.name), value_1); } - }); - } - else { - result[param.name] = value_1; - } - } - }); - var _loop_1 = function (i) { - var value = result[i]; - if (value instanceof Error) { - Object.defineProperty(result, i, { - enumerable: true, - get: function () { throw wrapAccessError("index " + i, value); } - }); - } - }; - // Make all error indexed values throw on access - for (var i = 0; i < result.length; i++) { - _loop_1(i); - } - return Object.freeze(result); - }; - // Given a transaction, find the matching function fragment (if any) and - // determine all its properties and call parameters - Interface.prototype.parseTransaction = function (tx) { - var fragment = this.getFunction(tx.data.substring(0, 10).toLowerCase()); - if (!fragment) { - return null; - } - return new TransactionDescription({ - args: this._abiCoder.decode(fragment.inputs, "0x" + tx.data.substring(10)), - functionFragment: fragment, - name: fragment.name, - signature: fragment.format(), - sighash: this.getSighash(fragment), - value: bignumber_1.BigNumber.from(tx.value || "0"), - }); - }; - // @TODO - //parseCallResult(data: BytesLike): ?? - // Given an event log, find the matching event fragment (if any) and - // determine all its properties and values - Interface.prototype.parseLog = function (log) { - var fragment = this.getEvent(log.topics[0]); - if (!fragment || fragment.anonymous) { - return null; - } - // @TODO: If anonymous, and the only method, and the input count matches, should we parse? - // Probably not, because just because it is the only event in the ABI does - // not mean we have the full ABI; maybe just a fragment? - return new LogDescription({ - eventFragment: fragment, - name: fragment.name, - signature: fragment.format(), - topic: this.getEventTopic(fragment), - args: this.decodeEventLog(fragment, log.data, log.topics) - }); - }; - Interface.prototype.parseError = function (data) { - var hexData = (0, bytes_1.hexlify)(data); - var fragment = this.getError(hexData.substring(0, 10).toLowerCase()); - if (!fragment) { - return null; - } - return new ErrorDescription({ - args: this._abiCoder.decode(fragment.inputs, "0x" + hexData.substring(10)), - errorFragment: fragment, - name: fragment.name, - signature: fragment.format(), - sighash: this.getSighash(fragment), - }); - }; - /* - static from(value: Array | string | Interface) { - if (Interface.isInterface(value)) { - return value; - } - if (typeof(value) === "string") { - return new Interface(JSON.parse(value)); - } - return new Interface(value); - } - */ - Interface.isInterface = function (value) { - return !!(value && value._isInterface); - }; - return Interface; -}()); -exports.Interface = Interface; - -},{"./_version":3,"./abi-coder":4,"./coders/abstract-coder":5,"./fragments":16,"@ethersproject/address":24,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/hash":43,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/properties":63}],19:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "abstract-provider/5.5.1"; - -},{}],20:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Provider = exports.TransactionOrderForkEvent = exports.TransactionForkEvent = exports.BlockForkEvent = exports.ForkEvent = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -; -; -//export type CallTransactionable = { -// call(transaction: TransactionRequest): Promise; -//}; -var ForkEvent = /** @class */ (function (_super) { - __extends(ForkEvent, _super); - function ForkEvent() { - return _super !== null && _super.apply(this, arguments) || this; - } - ForkEvent.isForkEvent = function (value) { - return !!(value && value._isForkEvent); - }; - return ForkEvent; -}(properties_1.Description)); -exports.ForkEvent = ForkEvent; -var BlockForkEvent = /** @class */ (function (_super) { - __extends(BlockForkEvent, _super); - function BlockForkEvent(blockHash, expiry) { - var _this = this; - if (!(0, bytes_1.isHexString)(blockHash, 32)) { - logger.throwArgumentError("invalid blockHash", "blockHash", blockHash); - } - _this = _super.call(this, { - _isForkEvent: true, - _isBlockForkEvent: true, - expiry: (expiry || 0), - blockHash: blockHash - }) || this; - return _this; - } - return BlockForkEvent; -}(ForkEvent)); -exports.BlockForkEvent = BlockForkEvent; -var TransactionForkEvent = /** @class */ (function (_super) { - __extends(TransactionForkEvent, _super); - function TransactionForkEvent(hash, expiry) { - var _this = this; - if (!(0, bytes_1.isHexString)(hash, 32)) { - logger.throwArgumentError("invalid transaction hash", "hash", hash); - } - _this = _super.call(this, { - _isForkEvent: true, - _isTransactionForkEvent: true, - expiry: (expiry || 0), - hash: hash - }) || this; - return _this; - } - return TransactionForkEvent; -}(ForkEvent)); -exports.TransactionForkEvent = TransactionForkEvent; -var TransactionOrderForkEvent = /** @class */ (function (_super) { - __extends(TransactionOrderForkEvent, _super); - function TransactionOrderForkEvent(beforeHash, afterHash, expiry) { - var _this = this; - if (!(0, bytes_1.isHexString)(beforeHash, 32)) { - logger.throwArgumentError("invalid transaction hash", "beforeHash", beforeHash); - } - if (!(0, bytes_1.isHexString)(afterHash, 32)) { - logger.throwArgumentError("invalid transaction hash", "afterHash", afterHash); - } - _this = _super.call(this, { - _isForkEvent: true, - _isTransactionOrderForkEvent: true, - expiry: (expiry || 0), - beforeHash: beforeHash, - afterHash: afterHash - }) || this; - return _this; - } - return TransactionOrderForkEvent; -}(ForkEvent)); -exports.TransactionOrderForkEvent = TransactionOrderForkEvent; -/////////////////////////////// -// Exported Abstracts -var Provider = /** @class */ (function () { - function Provider() { - var _newTarget = this.constructor; - logger.checkAbstract(_newTarget, Provider); - (0, properties_1.defineReadOnly)(this, "_isProvider", true); - } - Provider.prototype.getFeeData = function () { - return __awaiter(this, void 0, void 0, function () { - var _a, block, gasPrice, maxFeePerGas, maxPriorityFeePerGas; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, (0, properties_1.resolveProperties)({ - block: this.getBlock("latest"), - gasPrice: this.getGasPrice().catch(function (error) { - // @TODO: Why is this now failing on Calaveras? - //console.log(error); - return null; - }) - })]; - case 1: - _a = _b.sent(), block = _a.block, gasPrice = _a.gasPrice; - maxFeePerGas = null, maxPriorityFeePerGas = null; - if (block && block.baseFeePerGas) { - // We may want to compute this more accurately in the future, - // using the formula "check if the base fee is correct". - // See: https://eips.ethereum.org/EIPS/eip-1559 - maxPriorityFeePerGas = bignumber_1.BigNumber.from("2500000000"); - maxFeePerGas = block.baseFeePerGas.mul(2).add(maxPriorityFeePerGas); - } - return [2 /*return*/, { maxFeePerGas: maxFeePerGas, maxPriorityFeePerGas: maxPriorityFeePerGas, gasPrice: gasPrice }]; - } - }); - }); - }; - // Alias for "on" - Provider.prototype.addListener = function (eventName, listener) { - return this.on(eventName, listener); - }; - // Alias for "off" - Provider.prototype.removeListener = function (eventName, listener) { - return this.off(eventName, listener); - }; - Provider.isProvider = function (value) { - return !!(value && value._isProvider); - }; - return Provider; -}()); -exports.Provider = Provider; - -},{"./_version":19,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63}],21:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "abstract-signer/5.5.0"; - -},{}],22:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VoidSigner = exports.Signer = void 0; -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var allowedTransactionKeys = [ - "accessList", "chainId", "customData", "data", "from", "gasLimit", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "to", "type", "value" -]; -var forwardErrors = [ - logger_1.Logger.errors.INSUFFICIENT_FUNDS, - logger_1.Logger.errors.NONCE_EXPIRED, - logger_1.Logger.errors.REPLACEMENT_UNDERPRICED, -]; -; -; -var Signer = /** @class */ (function () { - /////////////////// - // Sub-classes MUST call super - function Signer() { - var _newTarget = this.constructor; - logger.checkAbstract(_newTarget, Signer); - (0, properties_1.defineReadOnly)(this, "_isSigner", true); - } - /////////////////// - // Sub-classes MAY override these - Signer.prototype.getBalance = function (blockTag) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("getBalance"); - return [4 /*yield*/, this.provider.getBalance(this.getAddress(), blockTag)]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - Signer.prototype.getTransactionCount = function (blockTag) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("getTransactionCount"); - return [4 /*yield*/, this.provider.getTransactionCount(this.getAddress(), blockTag)]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - // Populates "from" if unspecified, and estimates the gas for the transaction - Signer.prototype.estimateGas = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var tx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("estimateGas"); - return [4 /*yield*/, (0, properties_1.resolveProperties)(this.checkTransaction(transaction))]; - case 1: - tx = _a.sent(); - return [4 /*yield*/, this.provider.estimateGas(tx)]; - case 2: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - // Populates "from" if unspecified, and calls with the transaction - Signer.prototype.call = function (transaction, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var tx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("call"); - return [4 /*yield*/, (0, properties_1.resolveProperties)(this.checkTransaction(transaction))]; - case 1: - tx = _a.sent(); - return [4 /*yield*/, this.provider.call(tx, blockTag)]; - case 2: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - // Populates all fields in a transaction, signs it and sends it to the network - Signer.prototype.sendTransaction = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var tx, signedTx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("sendTransaction"); - return [4 /*yield*/, this.populateTransaction(transaction)]; - case 1: - tx = _a.sent(); - return [4 /*yield*/, this.signTransaction(tx)]; - case 2: - signedTx = _a.sent(); - return [4 /*yield*/, this.provider.sendTransaction(signedTx)]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - Signer.prototype.getChainId = function () { - return __awaiter(this, void 0, void 0, function () { - var network; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("getChainId"); - return [4 /*yield*/, this.provider.getNetwork()]; - case 1: - network = _a.sent(); - return [2 /*return*/, network.chainId]; - } - }); - }); - }; - Signer.prototype.getGasPrice = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("getGasPrice"); - return [4 /*yield*/, this.provider.getGasPrice()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - Signer.prototype.getFeeData = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("getFeeData"); - return [4 /*yield*/, this.provider.getFeeData()]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - Signer.prototype.resolveName = function (name) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - this._checkProvider("resolveName"); - return [4 /*yield*/, this.provider.resolveName(name)]; - case 1: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - // Checks a transaction does not contain invalid keys and if - // no "from" is provided, populates it. - // - does NOT require a provider - // - adds "from" is not present - // - returns a COPY (safe to mutate the result) - // By default called from: (overriding these prevents it) - // - call - // - estimateGas - // - populateTransaction (and therefor sendTransaction) - Signer.prototype.checkTransaction = function (transaction) { - for (var key in transaction) { - if (allowedTransactionKeys.indexOf(key) === -1) { - logger.throwArgumentError("invalid transaction key: " + key, "transaction", transaction); - } - } - var tx = (0, properties_1.shallowCopy)(transaction); - if (tx.from == null) { - tx.from = this.getAddress(); - } - else { - // Make sure any provided address matches this signer - tx.from = Promise.all([ - Promise.resolve(tx.from), - this.getAddress() - ]).then(function (result) { - if (result[0].toLowerCase() !== result[1].toLowerCase()) { - logger.throwArgumentError("from address mismatch", "transaction", transaction); - } - return result[0]; - }); - } - return tx; - }; - // Populates ALL keys for a transaction and checks that "from" matches - // this Signer. Should be used by sendTransaction but NOT by signTransaction. - // By default called from: (overriding these prevents it) - // - sendTransaction - // - // Notes: - // - We allow gasPrice for EIP-1559 as long as it matches maxFeePerGas - Signer.prototype.populateTransaction = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var tx, hasEip1559, feeData, gasPrice; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, (0, properties_1.resolveProperties)(this.checkTransaction(transaction))]; - case 1: - tx = _a.sent(); - if (tx.to != null) { - tx.to = Promise.resolve(tx.to).then(function (to) { return __awaiter(_this, void 0, void 0, function () { - var address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (to == null) { - return [2 /*return*/, null]; - } - return [4 /*yield*/, this.resolveName(to)]; - case 1: - address = _a.sent(); - if (address == null) { - logger.throwArgumentError("provided ENS name resolves to null", "tx.to", to); - } - return [2 /*return*/, address]; - } - }); - }); }); - // Prevent this error from causing an UnhandledPromiseException - tx.to.catch(function (error) { }); - } - hasEip1559 = (tx.maxFeePerGas != null || tx.maxPriorityFeePerGas != null); - if (tx.gasPrice != null && (tx.type === 2 || hasEip1559)) { - logger.throwArgumentError("eip-1559 transaction do not support gasPrice", "transaction", transaction); - } - else if ((tx.type === 0 || tx.type === 1) && hasEip1559) { - logger.throwArgumentError("pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas", "transaction", transaction); - } - if (!((tx.type === 2 || tx.type == null) && (tx.maxFeePerGas != null && tx.maxPriorityFeePerGas != null))) return [3 /*break*/, 2]; - // Fully-formed EIP-1559 transaction (skip getFeeData) - tx.type = 2; - return [3 /*break*/, 5]; - case 2: - if (!(tx.type === 0 || tx.type === 1)) return [3 /*break*/, 3]; - // Explicit Legacy or EIP-2930 transaction - // Populate missing gasPrice - if (tx.gasPrice == null) { - tx.gasPrice = this.getGasPrice(); - } - return [3 /*break*/, 5]; - case 3: return [4 /*yield*/, this.getFeeData()]; - case 4: - feeData = _a.sent(); - if (tx.type == null) { - // We need to auto-detect the intended type of this transaction... - if (feeData.maxFeePerGas != null && feeData.maxPriorityFeePerGas != null) { - // The network supports EIP-1559! - // Upgrade transaction from null to eip-1559 - tx.type = 2; - if (tx.gasPrice != null) { - gasPrice = tx.gasPrice; - delete tx.gasPrice; - tx.maxFeePerGas = gasPrice; - tx.maxPriorityFeePerGas = gasPrice; - } - else { - // Populate missing fee data - if (tx.maxFeePerGas == null) { - tx.maxFeePerGas = feeData.maxFeePerGas; - } - if (tx.maxPriorityFeePerGas == null) { - tx.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas; - } - } - } - else if (feeData.gasPrice != null) { - // Network doesn't support EIP-1559... - // ...but they are trying to use EIP-1559 properties - if (hasEip1559) { - logger.throwError("network does not support EIP-1559", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "populateTransaction" - }); - } - // Populate missing fee data - if (tx.gasPrice == null) { - tx.gasPrice = feeData.gasPrice; - } - // Explicitly set untyped transaction to legacy - tx.type = 0; - } - else { - // getFeeData has failed us. - logger.throwError("failed to get consistent fee data", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "signer.getFeeData" - }); - } - } - else if (tx.type === 2) { - // Explicitly using EIP-1559 - // Populate missing fee data - if (tx.maxFeePerGas == null) { - tx.maxFeePerGas = feeData.maxFeePerGas; - } - if (tx.maxPriorityFeePerGas == null) { - tx.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas; - } - } - _a.label = 5; - case 5: - if (tx.nonce == null) { - tx.nonce = this.getTransactionCount("pending"); - } - if (tx.gasLimit == null) { - tx.gasLimit = this.estimateGas(tx).catch(function (error) { - if (forwardErrors.indexOf(error.code) >= 0) { - throw error; - } - return logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", logger_1.Logger.errors.UNPREDICTABLE_GAS_LIMIT, { - error: error, - tx: tx - }); - }); - } - if (tx.chainId == null) { - tx.chainId = this.getChainId(); - } - else { - tx.chainId = Promise.all([ - Promise.resolve(tx.chainId), - this.getChainId() - ]).then(function (results) { - if (results[1] !== 0 && results[0] !== results[1]) { - logger.throwArgumentError("chainId address mismatch", "transaction", transaction); - } - return results[0]; - }); - } - return [4 /*yield*/, (0, properties_1.resolveProperties)(tx)]; - case 6: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - /////////////////// - // Sub-classes SHOULD leave these alone - Signer.prototype._checkProvider = function (operation) { - if (!this.provider) { - logger.throwError("missing provider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: (operation || "_checkProvider") - }); - } - }; - Signer.isSigner = function (value) { - return !!(value && value._isSigner); - }; - return Signer; -}()); -exports.Signer = Signer; -var VoidSigner = /** @class */ (function (_super) { - __extends(VoidSigner, _super); - function VoidSigner(address, provider) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, VoidSigner); - _this = _super.call(this) || this; - (0, properties_1.defineReadOnly)(_this, "address", address); - (0, properties_1.defineReadOnly)(_this, "provider", provider || null); - return _this; - } - VoidSigner.prototype.getAddress = function () { - return Promise.resolve(this.address); - }; - VoidSigner.prototype._fail = function (message, operation) { - return Promise.resolve().then(function () { - logger.throwError(message, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: operation }); - }); - }; - VoidSigner.prototype.signMessage = function (message) { - return this._fail("VoidSigner cannot sign messages", "signMessage"); - }; - VoidSigner.prototype.signTransaction = function (transaction) { - return this._fail("VoidSigner cannot sign transactions", "signTransaction"); - }; - VoidSigner.prototype._signTypedData = function (domain, types, value) { - return this._fail("VoidSigner cannot sign typed data", "signTypedData"); - }; - VoidSigner.prototype.connect = function (provider) { - return new VoidSigner(this.address, provider); - }; - return VoidSigner; -}(Signer)); -exports.VoidSigner = VoidSigner; - -},{"./_version":21,"@ethersproject/logger":57,"@ethersproject/properties":63}],23:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "address/5.5.0"; - -},{}],24:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getCreate2Address = exports.getContractAddress = exports.getIcapAddress = exports.isAddress = exports.getAddress = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var bignumber_1 = require("@ethersproject/bignumber"); -var keccak256_1 = require("@ethersproject/keccak256"); -var rlp_1 = require("@ethersproject/rlp"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function getChecksumAddress(address) { - if (!(0, bytes_1.isHexString)(address, 20)) { - logger.throwArgumentError("invalid address", "address", address); - } - address = address.toLowerCase(); - var chars = address.substring(2).split(""); - var expanded = new Uint8Array(40); - for (var i = 0; i < 40; i++) { - expanded[i] = chars[i].charCodeAt(0); - } - var hashed = (0, bytes_1.arrayify)((0, keccak256_1.keccak256)(expanded)); - for (var i = 0; i < 40; i += 2) { - if ((hashed[i >> 1] >> 4) >= 8) { - chars[i] = chars[i].toUpperCase(); - } - if ((hashed[i >> 1] & 0x0f) >= 8) { - chars[i + 1] = chars[i + 1].toUpperCase(); - } - } - return "0x" + chars.join(""); -} -// Shims for environments that are missing some required constants and functions -var MAX_SAFE_INTEGER = 0x1fffffffffffff; -function log10(x) { - if (Math.log10) { - return Math.log10(x); - } - return Math.log(x) / Math.LN10; -} -// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number -// Create lookup table -var ibanLookup = {}; -for (var i = 0; i < 10; i++) { - ibanLookup[String(i)] = String(i); -} -for (var i = 0; i < 26; i++) { - ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); -} -// How many decimal digits can we process? (for 64-bit float, this is 15) -var safeDigits = Math.floor(log10(MAX_SAFE_INTEGER)); -function ibanChecksum(address) { - address = address.toUpperCase(); - address = address.substring(4) + address.substring(0, 2) + "00"; - var expanded = address.split("").map(function (c) { return ibanLookup[c]; }).join(""); - // Javascript can handle integers safely up to 15 (decimal) digits - while (expanded.length >= safeDigits) { - var block = expanded.substring(0, safeDigits); - expanded = parseInt(block, 10) % 97 + expanded.substring(block.length); - } - var checksum = String(98 - (parseInt(expanded, 10) % 97)); - while (checksum.length < 2) { - checksum = "0" + checksum; - } - return checksum; -} -; -function getAddress(address) { - var result = null; - if (typeof (address) !== "string") { - logger.throwArgumentError("invalid address", "address", address); - } - if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) { - // Missing the 0x prefix - if (address.substring(0, 2) !== "0x") { - address = "0x" + address; - } - result = getChecksumAddress(address); - // It is a checksummed address with a bad checksum - if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) { - logger.throwArgumentError("bad address checksum", "address", address); - } - // Maybe ICAP? (we only support direct mode) - } - else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) { - // It is an ICAP address with a bad checksum - if (address.substring(2, 4) !== ibanChecksum(address)) { - logger.throwArgumentError("bad icap checksum", "address", address); - } - result = (0, bignumber_1._base36To16)(address.substring(4)); - while (result.length < 40) { - result = "0" + result; - } - result = getChecksumAddress("0x" + result); - } - else { - logger.throwArgumentError("invalid address", "address", address); - } - return result; -} -exports.getAddress = getAddress; -function isAddress(address) { - try { - getAddress(address); - return true; - } - catch (error) { } - return false; -} -exports.isAddress = isAddress; -function getIcapAddress(address) { - var base36 = (0, bignumber_1._base16To36)(getAddress(address).substring(2)).toUpperCase(); - while (base36.length < 30) { - base36 = "0" + base36; - } - return "XE" + ibanChecksum("XE00" + base36) + base36; -} -exports.getIcapAddress = getIcapAddress; -// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed -function getContractAddress(transaction) { - var from = null; - try { - from = getAddress(transaction.from); - } - catch (error) { - logger.throwArgumentError("missing from address", "transaction", transaction); - } - var nonce = (0, bytes_1.stripZeros)((0, bytes_1.arrayify)(bignumber_1.BigNumber.from(transaction.nonce).toHexString())); - return getAddress((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, rlp_1.encode)([from, nonce])), 12)); -} -exports.getContractAddress = getContractAddress; -function getCreate2Address(from, salt, initCodeHash) { - if ((0, bytes_1.hexDataLength)(salt) !== 32) { - logger.throwArgumentError("salt must be 32 bytes", "salt", salt); - } - if ((0, bytes_1.hexDataLength)(initCodeHash) !== 32) { - logger.throwArgumentError("initCodeHash must be 32 bytes", "initCodeHash", initCodeHash); - } - return getAddress((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, bytes_1.concat)(["0xff", getAddress(from), salt, initCodeHash])), 12)); -} -exports.getCreate2Address = getCreate2Address; - -},{"./_version":23,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/rlp":87}],25:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encode = exports.decode = void 0; -var bytes_1 = require("@ethersproject/bytes"); -function decode(textData) { - textData = atob(textData); - var data = []; - for (var i = 0; i < textData.length; i++) { - data.push(textData.charCodeAt(i)); - } - return (0, bytes_1.arrayify)(data); -} -exports.decode = decode; -function encode(data) { - data = (0, bytes_1.arrayify)(data); - var textData = ""; - for (var i = 0; i < data.length; i++) { - textData += String.fromCharCode(data[i]); - } - return btoa(textData); -} -exports.encode = encode; - -},{"@ethersproject/bytes":33}],26:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encode = exports.decode = void 0; -var base64_1 = require("./base64"); -Object.defineProperty(exports, "decode", { enumerable: true, get: function () { return base64_1.decode; } }); -Object.defineProperty(exports, "encode", { enumerable: true, get: function () { return base64_1.encode; } }); - -},{"./base64":25}],27:[function(require,module,exports){ -"use strict"; -/** - * var basex = require("base-x"); - * - * This implementation is heavily based on base-x. The main reason to - * deviate was to prevent the dependency of Buffer. - * - * Contributors: - * - * base-x encoding - * Forked from https://github.com/cryptocoinjs/bs58 - * Originally written by Mike Hearn for BitcoinJ - * Copyright (c) 2011 Google Inc - * Ported to JavaScript by Stefan Thomas - * Merged Buffer refactorings from base58-native by Stephen Pair - * Copyright (c) 2013 BitPay Inc - * - * The MIT License (MIT) - * - * Copyright base-x contributors (c) 2016 - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - * - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Base58 = exports.Base32 = exports.BaseX = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var BaseX = /** @class */ (function () { - function BaseX(alphabet) { - (0, properties_1.defineReadOnly)(this, "alphabet", alphabet); - (0, properties_1.defineReadOnly)(this, "base", alphabet.length); - (0, properties_1.defineReadOnly)(this, "_alphabetMap", {}); - (0, properties_1.defineReadOnly)(this, "_leader", alphabet.charAt(0)); - // pre-compute lookup table - for (var i = 0; i < alphabet.length; i++) { - this._alphabetMap[alphabet.charAt(i)] = i; - } - } - BaseX.prototype.encode = function (value) { - var source = (0, bytes_1.arrayify)(value); - if (source.length === 0) { - return ""; - } - var digits = [0]; - for (var i = 0; i < source.length; ++i) { - var carry = source[i]; - for (var j = 0; j < digits.length; ++j) { - carry += digits[j] << 8; - digits[j] = carry % this.base; - carry = (carry / this.base) | 0; - } - while (carry > 0) { - digits.push(carry % this.base); - carry = (carry / this.base) | 0; - } - } - var string = ""; - // deal with leading zeros - for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) { - string += this._leader; - } - // convert digits to a string - for (var q = digits.length - 1; q >= 0; --q) { - string += this.alphabet[digits[q]]; - } - return string; - }; - BaseX.prototype.decode = function (value) { - if (typeof (value) !== "string") { - throw new TypeError("Expected String"); - } - var bytes = []; - if (value.length === 0) { - return new Uint8Array(bytes); - } - bytes.push(0); - for (var i = 0; i < value.length; i++) { - var byte = this._alphabetMap[value[i]]; - if (byte === undefined) { - throw new Error("Non-base" + this.base + " character"); - } - var carry = byte; - for (var j = 0; j < bytes.length; ++j) { - carry += bytes[j] * this.base; - bytes[j] = carry & 0xff; - carry >>= 8; - } - while (carry > 0) { - bytes.push(carry & 0xff); - carry >>= 8; - } - } - // deal with leading zeros - for (var k = 0; value[k] === this._leader && k < value.length - 1; ++k) { - bytes.push(0); - } - return (0, bytes_1.arrayify)(new Uint8Array(bytes.reverse())); - }; - return BaseX; -}()); -exports.BaseX = BaseX; -var Base32 = new BaseX("abcdefghijklmnopqrstuvwxyz234567"); -exports.Base32 = Base32; -var Base58 = new BaseX("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"); -exports.Base58 = Base58; -//console.log(Base58.decode("Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj")) -//console.log(Base58.encode(Base58.decode("Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj"))) - -},{"@ethersproject/bytes":33,"@ethersproject/properties":63}],28:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "bignumber/5.5.0"; - -},{}],29:[function(require,module,exports){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports._base16To36 = exports._base36To16 = exports.BigNumber = exports.isBigNumberish = void 0; -/** - * BigNumber - * - * A wrapper around the BN.js object. We use the BN.js library - * because it is used by elliptic, so it is required regardless. - * - */ -var bn_js_1 = __importDefault(require("bn.js")); -var BN = bn_js_1.default.BN; -var bytes_1 = require("@ethersproject/bytes"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var _constructorGuard = {}; -var MAX_SAFE = 0x1fffffffffffff; -function isBigNumberish(value) { - return (value != null) && (BigNumber.isBigNumber(value) || - (typeof (value) === "number" && (value % 1) === 0) || - (typeof (value) === "string" && !!value.match(/^-?[0-9]+$/)) || - (0, bytes_1.isHexString)(value) || - (typeof (value) === "bigint") || - (0, bytes_1.isBytes)(value)); -} -exports.isBigNumberish = isBigNumberish; -// Only warn about passing 10 into radix once -var _warnedToStringRadix = false; -var BigNumber = /** @class */ (function () { - function BigNumber(constructorGuard, hex) { - var _newTarget = this.constructor; - logger.checkNew(_newTarget, BigNumber); - if (constructorGuard !== _constructorGuard) { - logger.throwError("cannot call constructor directly; use BigNumber.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new (BigNumber)" - }); - } - this._hex = hex; - this._isBigNumber = true; - Object.freeze(this); - } - BigNumber.prototype.fromTwos = function (value) { - return toBigNumber(toBN(this).fromTwos(value)); - }; - BigNumber.prototype.toTwos = function (value) { - return toBigNumber(toBN(this).toTwos(value)); - }; - BigNumber.prototype.abs = function () { - if (this._hex[0] === "-") { - return BigNumber.from(this._hex.substring(1)); - } - return this; - }; - BigNumber.prototype.add = function (other) { - return toBigNumber(toBN(this).add(toBN(other))); - }; - BigNumber.prototype.sub = function (other) { - return toBigNumber(toBN(this).sub(toBN(other))); - }; - BigNumber.prototype.div = function (other) { - var o = BigNumber.from(other); - if (o.isZero()) { - throwFault("division by zero", "div"); - } - return toBigNumber(toBN(this).div(toBN(other))); - }; - BigNumber.prototype.mul = function (other) { - return toBigNumber(toBN(this).mul(toBN(other))); - }; - BigNumber.prototype.mod = function (other) { - var value = toBN(other); - if (value.isNeg()) { - throwFault("cannot modulo negative values", "mod"); - } - return toBigNumber(toBN(this).umod(value)); - }; - BigNumber.prototype.pow = function (other) { - var value = toBN(other); - if (value.isNeg()) { - throwFault("cannot raise to negative values", "pow"); - } - return toBigNumber(toBN(this).pow(value)); - }; - BigNumber.prototype.and = function (other) { - var value = toBN(other); - if (this.isNegative() || value.isNeg()) { - throwFault("cannot 'and' negative values", "and"); - } - return toBigNumber(toBN(this).and(value)); - }; - BigNumber.prototype.or = function (other) { - var value = toBN(other); - if (this.isNegative() || value.isNeg()) { - throwFault("cannot 'or' negative values", "or"); - } - return toBigNumber(toBN(this).or(value)); - }; - BigNumber.prototype.xor = function (other) { - var value = toBN(other); - if (this.isNegative() || value.isNeg()) { - throwFault("cannot 'xor' negative values", "xor"); - } - return toBigNumber(toBN(this).xor(value)); - }; - BigNumber.prototype.mask = function (value) { - if (this.isNegative() || value < 0) { - throwFault("cannot mask negative values", "mask"); - } - return toBigNumber(toBN(this).maskn(value)); - }; - BigNumber.prototype.shl = function (value) { - if (this.isNegative() || value < 0) { - throwFault("cannot shift negative values", "shl"); - } - return toBigNumber(toBN(this).shln(value)); - }; - BigNumber.prototype.shr = function (value) { - if (this.isNegative() || value < 0) { - throwFault("cannot shift negative values", "shr"); - } - return toBigNumber(toBN(this).shrn(value)); - }; - BigNumber.prototype.eq = function (other) { - return toBN(this).eq(toBN(other)); - }; - BigNumber.prototype.lt = function (other) { - return toBN(this).lt(toBN(other)); - }; - BigNumber.prototype.lte = function (other) { - return toBN(this).lte(toBN(other)); - }; - BigNumber.prototype.gt = function (other) { - return toBN(this).gt(toBN(other)); - }; - BigNumber.prototype.gte = function (other) { - return toBN(this).gte(toBN(other)); - }; - BigNumber.prototype.isNegative = function () { - return (this._hex[0] === "-"); - }; - BigNumber.prototype.isZero = function () { - return toBN(this).isZero(); - }; - BigNumber.prototype.toNumber = function () { - try { - return toBN(this).toNumber(); - } - catch (error) { - throwFault("overflow", "toNumber", this.toString()); - } - return null; - }; - BigNumber.prototype.toBigInt = function () { - try { - return BigInt(this.toString()); - } - catch (e) { } - return logger.throwError("this platform does not support BigInt", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - value: this.toString() - }); - }; - BigNumber.prototype.toString = function () { - // Lots of people expect this, which we do not support, so check (See: #889) - if (arguments.length > 0) { - if (arguments[0] === 10) { - if (!_warnedToStringRadix) { - _warnedToStringRadix = true; - logger.warn("BigNumber.toString does not accept any parameters; base-10 is assumed"); - } - } - else if (arguments[0] === 16) { - logger.throwError("BigNumber.toString does not accept any parameters; use bigNumber.toHexString()", logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {}); - } - else { - logger.throwError("BigNumber.toString does not accept parameters", logger_1.Logger.errors.UNEXPECTED_ARGUMENT, {}); - } - } - return toBN(this).toString(10); - }; - BigNumber.prototype.toHexString = function () { - return this._hex; - }; - BigNumber.prototype.toJSON = function (key) { - return { type: "BigNumber", hex: this.toHexString() }; - }; - BigNumber.from = function (value) { - if (value instanceof BigNumber) { - return value; - } - if (typeof (value) === "string") { - if (value.match(/^-?0x[0-9a-f]+$/i)) { - return new BigNumber(_constructorGuard, toHex(value)); - } - if (value.match(/^-?[0-9]+$/)) { - return new BigNumber(_constructorGuard, toHex(new BN(value))); - } - return logger.throwArgumentError("invalid BigNumber string", "value", value); - } - if (typeof (value) === "number") { - if (value % 1) { - throwFault("underflow", "BigNumber.from", value); - } - if (value >= MAX_SAFE || value <= -MAX_SAFE) { - throwFault("overflow", "BigNumber.from", value); - } - return BigNumber.from(String(value)); - } - var anyValue = value; - if (typeof (anyValue) === "bigint") { - return BigNumber.from(anyValue.toString()); - } - if ((0, bytes_1.isBytes)(anyValue)) { - return BigNumber.from((0, bytes_1.hexlify)(anyValue)); - } - if (anyValue) { - // Hexable interface (takes priority) - if (anyValue.toHexString) { - var hex = anyValue.toHexString(); - if (typeof (hex) === "string") { - return BigNumber.from(hex); - } - } - else { - // For now, handle legacy JSON-ified values (goes away in v6) - var hex = anyValue._hex; - // New-form JSON - if (hex == null && anyValue.type === "BigNumber") { - hex = anyValue.hex; - } - if (typeof (hex) === "string") { - if ((0, bytes_1.isHexString)(hex) || (hex[0] === "-" && (0, bytes_1.isHexString)(hex.substring(1)))) { - return BigNumber.from(hex); - } - } - } - } - return logger.throwArgumentError("invalid BigNumber value", "value", value); - }; - BigNumber.isBigNumber = function (value) { - return !!(value && value._isBigNumber); - }; - return BigNumber; -}()); -exports.BigNumber = BigNumber; -// Normalize the hex string -function toHex(value) { - // For BN, call on the hex string - if (typeof (value) !== "string") { - return toHex(value.toString(16)); - } - // If negative, prepend the negative sign to the normalized positive value - if (value[0] === "-") { - // Strip off the negative sign - value = value.substring(1); - // Cannot have multiple negative signs (e.g. "--0x04") - if (value[0] === "-") { - logger.throwArgumentError("invalid hex", "value", value); - } - // Call toHex on the positive component - value = toHex(value); - // Do not allow "-0x00" - if (value === "0x00") { - return value; - } - // Negate the value - return "-" + value; - } - // Add a "0x" prefix if missing - if (value.substring(0, 2) !== "0x") { - value = "0x" + value; - } - // Normalize zero - if (value === "0x") { - return "0x00"; - } - // Make the string even length - if (value.length % 2) { - value = "0x0" + value.substring(2); - } - // Trim to smallest even-length string - while (value.length > 4 && value.substring(0, 4) === "0x00") { - value = "0x" + value.substring(4); - } - return value; -} -function toBigNumber(value) { - return BigNumber.from(toHex(value)); -} -function toBN(value) { - var hex = BigNumber.from(value).toHexString(); - if (hex[0] === "-") { - return (new BN("-" + hex.substring(3), 16)); - } - return new BN(hex.substring(2), 16); -} -function throwFault(fault, operation, value) { - var params = { fault: fault, operation: operation }; - if (value != null) { - params.value = value; - } - return logger.throwError(fault, logger_1.Logger.errors.NUMERIC_FAULT, params); -} -// value should have no prefix -function _base36To16(value) { - return (new BN(value, 36)).toString(16); -} -exports._base36To16 = _base36To16; -// value should have no prefix -function _base16To36(value) { - return (new BN(value, 16)).toString(36); -} -exports._base16To36 = _base16To36; - -},{"./_version":28,"@ethersproject/bytes":33,"@ethersproject/logger":57,"bn.js":223}],30:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FixedNumber = exports.FixedFormat = exports.parseFixed = exports.formatFixed = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var bignumber_1 = require("./bignumber"); -var _constructorGuard = {}; -var Zero = bignumber_1.BigNumber.from(0); -var NegativeOne = bignumber_1.BigNumber.from(-1); -function throwFault(message, fault, operation, value) { - var params = { fault: fault, operation: operation }; - if (value !== undefined) { - params.value = value; - } - return logger.throwError(message, logger_1.Logger.errors.NUMERIC_FAULT, params); -} -// Constant to pull zeros from for multipliers -var zeros = "0"; -while (zeros.length < 256) { - zeros += zeros; -} -// Returns a string "1" followed by decimal "0"s -function getMultiplier(decimals) { - if (typeof (decimals) !== "number") { - try { - decimals = bignumber_1.BigNumber.from(decimals).toNumber(); - } - catch (e) { } - } - if (typeof (decimals) === "number" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) { - return ("1" + zeros.substring(0, decimals)); - } - return logger.throwArgumentError("invalid decimal size", "decimals", decimals); -} -function formatFixed(value, decimals) { - if (decimals == null) { - decimals = 0; - } - var multiplier = getMultiplier(decimals); - // Make sure wei is a big number (convert as necessary) - value = bignumber_1.BigNumber.from(value); - var negative = value.lt(Zero); - if (negative) { - value = value.mul(NegativeOne); - } - var fraction = value.mod(multiplier).toString(); - while (fraction.length < multiplier.length - 1) { - fraction = "0" + fraction; - } - // Strip training 0 - fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1]; - var whole = value.div(multiplier).toString(); - if (multiplier.length === 1) { - value = whole; - } - else { - value = whole + "." + fraction; - } - if (negative) { - value = "-" + value; - } - return value; -} -exports.formatFixed = formatFixed; -function parseFixed(value, decimals) { - if (decimals == null) { - decimals = 0; - } - var multiplier = getMultiplier(decimals); - if (typeof (value) !== "string" || !value.match(/^-?[0-9.]+$/)) { - logger.throwArgumentError("invalid decimal value", "value", value); - } - // Is it negative? - var negative = (value.substring(0, 1) === "-"); - if (negative) { - value = value.substring(1); - } - if (value === ".") { - logger.throwArgumentError("missing value", "value", value); - } - // Split it into a whole and fractional part - var comps = value.split("."); - if (comps.length > 2) { - logger.throwArgumentError("too many decimal points", "value", value); - } - var whole = comps[0], fraction = comps[1]; - if (!whole) { - whole = "0"; - } - if (!fraction) { - fraction = "0"; - } - // Trim trailing zeros - while (fraction[fraction.length - 1] === "0") { - fraction = fraction.substring(0, fraction.length - 1); - } - // Check the fraction doesn't exceed our decimals size - if (fraction.length > multiplier.length - 1) { - throwFault("fractional component exceeds decimals", "underflow", "parseFixed"); - } - // If decimals is 0, we have an empty string for fraction - if (fraction === "") { - fraction = "0"; - } - // Fully pad the string with zeros to get to wei - while (fraction.length < multiplier.length - 1) { - fraction += "0"; - } - var wholeValue = bignumber_1.BigNumber.from(whole); - var fractionValue = bignumber_1.BigNumber.from(fraction); - var wei = (wholeValue.mul(multiplier)).add(fractionValue); - if (negative) { - wei = wei.mul(NegativeOne); - } - return wei; -} -exports.parseFixed = parseFixed; -var FixedFormat = /** @class */ (function () { - function FixedFormat(constructorGuard, signed, width, decimals) { - if (constructorGuard !== _constructorGuard) { - logger.throwError("cannot use FixedFormat constructor; use FixedFormat.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new FixedFormat" - }); - } - this.signed = signed; - this.width = width; - this.decimals = decimals; - this.name = (signed ? "" : "u") + "fixed" + String(width) + "x" + String(decimals); - this._multiplier = getMultiplier(decimals); - Object.freeze(this); - } - FixedFormat.from = function (value) { - if (value instanceof FixedFormat) { - return value; - } - if (typeof (value) === "number") { - value = "fixed128x" + value; - } - var signed = true; - var width = 128; - var decimals = 18; - if (typeof (value) === "string") { - if (value === "fixed") { - // defaults... - } - else if (value === "ufixed") { - signed = false; - } - else { - var match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/); - if (!match) { - logger.throwArgumentError("invalid fixed format", "format", value); - } - signed = (match[1] !== "u"); - width = parseInt(match[2]); - decimals = parseInt(match[3]); - } - } - else if (value) { - var check = function (key, type, defaultValue) { - if (value[key] == null) { - return defaultValue; - } - if (typeof (value[key]) !== type) { - logger.throwArgumentError("invalid fixed format (" + key + " not " + type + ")", "format." + key, value[key]); - } - return value[key]; - }; - signed = check("signed", "boolean", signed); - width = check("width", "number", width); - decimals = check("decimals", "number", decimals); - } - if (width % 8) { - logger.throwArgumentError("invalid fixed format width (not byte aligned)", "format.width", width); - } - if (decimals > 80) { - logger.throwArgumentError("invalid fixed format (decimals too large)", "format.decimals", decimals); - } - return new FixedFormat(_constructorGuard, signed, width, decimals); - }; - return FixedFormat; -}()); -exports.FixedFormat = FixedFormat; -var FixedNumber = /** @class */ (function () { - function FixedNumber(constructorGuard, hex, value, format) { - var _newTarget = this.constructor; - logger.checkNew(_newTarget, FixedNumber); - if (constructorGuard !== _constructorGuard) { - logger.throwError("cannot use FixedNumber constructor; use FixedNumber.from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new FixedFormat" - }); - } - this.format = format; - this._hex = hex; - this._value = value; - this._isFixedNumber = true; - Object.freeze(this); - } - FixedNumber.prototype._checkFormat = function (other) { - if (this.format.name !== other.format.name) { - logger.throwArgumentError("incompatible format; use fixedNumber.toFormat", "other", other); - } - }; - FixedNumber.prototype.addUnsafe = function (other) { - this._checkFormat(other); - var a = parseFixed(this._value, this.format.decimals); - var b = parseFixed(other._value, other.format.decimals); - return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format); - }; - FixedNumber.prototype.subUnsafe = function (other) { - this._checkFormat(other); - var a = parseFixed(this._value, this.format.decimals); - var b = parseFixed(other._value, other.format.decimals); - return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format); - }; - FixedNumber.prototype.mulUnsafe = function (other) { - this._checkFormat(other); - var a = parseFixed(this._value, this.format.decimals); - var b = parseFixed(other._value, other.format.decimals); - return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format); - }; - FixedNumber.prototype.divUnsafe = function (other) { - this._checkFormat(other); - var a = parseFixed(this._value, this.format.decimals); - var b = parseFixed(other._value, other.format.decimals); - return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format); - }; - FixedNumber.prototype.floor = function () { - var comps = this.toString().split("."); - if (comps.length === 1) { - comps.push("0"); - } - var result = FixedNumber.from(comps[0], this.format); - var hasFraction = !comps[1].match(/^(0*)$/); - if (this.isNegative() && hasFraction) { - result = result.subUnsafe(ONE.toFormat(result.format)); - } - return result; - }; - FixedNumber.prototype.ceiling = function () { - var comps = this.toString().split("."); - if (comps.length === 1) { - comps.push("0"); - } - var result = FixedNumber.from(comps[0], this.format); - var hasFraction = !comps[1].match(/^(0*)$/); - if (!this.isNegative() && hasFraction) { - result = result.addUnsafe(ONE.toFormat(result.format)); - } - return result; - }; - // @TODO: Support other rounding algorithms - FixedNumber.prototype.round = function (decimals) { - if (decimals == null) { - decimals = 0; - } - // If we are already in range, we're done - var comps = this.toString().split("."); - if (comps.length === 1) { - comps.push("0"); - } - if (decimals < 0 || decimals > 80 || (decimals % 1)) { - logger.throwArgumentError("invalid decimal count", "decimals", decimals); - } - if (comps[1].length <= decimals) { - return this; - } - var factor = FixedNumber.from("1" + zeros.substring(0, decimals), this.format); - var bump = BUMP.toFormat(this.format); - return this.mulUnsafe(factor).addUnsafe(bump).floor().divUnsafe(factor); - }; - FixedNumber.prototype.isZero = function () { - return (this._value === "0.0" || this._value === "0"); - }; - FixedNumber.prototype.isNegative = function () { - return (this._value[0] === "-"); - }; - FixedNumber.prototype.toString = function () { return this._value; }; - FixedNumber.prototype.toHexString = function (width) { - if (width == null) { - return this._hex; - } - if (width % 8) { - logger.throwArgumentError("invalid byte width", "width", width); - } - var hex = bignumber_1.BigNumber.from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString(); - return (0, bytes_1.hexZeroPad)(hex, width / 8); - }; - FixedNumber.prototype.toUnsafeFloat = function () { return parseFloat(this.toString()); }; - FixedNumber.prototype.toFormat = function (format) { - return FixedNumber.fromString(this._value, format); - }; - FixedNumber.fromValue = function (value, decimals, format) { - // If decimals looks more like a format, and there is no format, shift the parameters - if (format == null && decimals != null && !(0, bignumber_1.isBigNumberish)(decimals)) { - format = decimals; - decimals = null; - } - if (decimals == null) { - decimals = 0; - } - if (format == null) { - format = "fixed"; - } - return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format)); - }; - FixedNumber.fromString = function (value, format) { - if (format == null) { - format = "fixed"; - } - var fixedFormat = FixedFormat.from(format); - var numeric = parseFixed(value, fixedFormat.decimals); - if (!fixedFormat.signed && numeric.lt(Zero)) { - throwFault("unsigned value cannot be negative", "overflow", "value", value); - } - var hex = null; - if (fixedFormat.signed) { - hex = numeric.toTwos(fixedFormat.width).toHexString(); - } - else { - hex = numeric.toHexString(); - hex = (0, bytes_1.hexZeroPad)(hex, fixedFormat.width / 8); - } - var decimal = formatFixed(numeric, fixedFormat.decimals); - return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); - }; - FixedNumber.fromBytes = function (value, format) { - if (format == null) { - format = "fixed"; - } - var fixedFormat = FixedFormat.from(format); - if ((0, bytes_1.arrayify)(value).length > fixedFormat.width / 8) { - throw new Error("overflow"); - } - var numeric = bignumber_1.BigNumber.from(value); - if (fixedFormat.signed) { - numeric = numeric.fromTwos(fixedFormat.width); - } - var hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString(); - var decimal = formatFixed(numeric, fixedFormat.decimals); - return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat); - }; - FixedNumber.from = function (value, format) { - if (typeof (value) === "string") { - return FixedNumber.fromString(value, format); - } - if ((0, bytes_1.isBytes)(value)) { - return FixedNumber.fromBytes(value, format); - } - try { - return FixedNumber.fromValue(value, 0, format); - } - catch (error) { - // Allow NUMERIC_FAULT to bubble up - if (error.code !== logger_1.Logger.errors.INVALID_ARGUMENT) { - throw error; - } - } - return logger.throwArgumentError("invalid FixedNumber value", "value", value); - }; - FixedNumber.isFixedNumber = function (value) { - return !!(value && value._isFixedNumber); - }; - return FixedNumber; -}()); -exports.FixedNumber = FixedNumber; -var ONE = FixedNumber.from(1); -var BUMP = FixedNumber.from("0.5"); - -},{"./_version":28,"./bignumber":29,"@ethersproject/bytes":33,"@ethersproject/logger":57}],31:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports._base36To16 = exports._base16To36 = exports.parseFixed = exports.FixedNumber = exports.FixedFormat = exports.formatFixed = exports.BigNumber = void 0; -var bignumber_1 = require("./bignumber"); -Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return bignumber_1.BigNumber; } }); -var fixednumber_1 = require("./fixednumber"); -Object.defineProperty(exports, "formatFixed", { enumerable: true, get: function () { return fixednumber_1.formatFixed; } }); -Object.defineProperty(exports, "FixedFormat", { enumerable: true, get: function () { return fixednumber_1.FixedFormat; } }); -Object.defineProperty(exports, "FixedNumber", { enumerable: true, get: function () { return fixednumber_1.FixedNumber; } }); -Object.defineProperty(exports, "parseFixed", { enumerable: true, get: function () { return fixednumber_1.parseFixed; } }); -// Internal methods used by address -var bignumber_2 = require("./bignumber"); -Object.defineProperty(exports, "_base16To36", { enumerable: true, get: function () { return bignumber_2._base16To36; } }); -Object.defineProperty(exports, "_base36To16", { enumerable: true, get: function () { return bignumber_2._base36To16; } }); - -},{"./bignumber":29,"./fixednumber":30}],32:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "bytes/5.5.0"; - -},{}],33:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.joinSignature = exports.splitSignature = exports.hexZeroPad = exports.hexStripZeros = exports.hexValue = exports.hexConcat = exports.hexDataSlice = exports.hexDataLength = exports.hexlify = exports.isHexString = exports.zeroPad = exports.stripZeros = exports.concat = exports.arrayify = exports.isBytes = exports.isBytesLike = void 0; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -/////////////////////////////// -function isHexable(value) { - return !!(value.toHexString); -} -function addSlice(array) { - if (array.slice) { - return array; - } - array.slice = function () { - var args = Array.prototype.slice.call(arguments); - return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args))); - }; - return array; -} -function isBytesLike(value) { - return ((isHexString(value) && !(value.length % 2)) || isBytes(value)); -} -exports.isBytesLike = isBytesLike; -function isInteger(value) { - return (typeof (value) === "number" && value == value && (value % 1) === 0); -} -function isBytes(value) { - if (value == null) { - return false; - } - if (value.constructor === Uint8Array) { - return true; - } - if (typeof (value) === "string") { - return false; - } - if (!isInteger(value.length) || value.length < 0) { - return false; - } - for (var i = 0; i < value.length; i++) { - var v = value[i]; - if (!isInteger(v) || v < 0 || v >= 256) { - return false; - } - } - return true; -} -exports.isBytes = isBytes; -function arrayify(value, options) { - if (!options) { - options = {}; - } - if (typeof (value) === "number") { - logger.checkSafeUint53(value, "invalid arrayify value"); - var result = []; - while (value) { - result.unshift(value & 0xff); - value = parseInt(String(value / 256)); - } - if (result.length === 0) { - result.push(0); - } - return addSlice(new Uint8Array(result)); - } - if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") { - value = "0x" + value; - } - if (isHexable(value)) { - value = value.toHexString(); - } - if (isHexString(value)) { - var hex = value.substring(2); - if (hex.length % 2) { - if (options.hexPad === "left") { - hex = "0x0" + hex.substring(2); - } - else if (options.hexPad === "right") { - hex += "0"; - } - else { - logger.throwArgumentError("hex data is odd-length", "value", value); - } - } - var result = []; - for (var i = 0; i < hex.length; i += 2) { - result.push(parseInt(hex.substring(i, i + 2), 16)); - } - return addSlice(new Uint8Array(result)); - } - if (isBytes(value)) { - return addSlice(new Uint8Array(value)); - } - return logger.throwArgumentError("invalid arrayify value", "value", value); -} -exports.arrayify = arrayify; -function concat(items) { - var objects = items.map(function (item) { return arrayify(item); }); - var length = objects.reduce(function (accum, item) { return (accum + item.length); }, 0); - var result = new Uint8Array(length); - objects.reduce(function (offset, object) { - result.set(object, offset); - return offset + object.length; - }, 0); - return addSlice(result); -} -exports.concat = concat; -function stripZeros(value) { - var result = arrayify(value); - if (result.length === 0) { - return result; - } - // Find the first non-zero entry - var start = 0; - while (start < result.length && result[start] === 0) { - start++; - } - // If we started with zeros, strip them - if (start) { - result = result.slice(start); - } - return result; -} -exports.stripZeros = stripZeros; -function zeroPad(value, length) { - value = arrayify(value); - if (value.length > length) { - logger.throwArgumentError("value out of range", "value", arguments[0]); - } - var result = new Uint8Array(length); - result.set(value, length - value.length); - return addSlice(result); -} -exports.zeroPad = zeroPad; -function isHexString(value, length) { - if (typeof (value) !== "string" || !value.match(/^0x[0-9A-Fa-f]*$/)) { - return false; - } - if (length && value.length !== 2 + 2 * length) { - return false; - } - return true; -} -exports.isHexString = isHexString; -var HexCharacters = "0123456789abcdef"; -function hexlify(value, options) { - if (!options) { - options = {}; - } - if (typeof (value) === "number") { - logger.checkSafeUint53(value, "invalid hexlify value"); - var hex = ""; - while (value) { - hex = HexCharacters[value & 0xf] + hex; - value = Math.floor(value / 16); - } - if (hex.length) { - if (hex.length % 2) { - hex = "0" + hex; - } - return "0x" + hex; - } - return "0x00"; - } - if (typeof (value) === "bigint") { - value = value.toString(16); - if (value.length % 2) { - return ("0x0" + value); - } - return "0x" + value; - } - if (options.allowMissingPrefix && typeof (value) === "string" && value.substring(0, 2) !== "0x") { - value = "0x" + value; - } - if (isHexable(value)) { - return value.toHexString(); - } - if (isHexString(value)) { - if (value.length % 2) { - if (options.hexPad === "left") { - value = "0x0" + value.substring(2); - } - else if (options.hexPad === "right") { - value += "0"; - } - else { - logger.throwArgumentError("hex data is odd-length", "value", value); - } - } - return value.toLowerCase(); - } - if (isBytes(value)) { - var result = "0x"; - for (var i = 0; i < value.length; i++) { - var v = value[i]; - result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]; - } - return result; - } - return logger.throwArgumentError("invalid hexlify value", "value", value); -} -exports.hexlify = hexlify; -/* -function unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number { - if (typeof(value) === "string" && value.length % 2 && value.substring(0, 2) === "0x") { - return "0x0" + value.substring(2); - } - return value; -} -*/ -function hexDataLength(data) { - if (typeof (data) !== "string") { - data = hexlify(data); - } - else if (!isHexString(data) || (data.length % 2)) { - return null; - } - return (data.length - 2) / 2; -} -exports.hexDataLength = hexDataLength; -function hexDataSlice(data, offset, endOffset) { - if (typeof (data) !== "string") { - data = hexlify(data); - } - else if (!isHexString(data) || (data.length % 2)) { - logger.throwArgumentError("invalid hexData", "value", data); - } - offset = 2 + 2 * offset; - if (endOffset != null) { - return "0x" + data.substring(offset, 2 + 2 * endOffset); - } - return "0x" + data.substring(offset); -} -exports.hexDataSlice = hexDataSlice; -function hexConcat(items) { - var result = "0x"; - items.forEach(function (item) { - result += hexlify(item).substring(2); - }); - return result; -} -exports.hexConcat = hexConcat; -function hexValue(value) { - var trimmed = hexStripZeros(hexlify(value, { hexPad: "left" })); - if (trimmed === "0x") { - return "0x0"; - } - return trimmed; -} -exports.hexValue = hexValue; -function hexStripZeros(value) { - if (typeof (value) !== "string") { - value = hexlify(value); - } - if (!isHexString(value)) { - logger.throwArgumentError("invalid hex string", "value", value); - } - value = value.substring(2); - var offset = 0; - while (offset < value.length && value[offset] === "0") { - offset++; - } - return "0x" + value.substring(offset); -} -exports.hexStripZeros = hexStripZeros; -function hexZeroPad(value, length) { - if (typeof (value) !== "string") { - value = hexlify(value); - } - else if (!isHexString(value)) { - logger.throwArgumentError("invalid hex string", "value", value); - } - if (value.length > 2 * length + 2) { - logger.throwArgumentError("value out of range", "value", arguments[1]); - } - while (value.length < 2 * length + 2) { - value = "0x0" + value.substring(2); - } - return value; -} -exports.hexZeroPad = hexZeroPad; -function splitSignature(signature) { - var result = { - r: "0x", - s: "0x", - _vs: "0x", - recoveryParam: 0, - v: 0 - }; - if (isBytesLike(signature)) { - var bytes = arrayify(signature); - if (bytes.length !== 65) { - logger.throwArgumentError("invalid signature string; must be 65 bytes", "signature", signature); - } - // Get the r, s and v - result.r = hexlify(bytes.slice(0, 32)); - result.s = hexlify(bytes.slice(32, 64)); - result.v = bytes[64]; - // Allow a recid to be used as the v - if (result.v < 27) { - if (result.v === 0 || result.v === 1) { - result.v += 27; - } - else { - logger.throwArgumentError("signature invalid v byte", "signature", signature); - } - } - // Compute recoveryParam from v - result.recoveryParam = 1 - (result.v % 2); - // Compute _vs from recoveryParam and s - if (result.recoveryParam) { - bytes[32] |= 0x80; - } - result._vs = hexlify(bytes.slice(32, 64)); - } - else { - result.r = signature.r; - result.s = signature.s; - result.v = signature.v; - result.recoveryParam = signature.recoveryParam; - result._vs = signature._vs; - // If the _vs is available, use it to populate missing s, v and recoveryParam - // and verify non-missing s, v and recoveryParam - if (result._vs != null) { - var vs_1 = zeroPad(arrayify(result._vs), 32); - result._vs = hexlify(vs_1); - // Set or check the recid - var recoveryParam = ((vs_1[0] >= 128) ? 1 : 0); - if (result.recoveryParam == null) { - result.recoveryParam = recoveryParam; - } - else if (result.recoveryParam !== recoveryParam) { - logger.throwArgumentError("signature recoveryParam mismatch _vs", "signature", signature); - } - // Set or check the s - vs_1[0] &= 0x7f; - var s = hexlify(vs_1); - if (result.s == null) { - result.s = s; - } - else if (result.s !== s) { - logger.throwArgumentError("signature v mismatch _vs", "signature", signature); - } - } - // Use recid and v to populate each other - if (result.recoveryParam == null) { - if (result.v == null) { - logger.throwArgumentError("signature missing v and recoveryParam", "signature", signature); - } - else if (result.v === 0 || result.v === 1) { - result.recoveryParam = result.v; - } - else { - result.recoveryParam = 1 - (result.v % 2); - } - } - else { - if (result.v == null) { - result.v = 27 + result.recoveryParam; - } - else { - var recId = (result.v === 0 || result.v === 1) ? result.v : (1 - (result.v % 2)); - if (result.recoveryParam !== recId) { - logger.throwArgumentError("signature recoveryParam mismatch v", "signature", signature); - } - } - } - if (result.r == null || !isHexString(result.r)) { - logger.throwArgumentError("signature missing or invalid r", "signature", signature); - } - else { - result.r = hexZeroPad(result.r, 32); - } - if (result.s == null || !isHexString(result.s)) { - logger.throwArgumentError("signature missing or invalid s", "signature", signature); - } - else { - result.s = hexZeroPad(result.s, 32); - } - var vs = arrayify(result.s); - if (vs[0] >= 128) { - logger.throwArgumentError("signature s out of range", "signature", signature); - } - if (result.recoveryParam) { - vs[0] |= 0x80; - } - var _vs = hexlify(vs); - if (result._vs) { - if (!isHexString(result._vs)) { - logger.throwArgumentError("signature invalid _vs", "signature", signature); - } - result._vs = hexZeroPad(result._vs, 32); - } - // Set or check the _vs - if (result._vs == null) { - result._vs = _vs; - } - else if (result._vs !== _vs) { - logger.throwArgumentError("signature _vs mismatch v and s", "signature", signature); - } - } - return result; -} -exports.splitSignature = splitSignature; -function joinSignature(signature) { - signature = splitSignature(signature); - return hexlify(concat([ - signature.r, - signature.s, - (signature.recoveryParam ? "0x1c" : "0x1b") - ])); -} -exports.joinSignature = joinSignature; - -},{"./_version":32,"@ethersproject/logger":57}],34:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AddressZero = void 0; -exports.AddressZero = "0x0000000000000000000000000000000000000000"; - -},{}],35:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MaxInt256 = exports.MinInt256 = exports.MaxUint256 = exports.WeiPerEther = exports.Two = exports.One = exports.Zero = exports.NegativeOne = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var NegativeOne = ( /*#__PURE__*/bignumber_1.BigNumber.from(-1)); -exports.NegativeOne = NegativeOne; -var Zero = ( /*#__PURE__*/bignumber_1.BigNumber.from(0)); -exports.Zero = Zero; -var One = ( /*#__PURE__*/bignumber_1.BigNumber.from(1)); -exports.One = One; -var Two = ( /*#__PURE__*/bignumber_1.BigNumber.from(2)); -exports.Two = Two; -var WeiPerEther = ( /*#__PURE__*/bignumber_1.BigNumber.from("1000000000000000000")); -exports.WeiPerEther = WeiPerEther; -var MaxUint256 = ( /*#__PURE__*/bignumber_1.BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); -exports.MaxUint256 = MaxUint256; -var MinInt256 = ( /*#__PURE__*/bignumber_1.BigNumber.from("-0x8000000000000000000000000000000000000000000000000000000000000000")); -exports.MinInt256 = MinInt256; -var MaxInt256 = ( /*#__PURE__*/bignumber_1.BigNumber.from("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); -exports.MaxInt256 = MaxInt256; - -},{"@ethersproject/bignumber":31}],36:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.HashZero = void 0; -exports.HashZero = "0x0000000000000000000000000000000000000000000000000000000000000000"; - -},{}],37:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EtherSymbol = exports.HashZero = exports.MaxInt256 = exports.MinInt256 = exports.MaxUint256 = exports.WeiPerEther = exports.Two = exports.One = exports.Zero = exports.NegativeOne = exports.AddressZero = void 0; -var addresses_1 = require("./addresses"); -Object.defineProperty(exports, "AddressZero", { enumerable: true, get: function () { return addresses_1.AddressZero; } }); -var bignumbers_1 = require("./bignumbers"); -Object.defineProperty(exports, "NegativeOne", { enumerable: true, get: function () { return bignumbers_1.NegativeOne; } }); -Object.defineProperty(exports, "Zero", { enumerable: true, get: function () { return bignumbers_1.Zero; } }); -Object.defineProperty(exports, "One", { enumerable: true, get: function () { return bignumbers_1.One; } }); -Object.defineProperty(exports, "Two", { enumerable: true, get: function () { return bignumbers_1.Two; } }); -Object.defineProperty(exports, "WeiPerEther", { enumerable: true, get: function () { return bignumbers_1.WeiPerEther; } }); -Object.defineProperty(exports, "MaxUint256", { enumerable: true, get: function () { return bignumbers_1.MaxUint256; } }); -Object.defineProperty(exports, "MinInt256", { enumerable: true, get: function () { return bignumbers_1.MinInt256; } }); -Object.defineProperty(exports, "MaxInt256", { enumerable: true, get: function () { return bignumbers_1.MaxInt256; } }); -var hashes_1 = require("./hashes"); -Object.defineProperty(exports, "HashZero", { enumerable: true, get: function () { return hashes_1.HashZero; } }); -var strings_1 = require("./strings"); -Object.defineProperty(exports, "EtherSymbol", { enumerable: true, get: function () { return strings_1.EtherSymbol; } }); - -},{"./addresses":34,"./bignumbers":35,"./hashes":36,"./strings":38}],38:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EtherSymbol = void 0; -// NFKC (composed) // (decomposed) -exports.EtherSymbol = "\u039e"; // "\uD835\uDF63"; - -},{}],39:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "contracts/5.5.0"; - -},{}],40:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ContractFactory = exports.Contract = exports.BaseContract = void 0; -var abi_1 = require("@ethersproject/abi"); -var abstract_provider_1 = require("@ethersproject/abstract-provider"); -var abstract_signer_1 = require("@ethersproject/abstract-signer"); -var address_1 = require("@ethersproject/address"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var transactions_1 = require("@ethersproject/transactions"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -; -; -/////////////////////////////// -var allowedTransactionKeys = { - chainId: true, data: true, from: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true, - type: true, accessList: true, - maxFeePerGas: true, maxPriorityFeePerGas: true, - customData: true -}; -function resolveName(resolver, nameOrPromise) { - return __awaiter(this, void 0, void 0, function () { - var name, address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, nameOrPromise]; - case 1: - name = _a.sent(); - if (typeof (name) !== "string") { - logger.throwArgumentError("invalid address or ENS name", "name", name); - } - // If it is already an address, just use it (after adding checksum) - try { - return [2 /*return*/, (0, address_1.getAddress)(name)]; - } - catch (error) { } - if (!resolver) { - logger.throwError("a provider or signer is needed to resolve ENS names", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "resolveName" - }); - } - return [4 /*yield*/, resolver.resolveName(name)]; - case 2: - address = _a.sent(); - if (address == null) { - logger.throwArgumentError("resolver or addr is not configured for ENS name", "name", name); - } - return [2 /*return*/, address]; - } - }); - }); -} -// Recursively replaces ENS names with promises to resolve the name and resolves all properties -function resolveAddresses(resolver, value, paramType) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!Array.isArray(paramType)) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.all(paramType.map(function (paramType, index) { - return resolveAddresses(resolver, ((Array.isArray(value)) ? value[index] : value[paramType.name]), paramType); - }))]; - case 1: return [2 /*return*/, _a.sent()]; - case 2: - if (!(paramType.type === "address")) return [3 /*break*/, 4]; - return [4 /*yield*/, resolveName(resolver, value)]; - case 3: return [2 /*return*/, _a.sent()]; - case 4: - if (!(paramType.type === "tuple")) return [3 /*break*/, 6]; - return [4 /*yield*/, resolveAddresses(resolver, value, paramType.components)]; - case 5: return [2 /*return*/, _a.sent()]; - case 6: - if (!(paramType.baseType === "array")) return [3 /*break*/, 8]; - if (!Array.isArray(value)) { - return [2 /*return*/, Promise.reject(logger.makeError("invalid value for array", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "value", - value: value - }))]; - } - return [4 /*yield*/, Promise.all(value.map(function (v) { return resolveAddresses(resolver, v, paramType.arrayChildren); }))]; - case 7: return [2 /*return*/, _a.sent()]; - case 8: return [2 /*return*/, value]; - } - }); - }); -} -function populateTransaction(contract, fragment, args) { - return __awaiter(this, void 0, void 0, function () { - var overrides, resolved, data, tx, ro, intrinsic, bytes, i, roValue, leftovers; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - overrides = {}; - if (args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object") { - overrides = (0, properties_1.shallowCopy)(args.pop()); - } - // Make sure the parameter count matches - logger.checkArgumentCount(args.length, fragment.inputs.length, "passed to contract"); - // Populate "from" override (allow promises) - if (contract.signer) { - if (overrides.from) { - // Contracts with a Signer are from the Signer's frame-of-reference; - // but we allow overriding "from" if it matches the signer - overrides.from = (0, properties_1.resolveProperties)({ - override: resolveName(contract.signer, overrides.from), - signer: contract.signer.getAddress() - }).then(function (check) { return __awaiter(_this, void 0, void 0, function () { - return __generator(this, function (_a) { - if ((0, address_1.getAddress)(check.signer) !== check.override) { - logger.throwError("Contract with a Signer cannot override from", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "overrides.from" - }); - } - return [2 /*return*/, check.override]; - }); - }); }); - } - else { - overrides.from = contract.signer.getAddress(); - } - } - else if (overrides.from) { - overrides.from = resolveName(contract.provider, overrides.from); - //} else { - // Contracts without a signer can override "from", and if - // unspecified the zero address is used - //overrides.from = AddressZero; - } - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - args: resolveAddresses(contract.signer || contract.provider, args, fragment.inputs), - address: contract.resolvedAddress, - overrides: ((0, properties_1.resolveProperties)(overrides) || {}) - })]; - case 1: - resolved = _a.sent(); - data = contract.interface.encodeFunctionData(fragment, resolved.args); - tx = { - data: data, - to: resolved.address - }; - ro = resolved.overrides; - // Populate simple overrides - if (ro.nonce != null) { - tx.nonce = bignumber_1.BigNumber.from(ro.nonce).toNumber(); - } - if (ro.gasLimit != null) { - tx.gasLimit = bignumber_1.BigNumber.from(ro.gasLimit); - } - if (ro.gasPrice != null) { - tx.gasPrice = bignumber_1.BigNumber.from(ro.gasPrice); - } - if (ro.maxFeePerGas != null) { - tx.maxFeePerGas = bignumber_1.BigNumber.from(ro.maxFeePerGas); - } - if (ro.maxPriorityFeePerGas != null) { - tx.maxPriorityFeePerGas = bignumber_1.BigNumber.from(ro.maxPriorityFeePerGas); - } - if (ro.from != null) { - tx.from = ro.from; - } - if (ro.type != null) { - tx.type = ro.type; - } - if (ro.accessList != null) { - tx.accessList = (0, transactions_1.accessListify)(ro.accessList); - } - // If there was no "gasLimit" override, but the ABI specifies a default, use it - if (tx.gasLimit == null && fragment.gas != null) { - intrinsic = 21000; - bytes = (0, bytes_1.arrayify)(data); - for (i = 0; i < bytes.length; i++) { - intrinsic += 4; - if (bytes[i]) { - intrinsic += 64; - } - } - tx.gasLimit = bignumber_1.BigNumber.from(fragment.gas).add(intrinsic); - } - // Populate "value" override - if (ro.value) { - roValue = bignumber_1.BigNumber.from(ro.value); - if (!roValue.isZero() && !fragment.payable) { - logger.throwError("non-payable method cannot override value", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "overrides.value", - value: overrides.value - }); - } - tx.value = roValue; - } - if (ro.customData) { - tx.customData = (0, properties_1.shallowCopy)(ro.customData); - } - // Remove the overrides - delete overrides.nonce; - delete overrides.gasLimit; - delete overrides.gasPrice; - delete overrides.from; - delete overrides.value; - delete overrides.type; - delete overrides.accessList; - delete overrides.maxFeePerGas; - delete overrides.maxPriorityFeePerGas; - delete overrides.customData; - leftovers = Object.keys(overrides).filter(function (key) { return (overrides[key] != null); }); - if (leftovers.length) { - logger.throwError("cannot override " + leftovers.map(function (l) { return JSON.stringify(l); }).join(","), logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "overrides", - overrides: leftovers - }); - } - return [2 /*return*/, tx]; - } - }); - }); -} -function buildPopulate(contract, fragment) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return populateTransaction(contract, fragment, args); - }; -} -function buildEstimate(contract, fragment) { - var signerOrProvider = (contract.signer || contract.provider); - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var tx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!signerOrProvider) { - logger.throwError("estimate require a provider or signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "estimateGas" - }); - } - return [4 /*yield*/, populateTransaction(contract, fragment, args)]; - case 1: - tx = _a.sent(); - return [4 /*yield*/, signerOrProvider.estimateGas(tx)]; - case 2: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; -} -function addContractWait(contract, tx) { - var wait = tx.wait.bind(tx); - tx.wait = function (confirmations) { - return wait(confirmations).then(function (receipt) { - receipt.events = receipt.logs.map(function (log) { - var event = (0, properties_1.deepCopy)(log); - var parsed = null; - try { - parsed = contract.interface.parseLog(log); - } - catch (e) { } - // Successfully parsed the event log; include it - if (parsed) { - event.args = parsed.args; - event.decode = function (data, topics) { - return contract.interface.decodeEventLog(parsed.eventFragment, data, topics); - }; - event.event = parsed.name; - event.eventSignature = parsed.signature; - } - // Useful operations - event.removeListener = function () { return contract.provider; }; - event.getBlock = function () { - return contract.provider.getBlock(receipt.blockHash); - }; - event.getTransaction = function () { - return contract.provider.getTransaction(receipt.transactionHash); - }; - event.getTransactionReceipt = function () { - return Promise.resolve(receipt); - }; - return event; - }); - return receipt; - }); - }; -} -function buildCall(contract, fragment, collapseSimple) { - var signerOrProvider = (contract.signer || contract.provider); - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var blockTag, overrides, tx, result, value; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - blockTag = undefined; - if (!(args.length === fragment.inputs.length + 1 && typeof (args[args.length - 1]) === "object")) return [3 /*break*/, 3]; - overrides = (0, properties_1.shallowCopy)(args.pop()); - if (!(overrides.blockTag != null)) return [3 /*break*/, 2]; - return [4 /*yield*/, overrides.blockTag]; - case 1: - blockTag = _a.sent(); - _a.label = 2; - case 2: - delete overrides.blockTag; - args.push(overrides); - _a.label = 3; - case 3: - if (!(contract.deployTransaction != null)) return [3 /*break*/, 5]; - return [4 /*yield*/, contract._deployed(blockTag)]; - case 4: - _a.sent(); - _a.label = 5; - case 5: return [4 /*yield*/, populateTransaction(contract, fragment, args)]; - case 6: - tx = _a.sent(); - return [4 /*yield*/, signerOrProvider.call(tx, blockTag)]; - case 7: - result = _a.sent(); - try { - value = contract.interface.decodeFunctionResult(fragment, result); - if (collapseSimple && fragment.outputs.length === 1) { - value = value[0]; - } - return [2 /*return*/, value]; - } - catch (error) { - if (error.code === logger_1.Logger.errors.CALL_EXCEPTION) { - error.address = contract.address; - error.args = args; - error.transaction = tx; - } - throw error; - } - return [2 /*return*/]; - } - }); - }); - }; -} -function buildSend(contract, fragment) { - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var txRequest, tx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!contract.signer) { - logger.throwError("sending a transaction requires a signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "sendTransaction" - }); - } - if (!(contract.deployTransaction != null)) return [3 /*break*/, 2]; - return [4 /*yield*/, contract._deployed()]; - case 1: - _a.sent(); - _a.label = 2; - case 2: return [4 /*yield*/, populateTransaction(contract, fragment, args)]; - case 3: - txRequest = _a.sent(); - return [4 /*yield*/, contract.signer.sendTransaction(txRequest)]; - case 4: - tx = _a.sent(); - // Tweak the tx.wait so the receipt has extra properties - addContractWait(contract, tx); - return [2 /*return*/, tx]; - } - }); - }); - }; -} -function buildDefault(contract, fragment, collapseSimple) { - if (fragment.constant) { - return buildCall(contract, fragment, collapseSimple); - } - return buildSend(contract, fragment); -} -function getEventTag(filter) { - if (filter.address && (filter.topics == null || filter.topics.length === 0)) { - return "*"; - } - return (filter.address || "*") + "@" + (filter.topics ? filter.topics.map(function (topic) { - if (Array.isArray(topic)) { - return topic.join("|"); - } - return topic; - }).join(":") : ""); -} -var RunningEvent = /** @class */ (function () { - function RunningEvent(tag, filter) { - (0, properties_1.defineReadOnly)(this, "tag", tag); - (0, properties_1.defineReadOnly)(this, "filter", filter); - this._listeners = []; - } - RunningEvent.prototype.addListener = function (listener, once) { - this._listeners.push({ listener: listener, once: once }); - }; - RunningEvent.prototype.removeListener = function (listener) { - var done = false; - this._listeners = this._listeners.filter(function (item) { - if (done || item.listener !== listener) { - return true; - } - done = true; - return false; - }); - }; - RunningEvent.prototype.removeAllListeners = function () { - this._listeners = []; - }; - RunningEvent.prototype.listeners = function () { - return this._listeners.map(function (i) { return i.listener; }); - }; - RunningEvent.prototype.listenerCount = function () { - return this._listeners.length; - }; - RunningEvent.prototype.run = function (args) { - var _this = this; - var listenerCount = this.listenerCount(); - this._listeners = this._listeners.filter(function (item) { - var argsCopy = args.slice(); - // Call the callback in the next event loop - setTimeout(function () { - item.listener.apply(_this, argsCopy); - }, 0); - // Reschedule it if it not "once" - return !(item.once); - }); - return listenerCount; - }; - RunningEvent.prototype.prepareEvent = function (event) { - }; - // Returns the array that will be applied to an emit - RunningEvent.prototype.getEmit = function (event) { - return [event]; - }; - return RunningEvent; -}()); -var ErrorRunningEvent = /** @class */ (function (_super) { - __extends(ErrorRunningEvent, _super); - function ErrorRunningEvent() { - return _super.call(this, "error", null) || this; - } - return ErrorRunningEvent; -}(RunningEvent)); -// @TODO Fragment should inherit Wildcard? and just override getEmit? -// or have a common abstract super class, with enough constructor -// options to configure both. -// A Fragment Event will populate all the properties that Wildcard -// will, and additionally dereference the arguments when emitting -var FragmentRunningEvent = /** @class */ (function (_super) { - __extends(FragmentRunningEvent, _super); - function FragmentRunningEvent(address, contractInterface, fragment, topics) { - var _this = this; - var filter = { - address: address - }; - var topic = contractInterface.getEventTopic(fragment); - if (topics) { - if (topic !== topics[0]) { - logger.throwArgumentError("topic mismatch", "topics", topics); - } - filter.topics = topics.slice(); - } - else { - filter.topics = [topic]; - } - _this = _super.call(this, getEventTag(filter), filter) || this; - (0, properties_1.defineReadOnly)(_this, "address", address); - (0, properties_1.defineReadOnly)(_this, "interface", contractInterface); - (0, properties_1.defineReadOnly)(_this, "fragment", fragment); - return _this; - } - FragmentRunningEvent.prototype.prepareEvent = function (event) { - var _this = this; - _super.prototype.prepareEvent.call(this, event); - event.event = this.fragment.name; - event.eventSignature = this.fragment.format(); - event.decode = function (data, topics) { - return _this.interface.decodeEventLog(_this.fragment, data, topics); - }; - try { - event.args = this.interface.decodeEventLog(this.fragment, event.data, event.topics); - } - catch (error) { - event.args = null; - event.decodeError = error; - } - }; - FragmentRunningEvent.prototype.getEmit = function (event) { - var errors = (0, abi_1.checkResultErrors)(event.args); - if (errors.length) { - throw errors[0].error; - } - var args = (event.args || []).slice(); - args.push(event); - return args; - }; - return FragmentRunningEvent; -}(RunningEvent)); -// A Wildcard Event will attempt to populate: -// - event The name of the event name -// - eventSignature The full signature of the event -// - decode A function to decode data and topics -// - args The decoded data and topics -var WildcardRunningEvent = /** @class */ (function (_super) { - __extends(WildcardRunningEvent, _super); - function WildcardRunningEvent(address, contractInterface) { - var _this = _super.call(this, "*", { address: address }) || this; - (0, properties_1.defineReadOnly)(_this, "address", address); - (0, properties_1.defineReadOnly)(_this, "interface", contractInterface); - return _this; - } - WildcardRunningEvent.prototype.prepareEvent = function (event) { - var _this = this; - _super.prototype.prepareEvent.call(this, event); - try { - var parsed_1 = this.interface.parseLog(event); - event.event = parsed_1.name; - event.eventSignature = parsed_1.signature; - event.decode = function (data, topics) { - return _this.interface.decodeEventLog(parsed_1.eventFragment, data, topics); - }; - event.args = parsed_1.args; - } - catch (error) { - // No matching event - } - }; - return WildcardRunningEvent; -}(RunningEvent)); -var BaseContract = /** @class */ (function () { - function BaseContract(addressOrName, contractInterface, signerOrProvider) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, Contract); - // @TODO: Maybe still check the addressOrName looks like a valid address or name? - //address = getAddress(address); - (0, properties_1.defineReadOnly)(this, "interface", (0, properties_1.getStatic)(_newTarget, "getInterface")(contractInterface)); - if (signerOrProvider == null) { - (0, properties_1.defineReadOnly)(this, "provider", null); - (0, properties_1.defineReadOnly)(this, "signer", null); - } - else if (abstract_signer_1.Signer.isSigner(signerOrProvider)) { - (0, properties_1.defineReadOnly)(this, "provider", signerOrProvider.provider || null); - (0, properties_1.defineReadOnly)(this, "signer", signerOrProvider); - } - else if (abstract_provider_1.Provider.isProvider(signerOrProvider)) { - (0, properties_1.defineReadOnly)(this, "provider", signerOrProvider); - (0, properties_1.defineReadOnly)(this, "signer", null); - } - else { - logger.throwArgumentError("invalid signer or provider", "signerOrProvider", signerOrProvider); - } - (0, properties_1.defineReadOnly)(this, "callStatic", {}); - (0, properties_1.defineReadOnly)(this, "estimateGas", {}); - (0, properties_1.defineReadOnly)(this, "functions", {}); - (0, properties_1.defineReadOnly)(this, "populateTransaction", {}); - (0, properties_1.defineReadOnly)(this, "filters", {}); - { - var uniqueFilters_1 = {}; - Object.keys(this.interface.events).forEach(function (eventSignature) { - var event = _this.interface.events[eventSignature]; - (0, properties_1.defineReadOnly)(_this.filters, eventSignature, function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return { - address: _this.address, - topics: _this.interface.encodeFilterTopics(event, args) - }; - }); - if (!uniqueFilters_1[event.name]) { - uniqueFilters_1[event.name] = []; - } - uniqueFilters_1[event.name].push(eventSignature); - }); - Object.keys(uniqueFilters_1).forEach(function (name) { - var filters = uniqueFilters_1[name]; - if (filters.length === 1) { - (0, properties_1.defineReadOnly)(_this.filters, name, _this.filters[filters[0]]); - } - else { - logger.warn("Duplicate definition of " + name + " (" + filters.join(", ") + ")"); - } - }); - } - (0, properties_1.defineReadOnly)(this, "_runningEvents", {}); - (0, properties_1.defineReadOnly)(this, "_wrappedEmits", {}); - if (addressOrName == null) { - logger.throwArgumentError("invalid contract address or ENS name", "addressOrName", addressOrName); - } - (0, properties_1.defineReadOnly)(this, "address", addressOrName); - if (this.provider) { - (0, properties_1.defineReadOnly)(this, "resolvedAddress", resolveName(this.provider, addressOrName)); - } - else { - try { - (0, properties_1.defineReadOnly)(this, "resolvedAddress", Promise.resolve((0, address_1.getAddress)(addressOrName))); - } - catch (error) { - // Without a provider, we cannot use ENS names - logger.throwError("provider is required to use ENS name as contract address", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new Contract" - }); - } - } - var uniqueNames = {}; - var uniqueSignatures = {}; - Object.keys(this.interface.functions).forEach(function (signature) { - var fragment = _this.interface.functions[signature]; - // Check that the signature is unique; if not the ABI generation has - // not been cleaned or may be incorrectly generated - if (uniqueSignatures[signature]) { - logger.warn("Duplicate ABI entry for " + JSON.stringify(signature)); - return; - } - uniqueSignatures[signature] = true; - // Track unique names; we only expose bare named functions if they - // are ambiguous - { - var name_1 = fragment.name; - if (!uniqueNames["%" + name_1]) { - uniqueNames["%" + name_1] = []; - } - uniqueNames["%" + name_1].push(signature); - } - if (_this[signature] == null) { - (0, properties_1.defineReadOnly)(_this, signature, buildDefault(_this, fragment, true)); - } - // We do not collapse simple calls on this bucket, which allows - // frameworks to safely use this without introspection as well as - // allows decoding error recovery. - if (_this.functions[signature] == null) { - (0, properties_1.defineReadOnly)(_this.functions, signature, buildDefault(_this, fragment, false)); - } - if (_this.callStatic[signature] == null) { - (0, properties_1.defineReadOnly)(_this.callStatic, signature, buildCall(_this, fragment, true)); - } - if (_this.populateTransaction[signature] == null) { - (0, properties_1.defineReadOnly)(_this.populateTransaction, signature, buildPopulate(_this, fragment)); - } - if (_this.estimateGas[signature] == null) { - (0, properties_1.defineReadOnly)(_this.estimateGas, signature, buildEstimate(_this, fragment)); - } - }); - Object.keys(uniqueNames).forEach(function (name) { - // Ambiguous names to not get attached as bare names - var signatures = uniqueNames[name]; - if (signatures.length > 1) { - return; - } - // Strip off the leading "%" used for prototype protection - name = name.substring(1); - var signature = signatures[0]; - // If overwriting a member property that is null, swallow the error - try { - if (_this[name] == null) { - (0, properties_1.defineReadOnly)(_this, name, _this[signature]); - } - } - catch (e) { } - if (_this.functions[name] == null) { - (0, properties_1.defineReadOnly)(_this.functions, name, _this.functions[signature]); - } - if (_this.callStatic[name] == null) { - (0, properties_1.defineReadOnly)(_this.callStatic, name, _this.callStatic[signature]); - } - if (_this.populateTransaction[name] == null) { - (0, properties_1.defineReadOnly)(_this.populateTransaction, name, _this.populateTransaction[signature]); - } - if (_this.estimateGas[name] == null) { - (0, properties_1.defineReadOnly)(_this.estimateGas, name, _this.estimateGas[signature]); - } - }); - } - BaseContract.getContractAddress = function (transaction) { - return (0, address_1.getContractAddress)(transaction); - }; - BaseContract.getInterface = function (contractInterface) { - if (abi_1.Interface.isInterface(contractInterface)) { - return contractInterface; - } - return new abi_1.Interface(contractInterface); - }; - // @TODO: Allow timeout? - BaseContract.prototype.deployed = function () { - return this._deployed(); - }; - BaseContract.prototype._deployed = function (blockTag) { - var _this = this; - if (!this._deployedPromise) { - // If we were just deployed, we know the transaction we should occur in - if (this.deployTransaction) { - this._deployedPromise = this.deployTransaction.wait().then(function () { - return _this; - }); - } - else { - // @TODO: Once we allow a timeout to be passed in, we will wait - // up to that many blocks for getCode - // Otherwise, poll for our code to be deployed - this._deployedPromise = this.provider.getCode(this.address, blockTag).then(function (code) { - if (code === "0x") { - logger.throwError("contract not deployed", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - contractAddress: _this.address, - operation: "getDeployed" - }); - } - return _this; - }); - } - } - return this._deployedPromise; - }; - // @TODO: - // estimateFallback(overrides?: TransactionRequest): Promise - // @TODO: - // estimateDeploy(bytecode: string, ...args): Promise - BaseContract.prototype.fallback = function (overrides) { - var _this = this; - if (!this.signer) { - logger.throwError("sending a transactions require a signer", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "sendTransaction(fallback)" }); - } - var tx = (0, properties_1.shallowCopy)(overrides || {}); - ["from", "to"].forEach(function (key) { - if (tx[key] == null) { - return; - } - logger.throwError("cannot override " + key, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: key }); - }); - tx.to = this.resolvedAddress; - return this.deployed().then(function () { - return _this.signer.sendTransaction(tx); - }); - }; - // Reconnect to a different signer or provider - BaseContract.prototype.connect = function (signerOrProvider) { - if (typeof (signerOrProvider) === "string") { - signerOrProvider = new abstract_signer_1.VoidSigner(signerOrProvider, this.provider); - } - var contract = new (this.constructor)(this.address, this.interface, signerOrProvider); - if (this.deployTransaction) { - (0, properties_1.defineReadOnly)(contract, "deployTransaction", this.deployTransaction); - } - return contract; - }; - // Re-attach to a different on-chain instance of this contract - BaseContract.prototype.attach = function (addressOrName) { - return new (this.constructor)(addressOrName, this.interface, this.signer || this.provider); - }; - BaseContract.isIndexed = function (value) { - return abi_1.Indexed.isIndexed(value); - }; - BaseContract.prototype._normalizeRunningEvent = function (runningEvent) { - // Already have an instance of this event running; we can re-use it - if (this._runningEvents[runningEvent.tag]) { - return this._runningEvents[runningEvent.tag]; - } - return runningEvent; - }; - BaseContract.prototype._getRunningEvent = function (eventName) { - if (typeof (eventName) === "string") { - // Listen for "error" events (if your contract has an error event, include - // the full signature to bypass this special event keyword) - if (eventName === "error") { - return this._normalizeRunningEvent(new ErrorRunningEvent()); - } - // Listen for any event that is registered - if (eventName === "event") { - return this._normalizeRunningEvent(new RunningEvent("event", null)); - } - // Listen for any event - if (eventName === "*") { - return this._normalizeRunningEvent(new WildcardRunningEvent(this.address, this.interface)); - } - // Get the event Fragment (throws if ambiguous/unknown event) - var fragment = this.interface.getEvent(eventName); - return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment)); - } - // We have topics to filter by... - if (eventName.topics && eventName.topics.length > 0) { - // Is it a known topichash? (throws if no matching topichash) - try { - var topic = eventName.topics[0]; - if (typeof (topic) !== "string") { - throw new Error("invalid topic"); // @TODO: May happen for anonymous events - } - var fragment = this.interface.getEvent(topic); - return this._normalizeRunningEvent(new FragmentRunningEvent(this.address, this.interface, fragment, eventName.topics)); - } - catch (error) { } - // Filter by the unknown topichash - var filter = { - address: this.address, - topics: eventName.topics - }; - return this._normalizeRunningEvent(new RunningEvent(getEventTag(filter), filter)); - } - return this._normalizeRunningEvent(new WildcardRunningEvent(this.address, this.interface)); - }; - BaseContract.prototype._checkRunningEvents = function (runningEvent) { - if (runningEvent.listenerCount() === 0) { - delete this._runningEvents[runningEvent.tag]; - // If we have a poller for this, remove it - var emit = this._wrappedEmits[runningEvent.tag]; - if (emit && runningEvent.filter) { - this.provider.off(runningEvent.filter, emit); - delete this._wrappedEmits[runningEvent.tag]; - } - } - }; - // Subclasses can override this to gracefully recover - // from parse errors if they wish - BaseContract.prototype._wrapEvent = function (runningEvent, log, listener) { - var _this = this; - var event = (0, properties_1.deepCopy)(log); - event.removeListener = function () { - if (!listener) { - return; - } - runningEvent.removeListener(listener); - _this._checkRunningEvents(runningEvent); - }; - event.getBlock = function () { return _this.provider.getBlock(log.blockHash); }; - event.getTransaction = function () { return _this.provider.getTransaction(log.transactionHash); }; - event.getTransactionReceipt = function () { return _this.provider.getTransactionReceipt(log.transactionHash); }; - // This may throw if the topics and data mismatch the signature - runningEvent.prepareEvent(event); - return event; - }; - BaseContract.prototype._addEventListener = function (runningEvent, listener, once) { - var _this = this; - if (!this.provider) { - logger.throwError("events require a provider or a signer with a provider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "once" }); - } - runningEvent.addListener(listener, once); - // Track this running event and its listeners (may already be there; but no hard in updating) - this._runningEvents[runningEvent.tag] = runningEvent; - // If we are not polling the provider, start polling - if (!this._wrappedEmits[runningEvent.tag]) { - var wrappedEmit = function (log) { - var event = _this._wrapEvent(runningEvent, log, listener); - // Try to emit the result for the parameterized event... - if (event.decodeError == null) { - try { - var args = runningEvent.getEmit(event); - _this.emit.apply(_this, __spreadArray([runningEvent.filter], args, false)); - } - catch (error) { - event.decodeError = error.error; - } - } - // Always emit "event" for fragment-base events - if (runningEvent.filter != null) { - _this.emit("event", event); - } - // Emit "error" if there was an error - if (event.decodeError != null) { - _this.emit("error", event.decodeError, event); - } - }; - this._wrappedEmits[runningEvent.tag] = wrappedEmit; - // Special events, like "error" do not have a filter - if (runningEvent.filter != null) { - this.provider.on(runningEvent.filter, wrappedEmit); - } - } - }; - BaseContract.prototype.queryFilter = function (event, fromBlockOrBlockhash, toBlock) { - var _this = this; - var runningEvent = this._getRunningEvent(event); - var filter = (0, properties_1.shallowCopy)(runningEvent.filter); - if (typeof (fromBlockOrBlockhash) === "string" && (0, bytes_1.isHexString)(fromBlockOrBlockhash, 32)) { - if (toBlock != null) { - logger.throwArgumentError("cannot specify toBlock with blockhash", "toBlock", toBlock); - } - filter.blockHash = fromBlockOrBlockhash; - } - else { - filter.fromBlock = ((fromBlockOrBlockhash != null) ? fromBlockOrBlockhash : 0); - filter.toBlock = ((toBlock != null) ? toBlock : "latest"); - } - return this.provider.getLogs(filter).then(function (logs) { - return logs.map(function (log) { return _this._wrapEvent(runningEvent, log, null); }); - }); - }; - BaseContract.prototype.on = function (event, listener) { - this._addEventListener(this._getRunningEvent(event), listener, false); - return this; - }; - BaseContract.prototype.once = function (event, listener) { - this._addEventListener(this._getRunningEvent(event), listener, true); - return this; - }; - BaseContract.prototype.emit = function (eventName) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (!this.provider) { - return false; - } - var runningEvent = this._getRunningEvent(eventName); - var result = (runningEvent.run(args) > 0); - // May have drained all the "once" events; check for living events - this._checkRunningEvents(runningEvent); - return result; - }; - BaseContract.prototype.listenerCount = function (eventName) { - var _this = this; - if (!this.provider) { - return 0; - } - if (eventName == null) { - return Object.keys(this._runningEvents).reduce(function (accum, key) { - return accum + _this._runningEvents[key].listenerCount(); - }, 0); - } - return this._getRunningEvent(eventName).listenerCount(); - }; - BaseContract.prototype.listeners = function (eventName) { - if (!this.provider) { - return []; - } - if (eventName == null) { - var result_1 = []; - for (var tag in this._runningEvents) { - this._runningEvents[tag].listeners().forEach(function (listener) { - result_1.push(listener); - }); - } - return result_1; - } - return this._getRunningEvent(eventName).listeners(); - }; - BaseContract.prototype.removeAllListeners = function (eventName) { - if (!this.provider) { - return this; - } - if (eventName == null) { - for (var tag in this._runningEvents) { - var runningEvent_1 = this._runningEvents[tag]; - runningEvent_1.removeAllListeners(); - this._checkRunningEvents(runningEvent_1); - } - return this; - } - // Delete any listeners - var runningEvent = this._getRunningEvent(eventName); - runningEvent.removeAllListeners(); - this._checkRunningEvents(runningEvent); - return this; - }; - BaseContract.prototype.off = function (eventName, listener) { - if (!this.provider) { - return this; - } - var runningEvent = this._getRunningEvent(eventName); - runningEvent.removeListener(listener); - this._checkRunningEvents(runningEvent); - return this; - }; - BaseContract.prototype.removeListener = function (eventName, listener) { - return this.off(eventName, listener); - }; - return BaseContract; -}()); -exports.BaseContract = BaseContract; -var Contract = /** @class */ (function (_super) { - __extends(Contract, _super); - function Contract() { - return _super !== null && _super.apply(this, arguments) || this; - } - return Contract; -}(BaseContract)); -exports.Contract = Contract; -var ContractFactory = /** @class */ (function () { - function ContractFactory(contractInterface, bytecode, signer) { - var _newTarget = this.constructor; - var bytecodeHex = null; - if (typeof (bytecode) === "string") { - bytecodeHex = bytecode; - } - else if ((0, bytes_1.isBytes)(bytecode)) { - bytecodeHex = (0, bytes_1.hexlify)(bytecode); - } - else if (bytecode && typeof (bytecode.object) === "string") { - // Allow the bytecode object from the Solidity compiler - bytecodeHex = bytecode.object; - } - else { - // Crash in the next verification step - bytecodeHex = "!"; - } - // Make sure it is 0x prefixed - if (bytecodeHex.substring(0, 2) !== "0x") { - bytecodeHex = "0x" + bytecodeHex; - } - // Make sure the final result is valid bytecode - if (!(0, bytes_1.isHexString)(bytecodeHex) || (bytecodeHex.length % 2)) { - logger.throwArgumentError("invalid bytecode", "bytecode", bytecode); - } - // If we have a signer, make sure it is valid - if (signer && !abstract_signer_1.Signer.isSigner(signer)) { - logger.throwArgumentError("invalid signer", "signer", signer); - } - (0, properties_1.defineReadOnly)(this, "bytecode", bytecodeHex); - (0, properties_1.defineReadOnly)(this, "interface", (0, properties_1.getStatic)(_newTarget, "getInterface")(contractInterface)); - (0, properties_1.defineReadOnly)(this, "signer", signer || null); - } - // @TODO: Future; rename to populateTransaction? - ContractFactory.prototype.getDeployTransaction = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var tx = {}; - // If we have 1 additional argument, we allow transaction overrides - if (args.length === this.interface.deploy.inputs.length + 1 && typeof (args[args.length - 1]) === "object") { - tx = (0, properties_1.shallowCopy)(args.pop()); - for (var key in tx) { - if (!allowedTransactionKeys[key]) { - throw new Error("unknown transaction override " + key); - } - } - } - // Do not allow these to be overridden in a deployment transaction - ["data", "from", "to"].forEach(function (key) { - if (tx[key] == null) { - return; - } - logger.throwError("cannot override " + key, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: key }); - }); - if (tx.value) { - var value = bignumber_1.BigNumber.from(tx.value); - if (!value.isZero() && !this.interface.deploy.payable) { - logger.throwError("non-payable constructor cannot override value", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "overrides.value", - value: tx.value - }); - } - } - // Make sure the call matches the constructor signature - logger.checkArgumentCount(args.length, this.interface.deploy.inputs.length, " in Contract constructor"); - // Set the data to the bytecode + the encoded constructor arguments - tx.data = (0, bytes_1.hexlify)((0, bytes_1.concat)([ - this.bytecode, - this.interface.encodeDeploy(args) - ])); - return tx; - }; - ContractFactory.prototype.deploy = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var overrides, params, unsignedTx, tx, address, contract; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - overrides = {}; - // If 1 extra parameter was passed in, it contains overrides - if (args.length === this.interface.deploy.inputs.length + 1) { - overrides = args.pop(); - } - // Make sure the call matches the constructor signature - logger.checkArgumentCount(args.length, this.interface.deploy.inputs.length, " in Contract constructor"); - return [4 /*yield*/, resolveAddresses(this.signer, args, this.interface.deploy.inputs)]; - case 1: - params = _a.sent(); - params.push(overrides); - unsignedTx = this.getDeployTransaction.apply(this, params); - return [4 /*yield*/, this.signer.sendTransaction(unsignedTx)]; - case 2: - tx = _a.sent(); - address = (0, properties_1.getStatic)(this.constructor, "getContractAddress")(tx); - contract = (0, properties_1.getStatic)(this.constructor, "getContract")(address, this.interface, this.signer); - // Add the modified wait that wraps events - addContractWait(contract, tx); - (0, properties_1.defineReadOnly)(contract, "deployTransaction", tx); - return [2 /*return*/, contract]; - } - }); - }); - }; - ContractFactory.prototype.attach = function (address) { - return (this.constructor).getContract(address, this.interface, this.signer); - }; - ContractFactory.prototype.connect = function (signer) { - return new (this.constructor)(this.interface, this.bytecode, signer); - }; - ContractFactory.fromSolidity = function (compilerOutput, signer) { - if (compilerOutput == null) { - logger.throwError("missing compiler output", logger_1.Logger.errors.MISSING_ARGUMENT, { argument: "compilerOutput" }); - } - if (typeof (compilerOutput) === "string") { - compilerOutput = JSON.parse(compilerOutput); - } - var abi = compilerOutput.abi; - var bytecode = null; - if (compilerOutput.bytecode) { - bytecode = compilerOutput.bytecode; - } - else if (compilerOutput.evm && compilerOutput.evm.bytecode) { - bytecode = compilerOutput.evm.bytecode; - } - return new this(abi, bytecode, signer); - }; - ContractFactory.getInterface = function (contractInterface) { - return Contract.getInterface(contractInterface); - }; - ContractFactory.getContractAddress = function (tx) { - return (0, address_1.getContractAddress)(tx); - }; - ContractFactory.getContract = function (address, contractInterface, signer) { - return new Contract(address, contractInterface, signer); - }; - return ContractFactory; -}()); -exports.ContractFactory = ContractFactory; - -},{"./_version":39,"@ethersproject/abi":17,"@ethersproject/abstract-provider":20,"@ethersproject/abstract-signer":22,"@ethersproject/address":24,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/transactions":103}],41:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "hash/5.5.0"; - -},{}],42:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.id = void 0; -var keccak256_1 = require("@ethersproject/keccak256"); -var strings_1 = require("@ethersproject/strings"); -function id(text) { - return (0, keccak256_1.keccak256)((0, strings_1.toUtf8Bytes)(text)); -} -exports.id = id; - -},{"@ethersproject/keccak256":55,"@ethersproject/strings":100}],43:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports._TypedDataEncoder = exports.hashMessage = exports.messagePrefix = exports.isValidName = exports.namehash = exports.id = void 0; -var id_1 = require("./id"); -Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_1.id; } }); -var namehash_1 = require("./namehash"); -Object.defineProperty(exports, "isValidName", { enumerable: true, get: function () { return namehash_1.isValidName; } }); -Object.defineProperty(exports, "namehash", { enumerable: true, get: function () { return namehash_1.namehash; } }); -var message_1 = require("./message"); -Object.defineProperty(exports, "hashMessage", { enumerable: true, get: function () { return message_1.hashMessage; } }); -Object.defineProperty(exports, "messagePrefix", { enumerable: true, get: function () { return message_1.messagePrefix; } }); -var typed_data_1 = require("./typed-data"); -Object.defineProperty(exports, "_TypedDataEncoder", { enumerable: true, get: function () { return typed_data_1.TypedDataEncoder; } }); - -},{"./id":42,"./message":44,"./namehash":45,"./typed-data":46}],44:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hashMessage = exports.messagePrefix = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var keccak256_1 = require("@ethersproject/keccak256"); -var strings_1 = require("@ethersproject/strings"); -exports.messagePrefix = "\x19Ethereum Signed Message:\n"; -function hashMessage(message) { - if (typeof (message) === "string") { - message = (0, strings_1.toUtf8Bytes)(message); - } - return (0, keccak256_1.keccak256)((0, bytes_1.concat)([ - (0, strings_1.toUtf8Bytes)(exports.messagePrefix), - (0, strings_1.toUtf8Bytes)(String(message.length)), - message - ])); -} -exports.hashMessage = hashMessage; - -},{"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/strings":100}],45:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.namehash = exports.isValidName = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var strings_1 = require("@ethersproject/strings"); -var keccak256_1 = require("@ethersproject/keccak256"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var Zeros = new Uint8Array(32); -Zeros.fill(0); -var Partition = new RegExp("^((.*)\\.)?([^.]+)$"); -function isValidName(name) { - try { - var comps = name.split("."); - for (var i = 0; i < comps.length; i++) { - if ((0, strings_1.nameprep)(comps[i]).length === 0) { - throw new Error("empty"); - } - } - return true; - } - catch (error) { } - return false; -} -exports.isValidName = isValidName; -function namehash(name) { - /* istanbul ignore if */ - if (typeof (name) !== "string") { - logger.throwArgumentError("invalid ENS name; not a string", "name", name); - } - var current = name; - var result = Zeros; - while (current.length) { - var partition = current.match(Partition); - if (partition == null || partition[2] === "") { - logger.throwArgumentError("invalid ENS address; missing component", "name", name); - } - var label = (0, strings_1.toUtf8Bytes)((0, strings_1.nameprep)(partition[3])); - result = (0, keccak256_1.keccak256)((0, bytes_1.concat)([result, (0, keccak256_1.keccak256)(label)])); - current = partition[2] || ""; - } - return (0, bytes_1.hexlify)(result); -} -exports.namehash = namehash; - -},{"./_version":41,"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/strings":100}],46:[function(require,module,exports){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TypedDataEncoder = void 0; -var address_1 = require("@ethersproject/address"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var keccak256_1 = require("@ethersproject/keccak256"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var id_1 = require("./id"); -var padding = new Uint8Array(32); -padding.fill(0); -var NegativeOne = bignumber_1.BigNumber.from(-1); -var Zero = bignumber_1.BigNumber.from(0); -var One = bignumber_1.BigNumber.from(1); -var MaxUint256 = bignumber_1.BigNumber.from("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); -function hexPadRight(value) { - var bytes = (0, bytes_1.arrayify)(value); - var padOffset = bytes.length % 32; - if (padOffset) { - return (0, bytes_1.hexConcat)([bytes, padding.slice(padOffset)]); - } - return (0, bytes_1.hexlify)(bytes); -} -var hexTrue = (0, bytes_1.hexZeroPad)(One.toHexString(), 32); -var hexFalse = (0, bytes_1.hexZeroPad)(Zero.toHexString(), 32); -var domainFieldTypes = { - name: "string", - version: "string", - chainId: "uint256", - verifyingContract: "address", - salt: "bytes32" -}; -var domainFieldNames = [ - "name", "version", "chainId", "verifyingContract", "salt" -]; -function checkString(key) { - return function (value) { - if (typeof (value) !== "string") { - logger.throwArgumentError("invalid domain value for " + JSON.stringify(key), "domain." + key, value); - } - return value; - }; -} -var domainChecks = { - name: checkString("name"), - version: checkString("version"), - chainId: function (value) { - try { - return bignumber_1.BigNumber.from(value).toString(); - } - catch (error) { } - return logger.throwArgumentError("invalid domain value for \"chainId\"", "domain.chainId", value); - }, - verifyingContract: function (value) { - try { - return (0, address_1.getAddress)(value).toLowerCase(); - } - catch (error) { } - return logger.throwArgumentError("invalid domain value \"verifyingContract\"", "domain.verifyingContract", value); - }, - salt: function (value) { - try { - var bytes = (0, bytes_1.arrayify)(value); - if (bytes.length !== 32) { - throw new Error("bad length"); - } - return (0, bytes_1.hexlify)(bytes); - } - catch (error) { } - return logger.throwArgumentError("invalid domain value \"salt\"", "domain.salt", value); - } -}; -function getBaseEncoder(type) { - // intXX and uintXX - { - var match = type.match(/^(u?)int(\d*)$/); - if (match) { - var signed = (match[1] === ""); - var width = parseInt(match[2] || "256"); - if (width % 8 !== 0 || width > 256 || (match[2] && match[2] !== String(width))) { - logger.throwArgumentError("invalid numeric width", "type", type); - } - var boundsUpper_1 = MaxUint256.mask(signed ? (width - 1) : width); - var boundsLower_1 = signed ? boundsUpper_1.add(One).mul(NegativeOne) : Zero; - return function (value) { - var v = bignumber_1.BigNumber.from(value); - if (v.lt(boundsLower_1) || v.gt(boundsUpper_1)) { - logger.throwArgumentError("value out-of-bounds for " + type, "value", value); - } - return (0, bytes_1.hexZeroPad)(v.toTwos(256).toHexString(), 32); - }; - } - } - // bytesXX - { - var match = type.match(/^bytes(\d+)$/); - if (match) { - var width_1 = parseInt(match[1]); - if (width_1 === 0 || width_1 > 32 || match[1] !== String(width_1)) { - logger.throwArgumentError("invalid bytes width", "type", type); - } - return function (value) { - var bytes = (0, bytes_1.arrayify)(value); - if (bytes.length !== width_1) { - logger.throwArgumentError("invalid length for " + type, "value", value); - } - return hexPadRight(value); - }; - } - } - switch (type) { - case "address": return function (value) { - return (0, bytes_1.hexZeroPad)((0, address_1.getAddress)(value), 32); - }; - case "bool": return function (value) { - return ((!value) ? hexFalse : hexTrue); - }; - case "bytes": return function (value) { - return (0, keccak256_1.keccak256)(value); - }; - case "string": return function (value) { - return (0, id_1.id)(value); - }; - } - return null; -} -function encodeType(name, fields) { - return name + "(" + fields.map(function (_a) { - var name = _a.name, type = _a.type; - return (type + " " + name); - }).join(",") + ")"; -} -var TypedDataEncoder = /** @class */ (function () { - function TypedDataEncoder(types) { - (0, properties_1.defineReadOnly)(this, "types", Object.freeze((0, properties_1.deepCopy)(types))); - (0, properties_1.defineReadOnly)(this, "_encoderCache", {}); - (0, properties_1.defineReadOnly)(this, "_types", {}); - // Link struct types to their direct child structs - var links = {}; - // Link structs to structs which contain them as a child - var parents = {}; - // Link all subtypes within a given struct - var subtypes = {}; - Object.keys(types).forEach(function (type) { - links[type] = {}; - parents[type] = []; - subtypes[type] = {}; - }); - var _loop_1 = function (name_1) { - var uniqueNames = {}; - types[name_1].forEach(function (field) { - // Check each field has a unique name - if (uniqueNames[field.name]) { - logger.throwArgumentError("duplicate variable name " + JSON.stringify(field.name) + " in " + JSON.stringify(name_1), "types", types); - } - uniqueNames[field.name] = true; - // Get the base type (drop any array specifiers) - var baseType = field.type.match(/^([^\x5b]*)(\x5b|$)/)[1]; - if (baseType === name_1) { - logger.throwArgumentError("circular type reference to " + JSON.stringify(baseType), "types", types); - } - // Is this a base encoding type? - var encoder = getBaseEncoder(baseType); - if (encoder) { - return; - } - if (!parents[baseType]) { - logger.throwArgumentError("unknown type " + JSON.stringify(baseType), "types", types); - } - // Add linkage - parents[baseType].push(name_1); - links[name_1][baseType] = true; - }); - }; - for (var name_1 in types) { - _loop_1(name_1); - } - // Deduce the primary type - var primaryTypes = Object.keys(parents).filter(function (n) { return (parents[n].length === 0); }); - if (primaryTypes.length === 0) { - logger.throwArgumentError("missing primary type", "types", types); - } - else if (primaryTypes.length > 1) { - logger.throwArgumentError("ambiguous primary types or unused types: " + primaryTypes.map(function (t) { return (JSON.stringify(t)); }).join(", "), "types", types); - } - (0, properties_1.defineReadOnly)(this, "primaryType", primaryTypes[0]); - // Check for circular type references - function checkCircular(type, found) { - if (found[type]) { - logger.throwArgumentError("circular type reference to " + JSON.stringify(type), "types", types); - } - found[type] = true; - Object.keys(links[type]).forEach(function (child) { - if (!parents[child]) { - return; - } - // Recursively check children - checkCircular(child, found); - // Mark all ancestors as having this decendant - Object.keys(found).forEach(function (subtype) { - subtypes[subtype][child] = true; - }); - }); - delete found[type]; - } - checkCircular(this.primaryType, {}); - // Compute each fully describe type - for (var name_2 in subtypes) { - var st = Object.keys(subtypes[name_2]); - st.sort(); - this._types[name_2] = encodeType(name_2, types[name_2]) + st.map(function (t) { return encodeType(t, types[t]); }).join(""); - } - } - TypedDataEncoder.prototype.getEncoder = function (type) { - var encoder = this._encoderCache[type]; - if (!encoder) { - encoder = this._encoderCache[type] = this._getEncoder(type); - } - return encoder; - }; - TypedDataEncoder.prototype._getEncoder = function (type) { - var _this = this; - // Basic encoder type (address, bool, uint256, etc) - { - var encoder = getBaseEncoder(type); - if (encoder) { - return encoder; - } - } - // Array - var match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); - if (match) { - var subtype_1 = match[1]; - var subEncoder_1 = this.getEncoder(subtype_1); - var length_1 = parseInt(match[3]); - return function (value) { - if (length_1 >= 0 && value.length !== length_1) { - logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); - } - var result = value.map(subEncoder_1); - if (_this._types[subtype_1]) { - result = result.map(keccak256_1.keccak256); - } - return (0, keccak256_1.keccak256)((0, bytes_1.hexConcat)(result)); - }; - } - // Struct - var fields = this.types[type]; - if (fields) { - var encodedType_1 = (0, id_1.id)(this._types[type]); - return function (value) { - var values = fields.map(function (_a) { - var name = _a.name, type = _a.type; - var result = _this.getEncoder(type)(value[name]); - if (_this._types[type]) { - return (0, keccak256_1.keccak256)(result); - } - return result; - }); - values.unshift(encodedType_1); - return (0, bytes_1.hexConcat)(values); - }; - } - return logger.throwArgumentError("unknown type: " + type, "type", type); - }; - TypedDataEncoder.prototype.encodeType = function (name) { - var result = this._types[name]; - if (!result) { - logger.throwArgumentError("unknown type: " + JSON.stringify(name), "name", name); - } - return result; - }; - TypedDataEncoder.prototype.encodeData = function (type, value) { - return this.getEncoder(type)(value); - }; - TypedDataEncoder.prototype.hashStruct = function (name, value) { - return (0, keccak256_1.keccak256)(this.encodeData(name, value)); - }; - TypedDataEncoder.prototype.encode = function (value) { - return this.encodeData(this.primaryType, value); - }; - TypedDataEncoder.prototype.hash = function (value) { - return this.hashStruct(this.primaryType, value); - }; - TypedDataEncoder.prototype._visit = function (type, value, callback) { - var _this = this; - // Basic encoder type (address, bool, uint256, etc) - { - var encoder = getBaseEncoder(type); - if (encoder) { - return callback(type, value); - } - } - // Array - var match = type.match(/^(.*)(\x5b(\d*)\x5d)$/); - if (match) { - var subtype_2 = match[1]; - var length_2 = parseInt(match[3]); - if (length_2 >= 0 && value.length !== length_2) { - logger.throwArgumentError("array length mismatch; expected length ${ arrayLength }", "value", value); - } - return value.map(function (v) { return _this._visit(subtype_2, v, callback); }); - } - // Struct - var fields = this.types[type]; - if (fields) { - return fields.reduce(function (accum, _a) { - var name = _a.name, type = _a.type; - accum[name] = _this._visit(type, value[name], callback); - return accum; - }, {}); - } - return logger.throwArgumentError("unknown type: " + type, "type", type); - }; - TypedDataEncoder.prototype.visit = function (value, callback) { - return this._visit(this.primaryType, value, callback); - }; - TypedDataEncoder.from = function (types) { - return new TypedDataEncoder(types); - }; - TypedDataEncoder.getPrimaryType = function (types) { - return TypedDataEncoder.from(types).primaryType; - }; - TypedDataEncoder.hashStruct = function (name, types, value) { - return TypedDataEncoder.from(types).hashStruct(name, value); - }; - TypedDataEncoder.hashDomain = function (domain) { - var domainFields = []; - for (var name_3 in domain) { - var type = domainFieldTypes[name_3]; - if (!type) { - logger.throwArgumentError("invalid typed-data domain key: " + JSON.stringify(name_3), "domain", domain); - } - domainFields.push({ name: name_3, type: type }); - } - domainFields.sort(function (a, b) { - return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name); - }); - return TypedDataEncoder.hashStruct("EIP712Domain", { EIP712Domain: domainFields }, domain); - }; - TypedDataEncoder.encode = function (domain, types, value) { - return (0, bytes_1.hexConcat)([ - "0x1901", - TypedDataEncoder.hashDomain(domain), - TypedDataEncoder.from(types).hash(value) - ]); - }; - TypedDataEncoder.hash = function (domain, types, value) { - return (0, keccak256_1.keccak256)(TypedDataEncoder.encode(domain, types, value)); - }; - // Replaces all address types with ENS names with their looked up address - TypedDataEncoder.resolveNames = function (domain, types, value, resolveName) { - return __awaiter(this, void 0, void 0, function () { - var ensCache, encoder, _a, _b, _i, name_4, _c, _d; - return __generator(this, function (_e) { - switch (_e.label) { - case 0: - // Make a copy to isolate it from the object passed in - domain = (0, properties_1.shallowCopy)(domain); - ensCache = {}; - // Do we need to look up the domain's verifyingContract? - if (domain.verifyingContract && !(0, bytes_1.isHexString)(domain.verifyingContract, 20)) { - ensCache[domain.verifyingContract] = "0x"; - } - encoder = TypedDataEncoder.from(types); - // Get a list of all the addresses - encoder.visit(value, function (type, value) { - if (type === "address" && !(0, bytes_1.isHexString)(value, 20)) { - ensCache[value] = "0x"; - } - return value; - }); - _a = []; - for (_b in ensCache) - _a.push(_b); - _i = 0; - _e.label = 1; - case 1: - if (!(_i < _a.length)) return [3 /*break*/, 4]; - name_4 = _a[_i]; - _c = ensCache; - _d = name_4; - return [4 /*yield*/, resolveName(name_4)]; - case 2: - _c[_d] = _e.sent(); - _e.label = 3; - case 3: - _i++; - return [3 /*break*/, 1]; - case 4: - // Replace the domain verifyingContract if needed - if (domain.verifyingContract && ensCache[domain.verifyingContract]) { - domain.verifyingContract = ensCache[domain.verifyingContract]; - } - // Replace all ENS names with their address - value = encoder.visit(value, function (type, value) { - if (type === "address" && ensCache[value]) { - return ensCache[value]; - } - return value; - }); - return [2 /*return*/, { domain: domain, value: value }]; - } - }); - }); - }; - TypedDataEncoder.getPayload = function (domain, types, value) { - // Validate the domain fields - TypedDataEncoder.hashDomain(domain); - // Derive the EIP712Domain Struct reference type - var domainValues = {}; - var domainTypes = []; - domainFieldNames.forEach(function (name) { - var value = domain[name]; - if (value == null) { - return; - } - domainValues[name] = domainChecks[name](value); - domainTypes.push({ name: name, type: domainFieldTypes[name] }); - }); - var encoder = TypedDataEncoder.from(types); - var typesWithDomain = (0, properties_1.shallowCopy)(types); - if (typesWithDomain.EIP712Domain) { - logger.throwArgumentError("types must not contain EIP712Domain type", "types.EIP712Domain", types); - } - else { - typesWithDomain.EIP712Domain = domainTypes; - } - // Validate the data structures and types - encoder.encode(value); - return { - types: typesWithDomain, - domain: domainValues, - primaryType: encoder.primaryType, - message: encoder.visit(value, function (type, value) { - // bytes - if (type.match(/^bytes(\d*)/)) { - return (0, bytes_1.hexlify)((0, bytes_1.arrayify)(value)); - } - // uint or int - if (type.match(/^u?int/)) { - return bignumber_1.BigNumber.from(value).toString(); - } - switch (type) { - case "address": - return value.toLowerCase(); - case "bool": - return !!value; - case "string": - if (typeof (value) !== "string") { - logger.throwArgumentError("invalid string", "value", value); - } - return value; - } - return logger.throwArgumentError("unsupported type", "type", type); - }) - }; - }; - return TypedDataEncoder; -}()); -exports.TypedDataEncoder = TypedDataEncoder; - -},{"./_version":41,"./id":42,"@ethersproject/address":24,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/properties":63}],47:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "hdnode/5.5.0"; - -},{}],48:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getAccountPath = exports.isValidMnemonic = exports.entropyToMnemonic = exports.mnemonicToEntropy = exports.mnemonicToSeed = exports.HDNode = exports.defaultPath = void 0; -var basex_1 = require("@ethersproject/basex"); -var bytes_1 = require("@ethersproject/bytes"); -var bignumber_1 = require("@ethersproject/bignumber"); -var strings_1 = require("@ethersproject/strings"); -var pbkdf2_1 = require("@ethersproject/pbkdf2"); -var properties_1 = require("@ethersproject/properties"); -var signing_key_1 = require("@ethersproject/signing-key"); -var sha2_1 = require("@ethersproject/sha2"); -var transactions_1 = require("@ethersproject/transactions"); -var wordlists_1 = require("@ethersproject/wordlists"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var N = bignumber_1.BigNumber.from("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"); -// "Bitcoin seed" -var MasterSecret = (0, strings_1.toUtf8Bytes)("Bitcoin seed"); -var HardenedBit = 0x80000000; -// Returns a byte with the MSB bits set -function getUpperMask(bits) { - return ((1 << bits) - 1) << (8 - bits); -} -// Returns a byte with the LSB bits set -function getLowerMask(bits) { - return (1 << bits) - 1; -} -function bytes32(value) { - return (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(value), 32); -} -function base58check(data) { - return basex_1.Base58.encode((0, bytes_1.concat)([data, (0, bytes_1.hexDataSlice)((0, sha2_1.sha256)((0, sha2_1.sha256)(data)), 0, 4)])); -} -function getWordlist(wordlist) { - if (wordlist == null) { - return wordlists_1.wordlists["en"]; - } - if (typeof (wordlist) === "string") { - var words = wordlists_1.wordlists[wordlist]; - if (words == null) { - logger.throwArgumentError("unknown locale", "wordlist", wordlist); - } - return words; - } - return wordlist; -} -var _constructorGuard = {}; -exports.defaultPath = "m/44'/60'/0'/0/0"; -; -var HDNode = /** @class */ (function () { - /** - * This constructor should not be called directly. - * - * Please use: - * - fromMnemonic - * - fromSeed - */ - function HDNode(constructorGuard, privateKey, publicKey, parentFingerprint, chainCode, index, depth, mnemonicOrPath) { - var _newTarget = this.constructor; - logger.checkNew(_newTarget, HDNode); - /* istanbul ignore if */ - if (constructorGuard !== _constructorGuard) { - throw new Error("HDNode constructor cannot be called directly"); - } - if (privateKey) { - var signingKey = new signing_key_1.SigningKey(privateKey); - (0, properties_1.defineReadOnly)(this, "privateKey", signingKey.privateKey); - (0, properties_1.defineReadOnly)(this, "publicKey", signingKey.compressedPublicKey); - } - else { - (0, properties_1.defineReadOnly)(this, "privateKey", null); - (0, properties_1.defineReadOnly)(this, "publicKey", (0, bytes_1.hexlify)(publicKey)); - } - (0, properties_1.defineReadOnly)(this, "parentFingerprint", parentFingerprint); - (0, properties_1.defineReadOnly)(this, "fingerprint", (0, bytes_1.hexDataSlice)((0, sha2_1.ripemd160)((0, sha2_1.sha256)(this.publicKey)), 0, 4)); - (0, properties_1.defineReadOnly)(this, "address", (0, transactions_1.computeAddress)(this.publicKey)); - (0, properties_1.defineReadOnly)(this, "chainCode", chainCode); - (0, properties_1.defineReadOnly)(this, "index", index); - (0, properties_1.defineReadOnly)(this, "depth", depth); - if (mnemonicOrPath == null) { - // From a source that does not preserve the path (e.g. extended keys) - (0, properties_1.defineReadOnly)(this, "mnemonic", null); - (0, properties_1.defineReadOnly)(this, "path", null); - } - else if (typeof (mnemonicOrPath) === "string") { - // From a source that does not preserve the mnemonic (e.g. neutered) - (0, properties_1.defineReadOnly)(this, "mnemonic", null); - (0, properties_1.defineReadOnly)(this, "path", mnemonicOrPath); - } - else { - // From a fully qualified source - (0, properties_1.defineReadOnly)(this, "mnemonic", mnemonicOrPath); - (0, properties_1.defineReadOnly)(this, "path", mnemonicOrPath.path); - } - } - Object.defineProperty(HDNode.prototype, "extendedKey", { - get: function () { - // We only support the mainnet values for now, but if anyone needs - // testnet values, let me know. I believe current sentiment is that - // we should always use mainnet, and use BIP-44 to derive the network - // - Mainnet: public=0x0488B21E, private=0x0488ADE4 - // - Testnet: public=0x043587CF, private=0x04358394 - if (this.depth >= 256) { - throw new Error("Depth too large!"); - } - return base58check((0, bytes_1.concat)([ - ((this.privateKey != null) ? "0x0488ADE4" : "0x0488B21E"), - (0, bytes_1.hexlify)(this.depth), - this.parentFingerprint, - (0, bytes_1.hexZeroPad)((0, bytes_1.hexlify)(this.index), 4), - this.chainCode, - ((this.privateKey != null) ? (0, bytes_1.concat)(["0x00", this.privateKey]) : this.publicKey), - ])); - }, - enumerable: false, - configurable: true - }); - HDNode.prototype.neuter = function () { - return new HDNode(_constructorGuard, null, this.publicKey, this.parentFingerprint, this.chainCode, this.index, this.depth, this.path); - }; - HDNode.prototype._derive = function (index) { - if (index > 0xffffffff) { - throw new Error("invalid index - " + String(index)); - } - // Base path - var path = this.path; - if (path) { - path += "/" + (index & ~HardenedBit); - } - var data = new Uint8Array(37); - if (index & HardenedBit) { - if (!this.privateKey) { - throw new Error("cannot derive child of neutered node"); - } - // Data = 0x00 || ser_256(k_par) - data.set((0, bytes_1.arrayify)(this.privateKey), 1); - // Hardened path - if (path) { - path += "'"; - } - } - else { - // Data = ser_p(point(k_par)) - data.set((0, bytes_1.arrayify)(this.publicKey)); - } - // Data += ser_32(i) - for (var i = 24; i >= 0; i -= 8) { - data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); - } - var I = (0, bytes_1.arrayify)((0, sha2_1.computeHmac)(sha2_1.SupportedAlgorithm.sha512, this.chainCode, data)); - var IL = I.slice(0, 32); - var IR = I.slice(32); - // The private key - var ki = null; - // The public key - var Ki = null; - if (this.privateKey) { - ki = bytes32(bignumber_1.BigNumber.from(IL).add(this.privateKey).mod(N)); - } - else { - var ek = new signing_key_1.SigningKey((0, bytes_1.hexlify)(IL)); - Ki = ek._addPoint(this.publicKey); - } - var mnemonicOrPath = path; - var srcMnemonic = this.mnemonic; - if (srcMnemonic) { - mnemonicOrPath = Object.freeze({ - phrase: srcMnemonic.phrase, - path: path, - locale: (srcMnemonic.locale || "en") - }); - } - return new HDNode(_constructorGuard, ki, Ki, this.fingerprint, bytes32(IR), index, this.depth + 1, mnemonicOrPath); - }; - HDNode.prototype.derivePath = function (path) { - var components = path.split("/"); - if (components.length === 0 || (components[0] === "m" && this.depth !== 0)) { - throw new Error("invalid path - " + path); - } - if (components[0] === "m") { - components.shift(); - } - var result = this; - for (var i = 0; i < components.length; i++) { - var component = components[i]; - if (component.match(/^[0-9]+'$/)) { - var index = parseInt(component.substring(0, component.length - 1)); - if (index >= HardenedBit) { - throw new Error("invalid path index - " + component); - } - result = result._derive(HardenedBit + index); - } - else if (component.match(/^[0-9]+$/)) { - var index = parseInt(component); - if (index >= HardenedBit) { - throw new Error("invalid path index - " + component); - } - result = result._derive(index); - } - else { - throw new Error("invalid path component - " + component); - } - } - return result; - }; - HDNode._fromSeed = function (seed, mnemonic) { - var seedArray = (0, bytes_1.arrayify)(seed); - if (seedArray.length < 16 || seedArray.length > 64) { - throw new Error("invalid seed"); - } - var I = (0, bytes_1.arrayify)((0, sha2_1.computeHmac)(sha2_1.SupportedAlgorithm.sha512, MasterSecret, seedArray)); - return new HDNode(_constructorGuard, bytes32(I.slice(0, 32)), null, "0x00000000", bytes32(I.slice(32)), 0, 0, mnemonic); - }; - HDNode.fromMnemonic = function (mnemonic, password, wordlist) { - // If a locale name was passed in, find the associated wordlist - wordlist = getWordlist(wordlist); - // Normalize the case and spacing in the mnemonic (throws if the mnemonic is invalid) - mnemonic = entropyToMnemonic(mnemonicToEntropy(mnemonic, wordlist), wordlist); - return HDNode._fromSeed(mnemonicToSeed(mnemonic, password), { - phrase: mnemonic, - path: "m", - locale: wordlist.locale - }); - }; - HDNode.fromSeed = function (seed) { - return HDNode._fromSeed(seed, null); - }; - HDNode.fromExtendedKey = function (extendedKey) { - var bytes = basex_1.Base58.decode(extendedKey); - if (bytes.length !== 82 || base58check(bytes.slice(0, 78)) !== extendedKey) { - logger.throwArgumentError("invalid extended key", "extendedKey", "[REDACTED]"); - } - var depth = bytes[4]; - var parentFingerprint = (0, bytes_1.hexlify)(bytes.slice(5, 9)); - var index = parseInt((0, bytes_1.hexlify)(bytes.slice(9, 13)).substring(2), 16); - var chainCode = (0, bytes_1.hexlify)(bytes.slice(13, 45)); - var key = bytes.slice(45, 78); - switch ((0, bytes_1.hexlify)(bytes.slice(0, 4))) { - // Public Key - case "0x0488b21e": - case "0x043587cf": - return new HDNode(_constructorGuard, null, (0, bytes_1.hexlify)(key), parentFingerprint, chainCode, index, depth, null); - // Private Key - case "0x0488ade4": - case "0x04358394 ": - if (key[0] !== 0) { - break; - } - return new HDNode(_constructorGuard, (0, bytes_1.hexlify)(key.slice(1)), null, parentFingerprint, chainCode, index, depth, null); - } - return logger.throwArgumentError("invalid extended key", "extendedKey", "[REDACTED]"); - }; - return HDNode; -}()); -exports.HDNode = HDNode; -function mnemonicToSeed(mnemonic, password) { - if (!password) { - password = ""; - } - var salt = (0, strings_1.toUtf8Bytes)("mnemonic" + password, strings_1.UnicodeNormalizationForm.NFKD); - return (0, pbkdf2_1.pbkdf2)((0, strings_1.toUtf8Bytes)(mnemonic, strings_1.UnicodeNormalizationForm.NFKD), salt, 2048, 64, "sha512"); -} -exports.mnemonicToSeed = mnemonicToSeed; -function mnemonicToEntropy(mnemonic, wordlist) { - wordlist = getWordlist(wordlist); - logger.checkNormalize(); - var words = wordlist.split(mnemonic); - if ((words.length % 3) !== 0) { - throw new Error("invalid mnemonic"); - } - var entropy = (0, bytes_1.arrayify)(new Uint8Array(Math.ceil(11 * words.length / 8))); - var offset = 0; - for (var i = 0; i < words.length; i++) { - var index = wordlist.getWordIndex(words[i].normalize("NFKD")); - if (index === -1) { - throw new Error("invalid mnemonic"); - } - for (var bit = 0; bit < 11; bit++) { - if (index & (1 << (10 - bit))) { - entropy[offset >> 3] |= (1 << (7 - (offset % 8))); - } - offset++; - } - } - var entropyBits = 32 * words.length / 3; - var checksumBits = words.length / 3; - var checksumMask = getUpperMask(checksumBits); - var checksum = (0, bytes_1.arrayify)((0, sha2_1.sha256)(entropy.slice(0, entropyBits / 8)))[0] & checksumMask; - if (checksum !== (entropy[entropy.length - 1] & checksumMask)) { - throw new Error("invalid checksum"); - } - return (0, bytes_1.hexlify)(entropy.slice(0, entropyBits / 8)); -} -exports.mnemonicToEntropy = mnemonicToEntropy; -function entropyToMnemonic(entropy, wordlist) { - wordlist = getWordlist(wordlist); - entropy = (0, bytes_1.arrayify)(entropy); - if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) { - throw new Error("invalid entropy"); - } - var indices = [0]; - var remainingBits = 11; - for (var i = 0; i < entropy.length; i++) { - // Consume the whole byte (with still more to go) - if (remainingBits > 8) { - indices[indices.length - 1] <<= 8; - indices[indices.length - 1] |= entropy[i]; - remainingBits -= 8; - // This byte will complete an 11-bit index - } - else { - indices[indices.length - 1] <<= remainingBits; - indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits); - // Start the next word - indices.push(entropy[i] & getLowerMask(8 - remainingBits)); - remainingBits += 3; - } - } - // Compute the checksum bits - var checksumBits = entropy.length / 4; - var checksum = (0, bytes_1.arrayify)((0, sha2_1.sha256)(entropy))[0] & getUpperMask(checksumBits); - // Shift the checksum into the word indices - indices[indices.length - 1] <<= checksumBits; - indices[indices.length - 1] |= (checksum >> (8 - checksumBits)); - return wordlist.join(indices.map(function (index) { return wordlist.getWord(index); })); -} -exports.entropyToMnemonic = entropyToMnemonic; -function isValidMnemonic(mnemonic, wordlist) { - try { - mnemonicToEntropy(mnemonic, wordlist); - return true; - } - catch (error) { } - return false; -} -exports.isValidMnemonic = isValidMnemonic; -function getAccountPath(index) { - if (typeof (index) !== "number" || index < 0 || index >= HardenedBit || index % 1) { - logger.throwArgumentError("invalid account index", "index", index); - } - return "m/44'/60'/" + index + "'/0/0"; -} -exports.getAccountPath = getAccountPath; - -},{"./_version":47,"@ethersproject/basex":27,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/pbkdf2":61,"@ethersproject/properties":63,"@ethersproject/sha2":90,"@ethersproject/signing-key":94,"@ethersproject/strings":100,"@ethersproject/transactions":103,"@ethersproject/wordlists":112}],49:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "json-wallets/5.5.0"; - -},{}],50:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decrypt = exports.CrowdsaleAccount = void 0; -var aes_js_1 = __importDefault(require("aes-js")); -var address_1 = require("@ethersproject/address"); -var bytes_1 = require("@ethersproject/bytes"); -var keccak256_1 = require("@ethersproject/keccak256"); -var pbkdf2_1 = require("@ethersproject/pbkdf2"); -var strings_1 = require("@ethersproject/strings"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var utils_1 = require("./utils"); -var CrowdsaleAccount = /** @class */ (function (_super) { - __extends(CrowdsaleAccount, _super); - function CrowdsaleAccount() { - return _super !== null && _super.apply(this, arguments) || this; - } - CrowdsaleAccount.prototype.isCrowdsaleAccount = function (value) { - return !!(value && value._isCrowdsaleAccount); - }; - return CrowdsaleAccount; -}(properties_1.Description)); -exports.CrowdsaleAccount = CrowdsaleAccount; -// See: https://github.com/ethereum/pyethsaletool -function decrypt(json, password) { - var data = JSON.parse(json); - password = (0, utils_1.getPassword)(password); - // Ethereum Address - var ethaddr = (0, address_1.getAddress)((0, utils_1.searchPath)(data, "ethaddr")); - // Encrypted Seed - var encseed = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "encseed")); - if (!encseed || (encseed.length % 16) !== 0) { - logger.throwArgumentError("invalid encseed", "json", json); - } - var key = (0, bytes_1.arrayify)((0, pbkdf2_1.pbkdf2)(password, password, 2000, 32, "sha256")).slice(0, 16); - var iv = encseed.slice(0, 16); - var encryptedSeed = encseed.slice(16); - // Decrypt the seed - var aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv); - var seed = aes_js_1.default.padding.pkcs7.strip((0, bytes_1.arrayify)(aesCbc.decrypt(encryptedSeed))); - // This wallet format is weird... Convert the binary encoded hex to a string. - var seedHex = ""; - for (var i = 0; i < seed.length; i++) { - seedHex += String.fromCharCode(seed[i]); - } - var seedHexBytes = (0, strings_1.toUtf8Bytes)(seedHex); - var privateKey = (0, keccak256_1.keccak256)(seedHexBytes); - return new CrowdsaleAccount({ - _isCrowdsaleAccount: true, - address: ethaddr, - privateKey: privateKey - }); -} -exports.decrypt = decrypt; - -},{"./_version":49,"./utils":54,"@ethersproject/address":24,"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/pbkdf2":61,"@ethersproject/properties":63,"@ethersproject/strings":100,"aes-js":219}],51:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decryptJsonWalletSync = exports.decryptJsonWallet = exports.getJsonWalletAddress = exports.isKeystoreWallet = exports.isCrowdsaleWallet = exports.encryptKeystore = exports.decryptKeystoreSync = exports.decryptKeystore = exports.decryptCrowdsale = void 0; -var crowdsale_1 = require("./crowdsale"); -Object.defineProperty(exports, "decryptCrowdsale", { enumerable: true, get: function () { return crowdsale_1.decrypt; } }); -var inspect_1 = require("./inspect"); -Object.defineProperty(exports, "getJsonWalletAddress", { enumerable: true, get: function () { return inspect_1.getJsonWalletAddress; } }); -Object.defineProperty(exports, "isCrowdsaleWallet", { enumerable: true, get: function () { return inspect_1.isCrowdsaleWallet; } }); -Object.defineProperty(exports, "isKeystoreWallet", { enumerable: true, get: function () { return inspect_1.isKeystoreWallet; } }); -var keystore_1 = require("./keystore"); -Object.defineProperty(exports, "decryptKeystore", { enumerable: true, get: function () { return keystore_1.decrypt; } }); -Object.defineProperty(exports, "decryptKeystoreSync", { enumerable: true, get: function () { return keystore_1.decryptSync; } }); -Object.defineProperty(exports, "encryptKeystore", { enumerable: true, get: function () { return keystore_1.encrypt; } }); -function decryptJsonWallet(json, password, progressCallback) { - if ((0, inspect_1.isCrowdsaleWallet)(json)) { - if (progressCallback) { - progressCallback(0); - } - var account = (0, crowdsale_1.decrypt)(json, password); - if (progressCallback) { - progressCallback(1); - } - return Promise.resolve(account); - } - if ((0, inspect_1.isKeystoreWallet)(json)) { - return (0, keystore_1.decrypt)(json, password, progressCallback); - } - return Promise.reject(new Error("invalid JSON wallet")); -} -exports.decryptJsonWallet = decryptJsonWallet; -function decryptJsonWalletSync(json, password) { - if ((0, inspect_1.isCrowdsaleWallet)(json)) { - return (0, crowdsale_1.decrypt)(json, password); - } - if ((0, inspect_1.isKeystoreWallet)(json)) { - return (0, keystore_1.decryptSync)(json, password); - } - throw new Error("invalid JSON wallet"); -} -exports.decryptJsonWalletSync = decryptJsonWalletSync; - -},{"./crowdsale":50,"./inspect":52,"./keystore":53}],52:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getJsonWalletAddress = exports.isKeystoreWallet = exports.isCrowdsaleWallet = void 0; -var address_1 = require("@ethersproject/address"); -function isCrowdsaleWallet(json) { - var data = null; - try { - data = JSON.parse(json); - } - catch (error) { - return false; - } - return (data.encseed && data.ethaddr); -} -exports.isCrowdsaleWallet = isCrowdsaleWallet; -function isKeystoreWallet(json) { - var data = null; - try { - data = JSON.parse(json); - } - catch (error) { - return false; - } - if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) { - return false; - } - // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff - return true; -} -exports.isKeystoreWallet = isKeystoreWallet; -//export function isJsonWallet(json: string): boolean { -// return (isSecretStorageWallet(json) || isCrowdsaleWallet(json)); -//} -function getJsonWalletAddress(json) { - if (isCrowdsaleWallet(json)) { - try { - return (0, address_1.getAddress)(JSON.parse(json).ethaddr); - } - catch (error) { - return null; - } - } - if (isKeystoreWallet(json)) { - try { - return (0, address_1.getAddress)(JSON.parse(json).address); - } - catch (error) { - return null; - } - } - return null; -} -exports.getJsonWalletAddress = getJsonWalletAddress; - -},{"@ethersproject/address":24}],53:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.encrypt = exports.decrypt = exports.decryptSync = exports.KeystoreAccount = void 0; -var aes_js_1 = __importDefault(require("aes-js")); -var scrypt_js_1 = __importDefault(require("scrypt-js")); -var address_1 = require("@ethersproject/address"); -var bytes_1 = require("@ethersproject/bytes"); -var hdnode_1 = require("@ethersproject/hdnode"); -var keccak256_1 = require("@ethersproject/keccak256"); -var pbkdf2_1 = require("@ethersproject/pbkdf2"); -var random_1 = require("@ethersproject/random"); -var properties_1 = require("@ethersproject/properties"); -var transactions_1 = require("@ethersproject/transactions"); -var utils_1 = require("./utils"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -// Exported Types -function hasMnemonic(value) { - return (value != null && value.mnemonic && value.mnemonic.phrase); -} -var KeystoreAccount = /** @class */ (function (_super) { - __extends(KeystoreAccount, _super); - function KeystoreAccount() { - return _super !== null && _super.apply(this, arguments) || this; - } - KeystoreAccount.prototype.isKeystoreAccount = function (value) { - return !!(value && value._isKeystoreAccount); - }; - return KeystoreAccount; -}(properties_1.Description)); -exports.KeystoreAccount = KeystoreAccount; -function _decrypt(data, key, ciphertext) { - var cipher = (0, utils_1.searchPath)(data, "crypto/cipher"); - if (cipher === "aes-128-ctr") { - var iv = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/cipherparams/iv")); - var counter = new aes_js_1.default.Counter(iv); - var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(key, counter); - return (0, bytes_1.arrayify)(aesCtr.decrypt(ciphertext)); - } - return null; -} -function _getAccount(data, key) { - var ciphertext = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/ciphertext")); - var computedMAC = (0, bytes_1.hexlify)((0, keccak256_1.keccak256)((0, bytes_1.concat)([key.slice(16, 32), ciphertext]))).substring(2); - if (computedMAC !== (0, utils_1.searchPath)(data, "crypto/mac").toLowerCase()) { - throw new Error("invalid password"); - } - var privateKey = _decrypt(data, key.slice(0, 16), ciphertext); - if (!privateKey) { - logger.throwError("unsupported cipher", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "decrypt" - }); - } - var mnemonicKey = key.slice(32, 64); - var address = (0, transactions_1.computeAddress)(privateKey); - if (data.address) { - var check = data.address.toLowerCase(); - if (check.substring(0, 2) !== "0x") { - check = "0x" + check; - } - if ((0, address_1.getAddress)(check) !== address) { - throw new Error("address mismatch"); - } - } - var account = { - _isKeystoreAccount: true, - address: address, - privateKey: (0, bytes_1.hexlify)(privateKey) - }; - // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase - if ((0, utils_1.searchPath)(data, "x-ethers/version") === "0.1") { - var mnemonicCiphertext = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "x-ethers/mnemonicCiphertext")); - var mnemonicIv = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "x-ethers/mnemonicCounter")); - var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); - var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); - var path = (0, utils_1.searchPath)(data, "x-ethers/path") || hdnode_1.defaultPath; - var locale = (0, utils_1.searchPath)(data, "x-ethers/locale") || "en"; - var entropy = (0, bytes_1.arrayify)(mnemonicAesCtr.decrypt(mnemonicCiphertext)); - try { - var mnemonic = (0, hdnode_1.entropyToMnemonic)(entropy, locale); - var node = hdnode_1.HDNode.fromMnemonic(mnemonic, null, locale).derivePath(path); - if (node.privateKey != account.privateKey) { - throw new Error("mnemonic mismatch"); - } - account.mnemonic = node.mnemonic; - } - catch (error) { - // If we don't have the locale wordlist installed to - // read this mnemonic, just bail and don't set the - // mnemonic - if (error.code !== logger_1.Logger.errors.INVALID_ARGUMENT || error.argument !== "wordlist") { - throw error; - } - } - } - return new KeystoreAccount(account); -} -function pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc) { - return (0, bytes_1.arrayify)((0, pbkdf2_1.pbkdf2)(passwordBytes, salt, count, dkLen, prfFunc)); -} -function pbkdf2(passwordBytes, salt, count, dkLen, prfFunc) { - return Promise.resolve(pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc)); -} -function _computeKdfKey(data, password, pbkdf2Func, scryptFunc, progressCallback) { - var passwordBytes = (0, utils_1.getPassword)(password); - var kdf = (0, utils_1.searchPath)(data, "crypto/kdf"); - if (kdf && typeof (kdf) === "string") { - var throwError = function (name, value) { - return logger.throwArgumentError("invalid key-derivation function parameters", name, value); - }; - if (kdf.toLowerCase() === "scrypt") { - var salt = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/kdfparams/salt")); - var N = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/n")); - var r = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/r")); - var p = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/p")); - // Check for all required parameters - if (!N || !r || !p) { - throwError("kdf", kdf); - } - // Make sure N is a power of 2 - if ((N & (N - 1)) !== 0) { - throwError("N", N); - } - var dkLen = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/dklen")); - if (dkLen !== 32) { - throwError("dklen", dkLen); - } - return scryptFunc(passwordBytes, salt, N, r, p, 64, progressCallback); - } - else if (kdf.toLowerCase() === "pbkdf2") { - var salt = (0, utils_1.looseArrayify)((0, utils_1.searchPath)(data, "crypto/kdfparams/salt")); - var prfFunc = null; - var prf = (0, utils_1.searchPath)(data, "crypto/kdfparams/prf"); - if (prf === "hmac-sha256") { - prfFunc = "sha256"; - } - else if (prf === "hmac-sha512") { - prfFunc = "sha512"; - } - else { - throwError("prf", prf); - } - var count = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/c")); - var dkLen = parseInt((0, utils_1.searchPath)(data, "crypto/kdfparams/dklen")); - if (dkLen !== 32) { - throwError("dklen", dkLen); - } - return pbkdf2Func(passwordBytes, salt, count, dkLen, prfFunc); - } - } - return logger.throwArgumentError("unsupported key-derivation function", "kdf", kdf); -} -function decryptSync(json, password) { - var data = JSON.parse(json); - var key = _computeKdfKey(data, password, pbkdf2Sync, scrypt_js_1.default.syncScrypt); - return _getAccount(data, key); -} -exports.decryptSync = decryptSync; -function decrypt(json, password, progressCallback) { - return __awaiter(this, void 0, void 0, function () { - var data, key; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - data = JSON.parse(json); - return [4 /*yield*/, _computeKdfKey(data, password, pbkdf2, scrypt_js_1.default.scrypt, progressCallback)]; - case 1: - key = _a.sent(); - return [2 /*return*/, _getAccount(data, key)]; - } - }); - }); -} -exports.decrypt = decrypt; -function encrypt(account, password, options, progressCallback) { - try { - // Check the address matches the private key - if ((0, address_1.getAddress)(account.address) !== (0, transactions_1.computeAddress)(account.privateKey)) { - throw new Error("address/privateKey mismatch"); - } - // Check the mnemonic (if any) matches the private key - if (hasMnemonic(account)) { - var mnemonic = account.mnemonic; - var node = hdnode_1.HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || hdnode_1.defaultPath); - if (node.privateKey != account.privateKey) { - throw new Error("mnemonic mismatch"); - } - } - } - catch (e) { - return Promise.reject(e); - } - // The options are optional, so adjust the call as needed - if (typeof (options) === "function" && !progressCallback) { - progressCallback = options; - options = {}; - } - if (!options) { - options = {}; - } - var privateKey = (0, bytes_1.arrayify)(account.privateKey); - var passwordBytes = (0, utils_1.getPassword)(password); - var entropy = null; - var path = null; - var locale = null; - if (hasMnemonic(account)) { - var srcMnemonic = account.mnemonic; - entropy = (0, bytes_1.arrayify)((0, hdnode_1.mnemonicToEntropy)(srcMnemonic.phrase, srcMnemonic.locale || "en")); - path = srcMnemonic.path || hdnode_1.defaultPath; - locale = srcMnemonic.locale || "en"; - } - var client = options.client; - if (!client) { - client = "ethers.js"; - } - // Check/generate the salt - var salt = null; - if (options.salt) { - salt = (0, bytes_1.arrayify)(options.salt); - } - else { - salt = (0, random_1.randomBytes)(32); - ; - } - // Override initialization vector - var iv = null; - if (options.iv) { - iv = (0, bytes_1.arrayify)(options.iv); - if (iv.length !== 16) { - throw new Error("invalid iv"); - } - } - else { - iv = (0, random_1.randomBytes)(16); - } - // Override the uuid - var uuidRandom = null; - if (options.uuid) { - uuidRandom = (0, bytes_1.arrayify)(options.uuid); - if (uuidRandom.length !== 16) { - throw new Error("invalid uuid"); - } - } - else { - uuidRandom = (0, random_1.randomBytes)(16); - } - // Override the scrypt password-based key derivation function parameters - var N = (1 << 17), r = 8, p = 1; - if (options.scrypt) { - if (options.scrypt.N) { - N = options.scrypt.N; - } - if (options.scrypt.r) { - r = options.scrypt.r; - } - if (options.scrypt.p) { - p = options.scrypt.p; - } - } - // We take 64 bytes: - // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix) - // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet) - return scrypt_js_1.default.scrypt(passwordBytes, salt, N, r, p, 64, progressCallback).then(function (key) { - key = (0, bytes_1.arrayify)(key); - // This will be used to encrypt the wallet (as per Web3 secret storage) - var derivedKey = key.slice(0, 16); - var macPrefix = key.slice(16, 32); - // This will be used to encrypt the mnemonic phrase (if any) - var mnemonicKey = key.slice(32, 64); - // Encrypt the private key - var counter = new aes_js_1.default.Counter(iv); - var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(derivedKey, counter); - var ciphertext = (0, bytes_1.arrayify)(aesCtr.encrypt(privateKey)); - // Compute the message authentication code, used to check the password - var mac = (0, keccak256_1.keccak256)((0, bytes_1.concat)([macPrefix, ciphertext])); - // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition - var data = { - address: account.address.substring(2).toLowerCase(), - id: (0, utils_1.uuidV4)(uuidRandom), - version: 3, - Crypto: { - cipher: "aes-128-ctr", - cipherparams: { - iv: (0, bytes_1.hexlify)(iv).substring(2), - }, - ciphertext: (0, bytes_1.hexlify)(ciphertext).substring(2), - kdf: "scrypt", - kdfparams: { - salt: (0, bytes_1.hexlify)(salt).substring(2), - n: N, - dklen: 32, - p: p, - r: r - }, - mac: mac.substring(2) - } - }; - // If we have a mnemonic, encrypt it into the JSON wallet - if (entropy) { - var mnemonicIv = (0, random_1.randomBytes)(16); - var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv); - var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter); - var mnemonicCiphertext = (0, bytes_1.arrayify)(mnemonicAesCtr.encrypt(entropy)); - var now = new Date(); - var timestamp = (now.getUTCFullYear() + "-" + - (0, utils_1.zpad)(now.getUTCMonth() + 1, 2) + "-" + - (0, utils_1.zpad)(now.getUTCDate(), 2) + "T" + - (0, utils_1.zpad)(now.getUTCHours(), 2) + "-" + - (0, utils_1.zpad)(now.getUTCMinutes(), 2) + "-" + - (0, utils_1.zpad)(now.getUTCSeconds(), 2) + ".0Z"); - data["x-ethers"] = { - client: client, - gethFilename: ("UTC--" + timestamp + "--" + data.address), - mnemonicCounter: (0, bytes_1.hexlify)(mnemonicIv).substring(2), - mnemonicCiphertext: (0, bytes_1.hexlify)(mnemonicCiphertext).substring(2), - path: path, - locale: locale, - version: "0.1" - }; - } - return JSON.stringify(data); - }); -} -exports.encrypt = encrypt; - -},{"./_version":49,"./utils":54,"@ethersproject/address":24,"@ethersproject/bytes":33,"@ethersproject/hdnode":48,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/pbkdf2":61,"@ethersproject/properties":63,"@ethersproject/random":84,"@ethersproject/transactions":103,"aes-js":219,"scrypt-js":269}],54:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.uuidV4 = exports.searchPath = exports.getPassword = exports.zpad = exports.looseArrayify = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var strings_1 = require("@ethersproject/strings"); -function looseArrayify(hexString) { - if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') { - hexString = '0x' + hexString; - } - return (0, bytes_1.arrayify)(hexString); -} -exports.looseArrayify = looseArrayify; -function zpad(value, length) { - value = String(value); - while (value.length < length) { - value = '0' + value; - } - return value; -} -exports.zpad = zpad; -function getPassword(password) { - if (typeof (password) === 'string') { - return (0, strings_1.toUtf8Bytes)(password, strings_1.UnicodeNormalizationForm.NFKC); - } - return (0, bytes_1.arrayify)(password); -} -exports.getPassword = getPassword; -function searchPath(object, path) { - var currentChild = object; - var comps = path.toLowerCase().split('/'); - for (var i = 0; i < comps.length; i++) { - // Search for a child object with a case-insensitive matching key - var matchingChild = null; - for (var key in currentChild) { - if (key.toLowerCase() === comps[i]) { - matchingChild = currentChild[key]; - break; - } - } - // Didn't find one. :'( - if (matchingChild === null) { - return null; - } - // Now check this child... - currentChild = matchingChild; - } - return currentChild; -} -exports.searchPath = searchPath; -// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4) -function uuidV4(randomBytes) { - var bytes = (0, bytes_1.arrayify)(randomBytes); - // Section: 4.1.3: - // - time_hi_and_version[12:16] = 0b0100 - bytes[6] = (bytes[6] & 0x0f) | 0x40; - // Section 4.4 - // - clock_seq_hi_and_reserved[6] = 0b0 - // - clock_seq_hi_and_reserved[7] = 0b1 - bytes[8] = (bytes[8] & 0x3f) | 0x80; - var value = (0, bytes_1.hexlify)(bytes); - return [ - value.substring(2, 10), - value.substring(10, 14), - value.substring(14, 18), - value.substring(18, 22), - value.substring(22, 34), - ].join("-"); -} -exports.uuidV4 = uuidV4; - -},{"@ethersproject/bytes":33,"@ethersproject/strings":100}],55:[function(require,module,exports){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.keccak256 = void 0; -var js_sha3_1 = __importDefault(require("js-sha3")); -var bytes_1 = require("@ethersproject/bytes"); -function keccak256(data) { - return '0x' + js_sha3_1.default.keccak_256((0, bytes_1.arrayify)(data)); -} -exports.keccak256 = keccak256; - -},{"@ethersproject/bytes":33,"js-sha3":264}],56:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "logger/5.5.0"; - -},{}],57:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Logger = exports.ErrorCode = exports.LogLevel = void 0; -var _permanentCensorErrors = false; -var _censorErrors = false; -var LogLevels = { debug: 1, "default": 2, info: 2, warning: 3, error: 4, off: 5 }; -var _logLevel = LogLevels["default"]; -var _version_1 = require("./_version"); -var _globalLogger = null; -function _checkNormalize() { - try { - var missing_1 = []; - // Make sure all forms of normalization are supported - ["NFD", "NFC", "NFKD", "NFKC"].forEach(function (form) { - try { - if ("test".normalize(form) !== "test") { - throw new Error("bad normalize"); - } - ; - } - catch (error) { - missing_1.push(form); - } - }); - if (missing_1.length) { - throw new Error("missing " + missing_1.join(", ")); - } - if (String.fromCharCode(0xe9).normalize("NFD") !== String.fromCharCode(0x65, 0x0301)) { - throw new Error("broken implementation"); - } - } - catch (error) { - return error.message; - } - return null; -} -var _normalizeError = _checkNormalize(); -var LogLevel; -(function (LogLevel) { - LogLevel["DEBUG"] = "DEBUG"; - LogLevel["INFO"] = "INFO"; - LogLevel["WARNING"] = "WARNING"; - LogLevel["ERROR"] = "ERROR"; - LogLevel["OFF"] = "OFF"; -})(LogLevel = exports.LogLevel || (exports.LogLevel = {})); -var ErrorCode; -(function (ErrorCode) { - /////////////////// - // Generic Errors - // Unknown Error - ErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR"; - // Not Implemented - ErrorCode["NOT_IMPLEMENTED"] = "NOT_IMPLEMENTED"; - // Unsupported Operation - // - operation - ErrorCode["UNSUPPORTED_OPERATION"] = "UNSUPPORTED_OPERATION"; - // Network Error (i.e. Ethereum Network, such as an invalid chain ID) - // - event ("noNetwork" is not re-thrown in provider.ready; otherwise thrown) - ErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR"; - // Some sort of bad response from the server - ErrorCode["SERVER_ERROR"] = "SERVER_ERROR"; - // Timeout - ErrorCode["TIMEOUT"] = "TIMEOUT"; - /////////////////// - // Operational Errors - // Buffer Overrun - ErrorCode["BUFFER_OVERRUN"] = "BUFFER_OVERRUN"; - // Numeric Fault - // - operation: the operation being executed - // - fault: the reason this faulted - ErrorCode["NUMERIC_FAULT"] = "NUMERIC_FAULT"; - /////////////////// - // Argument Errors - // Missing new operator to an object - // - name: The name of the class - ErrorCode["MISSING_NEW"] = "MISSING_NEW"; - // Invalid argument (e.g. value is incompatible with type) to a function: - // - argument: The argument name that was invalid - // - value: The value of the argument - ErrorCode["INVALID_ARGUMENT"] = "INVALID_ARGUMENT"; - // Missing argument to a function: - // - count: The number of arguments received - // - expectedCount: The number of arguments expected - ErrorCode["MISSING_ARGUMENT"] = "MISSING_ARGUMENT"; - // Too many arguments - // - count: The number of arguments received - // - expectedCount: The number of arguments expected - ErrorCode["UNEXPECTED_ARGUMENT"] = "UNEXPECTED_ARGUMENT"; - /////////////////// - // Blockchain Errors - // Call exception - // - transaction: the transaction - // - address?: the contract address - // - args?: The arguments passed into the function - // - method?: The Solidity method signature - // - errorSignature?: The EIP848 error signature - // - errorArgs?: The EIP848 error parameters - // - reason: The reason (only for EIP848 "Error(string)") - ErrorCode["CALL_EXCEPTION"] = "CALL_EXCEPTION"; - // Insufficient funds (< value + gasLimit * gasPrice) - // - transaction: the transaction attempted - ErrorCode["INSUFFICIENT_FUNDS"] = "INSUFFICIENT_FUNDS"; - // Nonce has already been used - // - transaction: the transaction attempted - ErrorCode["NONCE_EXPIRED"] = "NONCE_EXPIRED"; - // The replacement fee for the transaction is too low - // - transaction: the transaction attempted - ErrorCode["REPLACEMENT_UNDERPRICED"] = "REPLACEMENT_UNDERPRICED"; - // The gas limit could not be estimated - // - transaction: the transaction passed to estimateGas - ErrorCode["UNPREDICTABLE_GAS_LIMIT"] = "UNPREDICTABLE_GAS_LIMIT"; - // The transaction was replaced by one with a higher gas price - // - reason: "cancelled", "replaced" or "repriced" - // - cancelled: true if reason == "cancelled" or reason == "replaced") - // - hash: original transaction hash - // - replacement: the full TransactionsResponse for the replacement - // - receipt: the receipt of the replacement - ErrorCode["TRANSACTION_REPLACED"] = "TRANSACTION_REPLACED"; -})(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {})); -; -var HEX = "0123456789abcdef"; -var Logger = /** @class */ (function () { - function Logger(version) { - Object.defineProperty(this, "version", { - enumerable: true, - value: version, - writable: false - }); - } - Logger.prototype._log = function (logLevel, args) { - var level = logLevel.toLowerCase(); - if (LogLevels[level] == null) { - this.throwArgumentError("invalid log level name", "logLevel", logLevel); - } - if (_logLevel > LogLevels[level]) { - return; - } - console.log.apply(console, args); - }; - Logger.prototype.debug = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - this._log(Logger.levels.DEBUG, args); - }; - Logger.prototype.info = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - this._log(Logger.levels.INFO, args); - }; - Logger.prototype.warn = function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - this._log(Logger.levels.WARNING, args); - }; - Logger.prototype.makeError = function (message, code, params) { - // Errors are being censored - if (_censorErrors) { - return this.makeError("censored error", code, {}); - } - if (!code) { - code = Logger.errors.UNKNOWN_ERROR; - } - if (!params) { - params = {}; - } - var messageDetails = []; - Object.keys(params).forEach(function (key) { - var value = params[key]; - try { - if (value instanceof Uint8Array) { - var hex = ""; - for (var i = 0; i < value.length; i++) { - hex += HEX[value[i] >> 4]; - hex += HEX[value[i] & 0x0f]; - } - messageDetails.push(key + "=Uint8Array(0x" + hex + ")"); - } - else { - messageDetails.push(key + "=" + JSON.stringify(value)); - } - } - catch (error) { - messageDetails.push(key + "=" + JSON.stringify(params[key].toString())); - } - }); - messageDetails.push("code=" + code); - messageDetails.push("version=" + this.version); - var reason = message; - if (messageDetails.length) { - message += " (" + messageDetails.join(", ") + ")"; - } - // @TODO: Any?? - var error = new Error(message); - error.reason = reason; - error.code = code; - Object.keys(params).forEach(function (key) { - error[key] = params[key]; - }); - return error; - }; - Logger.prototype.throwError = function (message, code, params) { - throw this.makeError(message, code, params); - }; - Logger.prototype.throwArgumentError = function (message, name, value) { - return this.throwError(message, Logger.errors.INVALID_ARGUMENT, { - argument: name, - value: value - }); - }; - Logger.prototype.assert = function (condition, message, code, params) { - if (!!condition) { - return; - } - this.throwError(message, code, params); - }; - Logger.prototype.assertArgument = function (condition, message, name, value) { - if (!!condition) { - return; - } - this.throwArgumentError(message, name, value); - }; - Logger.prototype.checkNormalize = function (message) { - if (message == null) { - message = "platform missing String.prototype.normalize"; - } - if (_normalizeError) { - this.throwError("platform missing String.prototype.normalize", Logger.errors.UNSUPPORTED_OPERATION, { - operation: "String.prototype.normalize", form: _normalizeError - }); - } - }; - Logger.prototype.checkSafeUint53 = function (value, message) { - if (typeof (value) !== "number") { - return; - } - if (message == null) { - message = "value not safe"; - } - if (value < 0 || value >= 0x1fffffffffffff) { - this.throwError(message, Logger.errors.NUMERIC_FAULT, { - operation: "checkSafeInteger", - fault: "out-of-safe-range", - value: value - }); - } - if (value % 1) { - this.throwError(message, Logger.errors.NUMERIC_FAULT, { - operation: "checkSafeInteger", - fault: "non-integer", - value: value - }); - } - }; - Logger.prototype.checkArgumentCount = function (count, expectedCount, message) { - if (message) { - message = ": " + message; - } - else { - message = ""; - } - if (count < expectedCount) { - this.throwError("missing argument" + message, Logger.errors.MISSING_ARGUMENT, { - count: count, - expectedCount: expectedCount - }); - } - if (count > expectedCount) { - this.throwError("too many arguments" + message, Logger.errors.UNEXPECTED_ARGUMENT, { - count: count, - expectedCount: expectedCount - }); - } - }; - Logger.prototype.checkNew = function (target, kind) { - if (target === Object || target == null) { - this.throwError("missing new", Logger.errors.MISSING_NEW, { name: kind.name }); - } - }; - Logger.prototype.checkAbstract = function (target, kind) { - if (target === kind) { - this.throwError("cannot instantiate abstract class " + JSON.stringify(kind.name) + " directly; use a sub-class", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: "new" }); - } - else if (target === Object || target == null) { - this.throwError("missing new", Logger.errors.MISSING_NEW, { name: kind.name }); - } - }; - Logger.globalLogger = function () { - if (!_globalLogger) { - _globalLogger = new Logger(_version_1.version); - } - return _globalLogger; - }; - Logger.setCensorship = function (censorship, permanent) { - if (!censorship && permanent) { - this.globalLogger().throwError("cannot permanently disable censorship", Logger.errors.UNSUPPORTED_OPERATION, { - operation: "setCensorship" - }); - } - if (_permanentCensorErrors) { - if (!censorship) { - return; - } - this.globalLogger().throwError("error censorship permanent", Logger.errors.UNSUPPORTED_OPERATION, { - operation: "setCensorship" - }); - } - _censorErrors = !!censorship; - _permanentCensorErrors = !!permanent; - }; - Logger.setLogLevel = function (logLevel) { - var level = LogLevels[logLevel.toLowerCase()]; - if (level == null) { - Logger.globalLogger().warn("invalid log level - " + logLevel); - return; - } - _logLevel = level; - }; - Logger.from = function (version) { - return new Logger(version); - }; - Logger.errors = ErrorCode; - Logger.levels = LogLevel; - return Logger; -}()); -exports.Logger = Logger; - -},{"./_version":56}],58:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "networks/5.5.0"; - -},{}],59:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getNetwork = void 0; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -; -function isRenetworkable(value) { - return (value && typeof (value.renetwork) === "function"); -} -function ethDefaultProvider(network) { - var func = function (providers, options) { - if (options == null) { - options = {}; - } - var providerList = []; - if (providers.InfuraProvider) { - try { - providerList.push(new providers.InfuraProvider(network, options.infura)); - } - catch (error) { } - } - if (providers.EtherscanProvider) { - try { - providerList.push(new providers.EtherscanProvider(network, options.etherscan)); - } - catch (error) { } - } - if (providers.AlchemyProvider) { - try { - providerList.push(new providers.AlchemyProvider(network, options.alchemy)); - } - catch (error) { } - } - if (providers.PocketProvider) { - // These networks are currently faulty on Pocket as their - // network does not handle the Berlin hardfork, which is - // live on these ones. - // @TODO: This goes away once Pocket has upgraded their nodes - var skip = ["goerli", "ropsten", "rinkeby"]; - try { - var provider = new providers.PocketProvider(network); - if (provider.network && skip.indexOf(provider.network.name) === -1) { - providerList.push(provider); - } - } - catch (error) { } - } - if (providers.CloudflareProvider) { - try { - providerList.push(new providers.CloudflareProvider(network)); - } - catch (error) { } - } - if (providerList.length === 0) { - return null; - } - if (providers.FallbackProvider) { - var quorum = 1; - if (options.quorum != null) { - quorum = options.quorum; - } - else if (network === "homestead") { - quorum = 2; - } - return new providers.FallbackProvider(providerList, quorum); - } - return providerList[0]; - }; - func.renetwork = function (network) { - return ethDefaultProvider(network); - }; - return func; -} -function etcDefaultProvider(url, network) { - var func = function (providers, options) { - if (providers.JsonRpcProvider) { - return new providers.JsonRpcProvider(url, network); - } - return null; - }; - func.renetwork = function (network) { - return etcDefaultProvider(url, network); - }; - return func; -} -var homestead = { - chainId: 1, - ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - name: "homestead", - _defaultProvider: ethDefaultProvider("homestead") -}; -var ropsten = { - chainId: 3, - ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - name: "ropsten", - _defaultProvider: ethDefaultProvider("ropsten") -}; -var classicMordor = { - chainId: 63, - name: "classicMordor", - _defaultProvider: etcDefaultProvider("https://www.ethercluster.com/mordor", "classicMordor") -}; -var networks = { - unspecified: { chainId: 0, name: "unspecified" }, - homestead: homestead, - mainnet: homestead, - morden: { chainId: 2, name: "morden" }, - ropsten: ropsten, - testnet: ropsten, - rinkeby: { - chainId: 4, - ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - name: "rinkeby", - _defaultProvider: ethDefaultProvider("rinkeby") - }, - kovan: { - chainId: 42, - name: "kovan", - _defaultProvider: ethDefaultProvider("kovan") - }, - goerli: { - chainId: 5, - ensAddress: "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e", - name: "goerli", - _defaultProvider: ethDefaultProvider("goerli") - }, - // ETC (See: #351) - classic: { - chainId: 61, - name: "classic", - _defaultProvider: etcDefaultProvider("https:/\/www.ethercluster.com/etc", "classic") - }, - classicMorden: { chainId: 62, name: "classicMorden" }, - classicMordor: classicMordor, - classicTestnet: classicMordor, - classicKotti: { - chainId: 6, - name: "classicKotti", - _defaultProvider: etcDefaultProvider("https:/\/www.ethercluster.com/kotti", "classicKotti") - }, - xdai: { chainId: 100, name: "xdai" }, - matic: { chainId: 137, name: "matic" }, - maticmum: { chainId: 80001, name: "maticmum" }, - bnb: { chainId: 56, name: "bnb" }, - bnbt: { chainId: 97, name: "bnbt" }, -}; -/** - * getNetwork - * - * Converts a named common networks or chain ID (network ID) to a Network - * and verifies a network is a valid Network.. - */ -function getNetwork(network) { - // No network (null) - if (network == null) { - return null; - } - if (typeof (network) === "number") { - for (var name_1 in networks) { - var standard_1 = networks[name_1]; - if (standard_1.chainId === network) { - return { - name: standard_1.name, - chainId: standard_1.chainId, - ensAddress: (standard_1.ensAddress || null), - _defaultProvider: (standard_1._defaultProvider || null) - }; - } - } - return { - chainId: network, - name: "unknown" - }; - } - if (typeof (network) === "string") { - var standard_2 = networks[network]; - if (standard_2 == null) { - return null; - } - return { - name: standard_2.name, - chainId: standard_2.chainId, - ensAddress: standard_2.ensAddress, - _defaultProvider: (standard_2._defaultProvider || null) - }; - } - var standard = networks[network.name]; - // Not a standard network; check that it is a valid network in general - if (!standard) { - if (typeof (network.chainId) !== "number") { - logger.throwArgumentError("invalid network chainId", "network", network); - } - return network; - } - // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155) - if (network.chainId !== 0 && network.chainId !== standard.chainId) { - logger.throwArgumentError("network chainId mismatch", "network", network); - } - // @TODO: In the next major version add an attach function to a defaultProvider - // class and move the _defaultProvider internal to this file (extend Network) - var defaultProvider = network._defaultProvider || null; - if (defaultProvider == null && standard._defaultProvider) { - if (isRenetworkable(standard._defaultProvider)) { - defaultProvider = standard._defaultProvider.renetwork(network); - } - else { - defaultProvider = standard._defaultProvider; - } - } - // Standard Network (allow overriding the ENS address) - return { - name: network.name, - chainId: standard.chainId, - ensAddress: (network.ensAddress || standard.ensAddress || null), - _defaultProvider: defaultProvider - }; -} -exports.getNetwork = getNetwork; - -},{"./_version":58,"@ethersproject/logger":57}],60:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.pbkdf2 = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var sha2_1 = require("@ethersproject/sha2"); -function pbkdf2(password, salt, iterations, keylen, hashAlgorithm) { - password = (0, bytes_1.arrayify)(password); - salt = (0, bytes_1.arrayify)(salt); - var hLen; - var l = 1; - var DK = new Uint8Array(keylen); - var block1 = new Uint8Array(salt.length + 4); - block1.set(salt); - //salt.copy(block1, 0, 0, salt.length) - var r; - var T; - for (var i = 1; i <= l; i++) { - //block1.writeUInt32BE(i, salt.length) - block1[salt.length] = (i >> 24) & 0xff; - block1[salt.length + 1] = (i >> 16) & 0xff; - block1[salt.length + 2] = (i >> 8) & 0xff; - block1[salt.length + 3] = i & 0xff; - //let U = createHmac(password).update(block1).digest(); - var U = (0, bytes_1.arrayify)((0, sha2_1.computeHmac)(hashAlgorithm, password, block1)); - if (!hLen) { - hLen = U.length; - T = new Uint8Array(hLen); - l = Math.ceil(keylen / hLen); - r = keylen - (l - 1) * hLen; - } - //U.copy(T, 0, 0, hLen) - T.set(U); - for (var j = 1; j < iterations; j++) { - //U = createHmac(password).update(U).digest(); - U = (0, bytes_1.arrayify)((0, sha2_1.computeHmac)(hashAlgorithm, password, U)); - for (var k = 0; k < hLen; k++) - T[k] ^= U[k]; - } - var destPos = (i - 1) * hLen; - var len = (i === l ? r : hLen); - //T.copy(DK, destPos, 0, len) - DK.set((0, bytes_1.arrayify)(T).slice(0, len), destPos); - } - return (0, bytes_1.hexlify)(DK); -} -exports.pbkdf2 = pbkdf2; - -},{"@ethersproject/bytes":33,"@ethersproject/sha2":90}],61:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.pbkdf2 = void 0; -var pbkdf2_1 = require("./pbkdf2"); -Object.defineProperty(exports, "pbkdf2", { enumerable: true, get: function () { return pbkdf2_1.pbkdf2; } }); - -},{"./pbkdf2":60}],62:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "properties/5.5.0"; - -},{}],63:[function(require,module,exports){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Description = exports.deepCopy = exports.shallowCopy = exports.checkProperties = exports.resolveProperties = exports.getStatic = exports.defineReadOnly = void 0; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function defineReadOnly(object, name, value) { - Object.defineProperty(object, name, { - enumerable: true, - value: value, - writable: false, - }); -} -exports.defineReadOnly = defineReadOnly; -// Crawl up the constructor chain to find a static method -function getStatic(ctor, key) { - for (var i = 0; i < 32; i++) { - if (ctor[key]) { - return ctor[key]; - } - if (!ctor.prototype || typeof (ctor.prototype) !== "object") { - break; - } - ctor = Object.getPrototypeOf(ctor.prototype).constructor; - } - return null; -} -exports.getStatic = getStatic; -function resolveProperties(object) { - return __awaiter(this, void 0, void 0, function () { - var promises, results; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - promises = Object.keys(object).map(function (key) { - var value = object[key]; - return Promise.resolve(value).then(function (v) { return ({ key: key, value: v }); }); - }); - return [4 /*yield*/, Promise.all(promises)]; - case 1: - results = _a.sent(); - return [2 /*return*/, results.reduce(function (accum, result) { - accum[(result.key)] = result.value; - return accum; - }, {})]; - } - }); - }); -} -exports.resolveProperties = resolveProperties; -function checkProperties(object, properties) { - if (!object || typeof (object) !== "object") { - logger.throwArgumentError("invalid object", "object", object); - } - Object.keys(object).forEach(function (key) { - if (!properties[key]) { - logger.throwArgumentError("invalid object key - " + key, "transaction:" + key, object); - } - }); -} -exports.checkProperties = checkProperties; -function shallowCopy(object) { - var result = {}; - for (var key in object) { - result[key] = object[key]; - } - return result; -} -exports.shallowCopy = shallowCopy; -var opaque = { bigint: true, boolean: true, "function": true, number: true, string: true }; -function _isFrozen(object) { - // Opaque objects are not mutable, so safe to copy by assignment - if (object === undefined || object === null || opaque[typeof (object)]) { - return true; - } - if (Array.isArray(object) || typeof (object) === "object") { - if (!Object.isFrozen(object)) { - return false; - } - var keys = Object.keys(object); - for (var i = 0; i < keys.length; i++) { - var value = null; - try { - value = object[keys[i]]; - } - catch (error) { - // If accessing a value triggers an error, it is a getter - // designed to do so (e.g. Result) and is therefore "frozen" - continue; - } - if (!_isFrozen(value)) { - return false; - } - } - return true; - } - return logger.throwArgumentError("Cannot deepCopy " + typeof (object), "object", object); -} -// Returns a new copy of object, such that no properties may be replaced. -// New properties may be added only to objects. -function _deepCopy(object) { - if (_isFrozen(object)) { - return object; - } - // Arrays are mutable, so we need to create a copy - if (Array.isArray(object)) { - return Object.freeze(object.map(function (item) { return deepCopy(item); })); - } - if (typeof (object) === "object") { - var result = {}; - for (var key in object) { - var value = object[key]; - if (value === undefined) { - continue; - } - defineReadOnly(result, key, deepCopy(value)); - } - return result; - } - return logger.throwArgumentError("Cannot deepCopy " + typeof (object), "object", object); -} -function deepCopy(object) { - return _deepCopy(object); -} -exports.deepCopy = deepCopy; -var Description = /** @class */ (function () { - function Description(info) { - for (var key in info) { - this[key] = deepCopy(info[key]); - } - } - return Description; -}()); -exports.Description = Description; - -},{"./_version":62,"@ethersproject/logger":57}],64:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "providers/5.5.0"; - -},{}],65:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AlchemyProvider = exports.AlchemyWebSocketProvider = void 0; -var properties_1 = require("@ethersproject/properties"); -var formatter_1 = require("./formatter"); -var websocket_provider_1 = require("./websocket-provider"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -// This key was provided to ethers.js by Alchemy to be used by the -// default provider, but it is recommended that for your own -// production environments, that you acquire your own API key at: -// https://dashboard.alchemyapi.io -var defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"; -var AlchemyWebSocketProvider = /** @class */ (function (_super) { - __extends(AlchemyWebSocketProvider, _super); - function AlchemyWebSocketProvider(network, apiKey) { - var _this = this; - var provider = new AlchemyProvider(network, apiKey); - var url = provider.connection.url.replace(/^http/i, "ws") - .replace(".alchemyapi.", ".ws.alchemyapi."); - _this = _super.call(this, url, provider.network) || this; - (0, properties_1.defineReadOnly)(_this, "apiKey", provider.apiKey); - return _this; - } - AlchemyWebSocketProvider.prototype.isCommunityResource = function () { - return (this.apiKey === defaultApiKey); - }; - return AlchemyWebSocketProvider; -}(websocket_provider_1.WebSocketProvider)); -exports.AlchemyWebSocketProvider = AlchemyWebSocketProvider; -var AlchemyProvider = /** @class */ (function (_super) { - __extends(AlchemyProvider, _super); - function AlchemyProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - AlchemyProvider.getWebSocketProvider = function (network, apiKey) { - return new AlchemyWebSocketProvider(network, apiKey); - }; - AlchemyProvider.getApiKey = function (apiKey) { - if (apiKey == null) { - return defaultApiKey; - } - if (apiKey && typeof (apiKey) !== "string") { - logger.throwArgumentError("invalid apiKey", "apiKey", apiKey); - } - return apiKey; - }; - AlchemyProvider.getUrl = function (network, apiKey) { - var host = null; - switch (network.name) { - case "homestead": - host = "eth-mainnet.alchemyapi.io/v2/"; - break; - case "ropsten": - host = "eth-ropsten.alchemyapi.io/v2/"; - break; - case "rinkeby": - host = "eth-rinkeby.alchemyapi.io/v2/"; - break; - case "goerli": - host = "eth-goerli.alchemyapi.io/v2/"; - break; - case "kovan": - host = "eth-kovan.alchemyapi.io/v2/"; - break; - case "matic": - host = "polygon-mainnet.g.alchemy.com/v2/"; - break; - case "maticmum": - host = "polygon-mumbai.g.alchemy.com/v2/"; - break; - default: - logger.throwArgumentError("unsupported network", "network", arguments[0]); - } - return { - allowGzip: true, - url: ("https:/" + "/" + host + apiKey), - throttleCallback: function (attempt, url) { - if (apiKey === defaultApiKey) { - (0, formatter_1.showThrottleMessage)(); - } - return Promise.resolve(true); - } - }; - }; - AlchemyProvider.prototype.isCommunityResource = function () { - return (this.apiKey === defaultApiKey); - }; - return AlchemyProvider; -}(url_json_rpc_provider_1.UrlJsonRpcProvider)); -exports.AlchemyProvider = AlchemyProvider; - -},{"./_version":64,"./formatter":72,"./url-json-rpc-provider":79,"./websocket-provider":81,"@ethersproject/logger":57,"@ethersproject/properties":63}],66:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BaseProvider = exports.Resolver = exports.Event = void 0; -var abstract_provider_1 = require("@ethersproject/abstract-provider"); -var basex_1 = require("@ethersproject/basex"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var constants_1 = require("@ethersproject/constants"); -var hash_1 = require("@ethersproject/hash"); -var networks_1 = require("@ethersproject/networks"); -var properties_1 = require("@ethersproject/properties"); -var sha2_1 = require("@ethersproject/sha2"); -var strings_1 = require("@ethersproject/strings"); -var web_1 = require("@ethersproject/web"); -var bech32_1 = __importDefault(require("bech32")); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var formatter_1 = require("./formatter"); -////////////////////////////// -// Event Serializeing -function checkTopic(topic) { - if (topic == null) { - return "null"; - } - if ((0, bytes_1.hexDataLength)(topic) !== 32) { - logger.throwArgumentError("invalid topic", "topic", topic); - } - return topic.toLowerCase(); -} -function serializeTopics(topics) { - // Remove trailing null AND-topics; they are redundant - topics = topics.slice(); - while (topics.length > 0 && topics[topics.length - 1] == null) { - topics.pop(); - } - return topics.map(function (topic) { - if (Array.isArray(topic)) { - // Only track unique OR-topics - var unique_1 = {}; - topic.forEach(function (topic) { - unique_1[checkTopic(topic)] = true; - }); - // The order of OR-topics does not matter - var sorted = Object.keys(unique_1); - sorted.sort(); - return sorted.join("|"); - } - else { - return checkTopic(topic); - } - }).join("&"); -} -function deserializeTopics(data) { - if (data === "") { - return []; - } - return data.split(/&/g).map(function (topic) { - if (topic === "") { - return []; - } - var comps = topic.split("|").map(function (topic) { - return ((topic === "null") ? null : topic); - }); - return ((comps.length === 1) ? comps[0] : comps); - }); -} -function getEventTag(eventName) { - if (typeof (eventName) === "string") { - eventName = eventName.toLowerCase(); - if ((0, bytes_1.hexDataLength)(eventName) === 32) { - return "tx:" + eventName; - } - if (eventName.indexOf(":") === -1) { - return eventName; - } - } - else if (Array.isArray(eventName)) { - return "filter:*:" + serializeTopics(eventName); - } - else if (abstract_provider_1.ForkEvent.isForkEvent(eventName)) { - logger.warn("not implemented"); - throw new Error("not implemented"); - } - else if (eventName && typeof (eventName) === "object") { - return "filter:" + (eventName.address || "*") + ":" + serializeTopics(eventName.topics || []); - } - throw new Error("invalid event - " + eventName); -} -////////////////////////////// -// Helper Object -function getTime() { - return (new Date()).getTime(); -} -function stall(duration) { - return new Promise(function (resolve) { - setTimeout(resolve, duration); - }); -} -////////////////////////////// -// Provider Object -/** - * EventType - * - "block" - * - "poll" - * - "didPoll" - * - "pending" - * - "error" - * - "network" - * - filter - * - topics array - * - transaction hash - */ -var PollableEvents = ["block", "network", "pending", "poll"]; -var Event = /** @class */ (function () { - function Event(tag, listener, once) { - (0, properties_1.defineReadOnly)(this, "tag", tag); - (0, properties_1.defineReadOnly)(this, "listener", listener); - (0, properties_1.defineReadOnly)(this, "once", once); - } - Object.defineProperty(Event.prototype, "event", { - get: function () { - switch (this.type) { - case "tx": - return this.hash; - case "filter": - return this.filter; - } - return this.tag; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event.prototype, "type", { - get: function () { - return this.tag.split(":")[0]; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event.prototype, "hash", { - get: function () { - var comps = this.tag.split(":"); - if (comps[0] !== "tx") { - return null; - } - return comps[1]; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Event.prototype, "filter", { - get: function () { - var comps = this.tag.split(":"); - if (comps[0] !== "filter") { - return null; - } - var address = comps[1]; - var topics = deserializeTopics(comps[2]); - var filter = {}; - if (topics.length > 0) { - filter.topics = topics; - } - if (address && address !== "*") { - filter.address = address; - } - return filter; - }, - enumerable: false, - configurable: true - }); - Event.prototype.pollable = function () { - return (this.tag.indexOf(":") >= 0 || PollableEvents.indexOf(this.tag) >= 0); - }; - return Event; -}()); -exports.Event = Event; -; -// https://github.com/satoshilabs/slips/blob/master/slip-0044.md -var coinInfos = { - "0": { symbol: "btc", p2pkh: 0x00, p2sh: 0x05, prefix: "bc" }, - "2": { symbol: "ltc", p2pkh: 0x30, p2sh: 0x32, prefix: "ltc" }, - "3": { symbol: "doge", p2pkh: 0x1e, p2sh: 0x16 }, - "60": { symbol: "eth", ilk: "eth" }, - "61": { symbol: "etc", ilk: "eth" }, - "700": { symbol: "xdai", ilk: "eth" }, -}; -function bytes32ify(value) { - return (0, bytes_1.hexZeroPad)(bignumber_1.BigNumber.from(value).toHexString(), 32); -} -// Compute the Base58Check encoded data (checksum is first 4 bytes of sha256d) -function base58Encode(data) { - return basex_1.Base58.encode((0, bytes_1.concat)([data, (0, bytes_1.hexDataSlice)((0, sha2_1.sha256)((0, sha2_1.sha256)(data)), 0, 4)])); -} -var matchers = [ - new RegExp("^(https):/\/(.*)$", "i"), - new RegExp("^(data):(.*)$", "i"), - new RegExp("^(ipfs):/\/(.*)$", "i"), - new RegExp("^eip155:[0-9]+/(erc[0-9]+):(.*)$", "i"), -]; -function _parseString(result) { - try { - return (0, strings_1.toUtf8String)(_parseBytes(result)); - } - catch (error) { } - return null; -} -function _parseBytes(result) { - if (result === "0x") { - return null; - } - var offset = bignumber_1.BigNumber.from((0, bytes_1.hexDataSlice)(result, 0, 32)).toNumber(); - var length = bignumber_1.BigNumber.from((0, bytes_1.hexDataSlice)(result, offset, offset + 32)).toNumber(); - return (0, bytes_1.hexDataSlice)(result, offset + 32, offset + 32 + length); -} -var Resolver = /** @class */ (function () { - // The resolvedAddress is only for creating a ReverseLookup resolver - function Resolver(provider, address, name, resolvedAddress) { - (0, properties_1.defineReadOnly)(this, "provider", provider); - (0, properties_1.defineReadOnly)(this, "name", name); - (0, properties_1.defineReadOnly)(this, "address", provider.formatter.address(address)); - (0, properties_1.defineReadOnly)(this, "_resolvedAddress", resolvedAddress); - } - Resolver.prototype._fetchBytes = function (selector, parameters) { - return __awaiter(this, void 0, void 0, function () { - var tx, _a, error_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - tx = { - to: this.address, - data: (0, bytes_1.hexConcat)([selector, (0, hash_1.namehash)(this.name), (parameters || "0x")]) - }; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - _a = _parseBytes; - return [4 /*yield*/, this.provider.call(tx)]; - case 2: return [2 /*return*/, _a.apply(void 0, [_b.sent()])]; - case 3: - error_1 = _b.sent(); - if (error_1.code === logger_1.Logger.errors.CALL_EXCEPTION) { - return [2 /*return*/, null]; - } - return [2 /*return*/, null]; - case 4: return [2 /*return*/]; - } - }); - }); - }; - Resolver.prototype._getAddress = function (coinType, hexBytes) { - var coinInfo = coinInfos[String(coinType)]; - if (coinInfo == null) { - logger.throwError("unsupported coin type: " + coinType, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "getAddress(" + coinType + ")" - }); - } - if (coinInfo.ilk === "eth") { - return this.provider.formatter.address(hexBytes); - } - var bytes = (0, bytes_1.arrayify)(hexBytes); - // P2PKH: OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG - if (coinInfo.p2pkh != null) { - var p2pkh = hexBytes.match(/^0x76a9([0-9a-f][0-9a-f])([0-9a-f]*)88ac$/); - if (p2pkh) { - var length_1 = parseInt(p2pkh[1], 16); - if (p2pkh[2].length === length_1 * 2 && length_1 >= 1 && length_1 <= 75) { - return base58Encode((0, bytes_1.concat)([[coinInfo.p2pkh], ("0x" + p2pkh[2])])); - } - } - } - // P2SH: OP_HASH160 OP_EQUAL - if (coinInfo.p2sh != null) { - var p2sh = hexBytes.match(/^0xa9([0-9a-f][0-9a-f])([0-9a-f]*)87$/); - if (p2sh) { - var length_2 = parseInt(p2sh[1], 16); - if (p2sh[2].length === length_2 * 2 && length_2 >= 1 && length_2 <= 75) { - return base58Encode((0, bytes_1.concat)([[coinInfo.p2sh], ("0x" + p2sh[2])])); - } - } - } - // Bech32 - if (coinInfo.prefix != null) { - var length_3 = bytes[1]; - // https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki#witness-program - var version_1 = bytes[0]; - if (version_1 === 0x00) { - if (length_3 !== 20 && length_3 !== 32) { - version_1 = -1; - } - } - else { - version_1 = -1; - } - if (version_1 >= 0 && bytes.length === 2 + length_3 && length_3 >= 1 && length_3 <= 75) { - var words = bech32_1.default.toWords(bytes.slice(2)); - words.unshift(version_1); - return bech32_1.default.encode(coinInfo.prefix, words); - } - } - return null; - }; - Resolver.prototype.getAddress = function (coinType) { - return __awaiter(this, void 0, void 0, function () { - var transaction, hexBytes_1, error_2, hexBytes, address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (coinType == null) { - coinType = 60; - } - if (!(coinType === 60)) return [3 /*break*/, 4]; - _a.label = 1; - case 1: - _a.trys.push([1, 3, , 4]); - transaction = { - to: this.address, - data: ("0x3b3b57de" + (0, hash_1.namehash)(this.name).substring(2)) - }; - return [4 /*yield*/, this.provider.call(transaction)]; - case 2: - hexBytes_1 = _a.sent(); - // No address - if (hexBytes_1 === "0x" || hexBytes_1 === constants_1.HashZero) { - return [2 /*return*/, null]; - } - return [2 /*return*/, this.provider.formatter.callAddress(hexBytes_1)]; - case 3: - error_2 = _a.sent(); - if (error_2.code === logger_1.Logger.errors.CALL_EXCEPTION) { - return [2 /*return*/, null]; - } - throw error_2; - case 4: return [4 /*yield*/, this._fetchBytes("0xf1cb7e06", bytes32ify(coinType))]; - case 5: - hexBytes = _a.sent(); - // No address - if (hexBytes == null || hexBytes === "0x") { - return [2 /*return*/, null]; - } - address = this._getAddress(coinType, hexBytes); - if (address == null) { - logger.throwError("invalid or unsupported coin data", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "getAddress(" + coinType + ")", - coinType: coinType, - data: hexBytes - }); - } - return [2 /*return*/, address]; - } - }); - }); - }; - Resolver.prototype.getAvatar = function () { - return __awaiter(this, void 0, void 0, function () { - var linkage, avatar, i, match, _a, selector, owner, _b, comps, addr, tokenId, tokenOwner, _c, _d, balance, _e, _f, tx, metadataUrl, _g, metadata, error_3; - return __generator(this, function (_h) { - switch (_h.label) { - case 0: - linkage = []; - _h.label = 1; - case 1: - _h.trys.push([1, 19, , 20]); - return [4 /*yield*/, this.getText("avatar")]; - case 2: - avatar = _h.sent(); - if (avatar == null) { - return [2 /*return*/, null]; - } - i = 0; - _h.label = 3; - case 3: - if (!(i < matchers.length)) return [3 /*break*/, 18]; - match = avatar.match(matchers[i]); - if (match == null) { - return [3 /*break*/, 17]; - } - _a = match[1]; - switch (_a) { - case "https": return [3 /*break*/, 4]; - case "data": return [3 /*break*/, 5]; - case "ipfs": return [3 /*break*/, 6]; - case "erc721": return [3 /*break*/, 7]; - case "erc1155": return [3 /*break*/, 7]; - } - return [3 /*break*/, 17]; - case 4: - linkage.push({ type: "url", content: avatar }); - return [2 /*return*/, { linkage: linkage, url: avatar }]; - case 5: - linkage.push({ type: "data", content: avatar }); - return [2 /*return*/, { linkage: linkage, url: avatar }]; - case 6: - linkage.push({ type: "ipfs", content: avatar }); - return [2 /*return*/, { linkage: linkage, url: "https://gateway.ipfs.io/ipfs/" + avatar.substring(7) }]; - case 7: - selector = (match[1] === "erc721") ? "0xc87b56dd" : "0x0e89341c"; - linkage.push({ type: match[1], content: avatar }); - _b = this._resolvedAddress; - if (_b) return [3 /*break*/, 9]; - return [4 /*yield*/, this.getAddress()]; - case 8: - _b = (_h.sent()); - _h.label = 9; - case 9: - owner = (_b); - comps = (match[2] || "").split("/"); - if (comps.length !== 2) { - return [2 /*return*/, null]; - } - return [4 /*yield*/, this.provider.formatter.address(comps[0])]; - case 10: - addr = _h.sent(); - tokenId = (0, bytes_1.hexZeroPad)(bignumber_1.BigNumber.from(comps[1]).toHexString(), 32); - if (!(match[1] === "erc721")) return [3 /*break*/, 12]; - _d = (_c = this.provider.formatter).callAddress; - return [4 /*yield*/, this.provider.call({ - to: addr, data: (0, bytes_1.hexConcat)(["0x6352211e", tokenId]) - })]; - case 11: - tokenOwner = _d.apply(_c, [_h.sent()]); - if (owner !== tokenOwner) { - return [2 /*return*/, null]; - } - linkage.push({ type: "owner", content: tokenOwner }); - return [3 /*break*/, 14]; - case 12: - if (!(match[1] === "erc1155")) return [3 /*break*/, 14]; - _f = (_e = bignumber_1.BigNumber).from; - return [4 /*yield*/, this.provider.call({ - to: addr, data: (0, bytes_1.hexConcat)(["0x00fdd58e", (0, bytes_1.hexZeroPad)(owner, 32), tokenId]) - })]; - case 13: - balance = _f.apply(_e, [_h.sent()]); - if (balance.isZero()) { - return [2 /*return*/, null]; - } - linkage.push({ type: "balance", content: balance.toString() }); - _h.label = 14; - case 14: - tx = { - to: this.provider.formatter.address(comps[0]), - data: (0, bytes_1.hexConcat)([selector, tokenId]) - }; - _g = _parseString; - return [4 /*yield*/, this.provider.call(tx)]; - case 15: - metadataUrl = _g.apply(void 0, [_h.sent()]); - if (metadataUrl == null) { - return [2 /*return*/, null]; - } - linkage.push({ type: "metadata-url", content: metadataUrl }); - // ERC-1155 allows a generic {id} in the URL - if (match[1] === "erc1155") { - metadataUrl = metadataUrl.replace("{id}", tokenId.substring(2)); - } - return [4 /*yield*/, (0, web_1.fetchJson)(metadataUrl)]; - case 16: - metadata = _h.sent(); - // Pull the image URL out - if (!metadata || typeof (metadata.image) !== "string" || !metadata.image.match(/^https:\/\//i)) { - return [2 /*return*/, null]; - } - linkage.push({ type: "metadata", content: JSON.stringify(metadata) }); - linkage.push({ type: "url", content: metadata.image }); - return [2 /*return*/, { linkage: linkage, url: metadata.image }]; - case 17: - i++; - return [3 /*break*/, 3]; - case 18: return [3 /*break*/, 20]; - case 19: - error_3 = _h.sent(); - return [3 /*break*/, 20]; - case 20: return [2 /*return*/, null]; - } - }); - }); - }; - Resolver.prototype.getContentHash = function () { - return __awaiter(this, void 0, void 0, function () { - var hexBytes, ipfs, length_4, swarm; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this._fetchBytes("0xbc1c58d1")]; - case 1: - hexBytes = _a.sent(); - // No contenthash - if (hexBytes == null || hexBytes === "0x") { - return [2 /*return*/, null]; - } - ipfs = hexBytes.match(/^0xe3010170(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/); - if (ipfs) { - length_4 = parseInt(ipfs[3], 16); - if (ipfs[4].length === length_4 * 2) { - return [2 /*return*/, "ipfs:/\/" + basex_1.Base58.encode("0x" + ipfs[1])]; - } - } - swarm = hexBytes.match(/^0xe40101fa011b20([0-9a-f]*)$/); - if (swarm) { - if (swarm[1].length === (32 * 2)) { - return [2 /*return*/, "bzz:/\/" + swarm[1]]; - } - } - return [2 /*return*/, logger.throwError("invalid or unsupported content hash data", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "getContentHash()", - data: hexBytes - })]; - } - }); - }); - }; - Resolver.prototype.getText = function (key) { - return __awaiter(this, void 0, void 0, function () { - var keyBytes, hexBytes; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - keyBytes = (0, strings_1.toUtf8Bytes)(key); - // The nodehash consumes the first slot, so the string pointer targets - // offset 64, with the length at offset 64 and data starting at offset 96 - keyBytes = (0, bytes_1.concat)([bytes32ify(64), bytes32ify(keyBytes.length), keyBytes]); - // Pad to word-size (32 bytes) - if ((keyBytes.length % 32) !== 0) { - keyBytes = (0, bytes_1.concat)([keyBytes, (0, bytes_1.hexZeroPad)("0x", 32 - (key.length % 32))]); - } - return [4 /*yield*/, this._fetchBytes("0x59d1d43c", (0, bytes_1.hexlify)(keyBytes))]; - case 1: - hexBytes = _a.sent(); - if (hexBytes == null || hexBytes === "0x") { - return [2 /*return*/, null]; - } - return [2 /*return*/, (0, strings_1.toUtf8String)(hexBytes)]; - } - }); - }); - }; - return Resolver; -}()); -exports.Resolver = Resolver; -var defaultFormatter = null; -var nextPollId = 1; -var BaseProvider = /** @class */ (function (_super) { - __extends(BaseProvider, _super); - /** - * ready - * - * A Promise that resolves only once the provider is ready. - * - * Sub-classes that call the super with a network without a chainId - * MUST set this. Standard named networks have a known chainId. - * - */ - function BaseProvider(network) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, abstract_provider_1.Provider); - _this = _super.call(this) || this; - // Events being listened to - _this._events = []; - _this._emitted = { block: -2 }; - _this.formatter = _newTarget.getFormatter(); - // If network is any, this Provider allows the underlying - // network to change dynamically, and we auto-detect the - // current network - (0, properties_1.defineReadOnly)(_this, "anyNetwork", (network === "any")); - if (_this.anyNetwork) { - network = _this.detectNetwork(); - } - if (network instanceof Promise) { - _this._networkPromise = network; - // Squash any "unhandled promise" errors; that do not need to be handled - network.catch(function (error) { }); - // Trigger initial network setting (async) - _this._ready().catch(function (error) { }); - } - else { - var knownNetwork = (0, properties_1.getStatic)(_newTarget, "getNetwork")(network); - if (knownNetwork) { - (0, properties_1.defineReadOnly)(_this, "_network", knownNetwork); - _this.emit("network", knownNetwork, null); - } - else { - logger.throwArgumentError("invalid network", "network", network); - } - } - _this._maxInternalBlockNumber = -1024; - _this._lastBlockNumber = -2; - _this._pollingInterval = 4000; - _this._fastQueryDate = 0; - return _this; - } - BaseProvider.prototype._ready = function () { - return __awaiter(this, void 0, void 0, function () { - var network, error_4; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(this._network == null)) return [3 /*break*/, 7]; - network = null; - if (!this._networkPromise) return [3 /*break*/, 4]; - _a.label = 1; - case 1: - _a.trys.push([1, 3, , 4]); - return [4 /*yield*/, this._networkPromise]; - case 2: - network = _a.sent(); - return [3 /*break*/, 4]; - case 3: - error_4 = _a.sent(); - return [3 /*break*/, 4]; - case 4: - if (!(network == null)) return [3 /*break*/, 6]; - return [4 /*yield*/, this.detectNetwork()]; - case 5: - network = _a.sent(); - _a.label = 6; - case 6: - // This should never happen; every Provider sub-class should have - // suggested a network by here (or have thrown). - if (!network) { - logger.throwError("no network detected", logger_1.Logger.errors.UNKNOWN_ERROR, {}); - } - // Possible this call stacked so do not call defineReadOnly again - if (this._network == null) { - if (this.anyNetwork) { - this._network = network; - } - else { - (0, properties_1.defineReadOnly)(this, "_network", network); - } - this.emit("network", network, null); - } - _a.label = 7; - case 7: return [2 /*return*/, this._network]; - } - }); - }); - }; - Object.defineProperty(BaseProvider.prototype, "ready", { - // This will always return the most recently established network. - // For "any", this can change (a "network" event is emitted before - // any change is reflected); otherwise this cannot change - get: function () { - var _this = this; - return (0, web_1.poll)(function () { - return _this._ready().then(function (network) { - return network; - }, function (error) { - // If the network isn't running yet, we will wait - if (error.code === logger_1.Logger.errors.NETWORK_ERROR && error.event === "noNetwork") { - return undefined; - } - throw error; - }); - }); - }, - enumerable: false, - configurable: true - }); - // @TODO: Remove this and just create a singleton formatter - BaseProvider.getFormatter = function () { - if (defaultFormatter == null) { - defaultFormatter = new formatter_1.Formatter(); - } - return defaultFormatter; - }; - // @TODO: Remove this and just use getNetwork - BaseProvider.getNetwork = function (network) { - return (0, networks_1.getNetwork)((network == null) ? "homestead" : network); - }; - // Fetches the blockNumber, but will reuse any result that is less - // than maxAge old or has been requested since the last request - BaseProvider.prototype._getInternalBlockNumber = function (maxAge) { - return __awaiter(this, void 0, void 0, function () { - var internalBlockNumber, result, error_5, reqTime, checkInternalBlockNumber; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this._ready()]; - case 1: - _a.sent(); - if (!(maxAge > 0)) return [3 /*break*/, 7]; - _a.label = 2; - case 2: - if (!this._internalBlockNumber) return [3 /*break*/, 7]; - internalBlockNumber = this._internalBlockNumber; - _a.label = 3; - case 3: - _a.trys.push([3, 5, , 6]); - return [4 /*yield*/, internalBlockNumber]; - case 4: - result = _a.sent(); - if ((getTime() - result.respTime) <= maxAge) { - return [2 /*return*/, result.blockNumber]; - } - // Too old; fetch a new value - return [3 /*break*/, 7]; - case 5: - error_5 = _a.sent(); - // The fetch rejected; if we are the first to get the - // rejection, drop through so we replace it with a new - // fetch; all others blocked will then get that fetch - // which won't match the one they "remembered" and loop - if (this._internalBlockNumber === internalBlockNumber) { - return [3 /*break*/, 7]; - } - return [3 /*break*/, 6]; - case 6: return [3 /*break*/, 2]; - case 7: - reqTime = getTime(); - checkInternalBlockNumber = (0, properties_1.resolveProperties)({ - blockNumber: this.perform("getBlockNumber", {}), - networkError: this.getNetwork().then(function (network) { return (null); }, function (error) { return (error); }) - }).then(function (_a) { - var blockNumber = _a.blockNumber, networkError = _a.networkError; - if (networkError) { - // Unremember this bad internal block number - if (_this._internalBlockNumber === checkInternalBlockNumber) { - _this._internalBlockNumber = null; - } - throw networkError; - } - var respTime = getTime(); - blockNumber = bignumber_1.BigNumber.from(blockNumber).toNumber(); - if (blockNumber < _this._maxInternalBlockNumber) { - blockNumber = _this._maxInternalBlockNumber; - } - _this._maxInternalBlockNumber = blockNumber; - _this._setFastBlockNumber(blockNumber); // @TODO: Still need this? - return { blockNumber: blockNumber, reqTime: reqTime, respTime: respTime }; - }); - this._internalBlockNumber = checkInternalBlockNumber; - // Swallow unhandled exceptions; if needed they are handled else where - checkInternalBlockNumber.catch(function (error) { - // Don't null the dead (rejected) fetch, if it has already been updated - if (_this._internalBlockNumber === checkInternalBlockNumber) { - _this._internalBlockNumber = null; - } - }); - return [4 /*yield*/, checkInternalBlockNumber]; - case 8: return [2 /*return*/, (_a.sent()).blockNumber]; - } - }); - }); - }; - BaseProvider.prototype.poll = function () { - return __awaiter(this, void 0, void 0, function () { - var pollId, runners, blockNumber, error_6, i; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - pollId = nextPollId++; - runners = []; - blockNumber = null; - _a.label = 1; - case 1: - _a.trys.push([1, 3, , 4]); - return [4 /*yield*/, this._getInternalBlockNumber(100 + this.pollingInterval / 2)]; - case 2: - blockNumber = _a.sent(); - return [3 /*break*/, 4]; - case 3: - error_6 = _a.sent(); - this.emit("error", error_6); - return [2 /*return*/]; - case 4: - this._setFastBlockNumber(blockNumber); - // Emit a poll event after we have the latest (fast) block number - this.emit("poll", pollId, blockNumber); - // If the block has not changed, meh. - if (blockNumber === this._lastBlockNumber) { - this.emit("didPoll", pollId); - return [2 /*return*/]; - } - // First polling cycle, trigger a "block" events - if (this._emitted.block === -2) { - this._emitted.block = blockNumber - 1; - } - if (Math.abs((this._emitted.block) - blockNumber) > 1000) { - logger.warn("network block skew detected; skipping block events (emitted=" + this._emitted.block + " blockNumber" + blockNumber + ")"); - this.emit("error", logger.makeError("network block skew detected", logger_1.Logger.errors.NETWORK_ERROR, { - blockNumber: blockNumber, - event: "blockSkew", - previousBlockNumber: this._emitted.block - })); - this.emit("block", blockNumber); - } - else { - // Notify all listener for each block that has passed - for (i = this._emitted.block + 1; i <= blockNumber; i++) { - this.emit("block", i); - } - } - // The emitted block was updated, check for obsolete events - if (this._emitted.block !== blockNumber) { - this._emitted.block = blockNumber; - Object.keys(this._emitted).forEach(function (key) { - // The block event does not expire - if (key === "block") { - return; - } - // The block we were at when we emitted this event - var eventBlockNumber = _this._emitted[key]; - // We cannot garbage collect pending transactions or blocks here - // They should be garbage collected by the Provider when setting - // "pending" events - if (eventBlockNumber === "pending") { - return; - } - // Evict any transaction hashes or block hashes over 12 blocks - // old, since they should not return null anyways - if (blockNumber - eventBlockNumber > 12) { - delete _this._emitted[key]; - } - }); - } - // First polling cycle - if (this._lastBlockNumber === -2) { - this._lastBlockNumber = blockNumber - 1; - } - // Find all transaction hashes we are waiting on - this._events.forEach(function (event) { - switch (event.type) { - case "tx": { - var hash_2 = event.hash; - var runner = _this.getTransactionReceipt(hash_2).then(function (receipt) { - if (!receipt || receipt.blockNumber == null) { - return null; - } - _this._emitted["t:" + hash_2] = receipt.blockNumber; - _this.emit(hash_2, receipt); - return null; - }).catch(function (error) { _this.emit("error", error); }); - runners.push(runner); - break; - } - case "filter": { - var filter_1 = event.filter; - filter_1.fromBlock = _this._lastBlockNumber + 1; - filter_1.toBlock = blockNumber; - var runner = _this.getLogs(filter_1).then(function (logs) { - if (logs.length === 0) { - return; - } - logs.forEach(function (log) { - _this._emitted["b:" + log.blockHash] = log.blockNumber; - _this._emitted["t:" + log.transactionHash] = log.blockNumber; - _this.emit(filter_1, log); - }); - }).catch(function (error) { _this.emit("error", error); }); - runners.push(runner); - break; - } - } - }); - this._lastBlockNumber = blockNumber; - // Once all events for this loop have been processed, emit "didPoll" - Promise.all(runners).then(function () { - _this.emit("didPoll", pollId); - }).catch(function (error) { _this.emit("error", error); }); - return [2 /*return*/]; - } - }); - }); - }; - // Deprecated; do not use this - BaseProvider.prototype.resetEventsBlock = function (blockNumber) { - this._lastBlockNumber = blockNumber - 1; - if (this.polling) { - this.poll(); - } - }; - Object.defineProperty(BaseProvider.prototype, "network", { - get: function () { - return this._network; - }, - enumerable: false, - configurable: true - }); - // This method should query the network if the underlying network - // can change, such as when connected to a JSON-RPC backend - BaseProvider.prototype.detectNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, logger.throwError("provider does not support network detection", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "provider.detectNetwork" - })]; - }); - }); - }; - BaseProvider.prototype.getNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - var network, currentNetwork, error; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this._ready()]; - case 1: - network = _a.sent(); - return [4 /*yield*/, this.detectNetwork()]; - case 2: - currentNetwork = _a.sent(); - if (!(network.chainId !== currentNetwork.chainId)) return [3 /*break*/, 5]; - if (!this.anyNetwork) return [3 /*break*/, 4]; - this._network = currentNetwork; - // Reset all internal block number guards and caches - this._lastBlockNumber = -2; - this._fastBlockNumber = null; - this._fastBlockNumberPromise = null; - this._fastQueryDate = 0; - this._emitted.block = -2; - this._maxInternalBlockNumber = -1024; - this._internalBlockNumber = null; - // The "network" event MUST happen before this method resolves - // so any events have a chance to unregister, so we stall an - // additional event loop before returning from /this/ call - this.emit("network", currentNetwork, network); - return [4 /*yield*/, stall(0)]; - case 3: - _a.sent(); - return [2 /*return*/, this._network]; - case 4: - error = logger.makeError("underlying network changed", logger_1.Logger.errors.NETWORK_ERROR, { - event: "changed", - network: network, - detectedNetwork: currentNetwork - }); - this.emit("error", error); - throw error; - case 5: return [2 /*return*/, network]; - } - }); - }); - }; - Object.defineProperty(BaseProvider.prototype, "blockNumber", { - get: function () { - var _this = this; - this._getInternalBlockNumber(100 + this.pollingInterval / 2).then(function (blockNumber) { - _this._setFastBlockNumber(blockNumber); - }, function (error) { }); - return (this._fastBlockNumber != null) ? this._fastBlockNumber : -1; - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BaseProvider.prototype, "polling", { - get: function () { - return (this._poller != null); - }, - set: function (value) { - var _this = this; - if (value && !this._poller) { - this._poller = setInterval(function () { _this.poll(); }, this.pollingInterval); - if (!this._bootstrapPoll) { - this._bootstrapPoll = setTimeout(function () { - _this.poll(); - // We block additional polls until the polling interval - // is done, to prevent overwhelming the poll function - _this._bootstrapPoll = setTimeout(function () { - // If polling was disabled, something may require a poke - // since starting the bootstrap poll and it was disabled - if (!_this._poller) { - _this.poll(); - } - // Clear out the bootstrap so we can do another - _this._bootstrapPoll = null; - }, _this.pollingInterval); - }, 0); - } - } - else if (!value && this._poller) { - clearInterval(this._poller); - this._poller = null; - } - }, - enumerable: false, - configurable: true - }); - Object.defineProperty(BaseProvider.prototype, "pollingInterval", { - get: function () { - return this._pollingInterval; - }, - set: function (value) { - var _this = this; - if (typeof (value) !== "number" || value <= 0 || parseInt(String(value)) != value) { - throw new Error("invalid polling interval"); - } - this._pollingInterval = value; - if (this._poller) { - clearInterval(this._poller); - this._poller = setInterval(function () { _this.poll(); }, this._pollingInterval); - } - }, - enumerable: false, - configurable: true - }); - BaseProvider.prototype._getFastBlockNumber = function () { - var _this = this; - var now = getTime(); - // Stale block number, request a newer value - if ((now - this._fastQueryDate) > 2 * this._pollingInterval) { - this._fastQueryDate = now; - this._fastBlockNumberPromise = this.getBlockNumber().then(function (blockNumber) { - if (_this._fastBlockNumber == null || blockNumber > _this._fastBlockNumber) { - _this._fastBlockNumber = blockNumber; - } - return _this._fastBlockNumber; - }); - } - return this._fastBlockNumberPromise; - }; - BaseProvider.prototype._setFastBlockNumber = function (blockNumber) { - // Older block, maybe a stale request - if (this._fastBlockNumber != null && blockNumber < this._fastBlockNumber) { - return; - } - // Update the time we updated the blocknumber - this._fastQueryDate = getTime(); - // Newer block number, use it - if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) { - this._fastBlockNumber = blockNumber; - this._fastBlockNumberPromise = Promise.resolve(blockNumber); - } - }; - BaseProvider.prototype.waitForTransaction = function (transactionHash, confirmations, timeout) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this._waitForTransaction(transactionHash, (confirmations == null) ? 1 : confirmations, timeout || 0, null)]; - }); - }); - }; - BaseProvider.prototype._waitForTransaction = function (transactionHash, confirmations, timeout, replaceable) { - return __awaiter(this, void 0, void 0, function () { - var receipt; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getTransactionReceipt(transactionHash)]; - case 1: - receipt = _a.sent(); - // Receipt is already good - if ((receipt ? receipt.confirmations : 0) >= confirmations) { - return [2 /*return*/, receipt]; - } - // Poll until the receipt is good... - return [2 /*return*/, new Promise(function (resolve, reject) { - var cancelFuncs = []; - var done = false; - var alreadyDone = function () { - if (done) { - return true; - } - done = true; - cancelFuncs.forEach(function (func) { func(); }); - return false; - }; - var minedHandler = function (receipt) { - if (receipt.confirmations < confirmations) { - return; - } - if (alreadyDone()) { - return; - } - resolve(receipt); - }; - _this.on(transactionHash, minedHandler); - cancelFuncs.push(function () { _this.removeListener(transactionHash, minedHandler); }); - if (replaceable) { - var lastBlockNumber_1 = replaceable.startBlock; - var scannedBlock_1 = null; - var replaceHandler_1 = function (blockNumber) { return __awaiter(_this, void 0, void 0, function () { - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (done) { - return [2 /*return*/]; - } - // Wait 1 second; this is only used in the case of a fault, so - // we will trade off a little bit of latency for more consistent - // results and fewer JSON-RPC calls - return [4 /*yield*/, stall(1000)]; - case 1: - // Wait 1 second; this is only used in the case of a fault, so - // we will trade off a little bit of latency for more consistent - // results and fewer JSON-RPC calls - _a.sent(); - this.getTransactionCount(replaceable.from).then(function (nonce) { return __awaiter(_this, void 0, void 0, function () { - var mined, block, ti, tx, receipt_1, reason; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (done) { - return [2 /*return*/]; - } - if (!(nonce <= replaceable.nonce)) return [3 /*break*/, 1]; - lastBlockNumber_1 = blockNumber; - return [3 /*break*/, 9]; - case 1: return [4 /*yield*/, this.getTransaction(transactionHash)]; - case 2: - mined = _a.sent(); - if (mined && mined.blockNumber != null) { - return [2 /*return*/]; - } - // First time scanning. We start a little earlier for some - // wiggle room here to handle the eventually consistent nature - // of blockchain (e.g. the getTransactionCount was for a - // different block) - if (scannedBlock_1 == null) { - scannedBlock_1 = lastBlockNumber_1 - 3; - if (scannedBlock_1 < replaceable.startBlock) { - scannedBlock_1 = replaceable.startBlock; - } - } - _a.label = 3; - case 3: - if (!(scannedBlock_1 <= blockNumber)) return [3 /*break*/, 9]; - if (done) { - return [2 /*return*/]; - } - return [4 /*yield*/, this.getBlockWithTransactions(scannedBlock_1)]; - case 4: - block = _a.sent(); - ti = 0; - _a.label = 5; - case 5: - if (!(ti < block.transactions.length)) return [3 /*break*/, 8]; - tx = block.transactions[ti]; - // Successfully mined! - if (tx.hash === transactionHash) { - return [2 /*return*/]; - } - if (!(tx.from === replaceable.from && tx.nonce === replaceable.nonce)) return [3 /*break*/, 7]; - if (done) { - return [2 /*return*/]; - } - return [4 /*yield*/, this.waitForTransaction(tx.hash, confirmations)]; - case 6: - receipt_1 = _a.sent(); - // Already resolved or rejected (prolly a timeout) - if (alreadyDone()) { - return [2 /*return*/]; - } - reason = "replaced"; - if (tx.data === replaceable.data && tx.to === replaceable.to && tx.value.eq(replaceable.value)) { - reason = "repriced"; - } - else if (tx.data === "0x" && tx.from === tx.to && tx.value.isZero()) { - reason = "cancelled"; - } - // Explain why we were replaced - reject(logger.makeError("transaction was replaced", logger_1.Logger.errors.TRANSACTION_REPLACED, { - cancelled: (reason === "replaced" || reason === "cancelled"), - reason: reason, - replacement: this._wrapTransaction(tx), - hash: transactionHash, - receipt: receipt_1 - })); - return [2 /*return*/]; - case 7: - ti++; - return [3 /*break*/, 5]; - case 8: - scannedBlock_1++; - return [3 /*break*/, 3]; - case 9: - if (done) { - return [2 /*return*/]; - } - this.once("block", replaceHandler_1); - return [2 /*return*/]; - } - }); - }); }, function (error) { - if (done) { - return; - } - _this.once("block", replaceHandler_1); - }); - return [2 /*return*/]; - } - }); - }); }; - if (done) { - return; - } - _this.once("block", replaceHandler_1); - cancelFuncs.push(function () { - _this.removeListener("block", replaceHandler_1); - }); - } - if (typeof (timeout) === "number" && timeout > 0) { - var timer_1 = setTimeout(function () { - if (alreadyDone()) { - return; - } - reject(logger.makeError("timeout exceeded", logger_1.Logger.errors.TIMEOUT, { timeout: timeout })); - }, timeout); - if (timer_1.unref) { - timer_1.unref(); - } - cancelFuncs.push(function () { clearTimeout(timer_1); }); - } - })]; - } - }); - }); - }; - BaseProvider.prototype.getBlockNumber = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this._getInternalBlockNumber(0)]; - }); - }); - }; - BaseProvider.prototype.getGasPrice = function () { - return __awaiter(this, void 0, void 0, function () { - var result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, this.perform("getGasPrice", {})]; - case 2: - result = _a.sent(); - try { - return [2 /*return*/, bignumber_1.BigNumber.from(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "getGasPrice", - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.getBalance = function (addressOrName, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - address: this._getAddress(addressOrName), - blockTag: this._getBlockTag(blockTag) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("getBalance", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, bignumber_1.BigNumber.from(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "getBalance", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.getTransactionCount = function (addressOrName, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - address: this._getAddress(addressOrName), - blockTag: this._getBlockTag(blockTag) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("getTransactionCount", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, bignumber_1.BigNumber.from(result).toNumber()]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "getTransactionCount", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.getCode = function (addressOrName, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - address: this._getAddress(addressOrName), - blockTag: this._getBlockTag(blockTag) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("getCode", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, (0, bytes_1.hexlify)(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "getCode", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.getStorageAt = function (addressOrName, position, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - address: this._getAddress(addressOrName), - blockTag: this._getBlockTag(blockTag), - position: Promise.resolve(position).then(function (p) { return (0, bytes_1.hexValue)(p); }) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("getStorageAt", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, (0, bytes_1.hexlify)(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "getStorageAt", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - // This should be called by any subclass wrapping a TransactionResponse - BaseProvider.prototype._wrapTransaction = function (tx, hash, startBlock) { - var _this = this; - if (hash != null && (0, bytes_1.hexDataLength)(hash) !== 32) { - throw new Error("invalid response - sendTransaction"); - } - var result = tx; - // Check the hash we expect is the same as the hash the server reported - if (hash != null && tx.hash !== hash) { - logger.throwError("Transaction hash mismatch from Provider.sendTransaction.", logger_1.Logger.errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash }); - } - result.wait = function (confirms, timeout) { return __awaiter(_this, void 0, void 0, function () { - var replacement, receipt; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (confirms == null) { - confirms = 1; - } - if (timeout == null) { - timeout = 0; - } - replacement = undefined; - if (confirms !== 0 && startBlock != null) { - replacement = { - data: tx.data, - from: tx.from, - nonce: tx.nonce, - to: tx.to, - value: tx.value, - startBlock: startBlock - }; - } - return [4 /*yield*/, this._waitForTransaction(tx.hash, confirms, timeout, replacement)]; - case 1: - receipt = _a.sent(); - if (receipt == null && confirms === 0) { - return [2 /*return*/, null]; - } - // No longer pending, allow the polling loop to garbage collect this - this._emitted["t:" + tx.hash] = receipt.blockNumber; - if (receipt.status === 0) { - logger.throwError("transaction failed", logger_1.Logger.errors.CALL_EXCEPTION, { - transactionHash: tx.hash, - transaction: tx, - receipt: receipt - }); - } - return [2 /*return*/, receipt]; - } - }); - }); }; - return result; - }; - BaseProvider.prototype.sendTransaction = function (signedTransaction) { - return __awaiter(this, void 0, void 0, function () { - var hexTx, tx, blockNumber, hash, error_7; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, Promise.resolve(signedTransaction).then(function (t) { return (0, bytes_1.hexlify)(t); })]; - case 2: - hexTx = _a.sent(); - tx = this.formatter.transaction(signedTransaction); - if (tx.confirmations == null) { - tx.confirmations = 0; - } - return [4 /*yield*/, this._getInternalBlockNumber(100 + 2 * this.pollingInterval)]; - case 3: - blockNumber = _a.sent(); - _a.label = 4; - case 4: - _a.trys.push([4, 6, , 7]); - return [4 /*yield*/, this.perform("sendTransaction", { signedTransaction: hexTx })]; - case 5: - hash = _a.sent(); - return [2 /*return*/, this._wrapTransaction(tx, hash, blockNumber)]; - case 6: - error_7 = _a.sent(); - error_7.transaction = tx; - error_7.transactionHash = tx.hash; - throw error_7; - case 7: return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype._getTransactionRequest = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var values, tx, _a, _b; - var _this = this; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: return [4 /*yield*/, transaction]; - case 1: - values = _c.sent(); - tx = {}; - ["from", "to"].forEach(function (key) { - if (values[key] == null) { - return; - } - tx[key] = Promise.resolve(values[key]).then(function (v) { return (v ? _this._getAddress(v) : null); }); - }); - ["gasLimit", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "value"].forEach(function (key) { - if (values[key] == null) { - return; - } - tx[key] = Promise.resolve(values[key]).then(function (v) { return (v ? bignumber_1.BigNumber.from(v) : null); }); - }); - ["type"].forEach(function (key) { - if (values[key] == null) { - return; - } - tx[key] = Promise.resolve(values[key]).then(function (v) { return ((v != null) ? v : null); }); - }); - if (values.accessList) { - tx.accessList = this.formatter.accessList(values.accessList); - } - ["data"].forEach(function (key) { - if (values[key] == null) { - return; - } - tx[key] = Promise.resolve(values[key]).then(function (v) { return (v ? (0, bytes_1.hexlify)(v) : null); }); - }); - _b = (_a = this.formatter).transactionRequest; - return [4 /*yield*/, (0, properties_1.resolveProperties)(tx)]; - case 2: return [2 /*return*/, _b.apply(_a, [_c.sent()])]; - } - }); - }); - }; - BaseProvider.prototype._getFilter = function (filter) { - return __awaiter(this, void 0, void 0, function () { - var result, _a, _b; - var _this = this; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: return [4 /*yield*/, filter]; - case 1: - filter = _c.sent(); - result = {}; - if (filter.address != null) { - result.address = this._getAddress(filter.address); - } - ["blockHash", "topics"].forEach(function (key) { - if (filter[key] == null) { - return; - } - result[key] = filter[key]; - }); - ["fromBlock", "toBlock"].forEach(function (key) { - if (filter[key] == null) { - return; - } - result[key] = _this._getBlockTag(filter[key]); - }); - _b = (_a = this.formatter).filter; - return [4 /*yield*/, (0, properties_1.resolveProperties)(result)]; - case 2: return [2 /*return*/, _b.apply(_a, [_c.sent()])]; - } - }); - }); - }; - BaseProvider.prototype.call = function (transaction, blockTag) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - transaction: this._getTransactionRequest(transaction), - blockTag: this._getBlockTag(blockTag) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("call", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, (0, bytes_1.hexlify)(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "call", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.estimateGas = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ - transaction: this._getTransactionRequest(transaction) - })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("estimateGas", params)]; - case 3: - result = _a.sent(); - try { - return [2 /*return*/, bignumber_1.BigNumber.from(result)]; - } - catch (error) { - return [2 /*return*/, logger.throwError("bad result from backend", logger_1.Logger.errors.SERVER_ERROR, { - method: "estimateGas", - params: params, - result: result, - error: error - })]; - } - return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype._getAddress = function (addressOrName) { - return __awaiter(this, void 0, void 0, function () { - var address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, addressOrName]; - case 1: - addressOrName = _a.sent(); - if (typeof (addressOrName) !== "string") { - logger.throwArgumentError("invalid address or ENS name", "name", addressOrName); - } - return [4 /*yield*/, this.resolveName(addressOrName)]; - case 2: - address = _a.sent(); - if (address == null) { - logger.throwError("ENS name not configured", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "resolveName(" + JSON.stringify(addressOrName) + ")" - }); - } - return [2 /*return*/, address]; - } - }); - }); - }; - BaseProvider.prototype._getBlock = function (blockHashOrBlockTag, includeTransactions) { - return __awaiter(this, void 0, void 0, function () { - var blockNumber, params, _a, error_8; - var _this = this; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _b.sent(); - return [4 /*yield*/, blockHashOrBlockTag]; - case 2: - blockHashOrBlockTag = _b.sent(); - blockNumber = -128; - params = { - includeTransactions: !!includeTransactions - }; - if (!(0, bytes_1.isHexString)(blockHashOrBlockTag, 32)) return [3 /*break*/, 3]; - params.blockHash = blockHashOrBlockTag; - return [3 /*break*/, 6]; - case 3: - _b.trys.push([3, 5, , 6]); - _a = params; - return [4 /*yield*/, this._getBlockTag(blockHashOrBlockTag)]; - case 4: - _a.blockTag = _b.sent(); - if ((0, bytes_1.isHexString)(params.blockTag)) { - blockNumber = parseInt(params.blockTag.substring(2), 16); - } - return [3 /*break*/, 6]; - case 5: - error_8 = _b.sent(); - logger.throwArgumentError("invalid block hash or block tag", "blockHashOrBlockTag", blockHashOrBlockTag); - return [3 /*break*/, 6]; - case 6: return [2 /*return*/, (0, web_1.poll)(function () { return __awaiter(_this, void 0, void 0, function () { - var block, blockNumber_1, i, tx, confirmations, blockWithTxs; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.perform("getBlock", params)]; - case 1: - block = _a.sent(); - // Block was not found - if (block == null) { - // For blockhashes, if we didn't say it existed, that blockhash may - // not exist. If we did see it though, perhaps from a log, we know - // it exists, and this node is just not caught up yet. - if (params.blockHash != null) { - if (this._emitted["b:" + params.blockHash] == null) { - return [2 /*return*/, null]; - } - } - // For block tags, if we are asking for a future block, we return null - if (params.blockTag != null) { - if (blockNumber > this._emitted.block) { - return [2 /*return*/, null]; - } - } - // Retry on the next block - return [2 /*return*/, undefined]; - } - if (!includeTransactions) return [3 /*break*/, 8]; - blockNumber_1 = null; - i = 0; - _a.label = 2; - case 2: - if (!(i < block.transactions.length)) return [3 /*break*/, 7]; - tx = block.transactions[i]; - if (!(tx.blockNumber == null)) return [3 /*break*/, 3]; - tx.confirmations = 0; - return [3 /*break*/, 6]; - case 3: - if (!(tx.confirmations == null)) return [3 /*break*/, 6]; - if (!(blockNumber_1 == null)) return [3 /*break*/, 5]; - return [4 /*yield*/, this._getInternalBlockNumber(100 + 2 * this.pollingInterval)]; - case 4: - blockNumber_1 = _a.sent(); - _a.label = 5; - case 5: - confirmations = (blockNumber_1 - tx.blockNumber) + 1; - if (confirmations <= 0) { - confirmations = 1; - } - tx.confirmations = confirmations; - _a.label = 6; - case 6: - i++; - return [3 /*break*/, 2]; - case 7: - blockWithTxs = this.formatter.blockWithTransactions(block); - blockWithTxs.transactions = blockWithTxs.transactions.map(function (tx) { return _this._wrapTransaction(tx); }); - return [2 /*return*/, blockWithTxs]; - case 8: return [2 /*return*/, this.formatter.block(block)]; - } - }); - }); }, { oncePoll: this })]; - } - }); - }); - }; - BaseProvider.prototype.getBlock = function (blockHashOrBlockTag) { - return (this._getBlock(blockHashOrBlockTag, false)); - }; - BaseProvider.prototype.getBlockWithTransactions = function (blockHashOrBlockTag) { - return (this._getBlock(blockHashOrBlockTag, true)); - }; - BaseProvider.prototype.getTransaction = function (transactionHash) { - return __awaiter(this, void 0, void 0, function () { - var params; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, transactionHash]; - case 2: - transactionHash = _a.sent(); - params = { transactionHash: this.formatter.hash(transactionHash, true) }; - return [2 /*return*/, (0, web_1.poll)(function () { return __awaiter(_this, void 0, void 0, function () { - var result, tx, blockNumber, confirmations; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.perform("getTransaction", params)]; - case 1: - result = _a.sent(); - if (result == null) { - if (this._emitted["t:" + transactionHash] == null) { - return [2 /*return*/, null]; - } - return [2 /*return*/, undefined]; - } - tx = this.formatter.transactionResponse(result); - if (!(tx.blockNumber == null)) return [3 /*break*/, 2]; - tx.confirmations = 0; - return [3 /*break*/, 4]; - case 2: - if (!(tx.confirmations == null)) return [3 /*break*/, 4]; - return [4 /*yield*/, this._getInternalBlockNumber(100 + 2 * this.pollingInterval)]; - case 3: - blockNumber = _a.sent(); - confirmations = (blockNumber - tx.blockNumber) + 1; - if (confirmations <= 0) { - confirmations = 1; - } - tx.confirmations = confirmations; - _a.label = 4; - case 4: return [2 /*return*/, this._wrapTransaction(tx)]; - } - }); - }); }, { oncePoll: this })]; - } - }); - }); - }; - BaseProvider.prototype.getTransactionReceipt = function (transactionHash) { - return __awaiter(this, void 0, void 0, function () { - var params; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, transactionHash]; - case 2: - transactionHash = _a.sent(); - params = { transactionHash: this.formatter.hash(transactionHash, true) }; - return [2 /*return*/, (0, web_1.poll)(function () { return __awaiter(_this, void 0, void 0, function () { - var result, receipt, blockNumber, confirmations; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.perform("getTransactionReceipt", params)]; - case 1: - result = _a.sent(); - if (result == null) { - if (this._emitted["t:" + transactionHash] == null) { - return [2 /*return*/, null]; - } - return [2 /*return*/, undefined]; - } - // "geth-etc" returns receipts before they are ready - if (result.blockHash == null) { - return [2 /*return*/, undefined]; - } - receipt = this.formatter.receipt(result); - if (!(receipt.blockNumber == null)) return [3 /*break*/, 2]; - receipt.confirmations = 0; - return [3 /*break*/, 4]; - case 2: - if (!(receipt.confirmations == null)) return [3 /*break*/, 4]; - return [4 /*yield*/, this._getInternalBlockNumber(100 + 2 * this.pollingInterval)]; - case 3: - blockNumber = _a.sent(); - confirmations = (blockNumber - receipt.blockNumber) + 1; - if (confirmations <= 0) { - confirmations = 1; - } - receipt.confirmations = confirmations; - _a.label = 4; - case 4: return [2 /*return*/, receipt]; - } - }); - }); }, { oncePoll: this })]; - } - }); - }); - }; - BaseProvider.prototype.getLogs = function (filter) { - return __awaiter(this, void 0, void 0, function () { - var params, logs; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [4 /*yield*/, (0, properties_1.resolveProperties)({ filter: this._getFilter(filter) })]; - case 2: - params = _a.sent(); - return [4 /*yield*/, this.perform("getLogs", params)]; - case 3: - logs = _a.sent(); - logs.forEach(function (log) { - if (log.removed == null) { - log.removed = false; - } - }); - return [2 /*return*/, formatter_1.Formatter.arrayOf(this.formatter.filterLog.bind(this.formatter))(logs)]; - } - }); - }); - }; - BaseProvider.prototype.getEtherPrice = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - _a.sent(); - return [2 /*return*/, this.perform("getEtherPrice", {})]; - } - }); - }); - }; - BaseProvider.prototype._getBlockTag = function (blockTag) { - return __awaiter(this, void 0, void 0, function () { - var blockNumber; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, blockTag]; - case 1: - blockTag = _a.sent(); - if (!(typeof (blockTag) === "number" && blockTag < 0)) return [3 /*break*/, 3]; - if (blockTag % 1) { - logger.throwArgumentError("invalid BlockTag", "blockTag", blockTag); - } - return [4 /*yield*/, this._getInternalBlockNumber(100 + 2 * this.pollingInterval)]; - case 2: - blockNumber = _a.sent(); - blockNumber += blockTag; - if (blockNumber < 0) { - blockNumber = 0; - } - return [2 /*return*/, this.formatter.blockTag(blockNumber)]; - case 3: return [2 /*return*/, this.formatter.blockTag(blockTag)]; - } - }); - }); - }; - BaseProvider.prototype.getResolver = function (name) { - return __awaiter(this, void 0, void 0, function () { - var address, error_9; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _a.trys.push([0, 2, , 3]); - return [4 /*yield*/, this._getResolver(name)]; - case 1: - address = _a.sent(); - if (address == null) { - return [2 /*return*/, null]; - } - return [2 /*return*/, new Resolver(this, address, name)]; - case 2: - error_9 = _a.sent(); - if (error_9.code === logger_1.Logger.errors.CALL_EXCEPTION) { - return [2 /*return*/, null]; - } - return [2 /*return*/, null]; - case 3: return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype._getResolver = function (name) { - return __awaiter(this, void 0, void 0, function () { - var network, transaction, _a, _b, error_10; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: return [4 /*yield*/, this.getNetwork()]; - case 1: - network = _c.sent(); - // No ENS... - if (!network.ensAddress) { - logger.throwError("network does not support ENS", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "ENS", network: network.name }); - } - transaction = { - to: network.ensAddress, - data: ("0x0178b8bf" + (0, hash_1.namehash)(name).substring(2)) - }; - _c.label = 2; - case 2: - _c.trys.push([2, 4, , 5]); - _b = (_a = this.formatter).callAddress; - return [4 /*yield*/, this.call(transaction)]; - case 3: return [2 /*return*/, _b.apply(_a, [_c.sent()])]; - case 4: - error_10 = _c.sent(); - if (error_10.code === logger_1.Logger.errors.CALL_EXCEPTION) { - return [2 /*return*/, null]; - } - throw error_10; - case 5: return [2 /*return*/]; - } - }); - }); - }; - BaseProvider.prototype.resolveName = function (name) { - return __awaiter(this, void 0, void 0, function () { - var resolver; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, name]; - case 1: - name = _a.sent(); - // If it is already an address, nothing to resolve - try { - return [2 /*return*/, Promise.resolve(this.formatter.address(name))]; - } - catch (error) { - // If is is a hexstring, the address is bad (See #694) - if ((0, bytes_1.isHexString)(name)) { - throw error; - } - } - if (typeof (name) !== "string") { - logger.throwArgumentError("invalid ENS name", "name", name); - } - return [4 /*yield*/, this.getResolver(name)]; - case 2: - resolver = _a.sent(); - if (!resolver) { - return [2 /*return*/, null]; - } - return [4 /*yield*/, resolver.getAddress()]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - BaseProvider.prototype.lookupAddress = function (address) { - return __awaiter(this, void 0, void 0, function () { - var reverseName, resolverAddress, bytes, _a, length, name, addr; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, address]; - case 1: - address = _b.sent(); - address = this.formatter.address(address); - reverseName = address.substring(2).toLowerCase() + ".addr.reverse"; - return [4 /*yield*/, this._getResolver(reverseName)]; - case 2: - resolverAddress = _b.sent(); - if (!resolverAddress) { - return [2 /*return*/, null]; - } - _a = bytes_1.arrayify; - return [4 /*yield*/, this.call({ - to: resolverAddress, - data: ("0x691f3431" + (0, hash_1.namehash)(reverseName).substring(2)) - })]; - case 3: - bytes = _a.apply(void 0, [_b.sent()]); - // Strip off the dynamic string pointer (0x20) - if (bytes.length < 32 || !bignumber_1.BigNumber.from(bytes.slice(0, 32)).eq(32)) { - return [2 /*return*/, null]; - } - bytes = bytes.slice(32); - // Not a length-prefixed string - if (bytes.length < 32) { - return [2 /*return*/, null]; - } - length = bignumber_1.BigNumber.from(bytes.slice(0, 32)).toNumber(); - bytes = bytes.slice(32); - // Length longer than available data - if (length > bytes.length) { - return [2 /*return*/, null]; - } - name = (0, strings_1.toUtf8String)(bytes.slice(0, length)); - return [4 /*yield*/, this.resolveName(name)]; - case 4: - addr = _b.sent(); - if (addr != address) { - return [2 /*return*/, null]; - } - return [2 /*return*/, name]; - } - }); - }); - }; - BaseProvider.prototype.getAvatar = function (nameOrAddress) { - return __awaiter(this, void 0, void 0, function () { - var resolver, address, reverseName, resolverAddress, avatar; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - resolver = null; - if (!(0, bytes_1.isHexString)(nameOrAddress)) return [3 /*break*/, 2]; - address = this.formatter.address(nameOrAddress); - reverseName = address.substring(2).toLowerCase() + ".addr.reverse"; - return [4 /*yield*/, this._getResolver(reverseName)]; - case 1: - resolverAddress = _a.sent(); - if (!resolverAddress) { - return [2 /*return*/, null]; - } - resolver = new Resolver(this, resolverAddress, "_", address); - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, this.getResolver(nameOrAddress)]; - case 3: - // ENS name; forward lookup - resolver = _a.sent(); - _a.label = 4; - case 4: return [4 /*yield*/, resolver.getAvatar()]; - case 5: - avatar = _a.sent(); - if (avatar == null) { - return [2 /*return*/, null]; - } - return [2 /*return*/, avatar.url]; - } - }); - }); - }; - BaseProvider.prototype.perform = function (method, params) { - return logger.throwError(method + " not implemented", logger_1.Logger.errors.NOT_IMPLEMENTED, { operation: method }); - }; - BaseProvider.prototype._startEvent = function (event) { - this.polling = (this._events.filter(function (e) { return e.pollable(); }).length > 0); - }; - BaseProvider.prototype._stopEvent = function (event) { - this.polling = (this._events.filter(function (e) { return e.pollable(); }).length > 0); - }; - BaseProvider.prototype._addEventListener = function (eventName, listener, once) { - var event = new Event(getEventTag(eventName), listener, once); - this._events.push(event); - this._startEvent(event); - return this; - }; - BaseProvider.prototype.on = function (eventName, listener) { - return this._addEventListener(eventName, listener, false); - }; - BaseProvider.prototype.once = function (eventName, listener) { - return this._addEventListener(eventName, listener, true); - }; - BaseProvider.prototype.emit = function (eventName) { - var _this = this; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - var result = false; - var stopped = []; - var eventTag = getEventTag(eventName); - this._events = this._events.filter(function (event) { - if (event.tag !== eventTag) { - return true; - } - setTimeout(function () { - event.listener.apply(_this, args); - }, 0); - result = true; - if (event.once) { - stopped.push(event); - return false; - } - return true; - }); - stopped.forEach(function (event) { _this._stopEvent(event); }); - return result; - }; - BaseProvider.prototype.listenerCount = function (eventName) { - if (!eventName) { - return this._events.length; - } - var eventTag = getEventTag(eventName); - return this._events.filter(function (event) { - return (event.tag === eventTag); - }).length; - }; - BaseProvider.prototype.listeners = function (eventName) { - if (eventName == null) { - return this._events.map(function (event) { return event.listener; }); - } - var eventTag = getEventTag(eventName); - return this._events - .filter(function (event) { return (event.tag === eventTag); }) - .map(function (event) { return event.listener; }); - }; - BaseProvider.prototype.off = function (eventName, listener) { - var _this = this; - if (listener == null) { - return this.removeAllListeners(eventName); - } - var stopped = []; - var found = false; - var eventTag = getEventTag(eventName); - this._events = this._events.filter(function (event) { - if (event.tag !== eventTag || event.listener != listener) { - return true; - } - if (found) { - return true; - } - found = true; - stopped.push(event); - return false; - }); - stopped.forEach(function (event) { _this._stopEvent(event); }); - return this; - }; - BaseProvider.prototype.removeAllListeners = function (eventName) { - var _this = this; - var stopped = []; - if (eventName == null) { - stopped = this._events; - this._events = []; - } - else { - var eventTag_1 = getEventTag(eventName); - this._events = this._events.filter(function (event) { - if (event.tag !== eventTag_1) { - return true; - } - stopped.push(event); - return false; - }); - } - stopped.forEach(function (event) { _this._stopEvent(event); }); - return this; - }; - return BaseProvider; -}(abstract_provider_1.Provider)); -exports.BaseProvider = BaseProvider; - -},{"./_version":64,"./formatter":72,"@ethersproject/abstract-provider":20,"@ethersproject/basex":27,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/constants":37,"@ethersproject/hash":43,"@ethersproject/logger":57,"@ethersproject/networks":59,"@ethersproject/properties":63,"@ethersproject/sha2":90,"@ethersproject/strings":100,"@ethersproject/web":110,"bech32":221}],67:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.IpcProvider = void 0; -var IpcProvider = null; -exports.IpcProvider = IpcProvider; - -},{}],68:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WebSocket = void 0; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var WS = null; -exports.WebSocket = WS; -try { - exports.WebSocket = WS = WebSocket; - if (WS == null) { - throw new Error("inject please"); - } -} -catch (error) { - var logger_2 = new logger_1.Logger(_version_1.version); - exports.WebSocket = WS = function () { - logger_2.throwError("WebSockets not supported in this environment", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "new WebSocket()" - }); - }; -} - -},{"./_version":64,"@ethersproject/logger":57}],69:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CloudflareProvider = void 0; -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var CloudflareProvider = /** @class */ (function (_super) { - __extends(CloudflareProvider, _super); - function CloudflareProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - CloudflareProvider.getApiKey = function (apiKey) { - if (apiKey != null) { - logger.throwArgumentError("apiKey not supported for cloudflare", "apiKey", apiKey); - } - return null; - }; - CloudflareProvider.getUrl = function (network, apiKey) { - var host = null; - switch (network.name) { - case "homestead": - host = "https://cloudflare-eth.com/"; - break; - default: - logger.throwArgumentError("unsupported network", "network", arguments[0]); - } - return host; - }; - CloudflareProvider.prototype.perform = function (method, params) { - return __awaiter(this, void 0, void 0, function () { - var block; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(method === "getBlockNumber")) return [3 /*break*/, 2]; - return [4 /*yield*/, _super.prototype.perform.call(this, "getBlock", { blockTag: "latest" })]; - case 1: - block = _a.sent(); - return [2 /*return*/, block.number]; - case 2: return [2 /*return*/, _super.prototype.perform.call(this, method, params)]; - } - }); - }); - }; - return CloudflareProvider; -}(url_json_rpc_provider_1.UrlJsonRpcProvider)); -exports.CloudflareProvider = CloudflareProvider; - -},{"./_version":64,"./url-json-rpc-provider":79,"@ethersproject/logger":57}],70:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EtherscanProvider = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var transactions_1 = require("@ethersproject/transactions"); -var web_1 = require("@ethersproject/web"); -var formatter_1 = require("./formatter"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var base_provider_1 = require("./base-provider"); -// The transaction has already been sanitized by the calls in Provider -function getTransactionPostData(transaction) { - var result = {}; - for (var key in transaction) { - if (transaction[key] == null) { - continue; - } - var value = transaction[key]; - if (key === "type" && value === 0) { - continue; - } - // Quantity-types require no leading zero, unless 0 - if ({ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true }[key]) { - value = (0, bytes_1.hexValue)((0, bytes_1.hexlify)(value)); - } - else if (key === "accessList") { - value = "[" + (0, transactions_1.accessListify)(value).map(function (set) { - return "{address:\"" + set.address + "\",storageKeys:[\"" + set.storageKeys.join('","') + "\"]}"; - }).join(",") + "]"; - } - else { - value = (0, bytes_1.hexlify)(value); - } - result[key] = value; - } - return result; -} -function getResult(result) { - // getLogs, getHistory have weird success responses - if (result.status == 0 && (result.message === "No records found" || result.message === "No transactions found")) { - return result.result; - } - if (result.status != 1 || result.message != "OK") { - var error = new Error("invalid response"); - error.result = JSON.stringify(result); - if ((result.result || "").toLowerCase().indexOf("rate limit") >= 0) { - error.throttleRetry = true; - } - throw error; - } - return result.result; -} -function getJsonResult(result) { - // This response indicates we are being throttled - if (result && result.status == 0 && result.message == "NOTOK" && (result.result || "").toLowerCase().indexOf("rate limit") >= 0) { - var error = new Error("throttled response"); - error.result = JSON.stringify(result); - error.throttleRetry = true; - throw error; - } - if (result.jsonrpc != "2.0") { - // @TODO: not any - var error = new Error("invalid response"); - error.result = JSON.stringify(result); - throw error; - } - if (result.error) { - // @TODO: not any - var error = new Error(result.error.message || "unknown error"); - if (result.error.code) { - error.code = result.error.code; - } - if (result.error.data) { - error.data = result.error.data; - } - throw error; - } - return result.result; -} -// The blockTag was normalized as a string by the Provider pre-perform operations -function checkLogTag(blockTag) { - if (blockTag === "pending") { - throw new Error("pending not supported"); - } - if (blockTag === "latest") { - return blockTag; - } - return parseInt(blockTag.substring(2), 16); -} -var defaultApiKey = "9D13ZE7XSBTJ94N9BNJ2MA33VMAY2YPIRB"; -function checkError(method, error, transaction) { - // Undo the "convenience" some nodes are attempting to prevent backwards - // incompatibility; maybe for v6 consider forwarding reverts as errors - if (method === "call" && error.code === logger_1.Logger.errors.SERVER_ERROR) { - var e = error.error; - // Etherscan keeps changing their string - if (e && (e.message.match(/reverted/i) || e.message.match(/VM execution error/i))) { - // Etherscan prefixes the data like "Reverted 0x1234" - var data = e.data; - if (data) { - data = "0x" + data.replace(/^.*0x/i, ""); - } - if ((0, bytes_1.isHexString)(data)) { - return data; - } - logger.throwError("missing revert data in call exception", logger_1.Logger.errors.CALL_EXCEPTION, { - error: error, - data: "0x" - }); - } - } - // Get the message from any nested error structure - var message = error.message; - if (error.code === logger_1.Logger.errors.SERVER_ERROR) { - if (error.error && typeof (error.error.message) === "string") { - message = error.error.message; - } - else if (typeof (error.body) === "string") { - message = error.body; - } - else if (typeof (error.responseText) === "string") { - message = error.responseText; - } - } - message = (message || "").toLowerCase(); - // "Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 21464000000000 and got: 0" - if (message.match(/insufficient funds/)) { - logger.throwError("insufficient funds for intrinsic transaction cost", logger_1.Logger.errors.INSUFFICIENT_FUNDS, { - error: error, - method: method, - transaction: transaction - }); - } - // "Transaction with the same hash was already imported." - if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) { - logger.throwError("nonce has already been used", logger_1.Logger.errors.NONCE_EXPIRED, { - error: error, - method: method, - transaction: transaction - }); - } - // "Transaction gas price is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce." - if (message.match(/another transaction with same nonce/)) { - logger.throwError("replacement fee too low", logger_1.Logger.errors.REPLACEMENT_UNDERPRICED, { - error: error, - method: method, - transaction: transaction - }); - } - if (message.match(/execution failed due to an exception|execution reverted/)) { - logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", logger_1.Logger.errors.UNPREDICTABLE_GAS_LIMIT, { - error: error, - method: method, - transaction: transaction - }); - } - throw error; -} -var EtherscanProvider = /** @class */ (function (_super) { - __extends(EtherscanProvider, _super); - function EtherscanProvider(network, apiKey) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, EtherscanProvider); - _this = _super.call(this, network) || this; - (0, properties_1.defineReadOnly)(_this, "baseUrl", _this.getBaseUrl()); - (0, properties_1.defineReadOnly)(_this, "apiKey", apiKey || defaultApiKey); - return _this; - } - EtherscanProvider.prototype.getBaseUrl = function () { - switch (this.network ? this.network.name : "invalid") { - case "homestead": - return "https:/\/api.etherscan.io"; - case "ropsten": - return "https:/\/api-ropsten.etherscan.io"; - case "rinkeby": - return "https:/\/api-rinkeby.etherscan.io"; - case "kovan": - return "https:/\/api-kovan.etherscan.io"; - case "goerli": - return "https:/\/api-goerli.etherscan.io"; - default: - } - return logger.throwArgumentError("unsupported network", "network", name); - }; - EtherscanProvider.prototype.getUrl = function (module, params) { - var query = Object.keys(params).reduce(function (accum, key) { - var value = params[key]; - if (value != null) { - accum += "&" + key + "=" + value; - } - return accum; - }, ""); - var apiKey = ((this.apiKey) ? "&apikey=" + this.apiKey : ""); - return this.baseUrl + "/api?module=" + module + query + apiKey; - }; - EtherscanProvider.prototype.getPostUrl = function () { - return this.baseUrl + "/api"; - }; - EtherscanProvider.prototype.getPostData = function (module, params) { - params.module = module; - params.apikey = this.apiKey; - return params; - }; - EtherscanProvider.prototype.fetch = function (module, params, post) { - return __awaiter(this, void 0, void 0, function () { - var url, payload, procFunc, connection, payloadStr, result; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - url = (post ? this.getPostUrl() : this.getUrl(module, params)); - payload = (post ? this.getPostData(module, params) : null); - procFunc = (module === "proxy") ? getJsonResult : getResult; - this.emit("debug", { - action: "request", - request: url, - provider: this - }); - connection = { - url: url, - throttleSlotInterval: 1000, - throttleCallback: function (attempt, url) { - if (_this.isCommunityResource()) { - (0, formatter_1.showThrottleMessage)(); - } - return Promise.resolve(true); - } - }; - payloadStr = null; - if (payload) { - connection.headers = { "content-type": "application/x-www-form-urlencoded; charset=UTF-8" }; - payloadStr = Object.keys(payload).map(function (key) { - return key + "=" + payload[key]; - }).join("&"); - } - return [4 /*yield*/, (0, web_1.fetchJson)(connection, payloadStr, procFunc || getJsonResult)]; - case 1: - result = _a.sent(); - this.emit("debug", { - action: "response", - request: url, - response: (0, properties_1.deepCopy)(result), - provider: this - }); - return [2 /*return*/, result]; - } - }); - }); - }; - EtherscanProvider.prototype.detectNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, this.network]; - }); - }); - }; - EtherscanProvider.prototype.perform = function (method, params) { - return __awaiter(this, void 0, void 0, function () { - var _a, postData, error_1, postData, error_2, args, topic0, logs, blocks, i, log, block, _b; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _a = method; - switch (_a) { - case "getBlockNumber": return [3 /*break*/, 1]; - case "getGasPrice": return [3 /*break*/, 2]; - case "getBalance": return [3 /*break*/, 3]; - case "getTransactionCount": return [3 /*break*/, 4]; - case "getCode": return [3 /*break*/, 5]; - case "getStorageAt": return [3 /*break*/, 6]; - case "sendTransaction": return [3 /*break*/, 7]; - case "getBlock": return [3 /*break*/, 8]; - case "getTransaction": return [3 /*break*/, 9]; - case "getTransactionReceipt": return [3 /*break*/, 10]; - case "call": return [3 /*break*/, 11]; - case "estimateGas": return [3 /*break*/, 15]; - case "getLogs": return [3 /*break*/, 19]; - case "getEtherPrice": return [3 /*break*/, 26]; - } - return [3 /*break*/, 28]; - case 1: return [2 /*return*/, this.fetch("proxy", { action: "eth_blockNumber" })]; - case 2: return [2 /*return*/, this.fetch("proxy", { action: "eth_gasPrice" })]; - case 3: - // Returns base-10 result - return [2 /*return*/, this.fetch("account", { - action: "balance", - address: params.address, - tag: params.blockTag - })]; - case 4: return [2 /*return*/, this.fetch("proxy", { - action: "eth_getTransactionCount", - address: params.address, - tag: params.blockTag - })]; - case 5: return [2 /*return*/, this.fetch("proxy", { - action: "eth_getCode", - address: params.address, - tag: params.blockTag - })]; - case 6: return [2 /*return*/, this.fetch("proxy", { - action: "eth_getStorageAt", - address: params.address, - position: params.position, - tag: params.blockTag - })]; - case 7: return [2 /*return*/, this.fetch("proxy", { - action: "eth_sendRawTransaction", - hex: params.signedTransaction - }, true).catch(function (error) { - return checkError("sendTransaction", error, params.signedTransaction); - })]; - case 8: - if (params.blockTag) { - return [2 /*return*/, this.fetch("proxy", { - action: "eth_getBlockByNumber", - tag: params.blockTag, - boolean: (params.includeTransactions ? "true" : "false") - })]; - } - throw new Error("getBlock by blockHash not implemented"); - case 9: return [2 /*return*/, this.fetch("proxy", { - action: "eth_getTransactionByHash", - txhash: params.transactionHash - })]; - case 10: return [2 /*return*/, this.fetch("proxy", { - action: "eth_getTransactionReceipt", - txhash: params.transactionHash - })]; - case 11: - if (params.blockTag !== "latest") { - throw new Error("EtherscanProvider does not support blockTag for call"); - } - postData = getTransactionPostData(params.transaction); - postData.module = "proxy"; - postData.action = "eth_call"; - _c.label = 12; - case 12: - _c.trys.push([12, 14, , 15]); - return [4 /*yield*/, this.fetch("proxy", postData, true)]; - case 13: return [2 /*return*/, _c.sent()]; - case 14: - error_1 = _c.sent(); - return [2 /*return*/, checkError("call", error_1, params.transaction)]; - case 15: - postData = getTransactionPostData(params.transaction); - postData.module = "proxy"; - postData.action = "eth_estimateGas"; - _c.label = 16; - case 16: - _c.trys.push([16, 18, , 19]); - return [4 /*yield*/, this.fetch("proxy", postData, true)]; - case 17: return [2 /*return*/, _c.sent()]; - case 18: - error_2 = _c.sent(); - return [2 /*return*/, checkError("estimateGas", error_2, params.transaction)]; - case 19: - args = { action: "getLogs" }; - if (params.filter.fromBlock) { - args.fromBlock = checkLogTag(params.filter.fromBlock); - } - if (params.filter.toBlock) { - args.toBlock = checkLogTag(params.filter.toBlock); - } - if (params.filter.address) { - args.address = params.filter.address; - } - // @TODO: We can handle slightly more complicated logs using the logs API - if (params.filter.topics && params.filter.topics.length > 0) { - if (params.filter.topics.length > 1) { - logger.throwError("unsupported topic count", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics }); - } - if (params.filter.topics.length === 1) { - topic0 = params.filter.topics[0]; - if (typeof (topic0) !== "string" || topic0.length !== 66) { - logger.throwError("unsupported topic format", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { topic0: topic0 }); - } - args.topic0 = topic0; - } - } - return [4 /*yield*/, this.fetch("logs", args)]; - case 20: - logs = _c.sent(); - blocks = {}; - i = 0; - _c.label = 21; - case 21: - if (!(i < logs.length)) return [3 /*break*/, 25]; - log = logs[i]; - if (log.blockHash != null) { - return [3 /*break*/, 24]; - } - if (!(blocks[log.blockNumber] == null)) return [3 /*break*/, 23]; - return [4 /*yield*/, this.getBlock(log.blockNumber)]; - case 22: - block = _c.sent(); - if (block) { - blocks[log.blockNumber] = block.hash; - } - _c.label = 23; - case 23: - log.blockHash = blocks[log.blockNumber]; - _c.label = 24; - case 24: - i++; - return [3 /*break*/, 21]; - case 25: return [2 /*return*/, logs]; - case 26: - if (this.network.name !== "homestead") { - return [2 /*return*/, 0.0]; - } - _b = parseFloat; - return [4 /*yield*/, this.fetch("stats", { action: "ethprice" })]; - case 27: return [2 /*return*/, _b.apply(void 0, [(_c.sent()).ethusd])]; - case 28: return [3 /*break*/, 29]; - case 29: return [2 /*return*/, _super.prototype.perform.call(this, method, params)]; - } - }); - }); - }; - // Note: The `page` page parameter only allows pagination within the - // 10,000 window available without a page and offset parameter - // Error: Result window is too large, PageNo x Offset size must - // be less than or equal to 10000 - EtherscanProvider.prototype.getHistory = function (addressOrName, startBlock, endBlock) { - return __awaiter(this, void 0, void 0, function () { - var params, result; - var _a; - var _this = this; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = { - action: "txlist" - }; - return [4 /*yield*/, this.resolveName(addressOrName)]; - case 1: - params = (_a.address = (_b.sent()), - _a.startblock = ((startBlock == null) ? 0 : startBlock), - _a.endblock = ((endBlock == null) ? 99999999 : endBlock), - _a.sort = "asc", - _a); - return [4 /*yield*/, this.fetch("account", params)]; - case 2: - result = _b.sent(); - return [2 /*return*/, result.map(function (tx) { - ["contractAddress", "to"].forEach(function (key) { - if (tx[key] == "") { - delete tx[key]; - } - }); - if (tx.creates == null && tx.contractAddress != null) { - tx.creates = tx.contractAddress; - } - var item = _this.formatter.transactionResponse(tx); - if (tx.timeStamp) { - item.timestamp = parseInt(tx.timeStamp); - } - return item; - })]; - } - }); - }); - }; - EtherscanProvider.prototype.isCommunityResource = function () { - return (this.apiKey === defaultApiKey); - }; - return EtherscanProvider; -}(base_provider_1.BaseProvider)); -exports.EtherscanProvider = EtherscanProvider; - -},{"./_version":64,"./base-provider":66,"./formatter":72,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/transactions":103,"@ethersproject/web":110}],71:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FallbackProvider = void 0; -var abstract_provider_1 = require("@ethersproject/abstract-provider"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var random_1 = require("@ethersproject/random"); -var web_1 = require("@ethersproject/web"); -var base_provider_1 = require("./base-provider"); -var formatter_1 = require("./formatter"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function now() { return (new Date()).getTime(); } -// Returns to network as long as all agree, or null if any is null. -// Throws an error if any two networks do not match. -function checkNetworks(networks) { - var result = null; - for (var i = 0; i < networks.length; i++) { - var network = networks[i]; - // Null! We do not know our network; bail. - if (network == null) { - return null; - } - if (result) { - // Make sure the network matches the previous networks - if (!(result.name === network.name && result.chainId === network.chainId && - ((result.ensAddress === network.ensAddress) || (result.ensAddress == null && network.ensAddress == null)))) { - logger.throwArgumentError("provider mismatch", "networks", networks); - } - } - else { - result = network; - } - } - return result; -} -function median(values, maxDelta) { - values = values.slice().sort(); - var middle = Math.floor(values.length / 2); - // Odd length; take the middle - if (values.length % 2) { - return values[middle]; - } - // Even length; take the average of the two middle - var a = values[middle - 1], b = values[middle]; - if (maxDelta != null && Math.abs(a - b) > maxDelta) { - return null; - } - return (a + b) / 2; -} -function serialize(value) { - if (value === null) { - return "null"; - } - else if (typeof (value) === "number" || typeof (value) === "boolean") { - return JSON.stringify(value); - } - else if (typeof (value) === "string") { - return value; - } - else if (bignumber_1.BigNumber.isBigNumber(value)) { - return value.toString(); - } - else if (Array.isArray(value)) { - return JSON.stringify(value.map(function (i) { return serialize(i); })); - } - else if (typeof (value) === "object") { - var keys = Object.keys(value); - keys.sort(); - return "{" + keys.map(function (key) { - var v = value[key]; - if (typeof (v) === "function") { - v = "[function]"; - } - else { - v = serialize(v); - } - return JSON.stringify(key) + ":" + v; - }).join(",") + "}"; - } - throw new Error("unknown value type: " + typeof (value)); -} -// Next request ID to use for emitting debug info -var nextRid = 1; -; -function stall(duration) { - var cancel = null; - var timer = null; - var promise = (new Promise(function (resolve) { - cancel = function () { - if (timer) { - clearTimeout(timer); - timer = null; - } - resolve(); - }; - timer = setTimeout(cancel, duration); - })); - var wait = function (func) { - promise = promise.then(func); - return promise; - }; - function getPromise() { - return promise; - } - return { cancel: cancel, getPromise: getPromise, wait: wait }; -} -var ForwardErrors = [ - logger_1.Logger.errors.CALL_EXCEPTION, - logger_1.Logger.errors.INSUFFICIENT_FUNDS, - logger_1.Logger.errors.NONCE_EXPIRED, - logger_1.Logger.errors.REPLACEMENT_UNDERPRICED, - logger_1.Logger.errors.UNPREDICTABLE_GAS_LIMIT -]; -var ForwardProperties = [ - "address", - "args", - "errorArgs", - "errorSignature", - "method", - "transaction", -]; -; -function exposeDebugConfig(config, now) { - var result = { - weight: config.weight - }; - Object.defineProperty(result, "provider", { get: function () { return config.provider; } }); - if (config.start) { - result.start = config.start; - } - if (now) { - result.duration = (now - config.start); - } - if (config.done) { - if (config.error) { - result.error = config.error; - } - else { - result.result = config.result || null; - } - } - return result; -} -function normalizedTally(normalize, quorum) { - return function (configs) { - // Count the votes for each result - var tally = {}; - configs.forEach(function (c) { - var value = normalize(c.result); - if (!tally[value]) { - tally[value] = { count: 0, result: c.result }; - } - tally[value].count++; - }); - // Check for a quorum on any given result - var keys = Object.keys(tally); - for (var i = 0; i < keys.length; i++) { - var check = tally[keys[i]]; - if (check.count >= quorum) { - return check.result; - } - } - // No quroum - return undefined; - }; -} -function getProcessFunc(provider, method, params) { - var normalize = serialize; - switch (method) { - case "getBlockNumber": - // Return the median value, unless there is (median + 1) is also - // present, in which case that is probably true and the median - // is going to be stale soon. In the event of a malicious node, - // the lie will be true soon enough. - return function (configs) { - var values = configs.map(function (c) { return c.result; }); - // Get the median block number - var blockNumber = median(configs.map(function (c) { return c.result; }), 2); - if (blockNumber == null) { - return undefined; - } - blockNumber = Math.ceil(blockNumber); - // If the next block height is present, its prolly safe to use - if (values.indexOf(blockNumber + 1) >= 0) { - blockNumber++; - } - // Don't ever roll back the blockNumber - if (blockNumber >= provider._highestBlockNumber) { - provider._highestBlockNumber = blockNumber; - } - return provider._highestBlockNumber; - }; - case "getGasPrice": - // Return the middle (round index up) value, similar to median - // but do not average even entries and choose the higher. - // Malicious actors must compromise 50% of the nodes to lie. - return function (configs) { - var values = configs.map(function (c) { return c.result; }); - values.sort(); - return values[Math.floor(values.length / 2)]; - }; - case "getEtherPrice": - // Returns the median price. Malicious actors must compromise at - // least 50% of the nodes to lie (in a meaningful way). - return function (configs) { - return median(configs.map(function (c) { return c.result; })); - }; - // No additional normalizing required; serialize is enough - case "getBalance": - case "getTransactionCount": - case "getCode": - case "getStorageAt": - case "call": - case "estimateGas": - case "getLogs": - break; - // We drop the confirmations from transactions as it is approximate - case "getTransaction": - case "getTransactionReceipt": - normalize = function (tx) { - if (tx == null) { - return null; - } - tx = (0, properties_1.shallowCopy)(tx); - tx.confirmations = -1; - return serialize(tx); - }; - break; - // We drop the confirmations from transactions as it is approximate - case "getBlock": - // We drop the confirmations from transactions as it is approximate - if (params.includeTransactions) { - normalize = function (block) { - if (block == null) { - return null; - } - block = (0, properties_1.shallowCopy)(block); - block.transactions = block.transactions.map(function (tx) { - tx = (0, properties_1.shallowCopy)(tx); - tx.confirmations = -1; - return tx; - }); - return serialize(block); - }; - } - else { - normalize = function (block) { - if (block == null) { - return null; - } - return serialize(block); - }; - } - break; - default: - throw new Error("unknown method: " + method); - } - // Return the result if and only if the expected quorum is - // satisfied and agreed upon for the final result. - return normalizedTally(normalize, provider.quorum); -} -// If we are doing a blockTag query, we need to make sure the backend is -// caught up to the FallbackProvider, before sending a request to it. -function waitForSync(config, blockNumber) { - return __awaiter(this, void 0, void 0, function () { - var provider; - return __generator(this, function (_a) { - provider = (config.provider); - if ((provider.blockNumber != null && provider.blockNumber >= blockNumber) || blockNumber === -1) { - return [2 /*return*/, provider]; - } - return [2 /*return*/, (0, web_1.poll)(function () { - return new Promise(function (resolve, reject) { - setTimeout(function () { - // We are synced - if (provider.blockNumber >= blockNumber) { - return resolve(provider); - } - // We're done; just quit - if (config.cancelled) { - return resolve(null); - } - // Try again, next block - return resolve(undefined); - }, 0); - }); - }, { oncePoll: provider })]; - }); - }); -} -function getRunner(config, currentBlockNumber, method, params) { - return __awaiter(this, void 0, void 0, function () { - var provider, _a, filter; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - provider = config.provider; - _a = method; - switch (_a) { - case "getBlockNumber": return [3 /*break*/, 1]; - case "getGasPrice": return [3 /*break*/, 1]; - case "getEtherPrice": return [3 /*break*/, 2]; - case "getBalance": return [3 /*break*/, 3]; - case "getTransactionCount": return [3 /*break*/, 3]; - case "getCode": return [3 /*break*/, 3]; - case "getStorageAt": return [3 /*break*/, 6]; - case "getBlock": return [3 /*break*/, 9]; - case "call": return [3 /*break*/, 12]; - case "estimateGas": return [3 /*break*/, 12]; - case "getTransaction": return [3 /*break*/, 15]; - case "getTransactionReceipt": return [3 /*break*/, 15]; - case "getLogs": return [3 /*break*/, 16]; - } - return [3 /*break*/, 19]; - case 1: return [2 /*return*/, provider[method]()]; - case 2: - if (provider.getEtherPrice) { - return [2 /*return*/, provider.getEtherPrice()]; - } - return [3 /*break*/, 19]; - case 3: - if (!(params.blockTag && (0, bytes_1.isHexString)(params.blockTag))) return [3 /*break*/, 5]; - return [4 /*yield*/, waitForSync(config, currentBlockNumber)]; - case 4: - provider = _b.sent(); - _b.label = 5; - case 5: return [2 /*return*/, provider[method](params.address, params.blockTag || "latest")]; - case 6: - if (!(params.blockTag && (0, bytes_1.isHexString)(params.blockTag))) return [3 /*break*/, 8]; - return [4 /*yield*/, waitForSync(config, currentBlockNumber)]; - case 7: - provider = _b.sent(); - _b.label = 8; - case 8: return [2 /*return*/, provider.getStorageAt(params.address, params.position, params.blockTag || "latest")]; - case 9: - if (!(params.blockTag && (0, bytes_1.isHexString)(params.blockTag))) return [3 /*break*/, 11]; - return [4 /*yield*/, waitForSync(config, currentBlockNumber)]; - case 10: - provider = _b.sent(); - _b.label = 11; - case 11: return [2 /*return*/, provider[(params.includeTransactions ? "getBlockWithTransactions" : "getBlock")](params.blockTag || params.blockHash)]; - case 12: - if (!(params.blockTag && (0, bytes_1.isHexString)(params.blockTag))) return [3 /*break*/, 14]; - return [4 /*yield*/, waitForSync(config, currentBlockNumber)]; - case 13: - provider = _b.sent(); - _b.label = 14; - case 14: return [2 /*return*/, provider[method](params.transaction)]; - case 15: return [2 /*return*/, provider[method](params.transactionHash)]; - case 16: - filter = params.filter; - if (!((filter.fromBlock && (0, bytes_1.isHexString)(filter.fromBlock)) || (filter.toBlock && (0, bytes_1.isHexString)(filter.toBlock)))) return [3 /*break*/, 18]; - return [4 /*yield*/, waitForSync(config, currentBlockNumber)]; - case 17: - provider = _b.sent(); - _b.label = 18; - case 18: return [2 /*return*/, provider.getLogs(filter)]; - case 19: return [2 /*return*/, logger.throwError("unknown method error", logger_1.Logger.errors.UNKNOWN_ERROR, { - method: method, - params: params - })]; - } - }); - }); -} -var FallbackProvider = /** @class */ (function (_super) { - __extends(FallbackProvider, _super); - function FallbackProvider(providers, quorum) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, FallbackProvider); - if (providers.length === 0) { - logger.throwArgumentError("missing providers", "providers", providers); - } - var providerConfigs = providers.map(function (configOrProvider, index) { - if (abstract_provider_1.Provider.isProvider(configOrProvider)) { - var stallTimeout = (0, formatter_1.isCommunityResource)(configOrProvider) ? 2000 : 750; - var priority = 1; - return Object.freeze({ provider: configOrProvider, weight: 1, stallTimeout: stallTimeout, priority: priority }); - } - var config = (0, properties_1.shallowCopy)(configOrProvider); - if (config.priority == null) { - config.priority = 1; - } - if (config.stallTimeout == null) { - config.stallTimeout = (0, formatter_1.isCommunityResource)(configOrProvider) ? 2000 : 750; - } - if (config.weight == null) { - config.weight = 1; - } - var weight = config.weight; - if (weight % 1 || weight > 512 || weight < 1) { - logger.throwArgumentError("invalid weight; must be integer in [1, 512]", "providers[" + index + "].weight", weight); - } - return Object.freeze(config); - }); - var total = providerConfigs.reduce(function (accum, c) { return (accum + c.weight); }, 0); - if (quorum == null) { - quorum = total / 2; - } - else if (quorum > total) { - logger.throwArgumentError("quorum will always fail; larger than total weight", "quorum", quorum); - } - // Are all providers' networks are known - var networkOrReady = checkNetworks(providerConfigs.map(function (c) { return (c.provider).network; })); - // Not all networks are known; we must stall - if (networkOrReady == null) { - networkOrReady = new Promise(function (resolve, reject) { - setTimeout(function () { - _this.detectNetwork().then(resolve, reject); - }, 0); - }); - } - _this = _super.call(this, networkOrReady) || this; - // Preserve a copy, so we do not get mutated - (0, properties_1.defineReadOnly)(_this, "providerConfigs", Object.freeze(providerConfigs)); - (0, properties_1.defineReadOnly)(_this, "quorum", quorum); - _this._highestBlockNumber = -1; - return _this; - } - FallbackProvider.prototype.detectNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - var networks; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, Promise.all(this.providerConfigs.map(function (c) { return c.provider.getNetwork(); }))]; - case 1: - networks = _a.sent(); - return [2 /*return*/, checkNetworks(networks)]; - } - }); - }); - }; - FallbackProvider.prototype.perform = function (method, params) { - return __awaiter(this, void 0, void 0, function () { - var results, i_1, result, processFunc, configs, currentBlockNumber, i, first, _loop_1, this_1, state_1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(method === "sendTransaction")) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.all(this.providerConfigs.map(function (c) { - return c.provider.sendTransaction(params.signedTransaction).then(function (result) { - return result.hash; - }, function (error) { - return error; - }); - }))]; - case 1: - results = _a.sent(); - // Any success is good enough (other errors are likely "already seen" errors - for (i_1 = 0; i_1 < results.length; i_1++) { - result = results[i_1]; - if (typeof (result) === "string") { - return [2 /*return*/, result]; - } - } - // They were all an error; pick the first error - throw results[0]; - case 2: - if (!(this._highestBlockNumber === -1 && method !== "getBlockNumber")) return [3 /*break*/, 4]; - return [4 /*yield*/, this.getBlockNumber()]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - processFunc = getProcessFunc(this, method, params); - configs = (0, random_1.shuffled)(this.providerConfigs.map(properties_1.shallowCopy)); - configs.sort(function (a, b) { return (a.priority - b.priority); }); - currentBlockNumber = this._highestBlockNumber; - i = 0; - first = true; - _loop_1 = function () { - var t0, inflightWeight, _loop_2, waiting, results, result, errors; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - t0 = now(); - inflightWeight = configs.filter(function (c) { return (c.runner && ((t0 - c.start) < c.stallTimeout)); }) - .reduce(function (accum, c) { return (accum + c.weight); }, 0); - _loop_2 = function () { - var config = configs[i++]; - var rid = nextRid++; - config.start = now(); - config.staller = stall(config.stallTimeout); - config.staller.wait(function () { config.staller = null; }); - config.runner = getRunner(config, currentBlockNumber, method, params).then(function (result) { - config.done = true; - config.result = result; - if (_this.listenerCount("debug")) { - _this.emit("debug", { - action: "request", - rid: rid, - backend: exposeDebugConfig(config, now()), - request: { method: method, params: (0, properties_1.deepCopy)(params) }, - provider: _this - }); - } - }, function (error) { - config.done = true; - config.error = error; - if (_this.listenerCount("debug")) { - _this.emit("debug", { - action: "request", - rid: rid, - backend: exposeDebugConfig(config, now()), - request: { method: method, params: (0, properties_1.deepCopy)(params) }, - provider: _this - }); - } - }); - if (this_1.listenerCount("debug")) { - this_1.emit("debug", { - action: "request", - rid: rid, - backend: exposeDebugConfig(config, null), - request: { method: method, params: (0, properties_1.deepCopy)(params) }, - provider: this_1 - }); - } - inflightWeight += config.weight; - }; - // Start running enough to meet quorum - while (inflightWeight < this_1.quorum && i < configs.length) { - _loop_2(); - } - waiting = []; - configs.forEach(function (c) { - if (c.done || !c.runner) { - return; - } - waiting.push(c.runner); - if (c.staller) { - waiting.push(c.staller.getPromise()); - } - }); - if (!waiting.length) return [3 /*break*/, 2]; - return [4 /*yield*/, Promise.race(waiting)]; - case 1: - _b.sent(); - _b.label = 2; - case 2: - results = configs.filter(function (c) { return (c.done && c.error == null); }); - if (!(results.length >= this_1.quorum)) return [3 /*break*/, 5]; - result = processFunc(results); - if (result !== undefined) { - // Shut down any stallers - configs.forEach(function (c) { - if (c.staller) { - c.staller.cancel(); - } - c.cancelled = true; - }); - return [2 /*return*/, { value: result }]; - } - if (!!first) return [3 /*break*/, 4]; - return [4 /*yield*/, stall(100).getPromise()]; - case 3: - _b.sent(); - _b.label = 4; - case 4: - first = false; - _b.label = 5; - case 5: - errors = configs.reduce(function (accum, c) { - if (!c.done || c.error == null) { - return accum; - } - var code = (c.error).code; - if (ForwardErrors.indexOf(code) >= 0) { - if (!accum[code]) { - accum[code] = { error: c.error, weight: 0 }; - } - accum[code].weight += c.weight; - } - return accum; - }, ({})); - Object.keys(errors).forEach(function (errorCode) { - var tally = errors[errorCode]; - if (tally.weight < _this.quorum) { - return; - } - // Shut down any stallers - configs.forEach(function (c) { - if (c.staller) { - c.staller.cancel(); - } - c.cancelled = true; - }); - var e = (tally.error); - var props = {}; - ForwardProperties.forEach(function (name) { - if (e[name] == null) { - return; - } - props[name] = e[name]; - }); - logger.throwError(e.reason || e.message, errorCode, props); - }); - // All configs have run to completion; we will never get more data - if (configs.filter(function (c) { return !c.done; }).length === 0) { - return [2 /*return*/, "break"]; - } - return [2 /*return*/]; - } - }); - }; - this_1 = this; - _a.label = 5; - case 5: - if (!true) return [3 /*break*/, 7]; - return [5 /*yield**/, _loop_1()]; - case 6: - state_1 = _a.sent(); - if (typeof state_1 === "object") - return [2 /*return*/, state_1.value]; - if (state_1 === "break") - return [3 /*break*/, 7]; - return [3 /*break*/, 5]; - case 7: - // Shut down any stallers; shouldn't be any - configs.forEach(function (c) { - if (c.staller) { - c.staller.cancel(); - } - c.cancelled = true; - }); - return [2 /*return*/, logger.throwError("failed to meet quorum", logger_1.Logger.errors.SERVER_ERROR, { - method: method, - params: params, - //results: configs.map((c) => c.result), - //errors: configs.map((c) => c.error), - results: configs.map(function (c) { return exposeDebugConfig(c); }), - provider: this - })]; - } - }); - }); - }; - return FallbackProvider; -}(base_provider_1.BaseProvider)); -exports.FallbackProvider = FallbackProvider; - -},{"./_version":64,"./base-provider":66,"./formatter":72,"@ethersproject/abstract-provider":20,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/random":84,"@ethersproject/web":110}],72:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.showThrottleMessage = exports.isCommunityResource = exports.isCommunityResourcable = exports.Formatter = void 0; -var address_1 = require("@ethersproject/address"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var constants_1 = require("@ethersproject/constants"); -var properties_1 = require("@ethersproject/properties"); -var transactions_1 = require("@ethersproject/transactions"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var Formatter = /** @class */ (function () { - function Formatter() { - var _newTarget = this.constructor; - logger.checkNew(_newTarget, Formatter); - this.formats = this.getDefaultFormats(); - } - Formatter.prototype.getDefaultFormats = function () { - var _this = this; - var formats = ({}); - var address = this.address.bind(this); - var bigNumber = this.bigNumber.bind(this); - var blockTag = this.blockTag.bind(this); - var data = this.data.bind(this); - var hash = this.hash.bind(this); - var hex = this.hex.bind(this); - var number = this.number.bind(this); - var type = this.type.bind(this); - var strictData = function (v) { return _this.data(v, true); }; - formats.transaction = { - hash: hash, - type: type, - accessList: Formatter.allowNull(this.accessList.bind(this), null), - blockHash: Formatter.allowNull(hash, null), - blockNumber: Formatter.allowNull(number, null), - transactionIndex: Formatter.allowNull(number, null), - confirmations: Formatter.allowNull(number, null), - from: address, - // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas) - // must be set - gasPrice: Formatter.allowNull(bigNumber), - maxPriorityFeePerGas: Formatter.allowNull(bigNumber), - maxFeePerGas: Formatter.allowNull(bigNumber), - gasLimit: bigNumber, - to: Formatter.allowNull(address, null), - value: bigNumber, - nonce: number, - data: data, - r: Formatter.allowNull(this.uint256), - s: Formatter.allowNull(this.uint256), - v: Formatter.allowNull(number), - creates: Formatter.allowNull(address, null), - raw: Formatter.allowNull(data), - }; - formats.transactionRequest = { - from: Formatter.allowNull(address), - nonce: Formatter.allowNull(number), - gasLimit: Formatter.allowNull(bigNumber), - gasPrice: Formatter.allowNull(bigNumber), - maxPriorityFeePerGas: Formatter.allowNull(bigNumber), - maxFeePerGas: Formatter.allowNull(bigNumber), - to: Formatter.allowNull(address), - value: Formatter.allowNull(bigNumber), - data: Formatter.allowNull(strictData), - type: Formatter.allowNull(number), - accessList: Formatter.allowNull(this.accessList.bind(this), null), - }; - formats.receiptLog = { - transactionIndex: number, - blockNumber: number, - transactionHash: hash, - address: address, - topics: Formatter.arrayOf(hash), - data: data, - logIndex: number, - blockHash: hash, - }; - formats.receipt = { - to: Formatter.allowNull(this.address, null), - from: Formatter.allowNull(this.address, null), - contractAddress: Formatter.allowNull(address, null), - transactionIndex: number, - // should be allowNull(hash), but broken-EIP-658 support is handled in receipt - root: Formatter.allowNull(hex), - gasUsed: bigNumber, - logsBloom: Formatter.allowNull(data), - blockHash: hash, - transactionHash: hash, - logs: Formatter.arrayOf(this.receiptLog.bind(this)), - blockNumber: number, - confirmations: Formatter.allowNull(number, null), - cumulativeGasUsed: bigNumber, - effectiveGasPrice: Formatter.allowNull(bigNumber), - status: Formatter.allowNull(number), - type: type - }; - formats.block = { - hash: hash, - parentHash: hash, - number: number, - timestamp: number, - nonce: Formatter.allowNull(hex), - difficulty: this.difficulty.bind(this), - gasLimit: bigNumber, - gasUsed: bigNumber, - miner: address, - extraData: data, - transactions: Formatter.allowNull(Formatter.arrayOf(hash)), - baseFeePerGas: Formatter.allowNull(bigNumber) - }; - formats.blockWithTransactions = (0, properties_1.shallowCopy)(formats.block); - formats.blockWithTransactions.transactions = Formatter.allowNull(Formatter.arrayOf(this.transactionResponse.bind(this))); - formats.filter = { - fromBlock: Formatter.allowNull(blockTag, undefined), - toBlock: Formatter.allowNull(blockTag, undefined), - blockHash: Formatter.allowNull(hash, undefined), - address: Formatter.allowNull(address, undefined), - topics: Formatter.allowNull(this.topics.bind(this), undefined), - }; - formats.filterLog = { - blockNumber: Formatter.allowNull(number), - blockHash: Formatter.allowNull(hash), - transactionIndex: number, - removed: Formatter.allowNull(this.boolean.bind(this)), - address: address, - data: Formatter.allowFalsish(data, "0x"), - topics: Formatter.arrayOf(hash), - transactionHash: hash, - logIndex: number, - }; - return formats; - }; - Formatter.prototype.accessList = function (accessList) { - return (0, transactions_1.accessListify)(accessList || []); - }; - // Requires a BigNumberish that is within the IEEE754 safe integer range; returns a number - // Strict! Used on input. - Formatter.prototype.number = function (number) { - if (number === "0x") { - return 0; - } - return bignumber_1.BigNumber.from(number).toNumber(); - }; - Formatter.prototype.type = function (number) { - if (number === "0x" || number == null) { - return 0; - } - return bignumber_1.BigNumber.from(number).toNumber(); - }; - // Strict! Used on input. - Formatter.prototype.bigNumber = function (value) { - return bignumber_1.BigNumber.from(value); - }; - // Requires a boolean, "true" or "false"; returns a boolean - Formatter.prototype.boolean = function (value) { - if (typeof (value) === "boolean") { - return value; - } - if (typeof (value) === "string") { - value = value.toLowerCase(); - if (value === "true") { - return true; - } - if (value === "false") { - return false; - } - } - throw new Error("invalid boolean - " + value); - }; - Formatter.prototype.hex = function (value, strict) { - if (typeof (value) === "string") { - if (!strict && value.substring(0, 2) !== "0x") { - value = "0x" + value; - } - if ((0, bytes_1.isHexString)(value)) { - return value.toLowerCase(); - } - } - return logger.throwArgumentError("invalid hash", "value", value); - }; - Formatter.prototype.data = function (value, strict) { - var result = this.hex(value, strict); - if ((result.length % 2) !== 0) { - throw new Error("invalid data; odd-length - " + value); - } - return result; - }; - // Requires an address - // Strict! Used on input. - Formatter.prototype.address = function (value) { - return (0, address_1.getAddress)(value); - }; - Formatter.prototype.callAddress = function (value) { - if (!(0, bytes_1.isHexString)(value, 32)) { - return null; - } - var address = (0, address_1.getAddress)((0, bytes_1.hexDataSlice)(value, 12)); - return (address === constants_1.AddressZero) ? null : address; - }; - Formatter.prototype.contractAddress = function (value) { - return (0, address_1.getContractAddress)(value); - }; - // Strict! Used on input. - Formatter.prototype.blockTag = function (blockTag) { - if (blockTag == null) { - return "latest"; - } - if (blockTag === "earliest") { - return "0x0"; - } - if (blockTag === "latest" || blockTag === "pending") { - return blockTag; - } - if (typeof (blockTag) === "number" || (0, bytes_1.isHexString)(blockTag)) { - return (0, bytes_1.hexValue)(blockTag); - } - throw new Error("invalid blockTag"); - }; - // Requires a hash, optionally requires 0x prefix; returns prefixed lowercase hash. - Formatter.prototype.hash = function (value, strict) { - var result = this.hex(value, strict); - if ((0, bytes_1.hexDataLength)(result) !== 32) { - return logger.throwArgumentError("invalid hash", "value", value); - } - return result; - }; - // Returns the difficulty as a number, or if too large (i.e. PoA network) null - Formatter.prototype.difficulty = function (value) { - if (value == null) { - return null; - } - var v = bignumber_1.BigNumber.from(value); - try { - return v.toNumber(); - } - catch (error) { } - return null; - }; - Formatter.prototype.uint256 = function (value) { - if (!(0, bytes_1.isHexString)(value)) { - throw new Error("invalid uint256"); - } - return (0, bytes_1.hexZeroPad)(value, 32); - }; - Formatter.prototype._block = function (value, format) { - if (value.author != null && value.miner == null) { - value.miner = value.author; - } - // The difficulty may need to come from _difficulty in recursed blocks - var difficulty = (value._difficulty != null) ? value._difficulty : value.difficulty; - var result = Formatter.check(format, value); - result._difficulty = ((difficulty == null) ? null : bignumber_1.BigNumber.from(difficulty)); - return result; - }; - Formatter.prototype.block = function (value) { - return this._block(value, this.formats.block); - }; - Formatter.prototype.blockWithTransactions = function (value) { - return this._block(value, this.formats.blockWithTransactions); - }; - // Strict! Used on input. - Formatter.prototype.transactionRequest = function (value) { - return Formatter.check(this.formats.transactionRequest, value); - }; - Formatter.prototype.transactionResponse = function (transaction) { - // Rename gas to gasLimit - if (transaction.gas != null && transaction.gasLimit == null) { - transaction.gasLimit = transaction.gas; - } - // Some clients (TestRPC) do strange things like return 0x0 for the - // 0 address; correct this to be a real address - if (transaction.to && bignumber_1.BigNumber.from(transaction.to).isZero()) { - transaction.to = "0x0000000000000000000000000000000000000000"; - } - // Rename input to data - if (transaction.input != null && transaction.data == null) { - transaction.data = transaction.input; - } - // If to and creates are empty, populate the creates from the transaction - if (transaction.to == null && transaction.creates == null) { - transaction.creates = this.contractAddress(transaction); - } - if ((transaction.type === 1 || transaction.type === 2) && transaction.accessList == null) { - transaction.accessList = []; - } - var result = Formatter.check(this.formats.transaction, transaction); - if (transaction.chainId != null) { - var chainId = transaction.chainId; - if ((0, bytes_1.isHexString)(chainId)) { - chainId = bignumber_1.BigNumber.from(chainId).toNumber(); - } - result.chainId = chainId; - } - else { - var chainId = transaction.networkId; - // geth-etc returns chainId - if (chainId == null && result.v == null) { - chainId = transaction.chainId; - } - if ((0, bytes_1.isHexString)(chainId)) { - chainId = bignumber_1.BigNumber.from(chainId).toNumber(); - } - if (typeof (chainId) !== "number" && result.v != null) { - chainId = (result.v - 35) / 2; - if (chainId < 0) { - chainId = 0; - } - chainId = parseInt(chainId); - } - if (typeof (chainId) !== "number") { - chainId = 0; - } - result.chainId = chainId; - } - // 0x0000... should actually be null - if (result.blockHash && result.blockHash.replace(/0/g, "") === "x") { - result.blockHash = null; - } - return result; - }; - Formatter.prototype.transaction = function (value) { - return (0, transactions_1.parse)(value); - }; - Formatter.prototype.receiptLog = function (value) { - return Formatter.check(this.formats.receiptLog, value); - }; - Formatter.prototype.receipt = function (value) { - var result = Formatter.check(this.formats.receipt, value); - // RSK incorrectly implemented EIP-658, so we munge things a bit here for it - if (result.root != null) { - if (result.root.length <= 4) { - // Could be 0x00, 0x0, 0x01 or 0x1 - var value_1 = bignumber_1.BigNumber.from(result.root).toNumber(); - if (value_1 === 0 || value_1 === 1) { - // Make sure if both are specified, they match - if (result.status != null && (result.status !== value_1)) { - logger.throwArgumentError("alt-root-status/status mismatch", "value", { root: result.root, status: result.status }); - } - result.status = value_1; - delete result.root; - } - else { - logger.throwArgumentError("invalid alt-root-status", "value.root", result.root); - } - } - else if (result.root.length !== 66) { - // Must be a valid bytes32 - logger.throwArgumentError("invalid root hash", "value.root", result.root); - } - } - if (result.status != null) { - result.byzantium = true; - } - return result; - }; - Formatter.prototype.topics = function (value) { - var _this = this; - if (Array.isArray(value)) { - return value.map(function (v) { return _this.topics(v); }); - } - else if (value != null) { - return this.hash(value, true); - } - return null; - }; - Formatter.prototype.filter = function (value) { - return Formatter.check(this.formats.filter, value); - }; - Formatter.prototype.filterLog = function (value) { - return Formatter.check(this.formats.filterLog, value); - }; - Formatter.check = function (format, object) { - var result = {}; - for (var key in format) { - try { - var value = format[key](object[key]); - if (value !== undefined) { - result[key] = value; - } - } - catch (error) { - error.checkKey = key; - error.checkValue = object[key]; - throw error; - } - } - return result; - }; - // if value is null-ish, nullValue is returned - Formatter.allowNull = function (format, nullValue) { - return (function (value) { - if (value == null) { - return nullValue; - } - return format(value); - }); - }; - // If value is false-ish, replaceValue is returned - Formatter.allowFalsish = function (format, replaceValue) { - return (function (value) { - if (!value) { - return replaceValue; - } - return format(value); - }); - }; - // Requires an Array satisfying check - Formatter.arrayOf = function (format) { - return (function (array) { - if (!Array.isArray(array)) { - throw new Error("not an array"); - } - var result = []; - array.forEach(function (value) { - result.push(format(value)); - }); - return result; - }); - }; - return Formatter; -}()); -exports.Formatter = Formatter; -function isCommunityResourcable(value) { - return (value && typeof (value.isCommunityResource) === "function"); -} -exports.isCommunityResourcable = isCommunityResourcable; -function isCommunityResource(value) { - return (isCommunityResourcable(value) && value.isCommunityResource()); -} -exports.isCommunityResource = isCommunityResource; -// Show the throttle message only once -var throttleMessage = false; -function showThrottleMessage() { - if (throttleMessage) { - return; - } - throttleMessage = true; - console.log("========= NOTICE ========="); - console.log("Request-Rate Exceeded (this message will not be repeated)"); - console.log(""); - console.log("The default API keys for each service are provided as a highly-throttled,"); - console.log("community resource for low-traffic projects and early prototyping."); - console.log(""); - console.log("While your application will continue to function, we highly recommended"); - console.log("signing up for your own API keys to improve performance, increase your"); - console.log("request rate/limit and enable other perks, such as metrics and advanced APIs."); - console.log(""); - console.log("For more details: https:/\/docs.ethers.io/api-keys/"); - console.log("=========================="); -} -exports.showThrottleMessage = showThrottleMessage; - -},{"./_version":64,"@ethersproject/address":24,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/constants":37,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/transactions":103}],73:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Formatter = exports.showThrottleMessage = exports.isCommunityResourcable = exports.isCommunityResource = exports.getNetwork = exports.getDefaultProvider = exports.JsonRpcSigner = exports.IpcProvider = exports.WebSocketProvider = exports.Web3Provider = exports.StaticJsonRpcProvider = exports.PocketProvider = exports.NodesmithProvider = exports.JsonRpcBatchProvider = exports.JsonRpcProvider = exports.InfuraWebSocketProvider = exports.InfuraProvider = exports.EtherscanProvider = exports.CloudflareProvider = exports.AlchemyWebSocketProvider = exports.AlchemyProvider = exports.FallbackProvider = exports.UrlJsonRpcProvider = exports.Resolver = exports.BaseProvider = exports.Provider = void 0; -var abstract_provider_1 = require("@ethersproject/abstract-provider"); -Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return abstract_provider_1.Provider; } }); -var networks_1 = require("@ethersproject/networks"); -Object.defineProperty(exports, "getNetwork", { enumerable: true, get: function () { return networks_1.getNetwork; } }); -var base_provider_1 = require("./base-provider"); -Object.defineProperty(exports, "BaseProvider", { enumerable: true, get: function () { return base_provider_1.BaseProvider; } }); -Object.defineProperty(exports, "Resolver", { enumerable: true, get: function () { return base_provider_1.Resolver; } }); -var alchemy_provider_1 = require("./alchemy-provider"); -Object.defineProperty(exports, "AlchemyProvider", { enumerable: true, get: function () { return alchemy_provider_1.AlchemyProvider; } }); -Object.defineProperty(exports, "AlchemyWebSocketProvider", { enumerable: true, get: function () { return alchemy_provider_1.AlchemyWebSocketProvider; } }); -var cloudflare_provider_1 = require("./cloudflare-provider"); -Object.defineProperty(exports, "CloudflareProvider", { enumerable: true, get: function () { return cloudflare_provider_1.CloudflareProvider; } }); -var etherscan_provider_1 = require("./etherscan-provider"); -Object.defineProperty(exports, "EtherscanProvider", { enumerable: true, get: function () { return etherscan_provider_1.EtherscanProvider; } }); -var fallback_provider_1 = require("./fallback-provider"); -Object.defineProperty(exports, "FallbackProvider", { enumerable: true, get: function () { return fallback_provider_1.FallbackProvider; } }); -var ipc_provider_1 = require("./ipc-provider"); -Object.defineProperty(exports, "IpcProvider", { enumerable: true, get: function () { return ipc_provider_1.IpcProvider; } }); -var infura_provider_1 = require("./infura-provider"); -Object.defineProperty(exports, "InfuraProvider", { enumerable: true, get: function () { return infura_provider_1.InfuraProvider; } }); -Object.defineProperty(exports, "InfuraWebSocketProvider", { enumerable: true, get: function () { return infura_provider_1.InfuraWebSocketProvider; } }); -var json_rpc_provider_1 = require("./json-rpc-provider"); -Object.defineProperty(exports, "JsonRpcProvider", { enumerable: true, get: function () { return json_rpc_provider_1.JsonRpcProvider; } }); -Object.defineProperty(exports, "JsonRpcSigner", { enumerable: true, get: function () { return json_rpc_provider_1.JsonRpcSigner; } }); -var json_rpc_batch_provider_1 = require("./json-rpc-batch-provider"); -Object.defineProperty(exports, "JsonRpcBatchProvider", { enumerable: true, get: function () { return json_rpc_batch_provider_1.JsonRpcBatchProvider; } }); -var nodesmith_provider_1 = require("./nodesmith-provider"); -Object.defineProperty(exports, "NodesmithProvider", { enumerable: true, get: function () { return nodesmith_provider_1.NodesmithProvider; } }); -var pocket_provider_1 = require("./pocket-provider"); -Object.defineProperty(exports, "PocketProvider", { enumerable: true, get: function () { return pocket_provider_1.PocketProvider; } }); -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -Object.defineProperty(exports, "StaticJsonRpcProvider", { enumerable: true, get: function () { return url_json_rpc_provider_1.StaticJsonRpcProvider; } }); -Object.defineProperty(exports, "UrlJsonRpcProvider", { enumerable: true, get: function () { return url_json_rpc_provider_1.UrlJsonRpcProvider; } }); -var web3_provider_1 = require("./web3-provider"); -Object.defineProperty(exports, "Web3Provider", { enumerable: true, get: function () { return web3_provider_1.Web3Provider; } }); -var websocket_provider_1 = require("./websocket-provider"); -Object.defineProperty(exports, "WebSocketProvider", { enumerable: true, get: function () { return websocket_provider_1.WebSocketProvider; } }); -var formatter_1 = require("./formatter"); -Object.defineProperty(exports, "Formatter", { enumerable: true, get: function () { return formatter_1.Formatter; } }); -Object.defineProperty(exports, "isCommunityResourcable", { enumerable: true, get: function () { return formatter_1.isCommunityResourcable; } }); -Object.defineProperty(exports, "isCommunityResource", { enumerable: true, get: function () { return formatter_1.isCommunityResource; } }); -Object.defineProperty(exports, "showThrottleMessage", { enumerable: true, get: function () { return formatter_1.showThrottleMessage; } }); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -//////////////////////// -// Helper Functions -function getDefaultProvider(network, options) { - if (network == null) { - network = "homestead"; - } - // If passed a URL, figure out the right type of provider based on the scheme - if (typeof (network) === "string") { - // @TODO: Add support for IpcProvider; maybe if it ends in ".ipc"? - // Handle http and ws (and their secure variants) - var match = network.match(/^(ws|http)s?:/i); - if (match) { - switch (match[1]) { - case "http": - return new json_rpc_provider_1.JsonRpcProvider(network); - case "ws": - return new websocket_provider_1.WebSocketProvider(network); - default: - logger.throwArgumentError("unsupported URL scheme", "network", network); - } - } - } - var n = (0, networks_1.getNetwork)(network); - if (!n || !n._defaultProvider) { - logger.throwError("unsupported getDefaultProvider network", logger_1.Logger.errors.NETWORK_ERROR, { - operation: "getDefaultProvider", - network: network - }); - } - return n._defaultProvider({ - FallbackProvider: fallback_provider_1.FallbackProvider, - AlchemyProvider: alchemy_provider_1.AlchemyProvider, - CloudflareProvider: cloudflare_provider_1.CloudflareProvider, - EtherscanProvider: etherscan_provider_1.EtherscanProvider, - InfuraProvider: infura_provider_1.InfuraProvider, - JsonRpcProvider: json_rpc_provider_1.JsonRpcProvider, - NodesmithProvider: nodesmith_provider_1.NodesmithProvider, - PocketProvider: pocket_provider_1.PocketProvider, - Web3Provider: web3_provider_1.Web3Provider, - IpcProvider: ipc_provider_1.IpcProvider, - }, options); -} -exports.getDefaultProvider = getDefaultProvider; - -},{"./_version":64,"./alchemy-provider":65,"./base-provider":66,"./cloudflare-provider":69,"./etherscan-provider":70,"./fallback-provider":71,"./formatter":72,"./infura-provider":74,"./ipc-provider":67,"./json-rpc-batch-provider":75,"./json-rpc-provider":76,"./nodesmith-provider":77,"./pocket-provider":78,"./url-json-rpc-provider":79,"./web3-provider":80,"./websocket-provider":81,"@ethersproject/abstract-provider":20,"@ethersproject/logger":57,"@ethersproject/networks":59}],74:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.InfuraProvider = exports.InfuraWebSocketProvider = void 0; -var properties_1 = require("@ethersproject/properties"); -var websocket_provider_1 = require("./websocket-provider"); -var formatter_1 = require("./formatter"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -var defaultProjectId = "84842078b09946638c03157f83405213"; -var InfuraWebSocketProvider = /** @class */ (function (_super) { - __extends(InfuraWebSocketProvider, _super); - function InfuraWebSocketProvider(network, apiKey) { - var _this = this; - var provider = new InfuraProvider(network, apiKey); - var connection = provider.connection; - if (connection.password) { - logger.throwError("INFURA WebSocket project secrets unsupported", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "InfuraProvider.getWebSocketProvider()" - }); - } - var url = connection.url.replace(/^http/i, "ws").replace("/v3/", "/ws/v3/"); - _this = _super.call(this, url, network) || this; - (0, properties_1.defineReadOnly)(_this, "apiKey", provider.projectId); - (0, properties_1.defineReadOnly)(_this, "projectId", provider.projectId); - (0, properties_1.defineReadOnly)(_this, "projectSecret", provider.projectSecret); - return _this; - } - InfuraWebSocketProvider.prototype.isCommunityResource = function () { - return (this.projectId === defaultProjectId); - }; - return InfuraWebSocketProvider; -}(websocket_provider_1.WebSocketProvider)); -exports.InfuraWebSocketProvider = InfuraWebSocketProvider; -var InfuraProvider = /** @class */ (function (_super) { - __extends(InfuraProvider, _super); - function InfuraProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - InfuraProvider.getWebSocketProvider = function (network, apiKey) { - return new InfuraWebSocketProvider(network, apiKey); - }; - InfuraProvider.getApiKey = function (apiKey) { - var apiKeyObj = { - apiKey: defaultProjectId, - projectId: defaultProjectId, - projectSecret: null - }; - if (apiKey == null) { - return apiKeyObj; - } - if (typeof (apiKey) === "string") { - apiKeyObj.projectId = apiKey; - } - else if (apiKey.projectSecret != null) { - logger.assertArgument((typeof (apiKey.projectId) === "string"), "projectSecret requires a projectId", "projectId", apiKey.projectId); - logger.assertArgument((typeof (apiKey.projectSecret) === "string"), "invalid projectSecret", "projectSecret", "[REDACTED]"); - apiKeyObj.projectId = apiKey.projectId; - apiKeyObj.projectSecret = apiKey.projectSecret; - } - else if (apiKey.projectId) { - apiKeyObj.projectId = apiKey.projectId; - } - apiKeyObj.apiKey = apiKeyObj.projectId; - return apiKeyObj; - }; - InfuraProvider.getUrl = function (network, apiKey) { - var host = null; - switch (network ? network.name : "unknown") { - case "homestead": - host = "mainnet.infura.io"; - break; - case "ropsten": - host = "ropsten.infura.io"; - break; - case "rinkeby": - host = "rinkeby.infura.io"; - break; - case "kovan": - host = "kovan.infura.io"; - break; - case "goerli": - host = "goerli.infura.io"; - break; - case "matic": - host = "polygon-mainnet.infura.io"; - break; - case "maticmum": - host = "polygon-mumbai.infura.io"; - break; - default: - logger.throwError("unsupported network", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "network", - value: network - }); - } - var connection = { - allowGzip: true, - url: ("https:/" + "/" + host + "/v3/" + apiKey.projectId), - throttleCallback: function (attempt, url) { - if (apiKey.projectId === defaultProjectId) { - (0, formatter_1.showThrottleMessage)(); - } - return Promise.resolve(true); - } - }; - if (apiKey.projectSecret != null) { - connection.user = ""; - connection.password = apiKey.projectSecret; - } - return connection; - }; - InfuraProvider.prototype.isCommunityResource = function () { - return (this.projectId === defaultProjectId); - }; - return InfuraProvider; -}(url_json_rpc_provider_1.UrlJsonRpcProvider)); -exports.InfuraProvider = InfuraProvider; - -},{"./_version":64,"./formatter":72,"./url-json-rpc-provider":79,"./websocket-provider":81,"@ethersproject/logger":57,"@ethersproject/properties":63}],75:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JsonRpcBatchProvider = void 0; -var properties_1 = require("@ethersproject/properties"); -var web_1 = require("@ethersproject/web"); -var json_rpc_provider_1 = require("./json-rpc-provider"); -// Experimental -var JsonRpcBatchProvider = /** @class */ (function (_super) { - __extends(JsonRpcBatchProvider, _super); - function JsonRpcBatchProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - JsonRpcBatchProvider.prototype.send = function (method, params) { - var _this = this; - var request = { - method: method, - params: params, - id: (this._nextId++), - jsonrpc: "2.0" - }; - if (this._pendingBatch == null) { - this._pendingBatch = []; - } - var inflightRequest = { request: request, resolve: null, reject: null }; - var promise = new Promise(function (resolve, reject) { - inflightRequest.resolve = resolve; - inflightRequest.reject = reject; - }); - this._pendingBatch.push(inflightRequest); - if (!this._pendingBatchAggregator) { - // Schedule batch for next event loop + short duration - this._pendingBatchAggregator = setTimeout(function () { - // Get teh current batch and clear it, so new requests - // go into the next batch - var batch = _this._pendingBatch; - _this._pendingBatch = null; - _this._pendingBatchAggregator = null; - // Get the request as an array of requests - var request = batch.map(function (inflight) { return inflight.request; }); - _this.emit("debug", { - action: "requestBatch", - request: (0, properties_1.deepCopy)(request), - provider: _this - }); - return (0, web_1.fetchJson)(_this.connection, JSON.stringify(request)).then(function (result) { - _this.emit("debug", { - action: "response", - request: request, - response: result, - provider: _this - }); - // For each result, feed it to the correct Promise, depending - // on whether it was a success or error - batch.forEach(function (inflightRequest, index) { - var payload = result[index]; - if (payload.error) { - var error = new Error(payload.error.message); - error.code = payload.error.code; - error.data = payload.error.data; - inflightRequest.reject(error); - } - else { - inflightRequest.resolve(payload.result); - } - }); - }, function (error) { - _this.emit("debug", { - action: "response", - error: error, - request: request, - provider: _this - }); - batch.forEach(function (inflightRequest) { - inflightRequest.reject(error); - }); - }); - }, 10); - } - return promise; - }; - return JsonRpcBatchProvider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.JsonRpcBatchProvider = JsonRpcBatchProvider; - -},{"./json-rpc-provider":76,"@ethersproject/properties":63,"@ethersproject/web":110}],76:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JsonRpcProvider = exports.JsonRpcSigner = void 0; -var abstract_signer_1 = require("@ethersproject/abstract-signer"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var hash_1 = require("@ethersproject/hash"); -var properties_1 = require("@ethersproject/properties"); -var strings_1 = require("@ethersproject/strings"); -var transactions_1 = require("@ethersproject/transactions"); -var web_1 = require("@ethersproject/web"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var base_provider_1 = require("./base-provider"); -var errorGas = ["call", "estimateGas"]; -function checkError(method, error, params) { - // Undo the "convenience" some nodes are attempting to prevent backwards - // incompatibility; maybe for v6 consider forwarding reverts as errors - if (method === "call" && error.code === logger_1.Logger.errors.SERVER_ERROR) { - var e = error.error; - if (e && e.message.match("reverted") && (0, bytes_1.isHexString)(e.data)) { - return e.data; - } - logger.throwError("missing revert data in call exception", logger_1.Logger.errors.CALL_EXCEPTION, { - error: error, - data: "0x" - }); - } - var message = error.message; - if (error.code === logger_1.Logger.errors.SERVER_ERROR && error.error && typeof (error.error.message) === "string") { - message = error.error.message; - } - else if (typeof (error.body) === "string") { - message = error.body; - } - else if (typeof (error.responseText) === "string") { - message = error.responseText; - } - message = (message || "").toLowerCase(); - var transaction = params.transaction || params.signedTransaction; - // "insufficient funds for gas * price + value + cost(data)" - if (message.match(/insufficient funds|base fee exceeds gas limit/)) { - logger.throwError("insufficient funds for intrinsic transaction cost", logger_1.Logger.errors.INSUFFICIENT_FUNDS, { - error: error, - method: method, - transaction: transaction - }); - } - // "nonce too low" - if (message.match(/nonce too low/)) { - logger.throwError("nonce has already been used", logger_1.Logger.errors.NONCE_EXPIRED, { - error: error, - method: method, - transaction: transaction - }); - } - // "replacement transaction underpriced" - if (message.match(/replacement transaction underpriced/)) { - logger.throwError("replacement fee too low", logger_1.Logger.errors.REPLACEMENT_UNDERPRICED, { - error: error, - method: method, - transaction: transaction - }); - } - // "replacement transaction underpriced" - if (message.match(/only replay-protected/)) { - logger.throwError("legacy pre-eip-155 transactions not supported", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - error: error, - method: method, - transaction: transaction - }); - } - if (errorGas.indexOf(method) >= 0 && message.match(/gas required exceeds allowance|always failing transaction|execution reverted/)) { - logger.throwError("cannot estimate gas; transaction may fail or may require manual gas limit", logger_1.Logger.errors.UNPREDICTABLE_GAS_LIMIT, { - error: error, - method: method, - transaction: transaction - }); - } - throw error; -} -function timer(timeout) { - return new Promise(function (resolve) { - setTimeout(resolve, timeout); - }); -} -function getResult(payload) { - if (payload.error) { - // @TODO: not any - var error = new Error(payload.error.message); - error.code = payload.error.code; - error.data = payload.error.data; - throw error; - } - return payload.result; -} -function getLowerCase(value) { - if (value) { - return value.toLowerCase(); - } - return value; -} -var _constructorGuard = {}; -var JsonRpcSigner = /** @class */ (function (_super) { - __extends(JsonRpcSigner, _super); - function JsonRpcSigner(constructorGuard, provider, addressOrIndex) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, JsonRpcSigner); - _this = _super.call(this) || this; - if (constructorGuard !== _constructorGuard) { - throw new Error("do not call the JsonRpcSigner constructor directly; use provider.getSigner"); - } - (0, properties_1.defineReadOnly)(_this, "provider", provider); - if (addressOrIndex == null) { - addressOrIndex = 0; - } - if (typeof (addressOrIndex) === "string") { - (0, properties_1.defineReadOnly)(_this, "_address", _this.provider.formatter.address(addressOrIndex)); - (0, properties_1.defineReadOnly)(_this, "_index", null); - } - else if (typeof (addressOrIndex) === "number") { - (0, properties_1.defineReadOnly)(_this, "_index", addressOrIndex); - (0, properties_1.defineReadOnly)(_this, "_address", null); - } - else { - logger.throwArgumentError("invalid address or index", "addressOrIndex", addressOrIndex); - } - return _this; - } - JsonRpcSigner.prototype.connect = function (provider) { - return logger.throwError("cannot alter JSON-RPC Signer connection", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "connect" - }); - }; - JsonRpcSigner.prototype.connectUnchecked = function () { - return new UncheckedJsonRpcSigner(_constructorGuard, this.provider, this._address || this._index); - }; - JsonRpcSigner.prototype.getAddress = function () { - var _this = this; - if (this._address) { - return Promise.resolve(this._address); - } - return this.provider.send("eth_accounts", []).then(function (accounts) { - if (accounts.length <= _this._index) { - logger.throwError("unknown account #" + _this._index, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "getAddress" - }); - } - return _this.provider.formatter.address(accounts[_this._index]); - }); - }; - JsonRpcSigner.prototype.sendUncheckedTransaction = function (transaction) { - var _this = this; - transaction = (0, properties_1.shallowCopy)(transaction); - var fromAddress = this.getAddress().then(function (address) { - if (address) { - address = address.toLowerCase(); - } - return address; - }); - // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user - // wishes to use this, it is easy to specify explicitly, otherwise - // we look it up for them. - if (transaction.gasLimit == null) { - var estimate = (0, properties_1.shallowCopy)(transaction); - estimate.from = fromAddress; - transaction.gasLimit = this.provider.estimateGas(estimate); - } - if (transaction.to != null) { - transaction.to = Promise.resolve(transaction.to).then(function (to) { return __awaiter(_this, void 0, void 0, function () { - var address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (to == null) { - return [2 /*return*/, null]; - } - return [4 /*yield*/, this.provider.resolveName(to)]; - case 1: - address = _a.sent(); - if (address == null) { - logger.throwArgumentError("provided ENS name resolves to null", "tx.to", to); - } - return [2 /*return*/, address]; - } - }); - }); }); - } - return (0, properties_1.resolveProperties)({ - tx: (0, properties_1.resolveProperties)(transaction), - sender: fromAddress - }).then(function (_a) { - var tx = _a.tx, sender = _a.sender; - if (tx.from != null) { - if (tx.from.toLowerCase() !== sender) { - logger.throwArgumentError("from address mismatch", "transaction", transaction); - } - } - else { - tx.from = sender; - } - var hexTx = _this.provider.constructor.hexlifyTransaction(tx, { from: true }); - return _this.provider.send("eth_sendTransaction", [hexTx]).then(function (hash) { - return hash; - }, function (error) { - return checkError("sendTransaction", error, hexTx); - }); - }); - }; - JsonRpcSigner.prototype.signTransaction = function (transaction) { - return logger.throwError("signing transactions is unsupported", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "signTransaction" - }); - }; - JsonRpcSigner.prototype.sendTransaction = function (transaction) { - return __awaiter(this, void 0, void 0, function () { - var blockNumber, hash, error_1; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.provider._getInternalBlockNumber(100 + 2 * this.provider.pollingInterval)]; - case 1: - blockNumber = _a.sent(); - return [4 /*yield*/, this.sendUncheckedTransaction(transaction)]; - case 2: - hash = _a.sent(); - _a.label = 3; - case 3: - _a.trys.push([3, 5, , 6]); - return [4 /*yield*/, (0, web_1.poll)(function () { return __awaiter(_this, void 0, void 0, function () { - var tx; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.provider.getTransaction(hash)]; - case 1: - tx = _a.sent(); - if (tx === null) { - return [2 /*return*/, undefined]; - } - return [2 /*return*/, this.provider._wrapTransaction(tx, hash, blockNumber)]; - } - }); - }); }, { oncePoll: this.provider })]; - case 4: - // Unfortunately, JSON-RPC only provides and opaque transaction hash - // for a response, and we need the actual transaction, so we poll - // for it; it should show up very quickly - return [2 /*return*/, _a.sent()]; - case 5: - error_1 = _a.sent(); - error_1.transactionHash = hash; - throw error_1; - case 6: return [2 /*return*/]; - } - }); - }); - }; - JsonRpcSigner.prototype.signMessage = function (message) { - return __awaiter(this, void 0, void 0, function () { - var data, address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - data = ((typeof (message) === "string") ? (0, strings_1.toUtf8Bytes)(message) : message); - return [4 /*yield*/, this.getAddress()]; - case 1: - address = _a.sent(); - return [4 /*yield*/, this.provider.send("personal_sign", [(0, bytes_1.hexlify)(data), address.toLowerCase()])]; - case 2: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - JsonRpcSigner.prototype._legacySignMessage = function (message) { - return __awaiter(this, void 0, void 0, function () { - var data, address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - data = ((typeof (message) === "string") ? (0, strings_1.toUtf8Bytes)(message) : message); - return [4 /*yield*/, this.getAddress()]; - case 1: - address = _a.sent(); - return [4 /*yield*/, this.provider.send("eth_sign", [address.toLowerCase(), (0, bytes_1.hexlify)(data)])]; - case 2: - // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign - return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - JsonRpcSigner.prototype._signTypedData = function (domain, types, value) { - return __awaiter(this, void 0, void 0, function () { - var populated, address; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, hash_1._TypedDataEncoder.resolveNames(domain, types, value, function (name) { - return _this.provider.resolveName(name); - })]; - case 1: - populated = _a.sent(); - return [4 /*yield*/, this.getAddress()]; - case 2: - address = _a.sent(); - return [4 /*yield*/, this.provider.send("eth_signTypedData_v4", [ - address.toLowerCase(), - JSON.stringify(hash_1._TypedDataEncoder.getPayload(populated.domain, types, populated.value)) - ])]; - case 3: return [2 /*return*/, _a.sent()]; - } - }); - }); - }; - JsonRpcSigner.prototype.unlock = function (password) { - return __awaiter(this, void 0, void 0, function () { - var provider, address; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - provider = this.provider; - return [4 /*yield*/, this.getAddress()]; - case 1: - address = _a.sent(); - return [2 /*return*/, provider.send("personal_unlockAccount", [address.toLowerCase(), password, null])]; - } - }); - }); - }; - return JsonRpcSigner; -}(abstract_signer_1.Signer)); -exports.JsonRpcSigner = JsonRpcSigner; -var UncheckedJsonRpcSigner = /** @class */ (function (_super) { - __extends(UncheckedJsonRpcSigner, _super); - function UncheckedJsonRpcSigner() { - return _super !== null && _super.apply(this, arguments) || this; - } - UncheckedJsonRpcSigner.prototype.sendTransaction = function (transaction) { - var _this = this; - return this.sendUncheckedTransaction(transaction).then(function (hash) { - return { - hash: hash, - nonce: null, - gasLimit: null, - gasPrice: null, - data: null, - value: null, - chainId: null, - confirmations: 0, - from: null, - wait: function (confirmations) { return _this.provider.waitForTransaction(hash, confirmations); } - }; - }); - }; - return UncheckedJsonRpcSigner; -}(JsonRpcSigner)); -var allowedTransactionKeys = { - chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true, - type: true, accessList: true, - maxFeePerGas: true, maxPriorityFeePerGas: true -}; -var JsonRpcProvider = /** @class */ (function (_super) { - __extends(JsonRpcProvider, _super); - function JsonRpcProvider(url, network) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, JsonRpcProvider); - var networkOrReady = network; - // The network is unknown, query the JSON-RPC for it - if (networkOrReady == null) { - networkOrReady = new Promise(function (resolve, reject) { - setTimeout(function () { - _this.detectNetwork().then(function (network) { - resolve(network); - }, function (error) { - reject(error); - }); - }, 0); - }); - } - _this = _super.call(this, networkOrReady) || this; - // Default URL - if (!url) { - url = (0, properties_1.getStatic)(_this.constructor, "defaultUrl")(); - } - if (typeof (url) === "string") { - (0, properties_1.defineReadOnly)(_this, "connection", Object.freeze({ - url: url - })); - } - else { - (0, properties_1.defineReadOnly)(_this, "connection", Object.freeze((0, properties_1.shallowCopy)(url))); - } - _this._nextId = 42; - return _this; - } - Object.defineProperty(JsonRpcProvider.prototype, "_cache", { - get: function () { - if (this._eventLoopCache == null) { - this._eventLoopCache = {}; - } - return this._eventLoopCache; - }, - enumerable: false, - configurable: true - }); - JsonRpcProvider.defaultUrl = function () { - return "http:/\/localhost:8545"; - }; - JsonRpcProvider.prototype.detectNetwork = function () { - var _this = this; - if (!this._cache["detectNetwork"]) { - this._cache["detectNetwork"] = this._uncachedDetectNetwork(); - // Clear this cache at the beginning of the next event loop - setTimeout(function () { - _this._cache["detectNetwork"] = null; - }, 0); - } - return this._cache["detectNetwork"]; - }; - JsonRpcProvider.prototype._uncachedDetectNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - var chainId, error_2, error_3, getNetwork; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, timer(0)]; - case 1: - _a.sent(); - chainId = null; - _a.label = 2; - case 2: - _a.trys.push([2, 4, , 9]); - return [4 /*yield*/, this.send("eth_chainId", [])]; - case 3: - chainId = _a.sent(); - return [3 /*break*/, 9]; - case 4: - error_2 = _a.sent(); - _a.label = 5; - case 5: - _a.trys.push([5, 7, , 8]); - return [4 /*yield*/, this.send("net_version", [])]; - case 6: - chainId = _a.sent(); - return [3 /*break*/, 8]; - case 7: - error_3 = _a.sent(); - return [3 /*break*/, 8]; - case 8: return [3 /*break*/, 9]; - case 9: - if (chainId != null) { - getNetwork = (0, properties_1.getStatic)(this.constructor, "getNetwork"); - try { - return [2 /*return*/, getNetwork(bignumber_1.BigNumber.from(chainId).toNumber())]; - } - catch (error) { - return [2 /*return*/, logger.throwError("could not detect network", logger_1.Logger.errors.NETWORK_ERROR, { - chainId: chainId, - event: "invalidNetwork", - serverError: error - })]; - } - } - return [2 /*return*/, logger.throwError("could not detect network", logger_1.Logger.errors.NETWORK_ERROR, { - event: "noNetwork" - })]; - } - }); - }); - }; - JsonRpcProvider.prototype.getSigner = function (addressOrIndex) { - return new JsonRpcSigner(_constructorGuard, this, addressOrIndex); - }; - JsonRpcProvider.prototype.getUncheckedSigner = function (addressOrIndex) { - return this.getSigner(addressOrIndex).connectUnchecked(); - }; - JsonRpcProvider.prototype.listAccounts = function () { - var _this = this; - return this.send("eth_accounts", []).then(function (accounts) { - return accounts.map(function (a) { return _this.formatter.address(a); }); - }); - }; - JsonRpcProvider.prototype.send = function (method, params) { - var _this = this; - var request = { - method: method, - params: params, - id: (this._nextId++), - jsonrpc: "2.0" - }; - this.emit("debug", { - action: "request", - request: (0, properties_1.deepCopy)(request), - provider: this - }); - // We can expand this in the future to any call, but for now these - // are the biggest wins and do not require any serializing parameters. - var cache = (["eth_chainId", "eth_blockNumber"].indexOf(method) >= 0); - if (cache && this._cache[method]) { - return this._cache[method]; - } - var result = (0, web_1.fetchJson)(this.connection, JSON.stringify(request), getResult).then(function (result) { - _this.emit("debug", { - action: "response", - request: request, - response: result, - provider: _this - }); - return result; - }, function (error) { - _this.emit("debug", { - action: "response", - error: error, - request: request, - provider: _this - }); - throw error; - }); - // Cache the fetch, but clear it on the next event loop - if (cache) { - this._cache[method] = result; - setTimeout(function () { - _this._cache[method] = null; - }, 0); - } - return result; - }; - JsonRpcProvider.prototype.prepareRequest = function (method, params) { - switch (method) { - case "getBlockNumber": - return ["eth_blockNumber", []]; - case "getGasPrice": - return ["eth_gasPrice", []]; - case "getBalance": - return ["eth_getBalance", [getLowerCase(params.address), params.blockTag]]; - case "getTransactionCount": - return ["eth_getTransactionCount", [getLowerCase(params.address), params.blockTag]]; - case "getCode": - return ["eth_getCode", [getLowerCase(params.address), params.blockTag]]; - case "getStorageAt": - return ["eth_getStorageAt", [getLowerCase(params.address), params.position, params.blockTag]]; - case "sendTransaction": - return ["eth_sendRawTransaction", [params.signedTransaction]]; - case "getBlock": - if (params.blockTag) { - return ["eth_getBlockByNumber", [params.blockTag, !!params.includeTransactions]]; - } - else if (params.blockHash) { - return ["eth_getBlockByHash", [params.blockHash, !!params.includeTransactions]]; - } - return null; - case "getTransaction": - return ["eth_getTransactionByHash", [params.transactionHash]]; - case "getTransactionReceipt": - return ["eth_getTransactionReceipt", [params.transactionHash]]; - case "call": { - var hexlifyTransaction = (0, properties_1.getStatic)(this.constructor, "hexlifyTransaction"); - return ["eth_call", [hexlifyTransaction(params.transaction, { from: true }), params.blockTag]]; - } - case "estimateGas": { - var hexlifyTransaction = (0, properties_1.getStatic)(this.constructor, "hexlifyTransaction"); - return ["eth_estimateGas", [hexlifyTransaction(params.transaction, { from: true })]]; - } - case "getLogs": - if (params.filter && params.filter.address != null) { - params.filter.address = getLowerCase(params.filter.address); - } - return ["eth_getLogs", [params.filter]]; - default: - break; - } - return null; - }; - JsonRpcProvider.prototype.perform = function (method, params) { - return __awaiter(this, void 0, void 0, function () { - var tx, feeData, args, error_4; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(method === "call" || method === "estimateGas")) return [3 /*break*/, 2]; - tx = params.transaction; - if (!(tx && tx.type != null && bignumber_1.BigNumber.from(tx.type).isZero())) return [3 /*break*/, 2]; - if (!(tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null)) return [3 /*break*/, 2]; - return [4 /*yield*/, this.getFeeData()]; - case 1: - feeData = _a.sent(); - if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) { - // Network doesn't know about EIP-1559 (and hence type) - params = (0, properties_1.shallowCopy)(params); - params.transaction = (0, properties_1.shallowCopy)(tx); - delete params.transaction.type; - } - _a.label = 2; - case 2: - args = this.prepareRequest(method, params); - if (args == null) { - logger.throwError(method + " not implemented", logger_1.Logger.errors.NOT_IMPLEMENTED, { operation: method }); - } - _a.label = 3; - case 3: - _a.trys.push([3, 5, , 6]); - return [4 /*yield*/, this.send(args[0], args[1])]; - case 4: return [2 /*return*/, _a.sent()]; - case 5: - error_4 = _a.sent(); - return [2 /*return*/, checkError(method, error_4, params)]; - case 6: return [2 /*return*/]; - } - }); - }); - }; - JsonRpcProvider.prototype._startEvent = function (event) { - if (event.tag === "pending") { - this._startPending(); - } - _super.prototype._startEvent.call(this, event); - }; - JsonRpcProvider.prototype._startPending = function () { - if (this._pendingFilter != null) { - return; - } - var self = this; - var pendingFilter = this.send("eth_newPendingTransactionFilter", []); - this._pendingFilter = pendingFilter; - pendingFilter.then(function (filterId) { - function poll() { - self.send("eth_getFilterChanges", [filterId]).then(function (hashes) { - if (self._pendingFilter != pendingFilter) { - return null; - } - var seq = Promise.resolve(); - hashes.forEach(function (hash) { - // @TODO: This should be garbage collected at some point... How? When? - self._emitted["t:" + hash.toLowerCase()] = "pending"; - seq = seq.then(function () { - return self.getTransaction(hash).then(function (tx) { - self.emit("pending", tx); - return null; - }); - }); - }); - return seq.then(function () { - return timer(1000); - }); - }).then(function () { - if (self._pendingFilter != pendingFilter) { - self.send("eth_uninstallFilter", [filterId]); - return; - } - setTimeout(function () { poll(); }, 0); - return null; - }).catch(function (error) { }); - } - poll(); - return filterId; - }).catch(function (error) { }); - }; - JsonRpcProvider.prototype._stopEvent = function (event) { - if (event.tag === "pending" && this.listenerCount("pending") === 0) { - this._pendingFilter = null; - } - _super.prototype._stopEvent.call(this, event); - }; - // Convert an ethers.js transaction into a JSON-RPC transaction - // - gasLimit => gas - // - All values hexlified - // - All numeric values zero-striped - // - All addresses are lowercased - // NOTE: This allows a TransactionRequest, but all values should be resolved - // before this is called - // @TODO: This will likely be removed in future versions and prepareRequest - // will be the preferred method for this. - JsonRpcProvider.hexlifyTransaction = function (transaction, allowExtra) { - // Check only allowed properties are given - var allowed = (0, properties_1.shallowCopy)(allowedTransactionKeys); - if (allowExtra) { - for (var key in allowExtra) { - if (allowExtra[key]) { - allowed[key] = true; - } - } - } - (0, properties_1.checkProperties)(transaction, allowed); - var result = {}; - // Some nodes (INFURA ropsten; INFURA mainnet is fine) do not like leading zeros. - ["gasLimit", "gasPrice", "type", "maxFeePerGas", "maxPriorityFeePerGas", "nonce", "value"].forEach(function (key) { - if (transaction[key] == null) { - return; - } - var value = (0, bytes_1.hexValue)(transaction[key]); - if (key === "gasLimit") { - key = "gas"; - } - result[key] = value; - }); - ["from", "to", "data"].forEach(function (key) { - if (transaction[key] == null) { - return; - } - result[key] = (0, bytes_1.hexlify)(transaction[key]); - }); - if (transaction.accessList) { - result["accessList"] = (0, transactions_1.accessListify)(transaction.accessList); - } - return result; - }; - return JsonRpcProvider; -}(base_provider_1.BaseProvider)); -exports.JsonRpcProvider = JsonRpcProvider; - -},{"./_version":64,"./base-provider":66,"@ethersproject/abstract-signer":22,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/hash":43,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/strings":100,"@ethersproject/transactions":103,"@ethersproject/web":110}],77:[function(require,module,exports){ -/* istanbul ignore file */ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.NodesmithProvider = void 0; -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -// Special API key provided by Nodesmith for ethers.js -var defaultApiKey = "ETHERS_JS_SHARED"; -var NodesmithProvider = /** @class */ (function (_super) { - __extends(NodesmithProvider, _super); - function NodesmithProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - NodesmithProvider.getApiKey = function (apiKey) { - if (apiKey && typeof (apiKey) !== "string") { - logger.throwArgumentError("invalid apiKey", "apiKey", apiKey); - } - return apiKey || defaultApiKey; - }; - NodesmithProvider.getUrl = function (network, apiKey) { - logger.warn("NodeSmith will be discontinued on 2019-12-20; please migrate to another platform."); - var host = null; - switch (network.name) { - case "homestead": - host = "https://ethereum.api.nodesmith.io/v1/mainnet/jsonrpc"; - break; - case "ropsten": - host = "https://ethereum.api.nodesmith.io/v1/ropsten/jsonrpc"; - break; - case "rinkeby": - host = "https://ethereum.api.nodesmith.io/v1/rinkeby/jsonrpc"; - break; - case "goerli": - host = "https://ethereum.api.nodesmith.io/v1/goerli/jsonrpc"; - break; - case "kovan": - host = "https://ethereum.api.nodesmith.io/v1/kovan/jsonrpc"; - break; - default: - logger.throwArgumentError("unsupported network", "network", arguments[0]); - } - return (host + "?apiKey=" + apiKey); - }; - return NodesmithProvider; -}(url_json_rpc_provider_1.UrlJsonRpcProvider)); -exports.NodesmithProvider = NodesmithProvider; - -},{"./_version":64,"./url-json-rpc-provider":79,"@ethersproject/logger":57}],78:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PocketProvider = void 0; -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var url_json_rpc_provider_1 = require("./url-json-rpc-provider"); -// These are load-balancer-based application IDs -var defaultApplicationIds = { - homestead: "6004bcd10040261633ade990", - ropsten: "6004bd4d0040261633ade991", - rinkeby: "6004bda20040261633ade994", - goerli: "6004bd860040261633ade992", -}; -var PocketProvider = /** @class */ (function (_super) { - __extends(PocketProvider, _super); - function PocketProvider(network, apiKey) { - // We need a bit of creativity in the constructor because - // Pocket uses different default API keys based on the network - var _newTarget = this.constructor; - var _this = this; - if (apiKey == null) { - var n = (0, properties_1.getStatic)(_newTarget, "getNetwork")(network); - if (n) { - var applicationId = defaultApplicationIds[n.name]; - if (applicationId) { - apiKey = { - applicationId: applicationId, - loadBalancer: true - }; - } - } - // If there was any issue above, we don't know this network - if (apiKey == null) { - logger.throwError("unsupported network", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "network", - value: network - }); - } - } - _this = _super.call(this, network, apiKey) || this; - return _this; - } - PocketProvider.getApiKey = function (apiKey) { - // Most API Providers allow null to get the default configuration, but - // Pocket requires the network to decide the default provider, so we - // rely on hijacking the constructor to add a sensible default for us - if (apiKey == null) { - logger.throwArgumentError("PocketProvider.getApiKey does not support null apiKey", "apiKey", apiKey); - } - var apiKeyObj = { - applicationId: null, - loadBalancer: false, - applicationSecretKey: null - }; - // Parse applicationId and applicationSecretKey - if (typeof (apiKey) === "string") { - apiKeyObj.applicationId = apiKey; - } - else if (apiKey.applicationSecretKey != null) { - logger.assertArgument((typeof (apiKey.applicationId) === "string"), "applicationSecretKey requires an applicationId", "applicationId", apiKey.applicationId); - logger.assertArgument((typeof (apiKey.applicationSecretKey) === "string"), "invalid applicationSecretKey", "applicationSecretKey", "[REDACTED]"); - apiKeyObj.applicationId = apiKey.applicationId; - apiKeyObj.applicationSecretKey = apiKey.applicationSecretKey; - apiKeyObj.loadBalancer = !!apiKey.loadBalancer; - } - else if (apiKey.applicationId) { - logger.assertArgument((typeof (apiKey.applicationId) === "string"), "apiKey.applicationId must be a string", "apiKey.applicationId", apiKey.applicationId); - apiKeyObj.applicationId = apiKey.applicationId; - apiKeyObj.loadBalancer = !!apiKey.loadBalancer; - } - else { - logger.throwArgumentError("unsupported PocketProvider apiKey", "apiKey", apiKey); - } - return apiKeyObj; - }; - PocketProvider.getUrl = function (network, apiKey) { - var host = null; - switch (network ? network.name : "unknown") { - case "homestead": - host = "eth-mainnet.gateway.pokt.network"; - break; - case "ropsten": - host = "eth-ropsten.gateway.pokt.network"; - break; - case "rinkeby": - host = "eth-rinkeby.gateway.pokt.network"; - break; - case "goerli": - host = "eth-goerli.gateway.pokt.network"; - break; - default: - logger.throwError("unsupported network", logger_1.Logger.errors.INVALID_ARGUMENT, { - argument: "network", - value: network - }); - } - var url = null; - if (apiKey.loadBalancer) { - url = "https://" + host + "/v1/lb/" + apiKey.applicationId; - } - else { - url = "https://" + host + "/v1/" + apiKey.applicationId; - } - var connection = { url: url }; - // Initialize empty headers - connection.headers = {}; - // Apply application secret key - if (apiKey.applicationSecretKey != null) { - connection.user = ""; - connection.password = apiKey.applicationSecretKey; - } - return connection; - }; - PocketProvider.prototype.isCommunityResource = function () { - return (this.applicationId === defaultApplicationIds[this.network.name]); - }; - return PocketProvider; -}(url_json_rpc_provider_1.UrlJsonRpcProvider)); -exports.PocketProvider = PocketProvider; - -},{"./_version":64,"./url-json-rpc-provider":79,"@ethersproject/logger":57,"@ethersproject/properties":63}],79:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UrlJsonRpcProvider = exports.StaticJsonRpcProvider = void 0; -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var json_rpc_provider_1 = require("./json-rpc-provider"); -// A StaticJsonRpcProvider is useful when you *know* for certain that -// the backend will never change, as it never calls eth_chainId to -// verify its backend. However, if the backend does change, the effects -// are undefined and may include: -// - inconsistent results -// - locking up the UI -// - block skew warnings -// - wrong results -// If the network is not explicit (i.e. auto-detection is expected), the -// node MUST be running and available to respond to requests BEFORE this -// is instantiated. -var StaticJsonRpcProvider = /** @class */ (function (_super) { - __extends(StaticJsonRpcProvider, _super); - function StaticJsonRpcProvider() { - return _super !== null && _super.apply(this, arguments) || this; - } - StaticJsonRpcProvider.prototype.detectNetwork = function () { - return __awaiter(this, void 0, void 0, function () { - var network; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - network = this.network; - if (!(network == null)) return [3 /*break*/, 2]; - return [4 /*yield*/, _super.prototype.detectNetwork.call(this)]; - case 1: - network = _a.sent(); - if (!network) { - logger.throwError("no network detected", logger_1.Logger.errors.UNKNOWN_ERROR, {}); - } - // If still not set, set it - if (this._network == null) { - // A static network does not support "any" - (0, properties_1.defineReadOnly)(this, "_network", network); - this.emit("network", network, null); - } - _a.label = 2; - case 2: return [2 /*return*/, network]; - } - }); - }); - }; - return StaticJsonRpcProvider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.StaticJsonRpcProvider = StaticJsonRpcProvider; -var UrlJsonRpcProvider = /** @class */ (function (_super) { - __extends(UrlJsonRpcProvider, _super); - function UrlJsonRpcProvider(network, apiKey) { - var _newTarget = this.constructor; - var _this = this; - logger.checkAbstract(_newTarget, UrlJsonRpcProvider); - // Normalize the Network and API Key - network = (0, properties_1.getStatic)(_newTarget, "getNetwork")(network); - apiKey = (0, properties_1.getStatic)(_newTarget, "getApiKey")(apiKey); - var connection = (0, properties_1.getStatic)(_newTarget, "getUrl")(network, apiKey); - _this = _super.call(this, connection, network) || this; - if (typeof (apiKey) === "string") { - (0, properties_1.defineReadOnly)(_this, "apiKey", apiKey); - } - else if (apiKey != null) { - Object.keys(apiKey).forEach(function (key) { - (0, properties_1.defineReadOnly)(_this, key, apiKey[key]); - }); - } - return _this; - } - UrlJsonRpcProvider.prototype._startPending = function () { - logger.warn("WARNING: API provider does not support pending filters"); - }; - UrlJsonRpcProvider.prototype.isCommunityResource = function () { - return false; - }; - UrlJsonRpcProvider.prototype.getSigner = function (address) { - return logger.throwError("API provider does not support signing", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { operation: "getSigner" }); - }; - UrlJsonRpcProvider.prototype.listAccounts = function () { - return Promise.resolve([]); - }; - // Return a defaultApiKey if null, otherwise validate the API key - UrlJsonRpcProvider.getApiKey = function (apiKey) { - return apiKey; - }; - // Returns the url or connection for the given network and API key. The - // API key will have been sanitized by the getApiKey first, so any validation - // or transformations can be done there. - UrlJsonRpcProvider.getUrl = function (network, apiKey) { - return logger.throwError("not implemented; sub-classes must override getUrl", logger_1.Logger.errors.NOT_IMPLEMENTED, { - operation: "getUrl" - }); - }; - return UrlJsonRpcProvider; -}(StaticJsonRpcProvider)); -exports.UrlJsonRpcProvider = UrlJsonRpcProvider; - -},{"./_version":64,"./json-rpc-provider":76,"@ethersproject/logger":57,"@ethersproject/properties":63}],80:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Web3Provider = void 0; -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var json_rpc_provider_1 = require("./json-rpc-provider"); -var _nextId = 1; -function buildWeb3LegacyFetcher(provider, sendFunc) { - var fetcher = "Web3LegacyFetcher"; - return function (method, params) { - var _this = this; - var request = { - method: method, - params: params, - id: (_nextId++), - jsonrpc: "2.0" - }; - return new Promise(function (resolve, reject) { - _this.emit("debug", { - action: "request", - fetcher: fetcher, - request: (0, properties_1.deepCopy)(request), - provider: _this - }); - sendFunc(request, function (error, response) { - if (error) { - _this.emit("debug", { - action: "response", - fetcher: fetcher, - error: error, - request: request, - provider: _this - }); - return reject(error); - } - _this.emit("debug", { - action: "response", - fetcher: fetcher, - request: request, - response: response, - provider: _this - }); - if (response.error) { - var error_1 = new Error(response.error.message); - error_1.code = response.error.code; - error_1.data = response.error.data; - return reject(error_1); - } - resolve(response.result); - }); - }); - }; -} -function buildEip1193Fetcher(provider) { - return function (method, params) { - var _this = this; - if (params == null) { - params = []; - } - var request = { method: method, params: params }; - this.emit("debug", { - action: "request", - fetcher: "Eip1193Fetcher", - request: (0, properties_1.deepCopy)(request), - provider: this - }); - return provider.request(request).then(function (response) { - _this.emit("debug", { - action: "response", - fetcher: "Eip1193Fetcher", - request: request, - response: response, - provider: _this - }); - return response; - }, function (error) { - _this.emit("debug", { - action: "response", - fetcher: "Eip1193Fetcher", - request: request, - error: error, - provider: _this - }); - throw error; - }); - }; -} -var Web3Provider = /** @class */ (function (_super) { - __extends(Web3Provider, _super); - function Web3Provider(provider, network) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, Web3Provider); - if (provider == null) { - logger.throwArgumentError("missing provider", "provider", provider); - } - var path = null; - var jsonRpcFetchFunc = null; - var subprovider = null; - if (typeof (provider) === "function") { - path = "unknown:"; - jsonRpcFetchFunc = provider; - } - else { - path = provider.host || provider.path || ""; - if (!path && provider.isMetaMask) { - path = "metamask"; - } - subprovider = provider; - if (provider.request) { - if (path === "") { - path = "eip-1193:"; - } - jsonRpcFetchFunc = buildEip1193Fetcher(provider); - } - else if (provider.sendAsync) { - jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider)); - } - else if (provider.send) { - jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider)); - } - else { - logger.throwArgumentError("unsupported provider", "provider", provider); - } - if (!path) { - path = "unknown:"; - } - } - _this = _super.call(this, path, network) || this; - (0, properties_1.defineReadOnly)(_this, "jsonRpcFetchFunc", jsonRpcFetchFunc); - (0, properties_1.defineReadOnly)(_this, "provider", subprovider); - return _this; - } - Web3Provider.prototype.send = function (method, params) { - return this.jsonRpcFetchFunc(method, params); - }; - return Web3Provider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.Web3Provider = Web3Provider; - -},{"./_version":64,"./json-rpc-provider":76,"@ethersproject/logger":57,"@ethersproject/properties":63}],81:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WebSocketProvider = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var properties_1 = require("@ethersproject/properties"); -var json_rpc_provider_1 = require("./json-rpc-provider"); -var ws_1 = require("./ws"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -/** - * Notes: - * - * This provider differs a bit from the polling providers. One main - * difference is how it handles consistency. The polling providers - * will stall responses to ensure a consistent state, while this - * WebSocket provider assumes the connected backend will manage this. - * - * For example, if a polling provider emits an event which indicates - * the event occurred in blockhash XXX, a call to fetch that block by - * its hash XXX, if not present will retry until it is present. This - * can occur when querying a pool of nodes that are mildly out of sync - * with each other. - */ -var NextId = 1; -// For more info about the Real-time Event API see: -// https://geth.ethereum.org/docs/rpc/pubsub -var WebSocketProvider = /** @class */ (function (_super) { - __extends(WebSocketProvider, _super); - function WebSocketProvider(url, network) { - var _this = this; - // This will be added in the future; please open an issue to expedite - if (network === "any") { - logger.throwError("WebSocketProvider does not support 'any' network yet", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "network:any" - }); - } - _this = _super.call(this, url, network) || this; - _this._pollingInterval = -1; - _this._wsReady = false; - (0, properties_1.defineReadOnly)(_this, "_websocket", new ws_1.WebSocket(_this.connection.url)); - (0, properties_1.defineReadOnly)(_this, "_requests", {}); - (0, properties_1.defineReadOnly)(_this, "_subs", {}); - (0, properties_1.defineReadOnly)(_this, "_subIds", {}); - (0, properties_1.defineReadOnly)(_this, "_detectNetwork", _super.prototype.detectNetwork.call(_this)); - // Stall sending requests until the socket is open... - _this._websocket.onopen = function () { - _this._wsReady = true; - Object.keys(_this._requests).forEach(function (id) { - _this._websocket.send(_this._requests[id].payload); - }); - }; - _this._websocket.onmessage = function (messageEvent) { - var data = messageEvent.data; - var result = JSON.parse(data); - if (result.id != null) { - var id = String(result.id); - var request = _this._requests[id]; - delete _this._requests[id]; - if (result.result !== undefined) { - request.callback(null, result.result); - _this.emit("debug", { - action: "response", - request: JSON.parse(request.payload), - response: result.result, - provider: _this - }); - } - else { - var error = null; - if (result.error) { - error = new Error(result.error.message || "unknown error"); - (0, properties_1.defineReadOnly)(error, "code", result.error.code || null); - (0, properties_1.defineReadOnly)(error, "response", data); - } - else { - error = new Error("unknown error"); - } - request.callback(error, undefined); - _this.emit("debug", { - action: "response", - error: error, - request: JSON.parse(request.payload), - provider: _this - }); - } - } - else if (result.method === "eth_subscription") { - // Subscription... - var sub = _this._subs[result.params.subscription]; - if (sub) { - //this.emit.apply(this, ); - sub.processFunc(result.params.result); - } - } - else { - console.warn("this should not happen"); - } - }; - // This Provider does not actually poll, but we want to trigger - // poll events for things that depend on them (like stalling for - // block and transaction lookups) - var fauxPoll = setInterval(function () { - _this.emit("poll"); - }, 1000); - if (fauxPoll.unref) { - fauxPoll.unref(); - } - return _this; - } - WebSocketProvider.prototype.detectNetwork = function () { - return this._detectNetwork; - }; - Object.defineProperty(WebSocketProvider.prototype, "pollingInterval", { - get: function () { - return 0; - }, - set: function (value) { - logger.throwError("cannot set polling interval on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "setPollingInterval" - }); - }, - enumerable: false, - configurable: true - }); - WebSocketProvider.prototype.resetEventsBlock = function (blockNumber) { - logger.throwError("cannot reset events block on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "resetEventBlock" - }); - }; - WebSocketProvider.prototype.poll = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, null]; - }); - }); - }; - Object.defineProperty(WebSocketProvider.prototype, "polling", { - set: function (value) { - if (!value) { - return; - } - logger.throwError("cannot set polling on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "setPolling" - }); - }, - enumerable: false, - configurable: true - }); - WebSocketProvider.prototype.send = function (method, params) { - var _this = this; - var rid = NextId++; - return new Promise(function (resolve, reject) { - function callback(error, result) { - if (error) { - return reject(error); - } - return resolve(result); - } - var payload = JSON.stringify({ - method: method, - params: params, - id: rid, - jsonrpc: "2.0" - }); - _this.emit("debug", { - action: "request", - request: JSON.parse(payload), - provider: _this - }); - _this._requests[String(rid)] = { callback: callback, payload: payload }; - if (_this._wsReady) { - _this._websocket.send(payload); - } - }); - }; - WebSocketProvider.defaultUrl = function () { - return "ws:/\/localhost:8546"; - }; - WebSocketProvider.prototype._subscribe = function (tag, param, processFunc) { - return __awaiter(this, void 0, void 0, function () { - var subIdPromise, subId; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - subIdPromise = this._subIds[tag]; - if (subIdPromise == null) { - subIdPromise = Promise.all(param).then(function (param) { - return _this.send("eth_subscribe", param); - }); - this._subIds[tag] = subIdPromise; - } - return [4 /*yield*/, subIdPromise]; - case 1: - subId = _a.sent(); - this._subs[subId] = { tag: tag, processFunc: processFunc }; - return [2 /*return*/]; - } - }); - }); - }; - WebSocketProvider.prototype._startEvent = function (event) { - var _this = this; - switch (event.type) { - case "block": - this._subscribe("block", ["newHeads"], function (result) { - var blockNumber = bignumber_1.BigNumber.from(result.number).toNumber(); - _this._emitted.block = blockNumber; - _this.emit("block", blockNumber); - }); - break; - case "pending": - this._subscribe("pending", ["newPendingTransactions"], function (result) { - _this.emit("pending", result); - }); - break; - case "filter": - this._subscribe(event.tag, ["logs", this._getFilter(event.filter)], function (result) { - if (result.removed == null) { - result.removed = false; - } - _this.emit(event.filter, _this.formatter.filterLog(result)); - }); - break; - case "tx": { - var emitReceipt_1 = function (event) { - var hash = event.hash; - _this.getTransactionReceipt(hash).then(function (receipt) { - if (!receipt) { - return; - } - _this.emit(hash, receipt); - }); - }; - // In case it is already mined - emitReceipt_1(event); - // To keep things simple, we start up a single newHeads subscription - // to keep an eye out for transactions we are watching for. - // Starting a subscription for an event (i.e. "tx") that is already - // running is (basically) a nop. - this._subscribe("tx", ["newHeads"], function (result) { - _this._events.filter(function (e) { return (e.type === "tx"); }).forEach(emitReceipt_1); - }); - break; - } - // Nothing is needed - case "debug": - case "poll": - case "willPoll": - case "didPoll": - case "error": - break; - default: - console.log("unhandled:", event); - break; - } - }; - WebSocketProvider.prototype._stopEvent = function (event) { - var _this = this; - var tag = event.tag; - if (event.type === "tx") { - // There are remaining transaction event listeners - if (this._events.filter(function (e) { return (e.type === "tx"); }).length) { - return; - } - tag = "tx"; - } - else if (this.listenerCount(event.event)) { - // There are remaining event listeners - return; - } - var subId = this._subIds[tag]; - if (!subId) { - return; - } - delete this._subIds[tag]; - subId.then(function (subId) { - if (!_this._subs[subId]) { - return; - } - delete _this._subs[subId]; - _this.send("eth_unsubscribe", [subId]); - }); - }; - WebSocketProvider.prototype.destroy = function () { - return __awaiter(this, void 0, void 0, function () { - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (!(this._websocket.readyState === ws_1.WebSocket.CONNECTING)) return [3 /*break*/, 2]; - return [4 /*yield*/, (new Promise(function (resolve) { - _this._websocket.onopen = function () { - resolve(true); - }; - _this._websocket.onerror = function () { - resolve(false); - }; - }))]; - case 1: - _a.sent(); - _a.label = 2; - case 2: - // Hangup - // See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes - this._websocket.close(1000); - return [2 /*return*/]; - } - }); - }); - }; - return WebSocketProvider; -}(json_rpc_provider_1.JsonRpcProvider)); -exports.WebSocketProvider = WebSocketProvider; - -},{"./_version":64,"./json-rpc-provider":76,"./ws":68,"@ethersproject/bignumber":31,"@ethersproject/logger":57,"@ethersproject/properties":63}],82:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "random/5.5.0"; - -},{}],83:[function(require,module,exports){ -(function (global){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.randomBytes = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -// Debugging line for testing browser lib in node -//const window = { crypto: { getRandomValues: () => { } } }; -var anyGlobal = null; -try { - anyGlobal = window; - if (anyGlobal == null) { - throw new Error("try next"); - } -} -catch (error) { - try { - anyGlobal = global; - if (anyGlobal == null) { - throw new Error("try next"); - } - } - catch (error) { - anyGlobal = {}; - } -} -var crypto = anyGlobal.crypto || anyGlobal.msCrypto; -if (!crypto || !crypto.getRandomValues) { - logger.warn("WARNING: Missing strong random number source"); - crypto = { - getRandomValues: function (buffer) { - return logger.throwError("no secure random source avaialble", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "crypto.getRandomValues" - }); - } - }; -} -function randomBytes(length) { - if (length <= 0 || length > 1024 || (length % 1) || length != length) { - logger.throwArgumentError("invalid length", "length", length); - } - var result = new Uint8Array(length); - crypto.getRandomValues(result); - return (0, bytes_1.arrayify)(result); -} -exports.randomBytes = randomBytes; -; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./_version":82,"@ethersproject/bytes":33,"@ethersproject/logger":57}],84:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.shuffled = exports.randomBytes = void 0; -var random_1 = require("./random"); -Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return random_1.randomBytes; } }); -var shuffle_1 = require("./shuffle"); -Object.defineProperty(exports, "shuffled", { enumerable: true, get: function () { return shuffle_1.shuffled; } }); - -},{"./random":83,"./shuffle":85}],85:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.shuffled = void 0; -function shuffled(array) { - array = array.slice(); - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - var tmp = array[i]; - array[i] = array[j]; - array[j] = tmp; - } - return array; -} -exports.shuffled = shuffled; - -},{}],86:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "rlp/5.5.0"; - -},{}],87:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decode = exports.encode = void 0; -//See: https://github.com/ethereum/wiki/wiki/RLP -var bytes_1 = require("@ethersproject/bytes"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function arrayifyInteger(value) { - var result = []; - while (value) { - result.unshift(value & 0xff); - value >>= 8; - } - return result; -} -function unarrayifyInteger(data, offset, length) { - var result = 0; - for (var i = 0; i < length; i++) { - result = (result * 256) + data[offset + i]; - } - return result; -} -function _encode(object) { - if (Array.isArray(object)) { - var payload_1 = []; - object.forEach(function (child) { - payload_1 = payload_1.concat(_encode(child)); - }); - if (payload_1.length <= 55) { - payload_1.unshift(0xc0 + payload_1.length); - return payload_1; - } - var length_1 = arrayifyInteger(payload_1.length); - length_1.unshift(0xf7 + length_1.length); - return length_1.concat(payload_1); - } - if (!(0, bytes_1.isBytesLike)(object)) { - logger.throwArgumentError("RLP object must be BytesLike", "object", object); - } - var data = Array.prototype.slice.call((0, bytes_1.arrayify)(object)); - if (data.length === 1 && data[0] <= 0x7f) { - return data; - } - else if (data.length <= 55) { - data.unshift(0x80 + data.length); - return data; - } - var length = arrayifyInteger(data.length); - length.unshift(0xb7 + length.length); - return length.concat(data); -} -function encode(object) { - return (0, bytes_1.hexlify)(_encode(object)); -} -exports.encode = encode; -function _decodeChildren(data, offset, childOffset, length) { - var result = []; - while (childOffset < offset + 1 + length) { - var decoded = _decode(data, childOffset); - result.push(decoded.result); - childOffset += decoded.consumed; - if (childOffset > offset + 1 + length) { - logger.throwError("child data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - } - return { consumed: (1 + length), result: result }; -} -// returns { consumed: number, result: Object } -function _decode(data, offset) { - if (data.length === 0) { - logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - // Array with extra length prefix - if (data[offset] >= 0xf8) { - var lengthLength = data[offset] - 0xf7; - if (offset + 1 + lengthLength > data.length) { - logger.throwError("data short segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - var length_2 = unarrayifyInteger(data, offset + 1, lengthLength); - if (offset + 1 + lengthLength + length_2 > data.length) { - logger.throwError("data long segment too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length_2); - } - else if (data[offset] >= 0xc0) { - var length_3 = data[offset] - 0xc0; - if (offset + 1 + length_3 > data.length) { - logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - return _decodeChildren(data, offset, offset + 1, length_3); - } - else if (data[offset] >= 0xb8) { - var lengthLength = data[offset] - 0xb7; - if (offset + 1 + lengthLength > data.length) { - logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - var length_4 = unarrayifyInteger(data, offset + 1, lengthLength); - if (offset + 1 + lengthLength + length_4 > data.length) { - logger.throwError("data array too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - var result = (0, bytes_1.hexlify)(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length_4)); - return { consumed: (1 + lengthLength + length_4), result: result }; - } - else if (data[offset] >= 0x80) { - var length_5 = data[offset] - 0x80; - if (offset + 1 + length_5 > data.length) { - logger.throwError("data too short", logger_1.Logger.errors.BUFFER_OVERRUN, {}); - } - var result = (0, bytes_1.hexlify)(data.slice(offset + 1, offset + 1 + length_5)); - return { consumed: (1 + length_5), result: result }; - } - return { consumed: 1, result: (0, bytes_1.hexlify)(data[offset]) }; -} -function decode(data) { - var bytes = (0, bytes_1.arrayify)(data); - var decoded = _decode(bytes, 0); - if (decoded.consumed !== bytes.length) { - logger.throwArgumentError("invalid rlp data", "data", data); - } - return decoded.result; -} -exports.decode = decode; - -},{"./_version":86,"@ethersproject/bytes":33,"@ethersproject/logger":57}],88:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "sha2/5.5.0"; - -},{}],89:[function(require,module,exports){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.computeHmac = exports.sha512 = exports.sha256 = exports.ripemd160 = void 0; -var hash_js_1 = __importDefault(require("hash.js")); -//const _ripemd160 = _hash.ripemd160; -var bytes_1 = require("@ethersproject/bytes"); -var types_1 = require("./types"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function ripemd160(data) { - return "0x" + (hash_js_1.default.ripemd160().update((0, bytes_1.arrayify)(data)).digest("hex")); -} -exports.ripemd160 = ripemd160; -function sha256(data) { - return "0x" + (hash_js_1.default.sha256().update((0, bytes_1.arrayify)(data)).digest("hex")); -} -exports.sha256 = sha256; -function sha512(data) { - return "0x" + (hash_js_1.default.sha512().update((0, bytes_1.arrayify)(data)).digest("hex")); -} -exports.sha512 = sha512; -function computeHmac(algorithm, key, data) { - if (!types_1.SupportedAlgorithm[algorithm]) { - logger.throwError("unsupported algorithm " + algorithm, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "hmac", - algorithm: algorithm - }); - } - return "0x" + hash_js_1.default.hmac(hash_js_1.default[algorithm], (0, bytes_1.arrayify)(key)).update((0, bytes_1.arrayify)(data)).digest("hex"); -} -exports.computeHmac = computeHmac; - -},{"./_version":88,"./types":91,"@ethersproject/bytes":33,"@ethersproject/logger":57,"hash.js":249}],90:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SupportedAlgorithm = exports.sha512 = exports.sha256 = exports.ripemd160 = exports.computeHmac = void 0; -var sha2_1 = require("./sha2"); -Object.defineProperty(exports, "computeHmac", { enumerable: true, get: function () { return sha2_1.computeHmac; } }); -Object.defineProperty(exports, "ripemd160", { enumerable: true, get: function () { return sha2_1.ripemd160; } }); -Object.defineProperty(exports, "sha256", { enumerable: true, get: function () { return sha2_1.sha256; } }); -Object.defineProperty(exports, "sha512", { enumerable: true, get: function () { return sha2_1.sha512; } }); -var types_1 = require("./types"); -Object.defineProperty(exports, "SupportedAlgorithm", { enumerable: true, get: function () { return types_1.SupportedAlgorithm; } }); - -},{"./sha2":89,"./types":91}],91:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SupportedAlgorithm = void 0; -var SupportedAlgorithm; -(function (SupportedAlgorithm) { - SupportedAlgorithm["sha256"] = "sha256"; - SupportedAlgorithm["sha512"] = "sha512"; -})(SupportedAlgorithm = exports.SupportedAlgorithm || (exports.SupportedAlgorithm = {})); -; - -},{}],92:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "signing-key/5.5.0"; - -},{}],93:[function(require,module,exports){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.EC = void 0; -var elliptic_1 = __importDefault(require("elliptic")); -var EC = elliptic_1.default.ec; -exports.EC = EC; - -},{"elliptic":227}],94:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.computePublicKey = exports.recoverPublicKey = exports.SigningKey = void 0; -var elliptic_1 = require("./elliptic"); -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var _curve = null; -function getCurve() { - if (!_curve) { - _curve = new elliptic_1.EC("secp256k1"); - } - return _curve; -} -var SigningKey = /** @class */ (function () { - function SigningKey(privateKey) { - (0, properties_1.defineReadOnly)(this, "curve", "secp256k1"); - (0, properties_1.defineReadOnly)(this, "privateKey", (0, bytes_1.hexlify)(privateKey)); - var keyPair = getCurve().keyFromPrivate((0, bytes_1.arrayify)(this.privateKey)); - (0, properties_1.defineReadOnly)(this, "publicKey", "0x" + keyPair.getPublic(false, "hex")); - (0, properties_1.defineReadOnly)(this, "compressedPublicKey", "0x" + keyPair.getPublic(true, "hex")); - (0, properties_1.defineReadOnly)(this, "_isSigningKey", true); - } - SigningKey.prototype._addPoint = function (other) { - var p0 = getCurve().keyFromPublic((0, bytes_1.arrayify)(this.publicKey)); - var p1 = getCurve().keyFromPublic((0, bytes_1.arrayify)(other)); - return "0x" + p0.pub.add(p1.pub).encodeCompressed("hex"); - }; - SigningKey.prototype.signDigest = function (digest) { - var keyPair = getCurve().keyFromPrivate((0, bytes_1.arrayify)(this.privateKey)); - var digestBytes = (0, bytes_1.arrayify)(digest); - if (digestBytes.length !== 32) { - logger.throwArgumentError("bad digest length", "digest", digest); - } - var signature = keyPair.sign(digestBytes, { canonical: true }); - return (0, bytes_1.splitSignature)({ - recoveryParam: signature.recoveryParam, - r: (0, bytes_1.hexZeroPad)("0x" + signature.r.toString(16), 32), - s: (0, bytes_1.hexZeroPad)("0x" + signature.s.toString(16), 32), - }); - }; - SigningKey.prototype.computeSharedSecret = function (otherKey) { - var keyPair = getCurve().keyFromPrivate((0, bytes_1.arrayify)(this.privateKey)); - var otherKeyPair = getCurve().keyFromPublic((0, bytes_1.arrayify)(computePublicKey(otherKey))); - return (0, bytes_1.hexZeroPad)("0x" + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32); - }; - SigningKey.isSigningKey = function (value) { - return !!(value && value._isSigningKey); - }; - return SigningKey; -}()); -exports.SigningKey = SigningKey; -function recoverPublicKey(digest, signature) { - var sig = (0, bytes_1.splitSignature)(signature); - var rs = { r: (0, bytes_1.arrayify)(sig.r), s: (0, bytes_1.arrayify)(sig.s) }; - return "0x" + getCurve().recoverPubKey((0, bytes_1.arrayify)(digest), rs, sig.recoveryParam).encode("hex", false); -} -exports.recoverPublicKey = recoverPublicKey; -function computePublicKey(key, compressed) { - var bytes = (0, bytes_1.arrayify)(key); - if (bytes.length === 32) { - var signingKey = new SigningKey(bytes); - if (compressed) { - return "0x" + getCurve().keyFromPrivate(bytes).getPublic(true, "hex"); - } - return signingKey.publicKey; - } - else if (bytes.length === 33) { - if (compressed) { - return (0, bytes_1.hexlify)(bytes); - } - return "0x" + getCurve().keyFromPublic(bytes).getPublic(false, "hex"); - } - else if (bytes.length === 65) { - if (!compressed) { - return (0, bytes_1.hexlify)(bytes); - } - return "0x" + getCurve().keyFromPublic(bytes).getPublic(true, "hex"); - } - return logger.throwArgumentError("invalid public or private key", "key", "[REDACTED]"); -} -exports.computePublicKey = computePublicKey; - -},{"./_version":92,"./elliptic":93,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63}],95:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "solidity/5.5.0"; - -},{}],96:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.sha256 = exports.keccak256 = exports.pack = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var keccak256_1 = require("@ethersproject/keccak256"); -var sha2_1 = require("@ethersproject/sha2"); -var strings_1 = require("@ethersproject/strings"); -var regexBytes = new RegExp("^bytes([0-9]+)$"); -var regexNumber = new RegExp("^(u?int)([0-9]*)$"); -var regexArray = new RegExp("^(.*)\\[([0-9]*)\\]$"); -var Zeros = "0000000000000000000000000000000000000000000000000000000000000000"; -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function _pack(type, value, isArray) { - switch (type) { - case "address": - if (isArray) { - return (0, bytes_1.zeroPad)(value, 32); - } - return (0, bytes_1.arrayify)(value); - case "string": - return (0, strings_1.toUtf8Bytes)(value); - case "bytes": - return (0, bytes_1.arrayify)(value); - case "bool": - value = (value ? "0x01" : "0x00"); - if (isArray) { - return (0, bytes_1.zeroPad)(value, 32); - } - return (0, bytes_1.arrayify)(value); - } - var match = type.match(regexNumber); - if (match) { - //let signed = (match[1] === "int") - var size = parseInt(match[2] || "256"); - if ((match[2] && String(size) !== match[2]) || (size % 8 !== 0) || size === 0 || size > 256) { - logger.throwArgumentError("invalid number type", "type", type); - } - if (isArray) { - size = 256; - } - value = bignumber_1.BigNumber.from(value).toTwos(size); - return (0, bytes_1.zeroPad)(value, size / 8); - } - match = type.match(regexBytes); - if (match) { - var size = parseInt(match[1]); - if (String(size) !== match[1] || size === 0 || size > 32) { - logger.throwArgumentError("invalid bytes type", "type", type); - } - if ((0, bytes_1.arrayify)(value).byteLength !== size) { - logger.throwArgumentError("invalid value for " + type, "value", value); - } - if (isArray) { - return (0, bytes_1.arrayify)((value + Zeros).substring(0, 66)); - } - return value; - } - match = type.match(regexArray); - if (match && Array.isArray(value)) { - var baseType_1 = match[1]; - var count = parseInt(match[2] || String(value.length)); - if (count != value.length) { - logger.throwArgumentError("invalid array length for " + type, "value", value); - } - var result_1 = []; - value.forEach(function (value) { - result_1.push(_pack(baseType_1, value, true)); - }); - return (0, bytes_1.concat)(result_1); - } - return logger.throwArgumentError("invalid type", "type", type); -} -// @TODO: Array Enum -function pack(types, values) { - if (types.length != values.length) { - logger.throwArgumentError("wrong number of values; expected ${ types.length }", "values", values); - } - var tight = []; - types.forEach(function (type, index) { - tight.push(_pack(type, values[index])); - }); - return (0, bytes_1.hexlify)((0, bytes_1.concat)(tight)); -} -exports.pack = pack; -function keccak256(types, values) { - return (0, keccak256_1.keccak256)(pack(types, values)); -} -exports.keccak256 = keccak256; -function sha256(types, values) { - return (0, sha2_1.sha256)(pack(types, values)); -} -exports.sha256 = sha256; - -},{"./_version":95,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/sha2":90,"@ethersproject/strings":100}],97:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "strings/5.5.0"; - -},{}],98:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseBytes32String = exports.formatBytes32String = void 0; -var constants_1 = require("@ethersproject/constants"); -var bytes_1 = require("@ethersproject/bytes"); -var utf8_1 = require("./utf8"); -function formatBytes32String(text) { - // Get the bytes - var bytes = (0, utf8_1.toUtf8Bytes)(text); - // Check we have room for null-termination - if (bytes.length > 31) { - throw new Error("bytes32 string must be less than 32 bytes"); - } - // Zero-pad (implicitly null-terminates) - return (0, bytes_1.hexlify)((0, bytes_1.concat)([bytes, constants_1.HashZero]).slice(0, 32)); -} -exports.formatBytes32String = formatBytes32String; -function parseBytes32String(bytes) { - var data = (0, bytes_1.arrayify)(bytes); - // Must be 32 bytes with a null-termination - if (data.length !== 32) { - throw new Error("invalid bytes32 - not 32 bytes long"); - } - if (data[31] !== 0) { - throw new Error("invalid bytes32 string - no null terminator"); - } - // Find the null termination - var length = 31; - while (data[length - 1] === 0) { - length--; - } - // Determine the string value - return (0, utf8_1.toUtf8String)(data.slice(0, length)); -} -exports.parseBytes32String = parseBytes32String; - -},{"./utf8":101,"@ethersproject/bytes":33,"@ethersproject/constants":37}],99:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.nameprep = exports._nameprepTableC = exports._nameprepTableB2 = exports._nameprepTableA1 = void 0; -var utf8_1 = require("./utf8"); -function bytes2(data) { - if ((data.length % 4) !== 0) { - throw new Error("bad data"); - } - var result = []; - for (var i = 0; i < data.length; i += 4) { - result.push(parseInt(data.substring(i, i + 4), 16)); - } - return result; -} -function createTable(data, func) { - if (!func) { - func = function (value) { return [parseInt(value, 16)]; }; - } - var lo = 0; - var result = {}; - data.split(",").forEach(function (pair) { - var comps = pair.split(":"); - lo += parseInt(comps[0], 16); - result[lo] = func(comps[1]); - }); - return result; -} -function createRangeTable(data) { - var hi = 0; - return data.split(",").map(function (v) { - var comps = v.split("-"); - if (comps.length === 1) { - comps[1] = "0"; - } - else if (comps[1] === "") { - comps[1] = "1"; - } - var lo = hi + parseInt(comps[0], 16); - hi = parseInt(comps[1], 16); - return { l: lo, h: hi }; - }); -} -function matchMap(value, ranges) { - var lo = 0; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - lo += range.l; - if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) { - if (range.e && range.e.indexOf(value - lo) !== -1) { - continue; - } - return range; - } - } - return null; -} -var Table_A_1_ranges = createRangeTable("221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d"); -// @TODO: Make this relative... -var Table_B_1_flags = "ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff".split(",").map(function (v) { return parseInt(v, 16); }); -var Table_B_2_ranges = [ - { h: 25, s: 32, l: 65 }, - { h: 30, s: 32, e: [23], l: 127 }, - { h: 54, s: 1, e: [48], l: 64, d: 2 }, - { h: 14, s: 1, l: 57, d: 2 }, - { h: 44, s: 1, l: 17, d: 2 }, - { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 }, - { h: 16, s: 1, l: 68, d: 2 }, - { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 }, - { h: 26, s: 32, e: [17], l: 435 }, - { h: 22, s: 1, l: 71, d: 2 }, - { h: 15, s: 80, l: 40 }, - { h: 31, s: 32, l: 16 }, - { h: 32, s: 1, l: 80, d: 2 }, - { h: 52, s: 1, l: 42, d: 2 }, - { h: 12, s: 1, l: 55, d: 2 }, - { h: 40, s: 1, e: [38], l: 15, d: 2 }, - { h: 14, s: 1, l: 48, d: 2 }, - { h: 37, s: 48, l: 49 }, - { h: 148, s: 1, l: 6351, d: 2 }, - { h: 88, s: 1, l: 160, d: 2 }, - { h: 15, s: 16, l: 704 }, - { h: 25, s: 26, l: 854 }, - { h: 25, s: 32, l: 55915 }, - { h: 37, s: 40, l: 1247 }, - { h: 25, s: -119711, l: 53248 }, - { h: 25, s: -119763, l: 52 }, - { h: 25, s: -119815, l: 52 }, - { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 }, - { h: 25, s: -119919, l: 52 }, - { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 }, - { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 }, - { h: 25, s: -120075, l: 52 }, - { h: 25, s: -120127, l: 52 }, - { h: 25, s: -120179, l: 52 }, - { h: 25, s: -120231, l: 52 }, - { h: 25, s: -120283, l: 52 }, - { h: 25, s: -120335, l: 52 }, - { h: 24, s: -119543, e: [17], l: 56 }, - { h: 24, s: -119601, e: [17], l: 58 }, - { h: 24, s: -119659, e: [17], l: 58 }, - { h: 24, s: -119717, e: [17], l: 58 }, - { h: 24, s: -119775, e: [17], l: 58 } -]; -var Table_B_2_lut_abs = createTable("b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3"); -var Table_B_2_lut_rel = createTable("179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7"); -var Table_B_2_complex = createTable("df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D", bytes2); -var Table_C_ranges = createRangeTable("80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001"); -function flatten(values) { - return values.reduce(function (accum, value) { - value.forEach(function (value) { accum.push(value); }); - return accum; - }, []); -} -function _nameprepTableA1(codepoint) { - return !!matchMap(codepoint, Table_A_1_ranges); -} -exports._nameprepTableA1 = _nameprepTableA1; -function _nameprepTableB2(codepoint) { - var range = matchMap(codepoint, Table_B_2_ranges); - if (range) { - return [codepoint + range.s]; - } - var codes = Table_B_2_lut_abs[codepoint]; - if (codes) { - return codes; - } - var shift = Table_B_2_lut_rel[codepoint]; - if (shift) { - return [codepoint + shift[0]]; - } - var complex = Table_B_2_complex[codepoint]; - if (complex) { - return complex; - } - return null; -} -exports._nameprepTableB2 = _nameprepTableB2; -function _nameprepTableC(codepoint) { - return !!matchMap(codepoint, Table_C_ranges); -} -exports._nameprepTableC = _nameprepTableC; -function nameprep(value) { - // This allows platforms with incomplete normalize to bypass - // it for very basic names which the built-in toLowerCase - // will certainly handle correctly - if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) { - return value.toLowerCase(); - } - // Get the code points (keeping the current normalization) - var codes = (0, utf8_1.toUtf8CodePoints)(value); - codes = flatten(codes.map(function (code) { - // Substitute Table B.1 (Maps to Nothing) - if (Table_B_1_flags.indexOf(code) >= 0) { - return []; - } - if (code >= 0xfe00 && code <= 0xfe0f) { - return []; - } - // Substitute Table B.2 (Case Folding) - var codesTableB2 = _nameprepTableB2(code); - if (codesTableB2) { - return codesTableB2; - } - // No Substitution - return [code]; - })); - // Normalize using form KC - codes = (0, utf8_1.toUtf8CodePoints)((0, utf8_1._toUtf8String)(codes), utf8_1.UnicodeNormalizationForm.NFKC); - // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9 - codes.forEach(function (code) { - if (_nameprepTableC(code)) { - throw new Error("STRINGPREP_CONTAINS_PROHIBITED"); - } - }); - // Prohibit Unassigned Code Points (Table A.1) - codes.forEach(function (code) { - if (_nameprepTableA1(code)) { - throw new Error("STRINGPREP_CONTAINS_UNASSIGNED"); - } - }); - // IDNA extras - var name = (0, utf8_1._toUtf8String)(codes); - // IDNA: 4.2.3.1 - if (name.substring(0, 1) === "-" || name.substring(2, 4) === "--" || name.substring(name.length - 1) === "-") { - throw new Error("invalid hyphen"); - } - // IDNA: 4.2.4 - if (name.length > 63) { - throw new Error("too long"); - } - return name; -} -exports.nameprep = nameprep; - -},{"./utf8":101}],100:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.nameprep = exports.parseBytes32String = exports.formatBytes32String = exports.UnicodeNormalizationForm = exports.Utf8ErrorReason = exports.Utf8ErrorFuncs = exports.toUtf8String = exports.toUtf8CodePoints = exports.toUtf8Bytes = exports._toEscapedUtf8String = void 0; -var bytes32_1 = require("./bytes32"); -Object.defineProperty(exports, "formatBytes32String", { enumerable: true, get: function () { return bytes32_1.formatBytes32String; } }); -Object.defineProperty(exports, "parseBytes32String", { enumerable: true, get: function () { return bytes32_1.parseBytes32String; } }); -var idna_1 = require("./idna"); -Object.defineProperty(exports, "nameprep", { enumerable: true, get: function () { return idna_1.nameprep; } }); -var utf8_1 = require("./utf8"); -Object.defineProperty(exports, "_toEscapedUtf8String", { enumerable: true, get: function () { return utf8_1._toEscapedUtf8String; } }); -Object.defineProperty(exports, "toUtf8Bytes", { enumerable: true, get: function () { return utf8_1.toUtf8Bytes; } }); -Object.defineProperty(exports, "toUtf8CodePoints", { enumerable: true, get: function () { return utf8_1.toUtf8CodePoints; } }); -Object.defineProperty(exports, "toUtf8String", { enumerable: true, get: function () { return utf8_1.toUtf8String; } }); -Object.defineProperty(exports, "UnicodeNormalizationForm", { enumerable: true, get: function () { return utf8_1.UnicodeNormalizationForm; } }); -Object.defineProperty(exports, "Utf8ErrorFuncs", { enumerable: true, get: function () { return utf8_1.Utf8ErrorFuncs; } }); -Object.defineProperty(exports, "Utf8ErrorReason", { enumerable: true, get: function () { return utf8_1.Utf8ErrorReason; } }); - -},{"./bytes32":98,"./idna":99,"./utf8":101}],101:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.toUtf8CodePoints = exports.toUtf8String = exports._toUtf8String = exports._toEscapedUtf8String = exports.toUtf8Bytes = exports.Utf8ErrorFuncs = exports.Utf8ErrorReason = exports.UnicodeNormalizationForm = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -/////////////////////////////// -var UnicodeNormalizationForm; -(function (UnicodeNormalizationForm) { - UnicodeNormalizationForm["current"] = ""; - UnicodeNormalizationForm["NFC"] = "NFC"; - UnicodeNormalizationForm["NFD"] = "NFD"; - UnicodeNormalizationForm["NFKC"] = "NFKC"; - UnicodeNormalizationForm["NFKD"] = "NFKD"; -})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {})); -; -var Utf8ErrorReason; -(function (Utf8ErrorReason) { - // A continuation byte was present where there was nothing to continue - // - offset = the index the codepoint began in - Utf8ErrorReason["UNEXPECTED_CONTINUE"] = "unexpected continuation byte"; - // An invalid (non-continuation) byte to start a UTF-8 codepoint was found - // - offset = the index the codepoint began in - Utf8ErrorReason["BAD_PREFIX"] = "bad codepoint prefix"; - // The string is too short to process the expected codepoint - // - offset = the index the codepoint began in - Utf8ErrorReason["OVERRUN"] = "string overrun"; - // A missing continuation byte was expected but not found - // - offset = the index the continuation byte was expected at - Utf8ErrorReason["MISSING_CONTINUE"] = "missing continuation byte"; - // The computed code point is outside the range for UTF-8 - // - offset = start of this codepoint - // - badCodepoint = the computed codepoint; outside the UTF-8 range - Utf8ErrorReason["OUT_OF_RANGE"] = "out of UTF-8 range"; - // UTF-8 strings may not contain UTF-16 surrogate pairs - // - offset = start of this codepoint - // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range - Utf8ErrorReason["UTF16_SURROGATE"] = "UTF-16 surrogate"; - // The string is an overlong representation - // - offset = start of this codepoint - // - badCodepoint = the computed codepoint; already bounds checked - Utf8ErrorReason["OVERLONG"] = "overlong representation"; -})(Utf8ErrorReason = exports.Utf8ErrorReason || (exports.Utf8ErrorReason = {})); -; -function errorFunc(reason, offset, bytes, output, badCodepoint) { - return logger.throwArgumentError("invalid codepoint at offset " + offset + "; " + reason, "bytes", bytes); -} -function ignoreFunc(reason, offset, bytes, output, badCodepoint) { - // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes - if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) { - var i = 0; - for (var o = offset + 1; o < bytes.length; o++) { - if (bytes[o] >> 6 !== 0x02) { - break; - } - i++; - } - return i; - } - // This byte runs us past the end of the string, so just jump to the end - // (but the first byte was read already read and therefore skipped) - if (reason === Utf8ErrorReason.OVERRUN) { - return bytes.length - offset - 1; - } - // Nothing to skip - return 0; -} -function replaceFunc(reason, offset, bytes, output, badCodepoint) { - // Overlong representations are otherwise "valid" code points; just non-deistingtished - if (reason === Utf8ErrorReason.OVERLONG) { - output.push(badCodepoint); - return 0; - } - // Put the replacement character into the output - output.push(0xfffd); - // Otherwise, process as if ignoring errors - return ignoreFunc(reason, offset, bytes, output, badCodepoint); -} -// Common error handing strategies -exports.Utf8ErrorFuncs = Object.freeze({ - error: errorFunc, - ignore: ignoreFunc, - replace: replaceFunc -}); -// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499 -function getUtf8CodePoints(bytes, onError) { - if (onError == null) { - onError = exports.Utf8ErrorFuncs.error; - } - bytes = (0, bytes_1.arrayify)(bytes); - var result = []; - var i = 0; - // Invalid bytes are ignored - while (i < bytes.length) { - var c = bytes[i++]; - // 0xxx xxxx - if (c >> 7 === 0) { - result.push(c); - continue; - } - // Multibyte; how many bytes left for this character? - var extraLength = null; - var overlongMask = null; - // 110x xxxx 10xx xxxx - if ((c & 0xe0) === 0xc0) { - extraLength = 1; - overlongMask = 0x7f; - // 1110 xxxx 10xx xxxx 10xx xxxx - } - else if ((c & 0xf0) === 0xe0) { - extraLength = 2; - overlongMask = 0x7ff; - // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx - } - else if ((c & 0xf8) === 0xf0) { - extraLength = 3; - overlongMask = 0xffff; - } - else { - if ((c & 0xc0) === 0x80) { - i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result); - } - else { - i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result); - } - continue; - } - // Do we have enough bytes in our data? - if (i - 1 + extraLength >= bytes.length) { - i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result); - continue; - } - // Remove the length prefix from the char - var res = c & ((1 << (8 - extraLength - 1)) - 1); - for (var j = 0; j < extraLength; j++) { - var nextChar = bytes[i]; - // Invalid continuation byte - if ((nextChar & 0xc0) != 0x80) { - i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result); - res = null; - break; - } - ; - res = (res << 6) | (nextChar & 0x3f); - i++; - } - // See above loop for invalid continuation byte - if (res === null) { - continue; - } - // Maximum code point - if (res > 0x10ffff) { - i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res); - continue; - } - // Reserved for UTF-16 surrogate halves - if (res >= 0xd800 && res <= 0xdfff) { - i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res); - continue; - } - // Check for overlong sequences (more bytes than needed) - if (res <= overlongMask) { - i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res); - continue; - } - result.push(res); - } - return result; -} -// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array -function toUtf8Bytes(str, form) { - if (form === void 0) { form = UnicodeNormalizationForm.current; } - if (form != UnicodeNormalizationForm.current) { - logger.checkNormalize(); - str = str.normalize(form); - } - var result = []; - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c < 0x80) { - result.push(c); - } - else if (c < 0x800) { - result.push((c >> 6) | 0xc0); - result.push((c & 0x3f) | 0x80); - } - else if ((c & 0xfc00) == 0xd800) { - i++; - var c2 = str.charCodeAt(i); - if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) { - throw new Error("invalid utf-8 string"); - } - // Surrogate Pair - var pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); - result.push((pair >> 18) | 0xf0); - result.push(((pair >> 12) & 0x3f) | 0x80); - result.push(((pair >> 6) & 0x3f) | 0x80); - result.push((pair & 0x3f) | 0x80); - } - else { - result.push((c >> 12) | 0xe0); - result.push(((c >> 6) & 0x3f) | 0x80); - result.push((c & 0x3f) | 0x80); - } - } - return (0, bytes_1.arrayify)(result); -} -exports.toUtf8Bytes = toUtf8Bytes; -; -function escapeChar(value) { - var hex = ("0000" + value.toString(16)); - return "\\u" + hex.substring(hex.length - 4); -} -function _toEscapedUtf8String(bytes, onError) { - return '"' + getUtf8CodePoints(bytes, onError).map(function (codePoint) { - if (codePoint < 256) { - switch (codePoint) { - case 8: return "\\b"; - case 9: return "\\t"; - case 10: return "\\n"; - case 13: return "\\r"; - case 34: return "\\\""; - case 92: return "\\\\"; - } - if (codePoint >= 32 && codePoint < 127) { - return String.fromCharCode(codePoint); - } - } - if (codePoint <= 0xffff) { - return escapeChar(codePoint); - } - codePoint -= 0x10000; - return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00); - }).join("") + '"'; -} -exports._toEscapedUtf8String = _toEscapedUtf8String; -function _toUtf8String(codePoints) { - return codePoints.map(function (codePoint) { - if (codePoint <= 0xffff) { - return String.fromCharCode(codePoint); - } - codePoint -= 0x10000; - return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00)); - }).join(""); -} -exports._toUtf8String = _toUtf8String; -function toUtf8String(bytes, onError) { - return _toUtf8String(getUtf8CodePoints(bytes, onError)); -} -exports.toUtf8String = toUtf8String; -function toUtf8CodePoints(str, form) { - if (form === void 0) { form = UnicodeNormalizationForm.current; } - return getUtf8CodePoints(toUtf8Bytes(str, form)); -} -exports.toUtf8CodePoints = toUtf8CodePoints; - -},{"./_version":97,"@ethersproject/bytes":33,"@ethersproject/logger":57}],102:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "transactions/5.5.0"; - -},{}],103:[function(require,module,exports){ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parse = exports.serialize = exports.accessListify = exports.recoverAddress = exports.computeAddress = exports.TransactionTypes = void 0; -var address_1 = require("@ethersproject/address"); -var bignumber_1 = require("@ethersproject/bignumber"); -var bytes_1 = require("@ethersproject/bytes"); -var constants_1 = require("@ethersproject/constants"); -var keccak256_1 = require("@ethersproject/keccak256"); -var properties_1 = require("@ethersproject/properties"); -var RLP = __importStar(require("@ethersproject/rlp")); -var signing_key_1 = require("@ethersproject/signing-key"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var TransactionTypes; -(function (TransactionTypes) { - TransactionTypes[TransactionTypes["legacy"] = 0] = "legacy"; - TransactionTypes[TransactionTypes["eip2930"] = 1] = "eip2930"; - TransactionTypes[TransactionTypes["eip1559"] = 2] = "eip1559"; -})(TransactionTypes = exports.TransactionTypes || (exports.TransactionTypes = {})); -; -/////////////////////////////// -function handleAddress(value) { - if (value === "0x") { - return null; - } - return (0, address_1.getAddress)(value); -} -function handleNumber(value) { - if (value === "0x") { - return constants_1.Zero; - } - return bignumber_1.BigNumber.from(value); -} -// Legacy Transaction Fields -var transactionFields = [ - { name: "nonce", maxLength: 32, numeric: true }, - { name: "gasPrice", maxLength: 32, numeric: true }, - { name: "gasLimit", maxLength: 32, numeric: true }, - { name: "to", length: 20 }, - { name: "value", maxLength: 32, numeric: true }, - { name: "data" }, -]; -var allowedTransactionKeys = { - chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, type: true, value: true -}; -function computeAddress(key) { - var publicKey = (0, signing_key_1.computePublicKey)(key); - return (0, address_1.getAddress)((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, bytes_1.hexDataSlice)(publicKey, 1)), 12)); -} -exports.computeAddress = computeAddress; -function recoverAddress(digest, signature) { - return computeAddress((0, signing_key_1.recoverPublicKey)((0, bytes_1.arrayify)(digest), signature)); -} -exports.recoverAddress = recoverAddress; -function formatNumber(value, name) { - var result = (0, bytes_1.stripZeros)(bignumber_1.BigNumber.from(value).toHexString()); - if (result.length > 32) { - logger.throwArgumentError("invalid length for " + name, ("transaction:" + name), value); - } - return result; -} -function accessSetify(addr, storageKeys) { - return { - address: (0, address_1.getAddress)(addr), - storageKeys: (storageKeys || []).map(function (storageKey, index) { - if ((0, bytes_1.hexDataLength)(storageKey) !== 32) { - logger.throwArgumentError("invalid access list storageKey", "accessList[" + addr + ":" + index + "]", storageKey); - } - return storageKey.toLowerCase(); - }) - }; -} -function accessListify(value) { - if (Array.isArray(value)) { - return value.map(function (set, index) { - if (Array.isArray(set)) { - if (set.length > 2) { - logger.throwArgumentError("access list expected to be [ address, storageKeys[] ]", "value[" + index + "]", set); - } - return accessSetify(set[0], set[1]); - } - return accessSetify(set.address, set.storageKeys); - }); - } - var result = Object.keys(value).map(function (addr) { - var storageKeys = value[addr].reduce(function (accum, storageKey) { - accum[storageKey] = true; - return accum; - }, {}); - return accessSetify(addr, Object.keys(storageKeys).sort()); - }); - result.sort(function (a, b) { return (a.address.localeCompare(b.address)); }); - return result; -} -exports.accessListify = accessListify; -function formatAccessList(value) { - return accessListify(value).map(function (set) { return [set.address, set.storageKeys]; }); -} -function _serializeEip1559(transaction, signature) { - // If there is an explicit gasPrice, make sure it matches the - // EIP-1559 fees; otherwise they may not understand what they - // think they are setting in terms of fee. - if (transaction.gasPrice != null) { - var gasPrice = bignumber_1.BigNumber.from(transaction.gasPrice); - var maxFeePerGas = bignumber_1.BigNumber.from(transaction.maxFeePerGas || 0); - if (!gasPrice.eq(maxFeePerGas)) { - logger.throwArgumentError("mismatch EIP-1559 gasPrice != maxFeePerGas", "tx", { - gasPrice: gasPrice, - maxFeePerGas: maxFeePerGas - }); - } - } - var fields = [ - formatNumber(transaction.chainId || 0, "chainId"), - formatNumber(transaction.nonce || 0, "nonce"), - formatNumber(transaction.maxPriorityFeePerGas || 0, "maxPriorityFeePerGas"), - formatNumber(transaction.maxFeePerGas || 0, "maxFeePerGas"), - formatNumber(transaction.gasLimit || 0, "gasLimit"), - ((transaction.to != null) ? (0, address_1.getAddress)(transaction.to) : "0x"), - formatNumber(transaction.value || 0, "value"), - (transaction.data || "0x"), - (formatAccessList(transaction.accessList || [])) - ]; - if (signature) { - var sig = (0, bytes_1.splitSignature)(signature); - fields.push(formatNumber(sig.recoveryParam, "recoveryParam")); - fields.push((0, bytes_1.stripZeros)(sig.r)); - fields.push((0, bytes_1.stripZeros)(sig.s)); - } - return (0, bytes_1.hexConcat)(["0x02", RLP.encode(fields)]); -} -function _serializeEip2930(transaction, signature) { - var fields = [ - formatNumber(transaction.chainId || 0, "chainId"), - formatNumber(transaction.nonce || 0, "nonce"), - formatNumber(transaction.gasPrice || 0, "gasPrice"), - formatNumber(transaction.gasLimit || 0, "gasLimit"), - ((transaction.to != null) ? (0, address_1.getAddress)(transaction.to) : "0x"), - formatNumber(transaction.value || 0, "value"), - (transaction.data || "0x"), - (formatAccessList(transaction.accessList || [])) - ]; - if (signature) { - var sig = (0, bytes_1.splitSignature)(signature); - fields.push(formatNumber(sig.recoveryParam, "recoveryParam")); - fields.push((0, bytes_1.stripZeros)(sig.r)); - fields.push((0, bytes_1.stripZeros)(sig.s)); - } - return (0, bytes_1.hexConcat)(["0x01", RLP.encode(fields)]); -} -// Legacy Transactions and EIP-155 -function _serialize(transaction, signature) { - (0, properties_1.checkProperties)(transaction, allowedTransactionKeys); - var raw = []; - transactionFields.forEach(function (fieldInfo) { - var value = transaction[fieldInfo.name] || ([]); - var options = {}; - if (fieldInfo.numeric) { - options.hexPad = "left"; - } - value = (0, bytes_1.arrayify)((0, bytes_1.hexlify)(value, options)); - // Fixed-width field - if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) { - logger.throwArgumentError("invalid length for " + fieldInfo.name, ("transaction:" + fieldInfo.name), value); - } - // Variable-width (with a maximum) - if (fieldInfo.maxLength) { - value = (0, bytes_1.stripZeros)(value); - if (value.length > fieldInfo.maxLength) { - logger.throwArgumentError("invalid length for " + fieldInfo.name, ("transaction:" + fieldInfo.name), value); - } - } - raw.push((0, bytes_1.hexlify)(value)); - }); - var chainId = 0; - if (transaction.chainId != null) { - // A chainId was provided; if non-zero we'll use EIP-155 - chainId = transaction.chainId; - if (typeof (chainId) !== "number") { - logger.throwArgumentError("invalid transaction.chainId", "transaction", transaction); - } - } - else if (signature && !(0, bytes_1.isBytesLike)(signature) && signature.v > 28) { - // No chainId provided, but the signature is signing with EIP-155; derive chainId - chainId = Math.floor((signature.v - 35) / 2); - } - // We have an EIP-155 transaction (chainId was specified and non-zero) - if (chainId !== 0) { - raw.push((0, bytes_1.hexlify)(chainId)); // @TODO: hexValue? - raw.push("0x"); - raw.push("0x"); - } - // Requesting an unsigned transaction - if (!signature) { - return RLP.encode(raw); - } - // The splitSignature will ensure the transaction has a recoveryParam in the - // case that the signTransaction function only adds a v. - var sig = (0, bytes_1.splitSignature)(signature); - // We pushed a chainId and null r, s on for hashing only; remove those - var v = 27 + sig.recoveryParam; - if (chainId !== 0) { - raw.pop(); - raw.pop(); - raw.pop(); - v += chainId * 2 + 8; - // If an EIP-155 v (directly or indirectly; maybe _vs) was provided, check it! - if (sig.v > 28 && sig.v !== v) { - logger.throwArgumentError("transaction.chainId/signature.v mismatch", "signature", signature); - } - } - else if (sig.v !== v) { - logger.throwArgumentError("transaction.chainId/signature.v mismatch", "signature", signature); - } - raw.push((0, bytes_1.hexlify)(v)); - raw.push((0, bytes_1.stripZeros)((0, bytes_1.arrayify)(sig.r))); - raw.push((0, bytes_1.stripZeros)((0, bytes_1.arrayify)(sig.s))); - return RLP.encode(raw); -} -function serialize(transaction, signature) { - // Legacy and EIP-155 Transactions - if (transaction.type == null || transaction.type === 0) { - if (transaction.accessList != null) { - logger.throwArgumentError("untyped transactions do not support accessList; include type: 1", "transaction", transaction); - } - return _serialize(transaction, signature); - } - // Typed Transactions (EIP-2718) - switch (transaction.type) { - case 1: - return _serializeEip2930(transaction, signature); - case 2: - return _serializeEip1559(transaction, signature); - default: - break; - } - return logger.throwError("unsupported transaction type: " + transaction.type, logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "serializeTransaction", - transactionType: transaction.type - }); -} -exports.serialize = serialize; -function _parseEipSignature(tx, fields, serialize) { - try { - var recid = handleNumber(fields[0]).toNumber(); - if (recid !== 0 && recid !== 1) { - throw new Error("bad recid"); - } - tx.v = recid; - } - catch (error) { - logger.throwArgumentError("invalid v for transaction type: 1", "v", fields[0]); - } - tx.r = (0, bytes_1.hexZeroPad)(fields[1], 32); - tx.s = (0, bytes_1.hexZeroPad)(fields[2], 32); - try { - var digest = (0, keccak256_1.keccak256)(serialize(tx)); - tx.from = recoverAddress(digest, { r: tx.r, s: tx.s, recoveryParam: tx.v }); - } - catch (error) { - console.log(error); - } -} -function _parseEip1559(payload) { - var transaction = RLP.decode(payload.slice(1)); - if (transaction.length !== 9 && transaction.length !== 12) { - logger.throwArgumentError("invalid component count for transaction type: 2", "payload", (0, bytes_1.hexlify)(payload)); - } - var maxPriorityFeePerGas = handleNumber(transaction[2]); - var maxFeePerGas = handleNumber(transaction[3]); - var tx = { - type: 2, - chainId: handleNumber(transaction[0]).toNumber(), - nonce: handleNumber(transaction[1]).toNumber(), - maxPriorityFeePerGas: maxPriorityFeePerGas, - maxFeePerGas: maxFeePerGas, - gasPrice: null, - gasLimit: handleNumber(transaction[4]), - to: handleAddress(transaction[5]), - value: handleNumber(transaction[6]), - data: transaction[7], - accessList: accessListify(transaction[8]), - }; - // Unsigned EIP-1559 Transaction - if (transaction.length === 9) { - return tx; - } - tx.hash = (0, keccak256_1.keccak256)(payload); - _parseEipSignature(tx, transaction.slice(9), _serializeEip1559); - return tx; -} -function _parseEip2930(payload) { - var transaction = RLP.decode(payload.slice(1)); - if (transaction.length !== 8 && transaction.length !== 11) { - logger.throwArgumentError("invalid component count for transaction type: 1", "payload", (0, bytes_1.hexlify)(payload)); - } - var tx = { - type: 1, - chainId: handleNumber(transaction[0]).toNumber(), - nonce: handleNumber(transaction[1]).toNumber(), - gasPrice: handleNumber(transaction[2]), - gasLimit: handleNumber(transaction[3]), - to: handleAddress(transaction[4]), - value: handleNumber(transaction[5]), - data: transaction[6], - accessList: accessListify(transaction[7]) - }; - // Unsigned EIP-2930 Transaction - if (transaction.length === 8) { - return tx; - } - tx.hash = (0, keccak256_1.keccak256)(payload); - _parseEipSignature(tx, transaction.slice(8), _serializeEip2930); - return tx; -} -// Legacy Transactions and EIP-155 -function _parse(rawTransaction) { - var transaction = RLP.decode(rawTransaction); - if (transaction.length !== 9 && transaction.length !== 6) { - logger.throwArgumentError("invalid raw transaction", "rawTransaction", rawTransaction); - } - var tx = { - nonce: handleNumber(transaction[0]).toNumber(), - gasPrice: handleNumber(transaction[1]), - gasLimit: handleNumber(transaction[2]), - to: handleAddress(transaction[3]), - value: handleNumber(transaction[4]), - data: transaction[5], - chainId: 0 - }; - // Legacy unsigned transaction - if (transaction.length === 6) { - return tx; - } - try { - tx.v = bignumber_1.BigNumber.from(transaction[6]).toNumber(); - } - catch (error) { - console.log(error); - return tx; - } - tx.r = (0, bytes_1.hexZeroPad)(transaction[7], 32); - tx.s = (0, bytes_1.hexZeroPad)(transaction[8], 32); - if (bignumber_1.BigNumber.from(tx.r).isZero() && bignumber_1.BigNumber.from(tx.s).isZero()) { - // EIP-155 unsigned transaction - tx.chainId = tx.v; - tx.v = 0; - } - else { - // Signed Transaction - tx.chainId = Math.floor((tx.v - 35) / 2); - if (tx.chainId < 0) { - tx.chainId = 0; - } - var recoveryParam = tx.v - 27; - var raw = transaction.slice(0, 6); - if (tx.chainId !== 0) { - raw.push((0, bytes_1.hexlify)(tx.chainId)); - raw.push("0x"); - raw.push("0x"); - recoveryParam -= tx.chainId * 2 + 8; - } - var digest = (0, keccak256_1.keccak256)(RLP.encode(raw)); - try { - tx.from = recoverAddress(digest, { r: (0, bytes_1.hexlify)(tx.r), s: (0, bytes_1.hexlify)(tx.s), recoveryParam: recoveryParam }); - } - catch (error) { - console.log(error); - } - tx.hash = (0, keccak256_1.keccak256)(rawTransaction); - } - tx.type = null; - return tx; -} -function parse(rawTransaction) { - var payload = (0, bytes_1.arrayify)(rawTransaction); - // Legacy and EIP-155 Transactions - if (payload[0] > 0x7f) { - return _parse(payload); - } - // Typed Transaction (EIP-2718) - switch (payload[0]) { - case 1: - return _parseEip2930(payload); - case 2: - return _parseEip1559(payload); - default: - break; - } - return logger.throwError("unsupported transaction type: " + payload[0], logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "parseTransaction", - transactionType: payload[0] - }); -} -exports.parse = parse; - -},{"./_version":102,"@ethersproject/address":24,"@ethersproject/bignumber":31,"@ethersproject/bytes":33,"@ethersproject/constants":37,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/rlp":87,"@ethersproject/signing-key":94}],104:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "units/5.5.0"; - -},{}],105:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.parseEther = exports.formatEther = exports.parseUnits = exports.formatUnits = exports.commify = void 0; -var bignumber_1 = require("@ethersproject/bignumber"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var names = [ - "wei", - "kwei", - "mwei", - "gwei", - "szabo", - "finney", - "ether", -]; -// Some environments have issues with RegEx that contain back-tracking, so we cannot -// use them. -function commify(value) { - var comps = String(value).split("."); - if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === "." || value === "-.") { - logger.throwArgumentError("invalid value", "value", value); - } - // Make sure we have at least one whole digit (0 if none) - var whole = comps[0]; - var negative = ""; - if (whole.substring(0, 1) === "-") { - negative = "-"; - whole = whole.substring(1); - } - // Make sure we have at least 1 whole digit with no leading zeros - while (whole.substring(0, 1) === "0") { - whole = whole.substring(1); - } - if (whole === "") { - whole = "0"; - } - var suffix = ""; - if (comps.length === 2) { - suffix = "." + (comps[1] || "0"); - } - while (suffix.length > 2 && suffix[suffix.length - 1] === "0") { - suffix = suffix.substring(0, suffix.length - 1); - } - var formatted = []; - while (whole.length) { - if (whole.length <= 3) { - formatted.unshift(whole); - break; - } - else { - var index = whole.length - 3; - formatted.unshift(whole.substring(index)); - whole = whole.substring(0, index); - } - } - return negative + formatted.join(",") + suffix; -} -exports.commify = commify; -function formatUnits(value, unitName) { - if (typeof (unitName) === "string") { - var index = names.indexOf(unitName); - if (index !== -1) { - unitName = 3 * index; - } - } - return (0, bignumber_1.formatFixed)(value, (unitName != null) ? unitName : 18); -} -exports.formatUnits = formatUnits; -function parseUnits(value, unitName) { - if (typeof (value) !== "string") { - logger.throwArgumentError("value must be a string", "value", value); - } - if (typeof (unitName) === "string") { - var index = names.indexOf(unitName); - if (index !== -1) { - unitName = 3 * index; - } - } - return (0, bignumber_1.parseFixed)(value, (unitName != null) ? unitName : 18); -} -exports.parseUnits = parseUnits; -function formatEther(wei) { - return formatUnits(wei, 18); -} -exports.formatEther = formatEther; -function parseEther(ether) { - return parseUnits(ether, 18); -} -exports.parseEther = parseEther; - -},{"./_version":104,"@ethersproject/bignumber":31,"@ethersproject/logger":57}],106:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "wallet/5.5.0"; - -},{}],107:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.verifyTypedData = exports.verifyMessage = exports.Wallet = void 0; -var address_1 = require("@ethersproject/address"); -var abstract_provider_1 = require("@ethersproject/abstract-provider"); -var abstract_signer_1 = require("@ethersproject/abstract-signer"); -var bytes_1 = require("@ethersproject/bytes"); -var hash_1 = require("@ethersproject/hash"); -var hdnode_1 = require("@ethersproject/hdnode"); -var keccak256_1 = require("@ethersproject/keccak256"); -var properties_1 = require("@ethersproject/properties"); -var random_1 = require("@ethersproject/random"); -var signing_key_1 = require("@ethersproject/signing-key"); -var json_wallets_1 = require("@ethersproject/json-wallets"); -var transactions_1 = require("@ethersproject/transactions"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -function isAccount(value) { - return (value != null && (0, bytes_1.isHexString)(value.privateKey, 32) && value.address != null); -} -function hasMnemonic(value) { - var mnemonic = value.mnemonic; - return (mnemonic && mnemonic.phrase); -} -var Wallet = /** @class */ (function (_super) { - __extends(Wallet, _super); - function Wallet(privateKey, provider) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, Wallet); - _this = _super.call(this) || this; - if (isAccount(privateKey)) { - var signingKey_1 = new signing_key_1.SigningKey(privateKey.privateKey); - (0, properties_1.defineReadOnly)(_this, "_signingKey", function () { return signingKey_1; }); - (0, properties_1.defineReadOnly)(_this, "address", (0, transactions_1.computeAddress)(_this.publicKey)); - if (_this.address !== (0, address_1.getAddress)(privateKey.address)) { - logger.throwArgumentError("privateKey/address mismatch", "privateKey", "[REDACTED]"); - } - if (hasMnemonic(privateKey)) { - var srcMnemonic_1 = privateKey.mnemonic; - (0, properties_1.defineReadOnly)(_this, "_mnemonic", function () { return ({ - phrase: srcMnemonic_1.phrase, - path: srcMnemonic_1.path || hdnode_1.defaultPath, - locale: srcMnemonic_1.locale || "en" - }); }); - var mnemonic = _this.mnemonic; - var node = hdnode_1.HDNode.fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path); - if ((0, transactions_1.computeAddress)(node.privateKey) !== _this.address) { - logger.throwArgumentError("mnemonic/address mismatch", "privateKey", "[REDACTED]"); - } - } - else { - (0, properties_1.defineReadOnly)(_this, "_mnemonic", function () { return null; }); - } - } - else { - if (signing_key_1.SigningKey.isSigningKey(privateKey)) { - /* istanbul ignore if */ - if (privateKey.curve !== "secp256k1") { - logger.throwArgumentError("unsupported curve; must be secp256k1", "privateKey", "[REDACTED]"); - } - (0, properties_1.defineReadOnly)(_this, "_signingKey", function () { return privateKey; }); - } - else { - // A lot of common tools do not prefix private keys with a 0x (see: #1166) - if (typeof (privateKey) === "string") { - if (privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) { - privateKey = "0x" + privateKey; - } - } - var signingKey_2 = new signing_key_1.SigningKey(privateKey); - (0, properties_1.defineReadOnly)(_this, "_signingKey", function () { return signingKey_2; }); - } - (0, properties_1.defineReadOnly)(_this, "_mnemonic", function () { return null; }); - (0, properties_1.defineReadOnly)(_this, "address", (0, transactions_1.computeAddress)(_this.publicKey)); - } - /* istanbul ignore if */ - if (provider && !abstract_provider_1.Provider.isProvider(provider)) { - logger.throwArgumentError("invalid provider", "provider", provider); - } - (0, properties_1.defineReadOnly)(_this, "provider", provider || null); - return _this; - } - Object.defineProperty(Wallet.prototype, "mnemonic", { - get: function () { return this._mnemonic(); }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Wallet.prototype, "privateKey", { - get: function () { return this._signingKey().privateKey; }, - enumerable: false, - configurable: true - }); - Object.defineProperty(Wallet.prototype, "publicKey", { - get: function () { return this._signingKey().publicKey; }, - enumerable: false, - configurable: true - }); - Wallet.prototype.getAddress = function () { - return Promise.resolve(this.address); - }; - Wallet.prototype.connect = function (provider) { - return new Wallet(this, provider); - }; - Wallet.prototype.signTransaction = function (transaction) { - var _this = this; - return (0, properties_1.resolveProperties)(transaction).then(function (tx) { - if (tx.from != null) { - if ((0, address_1.getAddress)(tx.from) !== _this.address) { - logger.throwArgumentError("transaction from address mismatch", "transaction.from", transaction.from); - } - delete tx.from; - } - var signature = _this._signingKey().signDigest((0, keccak256_1.keccak256)((0, transactions_1.serialize)(tx))); - return (0, transactions_1.serialize)(tx, signature); - }); - }; - Wallet.prototype.signMessage = function (message) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - return [2 /*return*/, (0, bytes_1.joinSignature)(this._signingKey().signDigest((0, hash_1.hashMessage)(message)))]; - }); - }); - }; - Wallet.prototype._signTypedData = function (domain, types, value) { - return __awaiter(this, void 0, void 0, function () { - var populated; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, hash_1._TypedDataEncoder.resolveNames(domain, types, value, function (name) { - if (_this.provider == null) { - logger.throwError("cannot resolve ENS names without a provider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, { - operation: "resolveName", - value: name - }); - } - return _this.provider.resolveName(name); - })]; - case 1: - populated = _a.sent(); - return [2 /*return*/, (0, bytes_1.joinSignature)(this._signingKey().signDigest(hash_1._TypedDataEncoder.hash(populated.domain, types, populated.value)))]; - } - }); - }); - }; - Wallet.prototype.encrypt = function (password, options, progressCallback) { - if (typeof (options) === "function" && !progressCallback) { - progressCallback = options; - options = {}; - } - if (progressCallback && typeof (progressCallback) !== "function") { - throw new Error("invalid callback"); - } - if (!options) { - options = {}; - } - return (0, json_wallets_1.encryptKeystore)(this, password, options, progressCallback); - }; - /** - * Static methods to create Wallet instances. - */ - Wallet.createRandom = function (options) { - var entropy = (0, random_1.randomBytes)(16); - if (!options) { - options = {}; - } - if (options.extraEntropy) { - entropy = (0, bytes_1.arrayify)((0, bytes_1.hexDataSlice)((0, keccak256_1.keccak256)((0, bytes_1.concat)([entropy, options.extraEntropy])), 0, 16)); - } - var mnemonic = (0, hdnode_1.entropyToMnemonic)(entropy, options.locale); - return Wallet.fromMnemonic(mnemonic, options.path, options.locale); - }; - Wallet.fromEncryptedJson = function (json, password, progressCallback) { - return (0, json_wallets_1.decryptJsonWallet)(json, password, progressCallback).then(function (account) { - return new Wallet(account); - }); - }; - Wallet.fromEncryptedJsonSync = function (json, password) { - return new Wallet((0, json_wallets_1.decryptJsonWalletSync)(json, password)); - }; - Wallet.fromMnemonic = function (mnemonic, path, wordlist) { - if (!path) { - path = hdnode_1.defaultPath; - } - return new Wallet(hdnode_1.HDNode.fromMnemonic(mnemonic, null, wordlist).derivePath(path)); - }; - return Wallet; -}(abstract_signer_1.Signer)); -exports.Wallet = Wallet; -function verifyMessage(message, signature) { - return (0, transactions_1.recoverAddress)((0, hash_1.hashMessage)(message), signature); -} -exports.verifyMessage = verifyMessage; -function verifyTypedData(domain, types, value, signature) { - return (0, transactions_1.recoverAddress)(hash_1._TypedDataEncoder.hash(domain, types, value), signature); -} -exports.verifyTypedData = verifyTypedData; - -},{"./_version":106,"@ethersproject/abstract-provider":20,"@ethersproject/abstract-signer":22,"@ethersproject/address":24,"@ethersproject/bytes":33,"@ethersproject/hash":43,"@ethersproject/hdnode":48,"@ethersproject/json-wallets":51,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/random":84,"@ethersproject/signing-key":94,"@ethersproject/transactions":103}],108:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "web/5.5.0"; - -},{}],109:[function(require,module,exports){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getUrl = void 0; -var bytes_1 = require("@ethersproject/bytes"); -function getUrl(href, options) { - return __awaiter(this, void 0, void 0, function () { - var request, response, body, headers; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (options == null) { - options = {}; - } - request = { - method: (options.method || "GET"), - headers: (options.headers || {}), - body: (options.body || undefined), - }; - if (options.skipFetchSetup !== true) { - request.mode = "cors"; // no-cors, cors, *same-origin - request.cache = "no-cache"; // *default, no-cache, reload, force-cache, only-if-cached - request.credentials = "same-origin"; // include, *same-origin, omit - request.redirect = "follow"; // manual, *follow, error - request.referrer = "client"; // no-referrer, *client - } - ; - return [4 /*yield*/, fetch(href, request)]; - case 1: - response = _a.sent(); - return [4 /*yield*/, response.arrayBuffer()]; - case 2: - body = _a.sent(); - headers = {}; - if (response.headers.forEach) { - response.headers.forEach(function (value, key) { - headers[key.toLowerCase()] = value; - }); - } - else { - ((response.headers).keys)().forEach(function (key) { - headers[key.toLowerCase()] = response.headers.get(key); - }); - } - return [2 /*return*/, { - headers: headers, - statusCode: response.status, - statusMessage: response.statusText, - body: (0, bytes_1.arrayify)(new Uint8Array(body)), - }]; - } - }); - }); -} -exports.getUrl = getUrl; - -},{"@ethersproject/bytes":33}],110:[function(require,module,exports){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.poll = exports.fetchJson = exports._fetchData = void 0; -var base64_1 = require("@ethersproject/base64"); -var bytes_1 = require("@ethersproject/bytes"); -var properties_1 = require("@ethersproject/properties"); -var strings_1 = require("@ethersproject/strings"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -var logger = new logger_1.Logger(_version_1.version); -var geturl_1 = require("./geturl"); -function staller(duration) { - return new Promise(function (resolve) { - setTimeout(resolve, duration); - }); -} -function bodyify(value, type) { - if (value == null) { - return null; - } - if (typeof (value) === "string") { - return value; - } - if ((0, bytes_1.isBytesLike)(value)) { - if (type && (type.split("/")[0] === "text" || type.split(";")[0].trim() === "application/json")) { - try { - return (0, strings_1.toUtf8String)(value); - } - catch (error) { } - ; - } - return (0, bytes_1.hexlify)(value); - } - return value; -} -// This API is still a work in progress; the future changes will likely be: -// - ConnectionInfo => FetchDataRequest -// - FetchDataRequest.body? = string | Uint8Array | { contentType: string, data: string | Uint8Array } -// - If string => text/plain, Uint8Array => application/octet-stream (if content-type unspecified) -// - FetchDataRequest.processFunc = (body: Uint8Array, response: FetchDataResponse) => T -// For this reason, it should be considered internal until the API is finalized -function _fetchData(connection, body, processFunc) { - // How many times to retry in the event of a throttle - var attemptLimit = (typeof (connection) === "object" && connection.throttleLimit != null) ? connection.throttleLimit : 12; - logger.assertArgument((attemptLimit > 0 && (attemptLimit % 1) === 0), "invalid connection throttle limit", "connection.throttleLimit", attemptLimit); - var throttleCallback = ((typeof (connection) === "object") ? connection.throttleCallback : null); - var throttleSlotInterval = ((typeof (connection) === "object" && typeof (connection.throttleSlotInterval) === "number") ? connection.throttleSlotInterval : 100); - logger.assertArgument((throttleSlotInterval > 0 && (throttleSlotInterval % 1) === 0), "invalid connection throttle slot interval", "connection.throttleSlotInterval", throttleSlotInterval); - var headers = {}; - var url = null; - // @TODO: Allow ConnectionInfo to override some of these values - var options = { - method: "GET", - }; - var allow304 = false; - var timeout = 2 * 60 * 1000; - if (typeof (connection) === "string") { - url = connection; - } - else if (typeof (connection) === "object") { - if (connection == null || connection.url == null) { - logger.throwArgumentError("missing URL", "connection.url", connection); - } - url = connection.url; - if (typeof (connection.timeout) === "number" && connection.timeout > 0) { - timeout = connection.timeout; - } - if (connection.headers) { - for (var key in connection.headers) { - headers[key.toLowerCase()] = { key: key, value: String(connection.headers[key]) }; - if (["if-none-match", "if-modified-since"].indexOf(key.toLowerCase()) >= 0) { - allow304 = true; - } - } - } - options.allowGzip = !!connection.allowGzip; - if (connection.user != null && connection.password != null) { - if (url.substring(0, 6) !== "https:" && connection.allowInsecureAuthentication !== true) { - logger.throwError("basic authentication requires a secure https url", logger_1.Logger.errors.INVALID_ARGUMENT, { argument: "url", url: url, user: connection.user, password: "[REDACTED]" }); - } - var authorization = connection.user + ":" + connection.password; - headers["authorization"] = { - key: "Authorization", - value: "Basic " + (0, base64_1.encode)((0, strings_1.toUtf8Bytes)(authorization)) - }; - } - } - if (body) { - options.method = "POST"; - options.body = body; - if (headers["content-type"] == null) { - headers["content-type"] = { key: "Content-Type", value: "application/octet-stream" }; - } - if (headers["content-length"] == null) { - headers["content-length"] = { key: "Content-Length", value: String(body.length) }; - } - } - var flatHeaders = {}; - Object.keys(headers).forEach(function (key) { - var header = headers[key]; - flatHeaders[header.key] = header.value; - }); - options.headers = flatHeaders; - var runningTimeout = (function () { - var timer = null; - var promise = new Promise(function (resolve, reject) { - if (timeout) { - timer = setTimeout(function () { - if (timer == null) { - return; - } - timer = null; - reject(logger.makeError("timeout", logger_1.Logger.errors.TIMEOUT, { - requestBody: bodyify(options.body, flatHeaders["content-type"]), - requestMethod: options.method, - timeout: timeout, - url: url - })); - }, timeout); - } - }); - var cancel = function () { - if (timer == null) { - return; - } - clearTimeout(timer); - timer = null; - }; - return { promise: promise, cancel: cancel }; - })(); - var runningFetch = (function () { - return __awaiter(this, void 0, void 0, function () { - var attempt, response, tryAgain, stall, retryAfter, error_1, body_1, result, error_2, tryAgain, timeout_1; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - attempt = 0; - _a.label = 1; - case 1: - if (!(attempt < attemptLimit)) return [3 /*break*/, 19]; - response = null; - _a.label = 2; - case 2: - _a.trys.push([2, 8, , 9]); - return [4 /*yield*/, (0, geturl_1.getUrl)(url, options)]; - case 3: - response = _a.sent(); - if (!(response.statusCode === 429 && attempt < attemptLimit)) return [3 /*break*/, 7]; - tryAgain = true; - if (!throttleCallback) return [3 /*break*/, 5]; - return [4 /*yield*/, throttleCallback(attempt, url)]; - case 4: - tryAgain = _a.sent(); - _a.label = 5; - case 5: - if (!tryAgain) return [3 /*break*/, 7]; - stall = 0; - retryAfter = response.headers["retry-after"]; - if (typeof (retryAfter) === "string" && retryAfter.match(/^[1-9][0-9]*$/)) { - stall = parseInt(retryAfter) * 1000; - } - else { - stall = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt))); - } - //console.log("Stalling 429"); - return [4 /*yield*/, staller(stall)]; - case 6: - //console.log("Stalling 429"); - _a.sent(); - return [3 /*break*/, 18]; - case 7: return [3 /*break*/, 9]; - case 8: - error_1 = _a.sent(); - response = error_1.response; - if (response == null) { - runningTimeout.cancel(); - logger.throwError("missing response", logger_1.Logger.errors.SERVER_ERROR, { - requestBody: bodyify(options.body, flatHeaders["content-type"]), - requestMethod: options.method, - serverError: error_1, - url: url - }); - } - return [3 /*break*/, 9]; - case 9: - body_1 = response.body; - if (allow304 && response.statusCode === 304) { - body_1 = null; - } - else if (response.statusCode < 200 || response.statusCode >= 300) { - runningTimeout.cancel(); - logger.throwError("bad response", logger_1.Logger.errors.SERVER_ERROR, { - status: response.statusCode, - headers: response.headers, - body: bodyify(body_1, ((response.headers) ? response.headers["content-type"] : null)), - requestBody: bodyify(options.body, flatHeaders["content-type"]), - requestMethod: options.method, - url: url - }); - } - if (!processFunc) return [3 /*break*/, 17]; - _a.label = 10; - case 10: - _a.trys.push([10, 12, , 17]); - return [4 /*yield*/, processFunc(body_1, response)]; - case 11: - result = _a.sent(); - runningTimeout.cancel(); - return [2 /*return*/, result]; - case 12: - error_2 = _a.sent(); - if (!(error_2.throttleRetry && attempt < attemptLimit)) return [3 /*break*/, 16]; - tryAgain = true; - if (!throttleCallback) return [3 /*break*/, 14]; - return [4 /*yield*/, throttleCallback(attempt, url)]; - case 13: - tryAgain = _a.sent(); - _a.label = 14; - case 14: - if (!tryAgain) return [3 /*break*/, 16]; - timeout_1 = throttleSlotInterval * parseInt(String(Math.random() * Math.pow(2, attempt))); - //console.log("Stalling callback"); - return [4 /*yield*/, staller(timeout_1)]; - case 15: - //console.log("Stalling callback"); - _a.sent(); - return [3 /*break*/, 18]; - case 16: - runningTimeout.cancel(); - logger.throwError("processing response error", logger_1.Logger.errors.SERVER_ERROR, { - body: bodyify(body_1, ((response.headers) ? response.headers["content-type"] : null)), - error: error_2, - requestBody: bodyify(options.body, flatHeaders["content-type"]), - requestMethod: options.method, - url: url - }); - return [3 /*break*/, 17]; - case 17: - runningTimeout.cancel(); - // If we had a processFunc, it either returned a T or threw above. - // The "body" is now a Uint8Array. - return [2 /*return*/, body_1]; - case 18: - attempt++; - return [3 /*break*/, 1]; - case 19: return [2 /*return*/, logger.throwError("failed response", logger_1.Logger.errors.SERVER_ERROR, { - requestBody: bodyify(options.body, flatHeaders["content-type"]), - requestMethod: options.method, - url: url - })]; - } - }); - }); - })(); - return Promise.race([runningTimeout.promise, runningFetch]); -} -exports._fetchData = _fetchData; -function fetchJson(connection, json, processFunc) { - var processJsonFunc = function (value, response) { - var result = null; - if (value != null) { - try { - result = JSON.parse((0, strings_1.toUtf8String)(value)); - } - catch (error) { - logger.throwError("invalid JSON", logger_1.Logger.errors.SERVER_ERROR, { - body: value, - error: error - }); - } - } - if (processFunc) { - result = processFunc(result, response); - } - return result; - }; - // If we have json to send, we must - // - add content-type of application/json (unless already overridden) - // - convert the json to bytes - var body = null; - if (json != null) { - body = (0, strings_1.toUtf8Bytes)(json); - // Create a connection with the content-type set for JSON - var updated = (typeof (connection) === "string") ? ({ url: connection }) : (0, properties_1.shallowCopy)(connection); - if (updated.headers) { - var hasContentType = (Object.keys(updated.headers).filter(function (k) { return (k.toLowerCase() === "content-type"); }).length) !== 0; - if (!hasContentType) { - updated.headers = (0, properties_1.shallowCopy)(updated.headers); - updated.headers["content-type"] = "application/json"; - } - } - else { - updated.headers = { "content-type": "application/json" }; - } - connection = updated; - } - return _fetchData(connection, body, processJsonFunc); -} -exports.fetchJson = fetchJson; -function poll(func, options) { - if (!options) { - options = {}; - } - options = (0, properties_1.shallowCopy)(options); - if (options.floor == null) { - options.floor = 0; - } - if (options.ceiling == null) { - options.ceiling = 10000; - } - if (options.interval == null) { - options.interval = 250; - } - return new Promise(function (resolve, reject) { - var timer = null; - var done = false; - // Returns true if cancel was successful. Unsuccessful cancel means we're already done. - var cancel = function () { - if (done) { - return false; - } - done = true; - if (timer) { - clearTimeout(timer); - } - return true; - }; - if (options.timeout) { - timer = setTimeout(function () { - if (cancel()) { - reject(new Error("timeout")); - } - }, options.timeout); - } - var retryLimit = options.retryLimit; - var attempt = 0; - function check() { - return func().then(function (result) { - // If we have a result, or are allowed null then we're done - if (result !== undefined) { - if (cancel()) { - resolve(result); - } - } - else if (options.oncePoll) { - options.oncePoll.once("poll", check); - } - else if (options.onceBlock) { - options.onceBlock.once("block", check); - // Otherwise, exponential back-off (up to 10s) our next request - } - else if (!done) { - attempt++; - if (attempt > retryLimit) { - if (cancel()) { - reject(new Error("retry limit reached")); - } - return; - } - var timeout = options.interval * parseInt(String(Math.random() * Math.pow(2, attempt))); - if (timeout < options.floor) { - timeout = options.floor; - } - if (timeout > options.ceiling) { - timeout = options.ceiling; - } - setTimeout(check, timeout); - } - return null; - }, function (error) { - if (cancel()) { - reject(error); - } - }); - } - check(); - }); -} -exports.poll = poll; - -},{"./_version":108,"./geturl":109,"@ethersproject/base64":26,"@ethersproject/bytes":33,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/strings":100}],111:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "wordlists/5.5.0"; - -},{}],112:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.wordlists = exports.Wordlist = exports.logger = void 0; -// Wordlists -// See: https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md -var wordlist_1 = require("./wordlist"); -Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return wordlist_1.logger; } }); -Object.defineProperty(exports, "Wordlist", { enumerable: true, get: function () { return wordlist_1.Wordlist; } }); -var wordlists_1 = require("./wordlists"); -Object.defineProperty(exports, "wordlists", { enumerable: true, get: function () { return wordlists_1.wordlists; } }); - -},{"./wordlist":121,"./wordlists":122}],113:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langCz = void 0; -var wordlist_1 = require("./wordlist"); -var words = "AbdikaceAbecedaAdresaAgreseAkceAktovkaAlejAlkoholAmputaceAnanasAndulkaAnekdotaAnketaAntikaAnulovatArchaAroganceAsfaltAsistentAspiraceAstmaAstronomAtlasAtletikaAtolAutobusAzylBabkaBachorBacilBaculkaBadatelBagetaBagrBahnoBakterieBaladaBaletkaBalkonBalonekBalvanBalzaBambusBankomatBarbarBaretBarmanBarokoBarvaBaterkaBatohBavlnaBazalkaBazilikaBazukaBednaBeranBesedaBestieBetonBezinkaBezmocBeztakBicyklBidloBiftekBikinyBilanceBiografBiologBitvaBizonBlahobytBlatouchBlechaBleduleBleskBlikatBliznaBlokovatBlouditBludBobekBobrBodlinaBodnoutBohatostBojkotBojovatBokorysBolestBorecBoroviceBotaBoubelBouchatBoudaBouleBouratBoxerBradavkaBramboraBrankaBratrBreptaBriketaBrkoBrlohBronzBroskevBrunetkaBrusinkaBrzdaBrzyBublinaBubnovatBuchtaBuditelBudkaBudovaBufetBujarostBukviceBuldokBulvaBundaBunkrBurzaButikBuvolBuzolaBydletBylinaBytovkaBzukotCapartCarevnaCedrCeduleCejchCejnCelaCelerCelkemCelniceCeninaCennostCenovkaCentrumCenzorCestopisCetkaChalupaChapadloCharitaChataChechtatChemieChichotChirurgChladChlebaChlubitChmelChmuraChobotChocholChodbaCholeraChomoutChopitChorobaChovChrapotChrlitChrtChrupChtivostChudinaChutnatChvatChvilkaChvostChybaChystatChytitCibuleCigaretaCihelnaCihlaCinkotCirkusCisternaCitaceCitrusCizinecCizostClonaCokolivCouvatCtitelCtnostCudnostCuketaCukrCupotCvaknoutCvalCvikCvrkotCyklistaDalekoDarebaDatelDatumDceraDebataDechovkaDecibelDeficitDeflaceDeklDekretDemokratDepreseDerbyDeskaDetektivDikobrazDiktovatDiodaDiplomDiskDisplejDivadloDivochDlahaDlouhoDluhopisDnesDobroDobytekDocentDochutitDodnesDohledDohodaDohraDojemDojniceDokladDokolaDoktorDokumentDolarDolevaDolinaDomaDominantDomluvitDomovDonutitDopadDopisDoplnitDoposudDoprovodDopustitDorazitDorostDortDosahDoslovDostatekDosudDosytaDotazDotekDotknoutDoufatDoutnatDovozceDozaduDoznatDozorceDrahotaDrakDramatikDravecDrazeDrdolDrobnostDrogerieDrozdDrsnostDrtitDrzostDubenDuchovnoDudekDuhaDuhovkaDusitDusnoDutostDvojiceDvorecDynamitEkologEkonomieElektronElipsaEmailEmiseEmoceEmpatieEpizodaEpochaEpopejEposEsejEsenceEskortaEskymoEtiketaEuforieEvoluceExekuceExkurzeExpediceExplozeExportExtraktFackaFajfkaFakultaFanatikFantazieFarmacieFavoritFazoleFederaceFejetonFenkaFialkaFigurantFilozofFiltrFinanceFintaFixaceFjordFlanelFlirtFlotilaFondFosforFotbalFotkaFotonFrakceFreskaFrontaFukarFunkceFyzikaGalejeGarantGenetikaGeologGilotinaGlazuraGlejtGolemGolfistaGotikaGrafGramofonGranuleGrepGrilGrogGroteskaGumaHadiceHadrHalaHalenkaHanbaHanopisHarfaHarpunaHavranHebkostHejkalHejnoHejtmanHektarHelmaHematomHerecHernaHesloHezkyHistorikHladovkaHlasivkyHlavaHledatHlenHlodavecHlohHloupostHltatHlubinaHluchotaHmatHmotaHmyzHnisHnojivoHnoutHoblinaHobojHochHodinyHodlatHodnotaHodovatHojnostHokejHolinkaHolkaHolubHomoleHonitbaHonoraceHoralHordaHorizontHorkoHorlivecHormonHorninaHoroskopHorstvoHospodaHostinaHotovostHoubaHoufHoupatHouskaHovorHradbaHraniceHravostHrazdaHrbolekHrdinaHrdloHrdostHrnekHrobkaHromadaHrotHroudaHrozenHrstkaHrubostHryzatHubenostHubnoutHudbaHukotHumrHusitaHustotaHvozdHybnostHydrantHygienaHymnaHysterikIdylkaIhnedIkonaIluzeImunitaInfekceInflaceInkasoInovaceInspekceInternetInvalidaInvestorInzerceIronieJablkoJachtaJahodaJakmileJakostJalovecJantarJarmarkJaroJasanJasnoJatkaJavorJazykJedinecJedleJednatelJehlanJekotJelenJelitoJemnostJenomJepiceJeseterJevitJezdecJezeroJinakJindyJinochJiskraJistotaJitrniceJizvaJmenovatJogurtJurtaKabaretKabelKabinetKachnaKadetKadidloKahanKajakKajutaKakaoKaktusKalamitaKalhotyKalibrKalnostKameraKamkolivKamnaKanibalKanoeKantorKapalinaKapelaKapitolaKapkaKapleKapotaKaprKapustaKapybaraKaramelKarotkaKartonKasaKatalogKatedraKauceKauzaKavalecKazajkaKazetaKazivostKdekolivKdesiKedlubenKempKeramikaKinoKlacekKladivoKlamKlapotKlasikaKlaunKlecKlenbaKlepatKlesnoutKlidKlimaKlisnaKloboukKlokanKlopaKloubKlubovnaKlusatKluzkostKmenKmitatKmotrKnihaKnotKoaliceKoberecKobkaKoblihaKobylaKocourKohoutKojenecKokosKoktejlKolapsKoledaKolizeKoloKomandoKometaKomikKomnataKomoraKompasKomunitaKonatKonceptKondiceKonecKonfeseKongresKoninaKonkursKontaktKonzervaKopanecKopieKopnoutKoprovkaKorbelKorektorKormidloKoroptevKorpusKorunaKorytoKorzetKosatecKostkaKotelKotletaKotoulKoukatKoupelnaKousekKouzloKovbojKozaKozorohKrabiceKrachKrajinaKralovatKrasopisKravataKreditKrejcarKresbaKrevetaKriketKritikKrizeKrkavecKrmelecKrmivoKrocanKrokKronikaKropitKroupaKrovkaKrtekKruhadloKrupiceKrutostKrvinkaKrychleKryptaKrystalKrytKudlankaKufrKujnostKuklaKulajdaKulichKulkaKulometKulturaKunaKupodivuKurtKurzorKutilKvalitaKvasinkaKvestorKynologKyselinaKytaraKyticeKytkaKytovecKyvadloLabradorLachtanLadnostLaikLakomecLamelaLampaLanovkaLasiceLasoLasturaLatinkaLavinaLebkaLeckdyLedenLedniceLedovkaLedvinaLegendaLegieLegraceLehceLehkostLehnoutLektvarLenochodLentilkaLepenkaLepidloLetadloLetecLetmoLetokruhLevhartLevitaceLevobokLibraLichotkaLidojedLidskostLihovinaLijavecLilekLimetkaLinieLinkaLinoleumListopadLitinaLitovatLobistaLodivodLogikaLogopedLokalitaLoketLomcovatLopataLopuchLordLososLotrLoudalLouhLoukaLouskatLovecLstivostLucernaLuciferLumpLuskLustraceLviceLyraLyrikaLysinaMadamMadloMagistrMahagonMajetekMajitelMajoritaMakakMakoviceMakrelaMalbaMalinaMalovatMalviceMaminkaMandleMankoMarnostMasakrMaskotMasopustMaticeMatrikaMaturitaMazanecMazivoMazlitMazurkaMdlobaMechanikMeditaceMedovinaMelasaMelounMentolkaMetlaMetodaMetrMezeraMigraceMihnoutMihuleMikinaMikrofonMilenecMilimetrMilostMimikaMincovnaMinibarMinometMinulostMiskaMistrMixovatMladostMlhaMlhovinaMlokMlsatMluvitMnichMnohemMobilMocnostModelkaModlitbaMohylaMokroMolekulaMomentkaMonarchaMonoklMonstrumMontovatMonzunMosazMoskytMostMotivaceMotorkaMotykaMouchaMoudrostMozaikaMozekMozolMramorMravenecMrkevMrtvolaMrzetMrzutostMstitelMudrcMuflonMulatMumieMuniceMusetMutaceMuzeumMuzikantMyslivecMzdaNabouratNachytatNadaceNadbytekNadhozNadobroNadpisNahlasNahnatNahodileNahraditNaivitaNajednouNajistoNajmoutNaklonitNakonecNakrmitNalevoNamazatNamluvitNanometrNaokoNaopakNaostroNapadatNapevnoNaplnitNapnoutNaposledNaprostoNaroditNarubyNarychloNasaditNasekatNaslepoNastatNatolikNavenekNavrchNavzdoryNazvatNebeNechatNeckyNedalekoNedbatNeduhNegaceNehetNehodaNejenNejprveNeklidNelibostNemilostNemocNeochotaNeonkaNepokojNerostNervNesmyslNesouladNetvorNeuronNevinaNezvykleNicotaNijakNikamNikdyNiklNikterakNitroNoclehNohaviceNominaceNoraNorekNositelNosnostNouzeNovinyNovotaNozdraNudaNudleNugetNutitNutnostNutrieNymfaObalObarvitObavaObdivObecObehnatObejmoutObezitaObhajobaObilniceObjasnitObjektObklopitOblastOblekOblibaOblohaObludaObnosObohatitObojekOboutObrazecObrnaObrubaObrysObsahObsluhaObstaratObuvObvazObvinitObvodObvykleObyvatelObzorOcasOcelOcenitOchladitOchotaOchranaOcitnoutOdbojOdbytOdchodOdcizitOdebratOdeslatOdevzdatOdezvaOdhadceOdhoditOdjetOdjinudOdkazOdkoupitOdlivOdlukaOdmlkaOdolnostOdpadOdpisOdploutOdporOdpustitOdpykatOdrazkaOdsouditOdstupOdsunOdtokOdtudOdvahaOdvetaOdvolatOdvracetOdznakOfinaOfsajdOhlasOhniskoOhradaOhrozitOhryzekOkapOkeniceOklikaOknoOkouzlitOkovyOkrasaOkresOkrsekOkruhOkupantOkurkaOkusitOlejninaOlizovatOmakOmeletaOmezitOmladinaOmlouvatOmluvaOmylOnehdyOpakovatOpasekOperaceOpiceOpilostOpisovatOporaOpoziceOpravduOprotiOrbitalOrchestrOrgieOrliceOrlojOrtelOsadaOschnoutOsikaOsivoOslavaOslepitOslnitOslovitOsnovaOsobaOsolitOspalecOstenOstrahaOstudaOstychOsvojitOteplitOtiskOtopOtrhatOtrlostOtrokOtrubyOtvorOvanoutOvarOvesOvlivnitOvoceOxidOzdobaPachatelPacientPadouchPahorekPaktPalandaPalecPalivoPalubaPamfletPamlsekPanenkaPanikaPannaPanovatPanstvoPantoflePaprikaParketaParodiePartaParukaParybaPasekaPasivitaPastelkaPatentPatronaPavoukPaznehtPazourekPeckaPedagogPejsekPekloPelotonPenaltaPendrekPenzePeriskopPeroPestrostPetardaPeticePetrolejPevninaPexesoPianistaPihaPijavicePiklePiknikPilinaPilnostPilulkaPinzetaPipetaPisatelPistolePitevnaPivnicePivovarPlacentaPlakatPlamenPlanetaPlastikaPlatitPlavidloPlazPlechPlemenoPlentaPlesPletivoPlevelPlivatPlnitPlnoPlochaPlodinaPlombaPloutPlukPlynPobavitPobytPochodPocitPoctivecPodatPodcenitPodepsatPodhledPodivitPodkladPodmanitPodnikPodobaPodporaPodrazPodstataPodvodPodzimPoeziePohankaPohnutkaPohovorPohromaPohybPointaPojistkaPojmoutPokazitPoklesPokojPokrokPokutaPokynPolednePolibekPolknoutPolohaPolynomPomaluPominoutPomlkaPomocPomstaPomysletPonechatPonorkaPonurostPopadatPopelPopisekPoplachPoprositPopsatPopudPoradcePorcePorodPoruchaPoryvPosaditPosedPosilaPoskokPoslanecPosouditPospoluPostavaPosudekPosypPotahPotkanPotleskPotomekPotravaPotupaPotvoraPoukazPoutoPouzdroPovahaPovidlaPovlakPovozPovrchPovstatPovykPovzdechPozdravPozemekPoznatekPozorPozvatPracovatPrahoryPraktikaPralesPraotecPraporekPrasePravdaPrincipPrknoProbuditProcentoProdejProfeseProhraProjektProlomitPromilePronikatPropadProrokProsbaProtonProutekProvazPrskavkaPrstenPrudkostPrutPrvekPrvohoryPsanecPsovodPstruhPtactvoPubertaPuchPudlPukavecPuklinaPukrlePultPumpaPuncPupenPusaPusinkaPustinaPutovatPutykaPyramidaPyskPytelRacekRachotRadiaceRadniceRadonRaftRagbyRaketaRakovinaRamenoRampouchRandeRarachRaritaRasovnaRastrRatolestRazanceRazidloReagovatReakceReceptRedaktorReferentReflexRejnokReklamaRekordRekrutRektorReputaceRevizeRevmaRevolverRezervaRiskovatRizikoRobotikaRodokmenRohovkaRokleRokokoRomanetoRopovodRopuchaRorejsRosolRostlinaRotmistrRotopedRotundaRoubenkaRouchoRoupRouraRovinaRovniceRozborRozchodRozdatRozeznatRozhodceRozinkaRozjezdRozkazRozlohaRozmarRozpadRozruchRozsahRoztokRozumRozvodRubrikaRuchadloRukaviceRukopisRybaRybolovRychlostRydloRypadloRytinaRyzostSadistaSahatSakoSamecSamizdatSamotaSanitkaSardinkaSasankaSatelitSazbaSazeniceSborSchovatSebrankaSeceseSedadloSedimentSedloSehnatSejmoutSekeraSektaSekundaSekvojeSemenoSenoServisSesaditSeshoraSeskokSeslatSestraSesuvSesypatSetbaSetinaSetkatSetnoutSetrvatSeverSeznamShodaShrnoutSifonSilniceSirkaSirotekSirupSituaceSkafandrSkaliskoSkanzenSkautSkeptikSkicaSkladbaSkleniceSkloSkluzSkobaSkokanSkoroSkriptaSkrzSkupinaSkvostSkvrnaSlabikaSladidloSlaninaSlastSlavnostSledovatSlepecSlevaSlezinaSlibSlinaSlizniceSlonSloupekSlovoSluchSluhaSlunceSlupkaSlzaSmaragdSmetanaSmilstvoSmlouvaSmogSmradSmrkSmrtkaSmutekSmyslSnadSnahaSnobSobotaSochaSodovkaSokolSopkaSotvaSoubojSoucitSoudceSouhlasSouladSoumrakSoupravaSousedSoutokSouvisetSpalovnaSpasitelSpisSplavSpodekSpojenecSpoluSponzorSpornostSpoustaSprchaSpustitSrandaSrazSrdceSrnaSrnecSrovnatSrpenSrstSrubStaniceStarostaStatikaStavbaStehnoStezkaStodolaStolekStopaStornoStoupatStrachStresStrhnoutStromStrunaStudnaStupniceStvolStykSubjektSubtropySucharSudostSuknoSundatSunoutSurikataSurovinaSvahSvalstvoSvetrSvatbaSvazekSvisleSvitekSvobodaSvodidloSvorkaSvrabSykavkaSykotSynekSynovecSypatSypkostSyrovostSyselSytostTabletkaTabuleTahounTajemnoTajfunTajgaTajitTajnostTaktikaTamhleTamponTancovatTanecTankerTapetaTaveninaTazatelTechnikaTehdyTekutinaTelefonTemnotaTendenceTenistaTenorTeplotaTepnaTeprveTerapieTermoskaTextilTichoTiskopisTitulekTkadlecTkaninaTlapkaTleskatTlukotTlupaTmelToaletaTopinkaTopolTorzoTouhaToulecTradiceTraktorTrampTrasaTraverzaTrefitTrestTrezorTrhavinaTrhlinaTrochuTrojiceTroskaTroubaTrpceTrpitelTrpkostTrubecTruchlitTruhliceTrusTrvatTudyTuhnoutTuhostTundraTuristaTurnajTuzemskoTvarohTvorbaTvrdostTvrzTygrTykevUbohostUbozeUbratUbrousekUbrusUbytovnaUchoUctivostUdivitUhraditUjednatUjistitUjmoutUkazatelUklidnitUklonitUkotvitUkrojitUliceUlitaUlovitUmyvadloUnavitUniformaUniknoutUpadnoutUplatnitUplynoutUpoutatUpravitUranUrazitUsednoutUsilovatUsmrtitUsnadnitUsnoutUsouditUstlatUstrnoutUtahovatUtkatUtlumitUtonoutUtopenecUtrousitUvalitUvolnitUvozovkaUzdravitUzelUzeninaUzlinaUznatVagonValchaValounVanaVandalVanilkaVaranVarhanyVarovatVcelkuVchodVdovaVedroVegetaceVejceVelbloudVeletrhVelitelVelmocVelrybaVenkovVerandaVerzeVeselkaVeskrzeVesniceVespoduVestaVeterinaVeverkaVibraceVichrVideohraVidinaVidleVilaViniceVisetVitalitaVizeVizitkaVjezdVkladVkusVlajkaVlakVlasecVlevoVlhkostVlivVlnovkaVloupatVnucovatVnukVodaVodivostVodoznakVodstvoVojenskyVojnaVojskoVolantVolbaVolitVolnoVoskovkaVozidloVozovnaVpravoVrabecVracetVrahVrataVrbaVrcholekVrhatVrstvaVrtuleVsaditVstoupitVstupVtipVybavitVybratVychovatVydatVydraVyfotitVyhledatVyhnoutVyhoditVyhraditVyhubitVyjasnitVyjetVyjmoutVyklopitVykonatVylekatVymazatVymezitVymizetVymysletVynechatVynikatVynutitVypadatVyplatitVypravitVypustitVyrazitVyrovnatVyrvatVyslovitVysokoVystavitVysunoutVysypatVytasitVytesatVytratitVyvinoutVyvolatVyvrhelVyzdobitVyznatVzaduVzbuditVzchopitVzdorVzduchVzdychatVzestupVzhledemVzkazVzlykatVznikVzorekVzpouraVztahVztekXylofonZabratZabydletZachovatZadarmoZadusitZafoukatZahltitZahoditZahradaZahynoutZajatecZajetZajistitZaklepatZakoupitZalepitZamezitZamotatZamysletZanechatZanikatZaplatitZapojitZapsatZarazitZastavitZasunoutZatajitZatemnitZatknoutZaujmoutZavalitZaveletZavinitZavolatZavrtatZazvonitZbavitZbrusuZbudovatZbytekZdalekaZdarmaZdatnostZdivoZdobitZdrojZdvihZdymadloZeleninaZemanZeminaZeptatZezaduZezdolaZhatitZhltnoutZhlubokaZhotovitZhrubaZimaZimniceZjemnitZklamatZkoumatZkratkaZkumavkaZlatoZlehkaZlobaZlomZlostZlozvykZmapovatZmarZmatekZmijeZmizetZmocnitZmodratZmrzlinaZmutovatZnakZnalostZnamenatZnovuZobrazitZotavitZoubekZoufaleZploditZpomalitZpravaZprostitZprudkaZprvuZradaZranitZrcadloZrnitostZrnoZrovnaZrychlitZrzavostZtichaZtratitZubovinaZubrZvednoutZvenkuZveselaZvonZvratZvukovodZvyk"; -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, " $1").toLowerCase().substring(1).split(" "); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a") { - wordlist = null; - throw new Error("BIP39 Wordlist for en (English) FAILED"); - } -} -var LangCz = /** @class */ (function (_super) { - __extends(LangCz, _super); - function LangCz() { - return _super.call(this, "cz") || this; - } - LangCz.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangCz.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangCz; -}(wordlist_1.Wordlist)); -var langCz = new LangCz(); -exports.langCz = langCz; -wordlist_1.Wordlist.register(langCz); - -},{"./wordlist":121}],114:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langEn = void 0; -var wordlist_1 = require("./wordlist"); -var words = "AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo"; -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, " $1").toLowerCase().substring(1).split(" "); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60") { - wordlist = null; - throw new Error("BIP39 Wordlist for en (English) FAILED"); - } -} -var LangEn = /** @class */ (function (_super) { - __extends(LangEn, _super); - function LangEn() { - return _super.call(this, "en") || this; - } - LangEn.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangEn.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangEn; -}(wordlist_1.Wordlist)); -var langEn = new LangEn(); -exports.langEn = langEn; -wordlist_1.Wordlist.register(langEn); - -},{"./wordlist":121}],115:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langEs = void 0; -var strings_1 = require("@ethersproject/strings"); -var wordlist_1 = require("./wordlist"); -var words = "A/bacoAbdomenAbejaAbiertoAbogadoAbonoAbortoAbrazoAbrirAbueloAbusoAcabarAcademiaAccesoAccio/nAceiteAcelgaAcentoAceptarA/cidoAclararAcne/AcogerAcosoActivoActoActrizActuarAcudirAcuerdoAcusarAdictoAdmitirAdoptarAdornoAduanaAdultoAe/reoAfectarAficio/nAfinarAfirmarA/gilAgitarAgoni/aAgostoAgotarAgregarAgrioAguaAgudoA/guilaAgujaAhogoAhorroAireAislarAjedrezAjenoAjusteAlacra/nAlambreAlarmaAlbaA/lbumAlcaldeAldeaAlegreAlejarAlertaAletaAlfilerAlgaAlgodo/nAliadoAlientoAlivioAlmaAlmejaAlmi/barAltarAltezaAltivoAltoAlturaAlumnoAlzarAmableAmanteAmapolaAmargoAmasarA/mbarA/mbitoAmenoAmigoAmistadAmorAmparoAmplioAnchoAncianoAnclaAndarAnde/nAnemiaA/nguloAnilloA/nimoAni/sAnotarAntenaAntiguoAntojoAnualAnularAnuncioA~adirA~ejoA~oApagarAparatoApetitoApioAplicarApodoAporteApoyoAprenderAprobarApuestaApuroAradoAra~aArarA/rbitroA/rbolArbustoArchivoArcoArderArdillaArduoA/reaA/ridoAriesArmoni/aArne/sAromaArpaArpo/nArregloArrozArrugaArteArtistaAsaAsadoAsaltoAscensoAsegurarAseoAsesorAsientoAsiloAsistirAsnoAsombroA/speroAstillaAstroAstutoAsumirAsuntoAtajoAtaqueAtarAtentoAteoA/ticoAtletaA/tomoAtraerAtrozAtu/nAudazAudioAugeAulaAumentoAusenteAutorAvalAvanceAvaroAveAvellanaAvenaAvestruzAvio/nAvisoAyerAyudaAyunoAzafra/nAzarAzoteAzu/carAzufreAzulBabaBaborBacheBahi/aBaileBajarBalanzaBalco/nBaldeBambu/BancoBandaBa~oBarbaBarcoBarnizBarroBa/sculaBasto/nBasuraBatallaBateri/aBatirBatutaBau/lBazarBebe/BebidaBelloBesarBesoBestiaBichoBienBingoBlancoBloqueBlusaBoaBobinaBoboBocaBocinaBodaBodegaBoinaBolaBoleroBolsaBombaBondadBonitoBonoBonsa/iBordeBorrarBosqueBoteBoti/nBo/vedaBozalBravoBrazoBrechaBreveBrilloBrincoBrisaBrocaBromaBronceBroteBrujaBruscoBrutoBuceoBucleBuenoBueyBufandaBufo/nBu/hoBuitreBultoBurbujaBurlaBurroBuscarButacaBuzo/nCaballoCabezaCabinaCabraCacaoCada/verCadenaCaerCafe/Cai/daCaima/nCajaCajo/nCalCalamarCalcioCaldoCalidadCalleCalmaCalorCalvoCamaCambioCamelloCaminoCampoCa/ncerCandilCanelaCanguroCanicaCantoCa~aCa~o/nCaobaCaosCapazCapita/nCapoteCaptarCapuchaCaraCarbo/nCa/rcelCaretaCargaCari~oCarneCarpetaCarroCartaCasaCascoCaseroCaspaCastorCatorceCatreCaudalCausaCazoCebollaCederCedroCeldaCe/lebreCelosoCe/lulaCementoCenizaCentroCercaCerdoCerezaCeroCerrarCertezaCe/spedCetroChacalChalecoChampu/ChanclaChapaCharlaChicoChisteChivoChoqueChozaChuletaChuparCiclo/nCiegoCieloCienCiertoCifraCigarroCimaCincoCineCintaCipre/sCircoCiruelaCisneCitaCiudadClamorClanClaroClaseClaveClienteClimaCli/nicaCobreCoccio/nCochinoCocinaCocoCo/digoCodoCofreCogerCoheteCoji/nCojoColaColchaColegioColgarColinaCollarColmoColumnaCombateComerComidaCo/modoCompraCondeConejoCongaConocerConsejoContarCopaCopiaCorazo/nCorbataCorchoCordo/nCoronaCorrerCoserCosmosCostaCra/neoCra/terCrearCrecerCrei/doCremaCri/aCrimenCriptaCrisisCromoCro/nicaCroquetaCrudoCruzCuadroCuartoCuatroCuboCubrirCucharaCuelloCuentoCuerdaCuestaCuevaCuidarCulebraCulpaCultoCumbreCumplirCunaCunetaCuotaCupo/nCu/pulaCurarCuriosoCursoCurvaCutisDamaDanzaDarDardoDa/tilDeberDe/bilDe/cadaDecirDedoDefensaDefinirDejarDelfi/nDelgadoDelitoDemoraDensoDentalDeporteDerechoDerrotaDesayunoDeseoDesfileDesnudoDestinoDesvi/oDetalleDetenerDeudaDi/aDiabloDiademaDiamanteDianaDiarioDibujoDictarDienteDietaDiezDifi/cilDignoDilemaDiluirDineroDirectoDirigirDiscoDise~oDisfrazDivaDivinoDobleDoceDolorDomingoDonDonarDoradoDormirDorsoDosDosisDrago/nDrogaDuchaDudaDueloDue~oDulceDu/oDuqueDurarDurezaDuroE/banoEbrioEcharEcoEcuadorEdadEdicio/nEdificioEditorEducarEfectoEficazEjeEjemploElefanteElegirElementoElevarElipseE/liteElixirElogioEludirEmbudoEmitirEmocio/nEmpateEmpe~oEmpleoEmpresaEnanoEncargoEnchufeEnci/aEnemigoEneroEnfadoEnfermoEnga~oEnigmaEnlaceEnormeEnredoEnsayoEnse~arEnteroEntrarEnvaseEnvi/oE/pocaEquipoErizoEscalaEscenaEscolarEscribirEscudoEsenciaEsferaEsfuerzoEspadaEspejoEspi/aEsposaEspumaEsqui/EstarEsteEstiloEstufaEtapaEternoE/ticaEtniaEvadirEvaluarEventoEvitarExactoExamenExcesoExcusaExentoExigirExilioExistirE/xitoExpertoExplicarExponerExtremoFa/bricaFa/bulaFachadaFa/cilFactorFaenaFajaFaldaFalloFalsoFaltarFamaFamiliaFamosoFarao/nFarmaciaFarolFarsaFaseFatigaFaunaFavorFaxFebreroFechaFelizFeoFeriaFerozFe/rtilFervorFesti/nFiableFianzaFiarFibraFiccio/nFichaFideoFiebreFielFieraFiestaFiguraFijarFijoFilaFileteFilialFiltroFinFincaFingirFinitoFirmaFlacoFlautaFlechaFlorFlotaFluirFlujoFlu/orFobiaFocaFogataFogo/nFolioFolletoFondoFormaForroFortunaForzarFosaFotoFracasoFra/gilFranjaFraseFraudeFrei/rFrenoFresaFri/oFritoFrutaFuegoFuenteFuerzaFugaFumarFuncio/nFundaFurgo/nFuriaFusilFu/tbolFuturoGacelaGafasGaitaGajoGalaGaleri/aGalloGambaGanarGanchoGangaGansoGarajeGarzaGasolinaGastarGatoGavila/nGemeloGemirGenGe/neroGenioGenteGeranioGerenteGermenGestoGiganteGimnasioGirarGiroGlaciarGloboGloriaGolGolfoGolosoGolpeGomaGordoGorilaGorraGotaGoteoGozarGradaGra/ficoGranoGrasaGratisGraveGrietaGrilloGripeGrisGritoGrosorGru/aGruesoGrumoGrupoGuanteGuapoGuardiaGuerraGui/aGui~oGuionGuisoGuitarraGusanoGustarHaberHa/bilHablarHacerHachaHadaHallarHamacaHarinaHazHaza~aHebillaHebraHechoHeladoHelioHembraHerirHermanoHe/roeHervirHieloHierroHi/gadoHigieneHijoHimnoHistoriaHocicoHogarHogueraHojaHombreHongoHonorHonraHoraHormigaHornoHostilHoyoHuecoHuelgaHuertaHuesoHuevoHuidaHuirHumanoHu/medoHumildeHumoHundirHuraca/nHurtoIconoIdealIdiomaI/doloIglesiaIglu/IgualIlegalIlusio/nImagenIma/nImitarImparImperioImponerImpulsoIncapazI/ndiceInerteInfielInformeIngenioInicioInmensoInmuneInnatoInsectoInstanteIntere/sI/ntimoIntuirInu/tilInviernoIraIrisIroni/aIslaIsloteJabali/Jabo/nJamo/nJarabeJardi/nJarraJaulaJazmi/nJefeJeringaJineteJornadaJorobaJovenJoyaJuergaJuevesJuezJugadorJugoJugueteJuicioJuncoJunglaJunioJuntarJu/piterJurarJustoJuvenilJuzgarKiloKoalaLabioLacioLacraLadoLadro/nLagartoLa/grimaLagunaLaicoLamerLa/minaLa/mparaLanaLanchaLangostaLanzaLa/pizLargoLarvaLa/stimaLataLa/texLatirLaurelLavarLazoLealLeccio/nLecheLectorLeerLegio/nLegumbreLejanoLenguaLentoLe~aLeo/nLeopardoLesio/nLetalLetraLeveLeyendaLibertadLibroLicorLi/derLidiarLienzoLigaLigeroLimaLi/miteLimo/nLimpioLinceLindoLi/neaLingoteLinoLinternaLi/quidoLisoListaLiteraLitioLitroLlagaLlamaLlantoLlaveLlegarLlenarLlevarLlorarLloverLluviaLoboLocio/nLocoLocuraLo/gicaLogroLombrizLomoLonjaLoteLuchaLucirLugarLujoLunaLunesLupaLustroLutoLuzMacetaMachoMaderaMadreMaduroMaestroMafiaMagiaMagoMai/zMaldadMaletaMallaMaloMama/MamboMamutMancoMandoManejarMangaManiqui/ManjarManoMansoMantaMa~anaMapaMa/quinaMarMarcoMareaMarfilMargenMaridoMa/rmolMarro/nMartesMarzoMasaMa/scaraMasivoMatarMateriaMatizMatrizMa/ximoMayorMazorcaMechaMedallaMedioMe/dulaMejillaMejorMelenaMelo/nMemoriaMenorMensajeMenteMenu/MercadoMerengueMe/ritoMesMeso/nMetaMeterMe/todoMetroMezclaMiedoMielMiembroMigaMilMilagroMilitarMillo/nMimoMinaMineroMi/nimoMinutoMiopeMirarMisaMiseriaMisilMismoMitadMitoMochilaMocio/nModaModeloMohoMojarMoldeMolerMolinoMomentoMomiaMonarcaMonedaMonjaMontoMo~oMoradaMorderMorenoMorirMorroMorsaMortalMoscaMostrarMotivoMoverMo/vilMozoMuchoMudarMuebleMuelaMuerteMuestraMugreMujerMulaMuletaMultaMundoMu~ecaMuralMuroMu/sculoMuseoMusgoMu/sicaMusloNa/carNacio/nNadarNaipeNaranjaNarizNarrarNasalNatalNativoNaturalNa/useaNavalNaveNavidadNecioNe/ctarNegarNegocioNegroNeo/nNervioNetoNeutroNevarNeveraNichoNidoNieblaNietoNi~ezNi~oNi/tidoNivelNoblezaNocheNo/minaNoriaNormaNorteNotaNoticiaNovatoNovelaNovioNubeNucaNu/cleoNudilloNudoNueraNueveNuezNuloNu/meroNutriaOasisObesoObispoObjetoObraObreroObservarObtenerObvioOcaOcasoOce/anoOchentaOchoOcioOcreOctavoOctubreOcultoOcuparOcurrirOdiarOdioOdiseaOesteOfensaOfertaOficioOfrecerOgroOi/doOi/rOjoOlaOleadaOlfatoOlivoOllaOlmoOlorOlvidoOmbligoOndaOnzaOpacoOpcio/nO/peraOpinarOponerOptarO/pticaOpuestoOracio/nOradorOralO/rbitaOrcaOrdenOrejaO/rganoOrgi/aOrgulloOrienteOrigenOrillaOroOrquestaOrugaOsadi/aOscuroOseznoOsoOstraOto~oOtroOvejaO/vuloO/xidoOxi/genoOyenteOzonoPactoPadrePaellaPa/ginaPagoPai/sPa/jaroPalabraPalcoPaletaPa/lidoPalmaPalomaPalparPanPanalPa/nicoPanteraPa~ueloPapa/PapelPapillaPaquetePararParcelaParedParirParoPa/rpadoParquePa/rrafoPartePasarPaseoPasio/nPasoPastaPataPatioPatriaPausaPautaPavoPayasoPeato/nPecadoPeceraPechoPedalPedirPegarPeinePelarPelda~oPeleaPeligroPellejoPeloPelucaPenaPensarPe~o/nPeo/nPeorPepinoPeque~oPeraPerchaPerderPerezaPerfilPericoPerlaPermisoPerroPersonaPesaPescaPe/simoPesta~aPe/taloPetro/leoPezPezu~aPicarPicho/nPiePiedraPiernaPiezaPijamaPilarPilotoPimientaPinoPintorPinzaPi~aPiojoPipaPirataPisarPiscinaPisoPistaPito/nPizcaPlacaPlanPlataPlayaPlazaPleitoPlenoPlomoPlumaPluralPobrePocoPoderPodioPoemaPoesi/aPoetaPolenPolici/aPolloPolvoPomadaPomeloPomoPompaPonerPorcio/nPortalPosadaPoseerPosiblePostePotenciaPotroPozoPradoPrecozPreguntaPremioPrensaPresoPrevioPrimoPri/ncipePrisio/nPrivarProaProbarProcesoProductoProezaProfesorProgramaProlePromesaProntoPropioPro/ximoPruebaPu/blicoPucheroPudorPuebloPuertaPuestoPulgaPulirPulmo/nPulpoPulsoPumaPuntoPu~alPu~oPupaPupilaPure/QuedarQuejaQuemarQuererQuesoQuietoQui/micaQuinceQuitarRa/banoRabiaRaboRacio/nRadicalRai/zRamaRampaRanchoRangoRapazRa/pidoRaptoRasgoRaspaRatoRayoRazaRazo/nReaccio/nRealidadReba~oReboteRecaerRecetaRechazoRecogerRecreoRectoRecursoRedRedondoReducirReflejoReformaRefra/nRefugioRegaloRegirReglaRegresoRehe/nReinoRei/rRejaRelatoRelevoRelieveRellenoRelojRemarRemedioRemoRencorRendirRentaRepartoRepetirReposoReptilResRescateResinaRespetoRestoResumenRetiroRetornoRetratoReunirReve/sRevistaReyRezarRicoRiegoRiendaRiesgoRifaRi/gidoRigorRinco/nRi~o/nRi/oRiquezaRisaRitmoRitoRizoRobleRoceRociarRodarRodeoRodillaRoerRojizoRojoRomeroRomperRonRoncoRondaRopaRoperoRosaRoscaRostroRotarRubi/RuborRudoRuedaRugirRuidoRuinaRuletaRuloRumboRumorRupturaRutaRutinaSa/badoSaberSabioSableSacarSagazSagradoSalaSaldoSaleroSalirSalmo/nSalo/nSalsaSaltoSaludSalvarSambaSancio/nSandi/aSanearSangreSanidadSanoSantoSapoSaqueSardinaSarte/nSastreSata/nSaunaSaxofo/nSeccio/nSecoSecretoSectaSedSeguirSeisSelloSelvaSemanaSemillaSendaSensorSe~alSe~orSepararSepiaSequi/aSerSerieSermo/nServirSesentaSesio/nSetaSetentaSeveroSexoSextoSidraSiestaSieteSigloSignoSi/labaSilbarSilencioSillaSi/mboloSimioSirenaSistemaSitioSituarSobreSocioSodioSolSolapaSoldadoSoledadSo/lidoSoltarSolucio/nSombraSondeoSonidoSonoroSonrisaSopaSoplarSoporteSordoSorpresaSorteoSoste/nSo/tanoSuaveSubirSucesoSudorSuegraSueloSue~oSuerteSufrirSujetoSulta/nSumarSuperarSuplirSuponerSupremoSurSurcoSure~oSurgirSustoSutilTabacoTabiqueTablaTabu/TacoTactoTajoTalarTalcoTalentoTallaTalo/nTama~oTamborTangoTanqueTapaTapeteTapiaTapo/nTaquillaTardeTareaTarifaTarjetaTarotTarroTartaTatuajeTauroTazaTazo/nTeatroTechoTeclaTe/cnicaTejadoTejerTejidoTelaTele/fonoTemaTemorTemploTenazTenderTenerTenisTensoTeori/aTerapiaTercoTe/rminoTernuraTerrorTesisTesoroTestigoTeteraTextoTezTibioTiburo/nTiempoTiendaTierraTiesoTigreTijeraTildeTimbreTi/midoTimoTintaTi/oTi/picoTipoTiraTiro/nTita/nTi/tereTi/tuloTizaToallaTobilloTocarTocinoTodoTogaToldoTomarTonoTontoToparTopeToqueTo/raxToreroTormentaTorneoToroTorpedoTorreTorsoTortugaTosToscoToserTo/xicoTrabajoTractorTraerTra/ficoTragoTrajeTramoTranceTratoTraumaTrazarTre/bolTreguaTreintaTrenTreparTresTribuTrigoTripaTristeTriunfoTrofeoTrompaTroncoTropaTroteTrozoTrucoTruenoTrufaTuberi/aTuboTuertoTumbaTumorTu/nelTu/nicaTurbinaTurismoTurnoTutorUbicarU/lceraUmbralUnidadUnirUniversoUnoUntarU~aUrbanoUrbeUrgenteUrnaUsarUsuarioU/tilUtopi/aUvaVacaVaci/oVacunaVagarVagoVainaVajillaValeVa/lidoValleValorVa/lvulaVampiroVaraVariarVaro/nVasoVecinoVectorVehi/culoVeinteVejezVelaVeleroVelozVenaVencerVendaVenenoVengarVenirVentaVenusVerVeranoVerboVerdeVeredaVerjaVersoVerterVi/aViajeVibrarVicioVi/ctimaVidaVi/deoVidrioViejoViernesVigorVilVillaVinagreVinoVi~edoVioli/nViralVirgoVirtudVisorVi/speraVistaVitaminaViudoVivazViveroVivirVivoVolca/nVolumenVolverVorazVotarVotoVozVueloVulgarYacerYateYeguaYemaYernoYesoYodoYogaYogurZafiroZanjaZapatoZarzaZonaZorroZumoZurdo"; -var lookup = {}; -var wordlist = null; -function dropDiacritic(word) { - wordlist_1.logger.checkNormalize(); - return (0, strings_1.toUtf8String)(Array.prototype.filter.call((0, strings_1.toUtf8Bytes)(word.normalize("NFD").toLowerCase()), function (c) { - return ((c >= 65 && c <= 90) || (c >= 97 && c <= 123)); - })); -} -function expand(word) { - var output = []; - Array.prototype.forEach.call((0, strings_1.toUtf8Bytes)(word), function (c) { - // Acute accent - if (c === 47) { - output.push(204); - output.push(129); - // n-tilde - } - else if (c === 126) { - output.push(110); - output.push(204); - output.push(131); - } - else { - output.push(c); - } - }); - return (0, strings_1.toUtf8String)(output); -} -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, " $1").toLowerCase().substring(1).split(" ").map(function (w) { return expand(w); }); - wordlist.forEach(function (word, index) { - lookup[dropDiacritic(word)] = index; - }); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0xf74fb7092aeacdfbf8959557de22098da512207fb9f109cb526994938cf40300") { - wordlist = null; - throw new Error("BIP39 Wordlist for es (Spanish) FAILED"); - } -} -var LangEs = /** @class */ (function (_super) { - __extends(LangEs, _super); - function LangEs() { - return _super.call(this, "es") || this; - } - LangEs.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangEs.prototype.getWordIndex = function (word) { - loadWords(this); - return lookup[dropDiacritic(word)]; - }; - return LangEs; -}(wordlist_1.Wordlist)); -var langEs = new LangEs(); -exports.langEs = langEs; -wordlist_1.Wordlist.register(langEs); - -},{"./wordlist":121,"@ethersproject/strings":100}],116:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langFr = void 0; -var strings_1 = require("@ethersproject/strings"); -var wordlist_1 = require("./wordlist"); -var words = "AbaisserAbandonAbdiquerAbeilleAbolirAborderAboutirAboyerAbrasifAbreuverAbriterAbrogerAbruptAbsenceAbsoluAbsurdeAbusifAbyssalAcade/mieAcajouAcarienAccablerAccepterAcclamerAccoladeAccrocheAccuserAcerbeAchatAcheterAcidulerAcierAcompteAcque/rirAcronymeActeurActifActuelAdepteAde/quatAdhe/sifAdjectifAdjugerAdmettreAdmirerAdopterAdorerAdoucirAdresseAdroitAdulteAdverbeAe/rerAe/ronefAffaireAffecterAfficheAffreuxAffublerAgacerAgencerAgileAgiterAgraferAgre/ableAgrumeAiderAiguilleAilierAimableAisanceAjouterAjusterAlarmerAlchimieAlerteAlge-breAlgueAlie/nerAlimentAlle/gerAlliageAllouerAllumerAlourdirAlpagaAltesseAlve/oleAmateurAmbiguAmbreAme/nagerAmertumeAmidonAmiralAmorcerAmourAmovibleAmphibieAmpleurAmusantAnalyseAnaphoreAnarchieAnatomieAncienAne/antirAngleAngoisseAnguleuxAnimalAnnexerAnnonceAnnuelAnodinAnomalieAnonymeAnormalAntenneAntidoteAnxieuxApaiserApe/ritifAplanirApologieAppareilAppelerApporterAppuyerAquariumAqueducArbitreArbusteArdeurArdoiseArgentArlequinArmatureArmementArmoireArmureArpenterArracherArriverArroserArsenicArte/rielArticleAspectAsphalteAspirerAssautAsservirAssietteAssocierAssurerAsticotAstreAstuceAtelierAtomeAtriumAtroceAttaqueAttentifAttirerAttraperAubaineAubergeAudaceAudibleAugurerAuroreAutomneAutrucheAvalerAvancerAvariceAvenirAverseAveugleAviateurAvideAvionAviserAvoineAvouerAvrilAxialAxiomeBadgeBafouerBagageBaguetteBaignadeBalancerBalconBaleineBalisageBambinBancaireBandageBanlieueBannie-reBanquierBarbierBarilBaronBarqueBarrageBassinBastionBatailleBateauBatterieBaudrierBavarderBeletteBe/lierBeloteBe/ne/ficeBerceauBergerBerlineBermudaBesaceBesogneBe/tailBeurreBiberonBicycleBiduleBijouBilanBilingueBillardBinaireBiologieBiopsieBiotypeBiscuitBisonBistouriBitumeBizarreBlafardBlagueBlanchirBlessantBlinderBlondBloquerBlousonBobardBobineBoireBoiserBolideBonbonBondirBonheurBonifierBonusBordureBorneBotteBoucleBoueuxBougieBoulonBouquinBourseBoussoleBoutiqueBoxeurBrancheBrasierBraveBrebisBre-cheBreuvageBricolerBrigadeBrillantBriocheBriqueBrochureBroderBronzerBrousseBroyeurBrumeBrusqueBrutalBruyantBuffleBuissonBulletinBureauBurinBustierButinerButoirBuvableBuvetteCabanonCabineCachetteCadeauCadreCafe/ineCaillouCaissonCalculerCalepinCalibreCalmerCalomnieCalvaireCamaradeCame/raCamionCampagneCanalCanetonCanonCantineCanularCapableCaporalCapriceCapsuleCapterCapucheCarabineCarboneCaresserCaribouCarnageCarotteCarreauCartonCascadeCasierCasqueCassureCauserCautionCavalierCaverneCaviarCe/dilleCeintureCe/lesteCelluleCendrierCensurerCentralCercleCe/re/bralCeriseCernerCerveauCesserChagrinChaiseChaleurChambreChanceChapitreCharbonChasseurChatonChaussonChavirerChemiseChenilleChe/quierChercherChevalChienChiffreChignonChime-reChiotChlorureChocolatChoisirChoseChouetteChromeChuteCigareCigogneCimenterCine/maCintrerCirculerCirerCirqueCiterneCitoyenCitronCivilClaironClameurClaquerClasseClavierClientClignerClimatClivageClocheClonageCloporteCobaltCobraCocasseCocotierCoderCodifierCoffreCognerCohe/sionCoifferCoincerCole-reColibriCollineColmaterColonelCombatCome/dieCommandeCompactConcertConduireConfierCongelerConnoterConsonneContactConvexeCopainCopieCorailCorbeauCordageCornicheCorpusCorrectCorte-geCosmiqueCostumeCotonCoudeCoupureCourageCouteauCouvrirCoyoteCrabeCrainteCravateCrayonCre/atureCre/diterCre/meuxCreuserCrevetteCriblerCrierCristalCrite-reCroireCroquerCrotaleCrucialCruelCrypterCubiqueCueillirCuille-reCuisineCuivreCulminerCultiverCumulerCupideCuratifCurseurCyanureCycleCylindreCyniqueDaignerDamierDangerDanseurDauphinDe/battreDe/biterDe/borderDe/briderDe/butantDe/calerDe/cembreDe/chirerDe/ciderDe/clarerDe/corerDe/crireDe/cuplerDe/daleDe/ductifDe/esseDe/fensifDe/filerDe/frayerDe/gagerDe/givrerDe/glutirDe/graferDe/jeunerDe/liceDe/logerDemanderDemeurerDe/molirDe/nicherDe/nouerDentelleDe/nuderDe/partDe/penserDe/phaserDe/placerDe/poserDe/rangerDe/roberDe/sastreDescenteDe/sertDe/signerDe/sobe/irDessinerDestrierDe/tacherDe/testerDe/tourerDe/tresseDevancerDevenirDevinerDevoirDiableDialogueDiamantDicterDiffe/rerDige/rerDigitalDigneDiluerDimancheDiminuerDioxydeDirectifDirigerDiscuterDisposerDissiperDistanceDivertirDiviserDocileDocteurDogmeDoigtDomaineDomicileDompterDonateurDonjonDonnerDopamineDortoirDorureDosageDoseurDossierDotationDouanierDoubleDouceurDouterDoyenDragonDraperDresserDribblerDroitureDuperieDuplexeDurableDurcirDynastieE/blouirE/carterE/charpeE/chelleE/clairerE/clipseE/cloreE/cluseE/coleE/conomieE/corceE/couterE/craserE/cre/merE/crivainE/crouE/cumeE/cureuilE/difierE/duquerEffacerEffectifEffigieEffortEffrayerEffusionE/galiserE/garerE/jecterE/laborerE/largirE/lectronE/le/gantE/le/phantE/le-veE/ligibleE/litismeE/logeE/luciderE/luderEmballerEmbellirEmbryonE/meraudeE/missionEmmenerE/motionE/mouvoirEmpereurEmployerEmporterEmpriseE/mulsionEncadrerEnche-reEnclaveEncocheEndiguerEndosserEndroitEnduireE/nergieEnfanceEnfermerEnfouirEngagerEnginEngloberE/nigmeEnjamberEnjeuEnleverEnnemiEnnuyeuxEnrichirEnrobageEnseigneEntasserEntendreEntierEntourerEntraverE/nume/rerEnvahirEnviableEnvoyerEnzymeE/olienE/paissirE/pargneE/patantE/pauleE/picerieE/pide/mieE/pierE/pilogueE/pineE/pisodeE/pitapheE/poqueE/preuveE/prouverE/puisantE/querreE/quipeE/rigerE/rosionErreurE/ruptionEscalierEspadonEspe-ceEspie-gleEspoirEspritEsquiverEssayerEssenceEssieuEssorerEstimeEstomacEstradeE/tage-reE/talerE/tancheE/tatiqueE/teindreE/tendoirE/ternelE/thanolE/thiqueEthnieE/tirerE/tofferE/toileE/tonnantE/tourdirE/trangeE/troitE/tudeEuphorieE/valuerE/vasionE/ventailE/videnceE/viterE/volutifE/voquerExactExage/rerExaucerExcellerExcitantExclusifExcuseExe/cuterExempleExercerExhalerExhorterExigenceExilerExisterExotiqueExpe/dierExplorerExposerExprimerExquisExtensifExtraireExulterFableFabuleuxFacetteFacileFactureFaiblirFalaiseFameuxFamilleFarceurFarfeluFarineFaroucheFascinerFatalFatigueFauconFautifFaveurFavoriFe/brileFe/conderFe/de/rerFe/linFemmeFe/murFendoirFe/odalFermerFe/roceFerveurFestivalFeuilleFeutreFe/vrierFiascoFicelerFictifFide-leFigureFilatureFiletageFilie-reFilleulFilmerFilouFiltrerFinancerFinirFioleFirmeFissureFixerFlairerFlammeFlasqueFlatteurFle/auFle-cheFleurFlexionFloconFloreFluctuerFluideFluvialFolieFonderieFongibleFontaineForcerForgeronFormulerFortuneFossileFoudreFouge-reFouillerFoulureFourmiFragileFraiseFranchirFrapperFrayeurFre/gateFreinerFrelonFre/mirFre/ne/sieFre-reFriableFrictionFrissonFrivoleFroidFromageFrontalFrotterFruitFugitifFuiteFureurFurieuxFurtifFusionFuturGagnerGalaxieGalerieGambaderGarantirGardienGarnirGarrigueGazelleGazonGe/antGe/latineGe/luleGendarmeGe/ne/ralGe/nieGenouGentilGe/ologieGe/ome-treGe/raniumGermeGestuelGeyserGibierGiclerGirafeGivreGlaceGlaiveGlisserGlobeGloireGlorieuxGolfeurGommeGonflerGorgeGorilleGoudronGouffreGoulotGoupilleGourmandGoutteGraduelGraffitiGraineGrandGrappinGratuitGravirGrenatGriffureGrillerGrimperGrognerGronderGrotteGroupeGrugerGrutierGruye-reGue/pardGuerrierGuideGuimauveGuitareGustatifGymnasteGyrostatHabitudeHachoirHalteHameauHangarHannetonHaricotHarmonieHarponHasardHe/liumHe/matomeHerbeHe/rissonHermineHe/ronHe/siterHeureuxHibernerHibouHilarantHistoireHiverHomardHommageHomoge-neHonneurHonorerHonteuxHordeHorizonHorlogeHormoneHorribleHouleuxHousseHublotHuileuxHumainHumbleHumideHumourHurlerHydromelHygie-neHymneHypnoseIdylleIgnorerIguaneIlliciteIllusionImageImbiberImiterImmenseImmobileImmuableImpactImpe/rialImplorerImposerImprimerImputerIncarnerIncendieIncidentInclinerIncoloreIndexerIndiceInductifIne/ditIneptieInexactInfiniInfligerInformerInfusionInge/rerInhalerInhiberInjecterInjureInnocentInoculerInonderInscrireInsecteInsigneInsoliteInspirerInstinctInsulterIntactIntenseIntimeIntrigueIntuitifInutileInvasionInventerInviterInvoquerIroniqueIrradierIrre/elIrriterIsolerIvoireIvresseJaguarJaillirJambeJanvierJardinJaugerJauneJavelotJetableJetonJeudiJeunesseJoindreJoncherJonglerJoueurJouissifJournalJovialJoyauJoyeuxJubilerJugementJuniorJuponJuristeJusticeJuteuxJuve/nileKayakKimonoKiosqueLabelLabialLabourerLace/rerLactoseLaguneLaineLaisserLaitierLambeauLamelleLampeLanceurLangageLanterneLapinLargeurLarmeLaurierLavaboLavoirLectureLe/galLe/gerLe/gumeLessiveLettreLevierLexiqueLe/zardLiasseLibe/rerLibreLicenceLicorneLie-geLie-vreLigatureLigoterLigueLimerLimiteLimonadeLimpideLine/aireLingotLionceauLiquideLisie-reListerLithiumLitigeLittoralLivreurLogiqueLointainLoisirLombricLoterieLouerLourdLoutreLouveLoyalLubieLucideLucratifLueurLugubreLuisantLumie-reLunaireLundiLuronLutterLuxueuxMachineMagasinMagentaMagiqueMaigreMaillonMaintienMairieMaisonMajorerMalaxerMale/ficeMalheurMaliceMalletteMammouthMandaterManiableManquantManteauManuelMarathonMarbreMarchandMardiMaritimeMarqueurMarronMartelerMascotteMassifMate/rielMatie-reMatraqueMaudireMaussadeMauveMaximalMe/chantMe/connuMe/dailleMe/decinMe/diterMe/duseMeilleurMe/langeMe/lodieMembreMe/moireMenacerMenerMenhirMensongeMentorMercrediMe/riteMerleMessagerMesureMe/talMe/te/oreMe/thodeMe/tierMeubleMiaulerMicrobeMietteMignonMigrerMilieuMillionMimiqueMinceMine/ralMinimalMinorerMinuteMiracleMiroiterMissileMixteMobileModerneMoelleuxMondialMoniteurMonnaieMonotoneMonstreMontagneMonumentMoqueurMorceauMorsureMortierMoteurMotifMoucheMoufleMoulinMoussonMoutonMouvantMultipleMunitionMurailleMure-neMurmureMuscleMuse/umMusicienMutationMuterMutuelMyriadeMyrtilleMyste-reMythiqueNageurNappeNarquoisNarrerNatationNationNatureNaufrageNautiqueNavireNe/buleuxNectarNe/fasteNe/gationNe/gligerNe/gocierNeigeNerveuxNettoyerNeuroneNeutronNeveuNicheNickelNitrateNiveauNobleNocifNocturneNoirceurNoisetteNomadeNombreuxNommerNormatifNotableNotifierNotoireNourrirNouveauNovateurNovembreNoviceNuageNuancerNuireNuisibleNume/roNuptialNuqueNutritifObe/irObjectifObligerObscurObserverObstacleObtenirObturerOccasionOccuperOce/anOctobreOctroyerOctuplerOculaireOdeurOdorantOffenserOfficierOffrirOgiveOiseauOisillonOlfactifOlivierOmbrageOmettreOnctueuxOndulerOne/reuxOniriqueOpaleOpaqueOpe/rerOpinionOpportunOpprimerOpterOptiqueOrageuxOrangeOrbiteOrdonnerOreilleOrganeOrgueilOrificeOrnementOrqueOrtieOscillerOsmoseOssatureOtarieOuraganOursonOutilOutragerOuvrageOvationOxydeOxyge-neOzonePaisiblePalacePalmare-sPalourdePalperPanachePandaPangolinPaniquerPanneauPanoramaPantalonPapayePapierPapoterPapyrusParadoxeParcelleParesseParfumerParlerParoleParrainParsemerPartagerParureParvenirPassionPaste-quePaternelPatiencePatronPavillonPavoiserPayerPaysagePeignePeintrePelagePe/licanPellePelousePeluchePendulePe/ne/trerPe/niblePensifPe/nuriePe/pitePe/plumPerdrixPerforerPe/riodePermuterPerplexePersilPertePeserPe/talePetitPe/trirPeuplePharaonPhobiePhoquePhotonPhrasePhysiquePianoPicturalPie-cePierrePieuvrePilotePinceauPipettePiquerPiroguePiscinePistonPivoterPixelPizzaPlacardPlafondPlaisirPlanerPlaquePlastronPlateauPleurerPlexusPliagePlombPlongerPluiePlumagePochettePoe/siePoe-tePointePoirierPoissonPoivrePolairePolicierPollenPolygonePommadePompierPonctuelPonde/rerPoneyPortiquePositionPosse/derPosturePotagerPoteauPotionPoucePoulainPoumonPourprePoussinPouvoirPrairiePratiquePre/cieuxPre/direPre/fixePre/ludePre/nomPre/sencePre/textePre/voirPrimitifPrincePrisonPriverProble-meProce/derProdigeProfondProgre-sProieProjeterProloguePromenerPropreProspe-reProte/gerProuesseProverbePrudencePruneauPsychosePublicPuceronPuiserPulpePulsarPunaisePunitifPupitrePurifierPuzzlePyramideQuasarQuerelleQuestionQuie/tudeQuitterQuotientRacineRaconterRadieuxRagondinRaideurRaisinRalentirRallongeRamasserRapideRasageRatisserRavagerRavinRayonnerRe/actifRe/agirRe/aliserRe/animerRecevoirRe/citerRe/clamerRe/colterRecruterReculerRecyclerRe/digerRedouterRefaireRe/flexeRe/formerRefrainRefugeRe/galienRe/gionRe/glageRe/gulierRe/ite/rerRejeterRejouerRelatifReleverReliefRemarqueReme-deRemiseRemonterRemplirRemuerRenardRenfortReniflerRenoncerRentrerRenvoiReplierReporterRepriseReptileRequinRe/serveRe/sineuxRe/soudreRespectResterRe/sultatRe/tablirRetenirRe/ticuleRetomberRetracerRe/unionRe/ussirRevancheRevivreRe/volteRe/vulsifRichesseRideauRieurRigideRigolerRincerRiposterRisibleRisqueRituelRivalRivie-reRocheuxRomanceRompreRonceRondinRoseauRosierRotatifRotorRotuleRougeRouilleRouleauRoutineRoyaumeRubanRubisRucheRuelleRugueuxRuinerRuisseauRuserRustiqueRythmeSablerSaboterSabreSacocheSafariSagesseSaisirSaladeSaliveSalonSaluerSamediSanctionSanglierSarcasmeSardineSaturerSaugrenuSaumonSauterSauvageSavantSavonnerScalpelScandaleSce/le/ratSce/narioSceptreSche/maScienceScinderScoreScrutinSculpterSe/anceSe/cableSe/cherSecouerSe/cre/terSe/datifSe/duireSeigneurSe/jourSe/lectifSemaineSemblerSemenceSe/minalSe/nateurSensibleSentenceSe/parerSe/quenceSereinSergentSe/rieuxSerrureSe/rumServiceSe/sameSe/virSevrageSextupleSide/ralSie-cleSie/gerSifflerSigleSignalSilenceSiliciumSimpleSince-reSinistreSiphonSiropSismiqueSituerSkierSocialSocleSodiumSoigneuxSoldatSoleilSolitudeSolubleSombreSommeilSomnolerSondeSongeurSonnetteSonoreSorcierSortirSosieSottiseSoucieuxSoudureSouffleSouleverSoupapeSourceSoutirerSouvenirSpacieuxSpatialSpe/cialSphe-reSpiralStableStationSternumStimulusStipulerStrictStudieuxStupeurStylisteSublimeSubstratSubtilSubvenirSucce-sSucreSuffixeSugge/rerSuiveurSulfateSuperbeSupplierSurfaceSuricateSurmenerSurpriseSursautSurvieSuspectSyllabeSymboleSyme/trieSynapseSyntaxeSyste-meTabacTablierTactileTaillerTalentTalismanTalonnerTambourTamiserTangibleTapisTaquinerTarderTarifTartineTasseTatamiTatouageTaupeTaureauTaxerTe/moinTemporelTenailleTendreTeneurTenirTensionTerminerTerneTerribleTe/tineTexteThe-meThe/orieThe/rapieThoraxTibiaTie-deTimideTirelireTiroirTissuTitaneTitreTituberTobogganTole/rantTomateToniqueTonneauToponymeTorcheTordreTornadeTorpilleTorrentTorseTortueTotemToucherTournageTousserToxineTractionTraficTragiqueTrahirTrainTrancherTravailTre-fleTremperTre/sorTreuilTriageTribunalTricoterTrilogieTriompheTriplerTriturerTrivialTromboneTroncTropicalTroupeauTuileTulipeTumulteTunnelTurbineTuteurTutoyerTuyauTympanTyphonTypiqueTyranUbuesqueUltimeUltrasonUnanimeUnifierUnionUniqueUnitaireUniversUraniumUrbainUrticantUsageUsineUsuelUsureUtileUtopieVacarmeVaccinVagabondVagueVaillantVaincreVaisseauValableValiseVallonValveVampireVanilleVapeurVarierVaseuxVassalVasteVecteurVedetteVe/ge/talVe/hiculeVeinardVe/loceVendrediVe/ne/rerVengerVenimeuxVentouseVerdureVe/rinVernirVerrouVerserVertuVestonVe/te/ranVe/tusteVexantVexerViaducViandeVictoireVidangeVide/oVignetteVigueurVilainVillageVinaigreViolonVipe-reVirementVirtuoseVirusVisageViseurVisionVisqueuxVisuelVitalVitesseViticoleVitrineVivaceVivipareVocationVoguerVoileVoisinVoitureVolailleVolcanVoltigerVolumeVoraceVortexVoterVouloirVoyageVoyelleWagonXe/nonYachtZe-breZe/nithZesteZoologie"; -var wordlist = null; -var lookup = {}; -function dropDiacritic(word) { - wordlist_1.logger.checkNormalize(); - return (0, strings_1.toUtf8String)(Array.prototype.filter.call((0, strings_1.toUtf8Bytes)(word.normalize("NFD").toLowerCase()), function (c) { - return ((c >= 65 && c <= 90) || (c >= 97 && c <= 123)); - })); -} -function expand(word) { - var output = []; - Array.prototype.forEach.call((0, strings_1.toUtf8Bytes)(word), function (c) { - // Acute accent - if (c === 47) { - output.push(204); - output.push(129); - // Grave accent - } - else if (c === 45) { - output.push(204); - output.push(128); - } - else { - output.push(c); - } - }); - return (0, strings_1.toUtf8String)(output); -} -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, " $1").toLowerCase().substring(1).split(" ").map(function (w) { return expand(w); }); - wordlist.forEach(function (word, index) { - lookup[dropDiacritic(word)] = index; - }); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0x51deb7ae009149dc61a6bd18a918eb7ac78d2775726c68e598b92d002519b045") { - wordlist = null; - throw new Error("BIP39 Wordlist for fr (French) FAILED"); - } -} -var LangFr = /** @class */ (function (_super) { - __extends(LangFr, _super); - function LangFr() { - return _super.call(this, "fr") || this; - } - LangFr.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangFr.prototype.getWordIndex = function (word) { - loadWords(this); - return lookup[dropDiacritic(word)]; - }; - return LangFr; -}(wordlist_1.Wordlist)); -var langFr = new LangFr(); -exports.langFr = langFr; -wordlist_1.Wordlist.register(langFr); - -},{"./wordlist":121,"@ethersproject/strings":100}],117:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langIt = void 0; -var wordlist_1 = require("./wordlist"); -var words = "AbacoAbbaglioAbbinatoAbeteAbissoAbolireAbrasivoAbrogatoAccadereAccennoAccusatoAcetoneAchilleAcidoAcquaAcreAcrilicoAcrobataAcutoAdagioAddebitoAddomeAdeguatoAderireAdipeAdottareAdulareAffabileAffettoAffissoAffrantoAforismaAfosoAfricanoAgaveAgenteAgevoleAggancioAgireAgitareAgonismoAgricoloAgrumetoAguzzoAlabardaAlatoAlbatroAlberatoAlboAlbumeAlceAlcolicoAlettoneAlfaAlgebraAlianteAlibiAlimentoAllagatoAllegroAllievoAllodolaAllusivoAlmenoAlogenoAlpacaAlpestreAltalenaAlternoAlticcioAltroveAlunnoAlveoloAlzareAmalgamaAmanitaAmarenaAmbitoAmbratoAmebaAmericaAmetistaAmicoAmmassoAmmendaAmmirareAmmonitoAmoreAmpioAmpliareAmuletoAnacardoAnagrafeAnalistaAnarchiaAnatraAncaAncellaAncoraAndareAndreaAnelloAngeloAngolareAngustoAnimaAnnegareAnnidatoAnnoAnnuncioAnonimoAnticipoAnziApaticoAperturaApodeApparireAppetitoAppoggioApprodoAppuntoAprileArabicaArachideAragostaAraldicaArancioAraturaArazzoArbitroArchivioArditoArenileArgentoArgineArgutoAriaArmoniaArneseArredatoArringaArrostoArsenicoArsoArteficeArzilloAsciuttoAscoltoAsepsiAsetticoAsfaltoAsinoAsolaAspiratoAsproAssaggioAsseAssolutoAssurdoAstaAstenutoAsticeAstrattoAtavicoAteismoAtomicoAtonoAttesaAttivareAttornoAttritoAttualeAusilioAustriaAutistaAutonomoAutunnoAvanzatoAvereAvvenireAvvisoAvvolgereAzioneAzotoAzzimoAzzurroBabeleBaccanoBacinoBacoBadessaBadilataBagnatoBaitaBalconeBaldoBalenaBallataBalzanoBambinoBandireBaraondaBarbaroBarcaBaritonoBarlumeBaroccoBasilicoBassoBatostaBattutoBauleBavaBavosaBeccoBeffaBelgioBelvaBendaBenevoleBenignoBenzinaBereBerlinaBetaBibitaBiciBidoneBifidoBigaBilanciaBimboBinocoloBiologoBipedeBipolareBirbanteBirraBiscottoBisestoBisnonnoBisonteBisturiBizzarroBlandoBlattaBollitoBonificoBordoBoscoBotanicoBottinoBozzoloBraccioBradipoBramaBrancaBravuraBretellaBrevettoBrezzaBrigliaBrillanteBrindareBroccoloBrodoBronzinaBrulloBrunoBubboneBucaBudinoBuffoneBuioBulboBuonoBurloneBurrascaBussolaBustaCadettoCaducoCalamaroCalcoloCalesseCalibroCalmoCaloriaCambusaCamerataCamiciaCamminoCamolaCampaleCanapaCandelaCaneCaninoCanottoCantinaCapaceCapelloCapitoloCapogiroCapperoCapraCapsulaCarapaceCarcassaCardoCarismaCarovanaCarrettoCartolinaCasaccioCascataCasermaCasoCassoneCastelloCasualeCatastaCatenaCatrameCautoCavilloCedibileCedrataCefaloCelebreCellulareCenaCenoneCentesimoCeramicaCercareCertoCerumeCervelloCesoiaCespoCetoChelaChiaroChiccaChiedereChimeraChinaChirurgoChitarraCiaoCiclismoCifrareCignoCilindroCiottoloCircaCirrosiCitricoCittadinoCiuffoCivettaCivileClassicoClinicaCloroCoccoCodardoCodiceCoerenteCognomeCollareColmatoColoreColposoColtivatoColzaComaCometaCommandoComodoComputerComuneConcisoCondurreConfermaCongelareConiugeConnessoConoscereConsumoContinuoConvegnoCopertoCopioneCoppiaCopricapoCorazzaCordataCoricatoCorniceCorollaCorpoCorredoCorsiaCorteseCosmicoCostanteCotturaCovatoCratereCravattaCreatoCredereCremosoCrescitaCretaCricetoCrinaleCrisiCriticoCroceCronacaCrostataCrucialeCruscaCucireCuculoCuginoCullatoCupolaCuratoreCursoreCurvoCuscinoCustodeDadoDainoDalmataDamerinoDanielaDannosoDanzareDatatoDavantiDavveroDebuttoDecennioDecisoDeclinoDecolloDecretoDedicatoDefinitoDeformeDegnoDelegareDelfinoDelirioDeltaDemenzaDenotatoDentroDepositoDerapataDerivareDerogaDescrittoDesertoDesiderioDesumereDetersivoDevotoDiametroDicembreDiedroDifesoDiffusoDigerireDigitaleDiluvioDinamicoDinnanziDipintoDiplomaDipoloDiradareDireDirottoDirupoDisagioDiscretoDisfareDisgeloDispostoDistanzaDisumanoDitoDivanoDiveltoDividereDivoratoDobloneDocenteDoganaleDogmaDolceDomatoDomenicaDominareDondoloDonoDormireDoteDottoreDovutoDozzinaDragoDruidoDubbioDubitareDucaleDunaDuomoDupliceDuraturoEbanoEccessoEccoEclissiEconomiaEderaEdicolaEdileEditoriaEducareEgemoniaEgliEgoismoEgregioElaboratoElargireEleganteElencatoElettoElevareElficoElicaElmoElsaElusoEmanatoEmblemaEmessoEmiroEmotivoEmozioneEmpiricoEmuloEndemicoEnduroEnergiaEnfasiEnotecaEntrareEnzimaEpatiteEpilogoEpisodioEpocaleEppureEquatoreErarioErbaErbosoEredeEremitaErigereErmeticoEroeErosivoErranteEsagonoEsameEsanimeEsaudireEscaEsempioEsercitoEsibitoEsigenteEsistereEsitoEsofagoEsortatoEsosoEspansoEspressoEssenzaEssoEstesoEstimareEstoniaEstrosoEsultareEtilicoEtnicoEtruscoEttoEuclideoEuropaEvasoEvidenzaEvitatoEvolutoEvvivaFabbricaFaccendaFachiroFalcoFamigliaFanaleFanfaraFangoFantasmaFareFarfallaFarinosoFarmacoFasciaFastosoFasulloFaticareFatoFavolosoFebbreFecolaFedeFegatoFelpaFeltroFemminaFendereFenomenoFermentoFerroFertileFessuraFestivoFettaFeudoFiabaFiduciaFifaFiguratoFiloFinanzaFinestraFinireFioreFiscaleFisicoFiumeFlaconeFlamencoFleboFlemmaFloridoFluenteFluoroFobicoFocacciaFocosoFoderatoFoglioFolataFolcloreFolgoreFondenteFoneticoFoniaFontanaForbitoForchettaForestaFormicaFornaioForoFortezzaForzareFosfatoFossoFracassoFranaFrassinoFratelloFreccettaFrenataFrescoFrigoFrollinoFrondeFrugaleFruttaFucilataFucsiaFuggenteFulmineFulvoFumanteFumettoFumosoFuneFunzioneFuocoFurboFurgoneFuroreFusoFutileGabbianoGaffeGalateoGallinaGaloppoGamberoGammaGaranziaGarboGarofanoGarzoneGasdottoGasolioGastricoGattoGaudioGazeboGazzellaGecoGelatinaGelsoGemelloGemmatoGeneGenitoreGennaioGenotipoGergoGhepardoGhiaccioGhisaGialloGildaGineproGiocareGioielloGiornoGioveGiratoGironeGittataGiudizioGiuratoGiustoGlobuloGlutineGnomoGobbaGolfGomitoGommoneGonfioGonnaGovernoGracileGradoGraficoGrammoGrandeGrattareGravosoGraziaGrecaGreggeGrifoneGrigioGrinzaGrottaGruppoGuadagnoGuaioGuantoGuardareGufoGuidareIbernatoIconaIdenticoIdillioIdoloIdraIdricoIdrogenoIgieneIgnaroIgnoratoIlareIllesoIllogicoIlludereImballoImbevutoImboccoImbutoImmaneImmersoImmolatoImpaccoImpetoImpiegoImportoImprontaInalareInarcareInattivoIncantoIncendioInchinoIncisivoInclusoIncontroIncrocioIncuboIndagineIndiaIndoleIneditoInfattiInfilareInflittoIngaggioIngegnoIngleseIngordoIngrossoInnescoInodoreInoltrareInondatoInsanoInsettoInsiemeInsonniaInsulinaIntasatoInteroIntonacoIntuitoInumidireInvalidoInveceInvitoIperboleIpnoticoIpotesiIppicaIrideIrlandaIronicoIrrigatoIrrorareIsolatoIsotopoIstericoIstitutoIstriceItaliaIterareLabbroLabirintoLaccaLaceratoLacrimaLacunaLaddoveLagoLampoLancettaLanternaLardosoLargaLaringeLastraLatenzaLatinoLattugaLavagnaLavoroLegaleLeggeroLemboLentezzaLenzaLeoneLepreLesivoLessatoLestoLetteraleLevaLevigatoLiberoLidoLievitoLillaLimaturaLimitareLimpidoLineareLinguaLiquidoLiraLiricaLiscaLiteLitigioLivreaLocandaLodeLogicaLombareLondraLongevoLoquaceLorenzoLotoLotteriaLuceLucidatoLumacaLuminosoLungoLupoLuppoloLusingaLussoLuttoMacabroMacchinaMaceroMacinatoMadamaMagicoMagliaMagneteMagroMaiolicaMalafedeMalgradoMalintesoMalsanoMaltoMalumoreManaManciaMandorlaMangiareManifestoMannaroManovraMansardaMantideManubrioMappaMaratonaMarcireMarettaMarmoMarsupioMascheraMassaiaMastinoMaterassoMatricolaMattoneMaturoMazurcaMeandroMeccanicoMecenateMedesimoMeditareMegaMelassaMelisMelodiaMeningeMenoMensolaMercurioMerendaMerloMeschinoMeseMessereMestoloMetalloMetodoMettereMiagolareMicaMicelioMicheleMicroboMidolloMieleMiglioreMilanoMiliteMimosaMineraleMiniMinoreMirinoMirtilloMiscelaMissivaMistoMisurareMitezzaMitigareMitraMittenteMnemonicoModelloModificaModuloMoganoMogioMoleMolossoMonasteroMoncoMondinaMonetarioMonileMonotonoMonsoneMontatoMonvisoMoraMordereMorsicatoMostroMotivatoMotosegaMottoMovenzaMovimentoMozzoMuccaMucosaMuffaMughettoMugnaioMulattoMulinelloMultiploMummiaMuntoMuovereMuraleMusaMuscoloMusicaMutevoleMutoNababboNaftaNanometroNarcisoNariceNarratoNascereNastrareNaturaleNauticaNaviglioNebulosaNecrosiNegativoNegozioNemmenoNeofitaNerettoNervoNessunoNettunoNeutraleNeveNevroticoNicchiaNinfaNitidoNobileNocivoNodoNomeNominaNordicoNormaleNorvegeseNostranoNotareNotiziaNotturnoNovellaNucleoNullaNumeroNuovoNutrireNuvolaNuzialeOasiObbedireObbligoObeliscoOblioOboloObsoletoOccasioneOcchioOccidenteOccorrereOccultareOcraOculatoOdiernoOdorareOffertaOffrireOffuscatoOggettoOggiOgnunoOlandeseOlfattoOliatoOlivaOlogrammaOltreOmaggioOmbelicoOmbraOmegaOmissioneOndosoOnereOniceOnnivoroOnorevoleOntaOperatoOpinioneOppostoOracoloOrafoOrdineOrecchinoOreficeOrfanoOrganicoOrigineOrizzonteOrmaOrmeggioOrnativoOrologioOrrendoOrribileOrtensiaOrticaOrzataOrzoOsareOscurareOsmosiOspedaleOspiteOssaOssidareOstacoloOsteOtiteOtreOttagonoOttimoOttobreOvaleOvestOvinoOviparoOvocitoOvunqueOvviareOzioPacchettoPacePacificoPadellaPadronePaesePagaPaginaPalazzinaPalesarePallidoPaloPaludePandoroPannelloPaoloPaonazzoPapricaParabolaParcellaParerePargoloPariParlatoParolaPartireParvenzaParzialePassivoPasticcaPataccaPatologiaPattumePavonePeccatoPedalarePedonalePeggioPelosoPenarePendicePenisolaPennutoPenombraPensarePentolaPepePepitaPerbenePercorsoPerdonatoPerforarePergamenaPeriodoPermessoPernoPerplessoPersuasoPertugioPervasoPesatorePesistaPesoPestiferoPetaloPettinePetulantePezzoPiacerePiantaPiattinoPiccinoPicozzaPiegaPietraPifferoPigiamaPigolioPigroPilaPiliferoPillolaPilotaPimpantePinetaPinnaPinoloPioggiaPiomboPiramidePireticoPiritePirolisiPitonePizzicoPlaceboPlanarePlasmaPlatanoPlenarioPochezzaPoderosoPodismoPoesiaPoggiarePolentaPoligonoPollicePolmonitePolpettaPolsoPoltronaPolverePomicePomodoroPontePopolosoPorfidoPorosoPorporaPorrePortataPosaPositivoPossessoPostulatoPotassioPoterePranzoPrassiPraticaPreclusoPredicaPrefissoPregiatoPrelievoPremerePrenotarePreparatoPresenzaPretestoPrevalsoPrimaPrincipePrivatoProblemaProcuraProdurreProfumoProgettoProlungaPromessaPronomePropostaProrogaProtesoProvaPrudentePrugnaPruritoPsichePubblicoPudicaPugilatoPugnoPulcePulitoPulsantePuntarePupazzoPupillaPuroQuadroQualcosaQuasiQuerelaQuotaRaccoltoRaddoppioRadicaleRadunatoRafficaRagazzoRagioneRagnoRamarroRamingoRamoRandagioRantolareRapatoRapinaRappresoRasaturaRaschiatoRasenteRassegnaRastrelloRataRavvedutoRealeRecepireRecintoReclutaReconditoRecuperoRedditoRedimereRegalatoRegistroRegolaRegressoRelazioneRemareRemotoRennaReplicaReprimereReputareResaResidenteResponsoRestauroReteRetinaRetoricaRettificaRevocatoRiassuntoRibadireRibelleRibrezzoRicaricaRiccoRicevereRiciclatoRicordoRicredutoRidicoloRidurreRifasareRiflessoRiformaRifugioRigareRigettatoRighelloRilassatoRilevatoRimanereRimbalzoRimedioRimorchioRinascitaRincaroRinforzoRinnovoRinomatoRinsavitoRintoccoRinunciaRinvenireRiparatoRipetutoRipienoRiportareRipresaRipulireRisataRischioRiservaRisibileRisoRispettoRistoroRisultatoRisvoltoRitardoRitegnoRitmicoRitrovoRiunioneRivaRiversoRivincitaRivoltoRizomaRobaRoboticoRobustoRocciaRocoRodaggioRodereRoditoreRogitoRollioRomanticoRompereRonzioRosolareRospoRotanteRotondoRotulaRovescioRubizzoRubricaRugaRullinoRumineRumorosoRuoloRupeRussareRusticoSabatoSabbiareSabotatoSagomaSalassoSaldaturaSalgemmaSalivareSalmoneSaloneSaltareSalutoSalvoSapereSapidoSaporitoSaracenoSarcasmoSartoSassosoSatelliteSatiraSatolloSaturnoSavanaSavioSaziatoSbadiglioSbalzoSbancatoSbarraSbattereSbavareSbendareSbirciareSbloccatoSbocciatoSbrinareSbruffoneSbuffareScabrosoScadenzaScalaScambiareScandaloScapolaScarsoScatenareScavatoSceltoScenicoScettroSchedaSchienaSciarpaScienzaScindereScippoSciroppoScivoloSclerareScodellaScolpitoScompartoSconfortoScoprireScortaScossoneScozzeseScribaScrollareScrutinioScuderiaScultoreScuolaScuroScusareSdebitareSdoganareSeccaturaSecondoSedanoSeggiolaSegnalatoSegregatoSeguitoSelciatoSelettivoSellaSelvaggioSemaforoSembrareSemeSeminatoSempreSensoSentireSepoltoSequenzaSerataSerbatoSerenoSerioSerpenteSerraglioServireSestinaSetolaSettimanaSfaceloSfaldareSfamatoSfarzosoSfaticatoSferaSfidaSfilatoSfingeSfocatoSfoderareSfogoSfoltireSforzatoSfrattoSfruttatoSfuggitoSfumareSfusoSgabelloSgarbatoSgonfiareSgorbioSgrassatoSguardoSibiloSiccomeSierraSiglaSignoreSilenzioSillabaSimboloSimpaticoSimulatoSinfoniaSingoloSinistroSinoSintesiSinusoideSiparioSismaSistoleSituatoSlittaSlogaturaSlovenoSmarritoSmemoratoSmentitoSmeraldoSmilzoSmontareSmottatoSmussatoSnellireSnervatoSnodoSobbalzoSobrioSoccorsoSocialeSodaleSoffittoSognoSoldatoSolenneSolidoSollazzoSoloSolubileSolventeSomaticoSommaSondaSonettoSonniferoSopireSoppesoSopraSorgereSorpassoSorrisoSorsoSorteggioSorvolatoSospiroSostaSottileSpadaSpallaSpargereSpatolaSpaventoSpazzolaSpecieSpedireSpegnereSpelaturaSperanzaSpessoreSpettraleSpezzatoSpiaSpigolosoSpillatoSpinosoSpiraleSplendidoSportivoSposoSprangaSprecareSpronatoSpruzzoSpuntinoSquilloSradicareSrotolatoStabileStaccoStaffaStagnareStampatoStantioStarnutoStaseraStatutoSteloSteppaSterzoStilettoStimaStirpeStivaleStizzosoStonatoStoricoStrappoStregatoStriduloStrozzareStruttoStuccareStufoStupendoSubentroSuccosoSudoreSuggeritoSugoSultanoSuonareSuperboSupportoSurgelatoSurrogatoSussurroSuturaSvagareSvedeseSveglioSvelareSvenutoSveziaSviluppoSvistaSvizzeraSvoltaSvuotareTabaccoTabulatoTacciareTaciturnoTaleTalismanoTamponeTanninoTaraTardivoTargatoTariffaTarpareTartarugaTastoTatticoTavernaTavolataTazzaTecaTecnicoTelefonoTemerarioTempoTemutoTendoneTeneroTensioneTentacoloTeoremaTermeTerrazzoTerzettoTesiTesseratoTestatoTetroTettoiaTifareTigellaTimbroTintoTipicoTipografoTiraggioTiroTitanioTitoloTitubanteTizioTizzoneToccareTollerareToltoTombolaTomoTonfoTonsillaTopazioTopologiaToppaTorbaTornareTorroneTortoraToscanoTossireTostaturaTotanoTraboccoTracheaTrafilaTragediaTralcioTramontoTransitoTrapanoTrarreTraslocoTrattatoTraveTrecciaTremolioTrespoloTributoTrichecoTrifoglioTrilloTrinceaTrioTristezzaTrituratoTrivellaTrombaTronoTroppoTrottolaTrovareTruccatoTubaturaTuffatoTulipanoTumultoTunisiaTurbareTurchinoTutaTutelaUbicatoUccelloUccisoreUdireUditivoUffaUfficioUgualeUlisseUltimatoUmanoUmileUmorismoUncinettoUngereUnghereseUnicornoUnificatoUnisonoUnitarioUnteUovoUpupaUraganoUrgenzaUrloUsanzaUsatoUscitoUsignoloUsuraioUtensileUtilizzoUtopiaVacanteVaccinatoVagabondoVagliatoValangaValgoValicoVallettaValorosoValutareValvolaVampataVangareVanitosoVanoVantaggioVanveraVaporeVaranoVarcatoVarianteVascaVedettaVedovaVedutoVegetaleVeicoloVelcroVelinaVellutoVeloceVenatoVendemmiaVentoVeraceVerbaleVergognaVerificaVeroVerrucaVerticaleVescicaVessilloVestaleVeteranoVetrinaVetustoViandanteVibranteVicendaVichingoVicinanzaVidimareVigiliaVignetoVigoreVileVillanoViminiVincitoreViolaViperaVirgolaVirologoVirulentoViscosoVisioneVispoVissutoVisuraVitaVitelloVittimaVivandaVividoViziareVoceVogaVolatileVolereVolpeVoragineVulcanoZampognaZannaZappatoZatteraZavorraZefiroZelanteZeloZenzeroZerbinoZibettoZincoZirconeZittoZollaZoticoZuccheroZufoloZuluZuppa"; -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = words.replace(/([A-Z])/g, " $1").toLowerCase().substring(1).split(" "); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620") { - wordlist = null; - throw new Error("BIP39 Wordlist for it (Italian) FAILED"); - } -} -var LangIt = /** @class */ (function (_super) { - __extends(LangIt, _super); - function LangIt() { - return _super.call(this, "it") || this; - } - LangIt.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangIt.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangIt; -}(wordlist_1.Wordlist)); -var langIt = new LangIt(); -exports.langIt = langIt; -wordlist_1.Wordlist.register(langIt); - -},{"./wordlist":121}],118:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langJa = void 0; -var bytes_1 = require("@ethersproject/bytes"); -var strings_1 = require("@ethersproject/strings"); -var wordlist_1 = require("./wordlist"); -var data = [ - // 4-kana words - "AQRASRAGBAGUAIRAHBAghAURAdBAdcAnoAMEAFBAFCBKFBQRBSFBCXBCDBCHBGFBEQBpBBpQBIkBHNBeOBgFBVCBhBBhNBmOBmRBiHBiFBUFBZDBvFBsXBkFBlcBjYBwDBMBBTBBTRBWBBWXXaQXaRXQWXSRXCFXYBXpHXOQXHRXhRXuRXmXXbRXlXXwDXTRXrCXWQXWGaBWaKcaYgasFadQalmaMBacAKaRKKBKKXKKjKQRKDRKCYKCRKIDKeVKHcKlXKjHKrYNAHNBWNaRNKcNIBNIONmXNsXNdXNnBNMBNRBNrXNWDNWMNFOQABQAHQBrQXBQXFQaRQKXQKDQKOQKFQNBQNDQQgQCXQCDQGBQGDQGdQYXQpBQpQQpHQLXQHuQgBQhBQhCQuFQmXQiDQUFQZDQsFQdRQkHQbRQlOQlmQPDQjDQwXQMBQMDQcFQTBQTHQrDDXQDNFDGBDGQDGRDpFDhFDmXDZXDbRDMYDRdDTRDrXSAhSBCSBrSGQSEQSHBSVRShYShkSyQSuFSiBSdcSoESocSlmSMBSFBSFKSFNSFdSFcCByCaRCKcCSBCSRCCrCGbCEHCYXCpBCpQCIBCIHCeNCgBCgFCVECVcCmkCmwCZXCZFCdRClOClmClFCjDCjdCnXCwBCwXCcRCFQCFjGXhGNhGDEGDMGCDGCHGIFGgBGVXGVEGVRGmXGsXGdYGoSGbRGnXGwXGwDGWRGFNGFLGFOGFdGFkEABEBDEBFEXOEaBEKSENBENDEYXEIgEIkEgBEgQEgHEhFEudEuFEiBEiHEiFEZDEvBEsXEsFEdXEdREkFEbBEbRElFEPCEfkEFNYAEYAhYBNYQdYDXYSRYCEYYoYgQYgRYuRYmCYZTYdBYbEYlXYjQYRbYWRpKXpQopQnpSFpCXpIBpISphNpdBpdRpbRpcZpFBpFNpFDpFopFrLADLBuLXQLXcLaFLCXLEhLpBLpFLHXLeVLhILdHLdRLoDLbRLrXIABIBQIBCIBsIBoIBMIBRIXaIaRIKYIKRINBINuICDIGBIIDIIkIgRIxFIyQIiHIdRIbYIbRIlHIwRIMYIcRIRVITRIFBIFNIFQOABOAFOBQOaFONBONMOQFOSFOCDOGBOEQOpBOLXOIBOIFOgQOgFOyQOycOmXOsXOdIOkHOMEOMkOWWHBNHXNHXWHNXHDuHDRHSuHSRHHoHhkHmRHdRHkQHlcHlRHwBHWcgAEgAggAkgBNgBQgBEgXOgYcgLXgHjgyQgiBgsFgdagMYgWSgFQgFEVBTVXEVKBVKNVKDVKYVKRVNBVNYVDBVDxVSBVSRVCjVGNVLXVIFVhBVhcVsXVdRVbRVlRhBYhKYhDYhGShxWhmNhdahdkhbRhjohMXhTRxAXxXSxKBxNBxEQxeNxeQxhXxsFxdbxlHxjcxFBxFNxFQxFOxFoyNYyYoybcyMYuBQuBRuBruDMuCouHBudQukkuoBulVuMXuFEmCYmCRmpRmeDmiMmjdmTFmFQiADiBOiaRiKRiNBiNRiSFiGkiGFiERipRiLFiIFihYibHijBijEiMXiWBiFBiFCUBQUXFUaRUNDUNcUNRUNFUDBUSHUCDUGBUGFUEqULNULoUIRUeEUeYUgBUhFUuRUiFUsXUdFUkHUbBUjSUjYUwXUMDUcHURdUTBUrBUrXUrQZAFZXZZaRZKFZNBZQFZCXZGBZYdZpBZLDZIFZHXZHNZeQZVRZVFZmXZiBZvFZdFZkFZbHZbFZwXZcCZcRZRBvBQvBGvBLvBWvCovMYsAFsBDsaRsKFsNFsDrsSHsSFsCXsCRsEBsEHsEfspBsLBsLDsIgsIRseGsbRsFBsFQsFSdNBdSRdCVdGHdYDdHcdVbdySduDdsXdlRdwXdWYdWcdWRkBMkXOkaRkNIkNFkSFkCFkYBkpRkeNkgBkhVkmXksFklVkMBkWDkFNoBNoaQoaFoNBoNXoNaoNEoSRoEroYXoYCoYbopRopFomXojkowXorFbBEbEIbdBbjYlaRlDElMXlFDjKjjSRjGBjYBjYkjpRjLXjIBjOFjeVjbRjwBnXQnSHnpFnLXnINnMBnTRwXBwXNwXYwNFwQFwSBwGFwLXwLDweNwgBwuHwjDwnXMBXMpFMIBMeNMTHcaQcNBcDHcSFcCXcpBcLXcLDcgFcuFcnXcwXccDcTQcrFTQErXNrCHrpFrgFrbFrTHrFcWNYWNbWEHWMXWTR", - // 5-kana words - "ABGHABIJAEAVAYJQALZJAIaRAHNXAHdcAHbRAZJMAZJRAZTRAdVJAklmAbcNAjdRAMnRAMWYAWpRAWgRAFgBAFhBAFdcBNJBBNJDBQKBBQhcBQlmBDEJBYJkBYJTBpNBBpJFBIJBBIJDBIcABOKXBOEJBOVJBOiJBOZJBepBBeLXBeIFBegBBgGJBVJXBuocBiJRBUJQBlXVBlITBwNFBMYVBcqXBTlmBWNFBWiJBWnRBFGHBFwXXKGJXNJBXNZJXDTTXSHSXSVRXSlHXCJDXGQJXEhXXYQJXYbRXOfXXeNcXVJFXhQJXhEJXdTRXjdXXMhBXcQTXRGBXTEBXTnQXFCXXFOFXFgFaBaFaBNJaBCJaBpBaBwXaNJKaNJDaQIBaDpRaEPDaHMFamDJalEJaMZJaFaFaFNBaFQJaFLDaFVHKBCYKBEBKBHDKXaFKXGdKXEJKXpHKXIBKXZDKXwXKKwLKNacKNYJKNJoKNWcKDGdKDTRKChXKGaRKGhBKGbRKEBTKEaRKEPTKLMDKLWRKOHDKVJcKdBcKlIBKlOPKFSBKFEPKFpFNBNJNJBQNBGHNBEPNBHXNBgFNBVXNBZDNBsXNBwXNNaRNNJDNNJENNJkNDCJNDVDNGJRNJiDNZJNNsCJNJFNNFSBNFCXNFEPNFLXNFIFQJBFQCaRQJEQQLJDQLJFQIaRQOqXQHaFQHHQQVJXQVJDQhNJQmEIQZJFQsJXQJrFQWbRDJABDBYJDXNFDXCXDXLXDXZDDXsJDQqXDSJFDJCXDEPkDEqXDYmQDpSJDOCkDOGQDHEIDVJDDuDuDWEBDJFgSBNDSBSFSBGHSBIBSBTQSKVYSJQNSJQiSJCXSEqXSJYVSIiJSOMYSHAHSHaQSeCFSepQSegBSHdHSHrFShSJSJuHSJUFSkNRSrSrSWEBSFaHSJFQSFCXSFGDSFYXSFODSFgBSFVXSFhBSFxFSFkFSFbBSFMFCADdCJXBCXaFCXKFCXNFCXCXCXGBCXEJCXYBCXLDCXIBCXOPCXHXCXgBCXhBCXiBCXlDCXcHCJNBCJNFCDCJCDGBCDVXCDhBCDiDCDJdCCmNCpJFCIaRCOqXCHCHCHZJCViJCuCuCmddCJiFCdNBCdHhClEJCnUJCreSCWlgCWTRCFBFCFNBCFYBCFVFCFhFCFdSCFTBCFWDGBNBGBQFGJBCGBEqGBpBGBgQGNBEGNJYGNkOGNJRGDUFGJpQGHaBGJeNGJeEGVBlGVKjGiJDGvJHGsVJGkEBGMIJGWjNGFBFGFCXGFGBGFYXGFpBGFMFEASJEAWpEJNFECJVEIXSEIQJEOqXEOcFEeNcEHEJEHlFEJgFEhlmEmDJEmZJEiMBEUqXEoSREPBFEPXFEPKFEPSFEPEFEPpFEPLXEPIBEJPdEPcFEPTBEJnXEqlHEMpREFCXEFODEFcFYASJYJAFYBaBYBVXYXpFYDhBYCJBYJGFYYbRYeNcYJeVYiIJYZJcYvJgYvJRYJsXYsJFYMYMYreVpBNHpBEJpBwXpQxFpYEJpeNDpJeDpeSFpeCHpHUJpHbBpHcHpmUJpiiJpUJrpsJuplITpFaBpFQqpFGBpFEfpFYBpFpBpFLJpFIDpFgBpFVXpFyQpFuFpFlFpFjDpFnXpFwXpJFMpFTBLXCJLXEFLXhFLXUJLXbFLalmLNJBLSJQLCLCLGJBLLDJLHaFLeNFLeSHLeCXLepFLhaRLZsJLsJDLsJrLocaLlLlLMdbLFNBLFSBLFEHLFkFIBBFIBXFIBaQIBKXIBSFIBpHIBLXIBgBIBhBIBuHIBmXIBiFIBZXIBvFIBbFIBjQIBwXIBWFIKTRIQUJIDGFICjQIYSRIINXIJeCIVaRImEkIZJFIvJRIsJXIdCJIJoRIbBQIjYBIcqXITFVIreVIFKFIFSFIFCJIFGFIFLDIFIBIJFOIFgBIFVXIJFhIFxFIFmXIFdHIFbBIJFrIJFWOBGBOQfXOOKjOUqXOfXBOqXEOcqXORVJOFIBOFlDHBIOHXiFHNTRHCJXHIaRHHJDHHEJHVbRHZJYHbIBHRsJHRkDHWlmgBKFgBSBgBCDgBGHgBpBgBIBgBVJgBuBgBvFgKDTgQVXgDUJgGSJgOqXgmUMgZIJgTUJgWIEgFBFgFNBgFDJgFSFgFGBgFYXgJFOgFgQgFVXgFhBgFbHgJFWVJABVQKcVDgFVOfXVeDFVhaRVmGdViJYVMaRVFNHhBNDhBCXhBEqhBpFhBLXhNJBhSJRheVXhhKEhxlmhZIJhdBQhkIJhbMNhMUJhMZJxNJgxQUJxDEkxDdFxSJRxplmxeSBxeCXxeGFxeYXxepQxegBxWVcxFEQxFLXxFIBxFgBxFxDxFZtxFdcxFbBxFwXyDJXyDlcuASJuDJpuDIBuCpJuGSJuIJFueEFuZIJusJXudWEuoIBuWGJuFBcuFKEuFNFuFQFuFDJuFGJuFVJuFUtuFdHuFTBmBYJmNJYmQhkmLJDmLJomIdXmiJYmvJRmsJRmklmmMBymMuCmclmmcnQiJABiJBNiJBDiBSFiBCJiBEFiBYBiBpFiBLXiBTHiJNciDEfiCZJiECJiJEqiOkHiHKFieNDiHJQieQcieDHieSFieCXieGFieEFieIHiegFihUJixNoioNXiFaBiFKFiFNDiFEPiFYXitFOitFHiFgBiFVEiFmXiFitiFbBiFMFiFrFUCXQUIoQUIJcUHQJUeCEUHwXUUJDUUqXUdWcUcqXUrnQUFNDUFSHUFCFUFEfUFLXUtFOZBXOZXSBZXpFZXVXZEQJZEJkZpDJZOqXZeNHZeCDZUqXZFBQZFEHZFLXvBAFvBKFvBCXvBEPvBpHvBIDvBgFvBuHvQNJvFNFvFGBvFIBvJFcsXCDsXLXsXsXsXlFsXcHsQqXsJQFsEqXseIFsFEHsFjDdBxOdNpRdNJRdEJbdpJRdhZJdnSJdrjNdFNJdFQHdFhNkNJDkYaRkHNRkHSRkVbRkuMRkjSJkcqDoSJFoEiJoYZJoOfXohEBoMGQocqXbBAFbBXFbBaFbBNDbBGBbBLXbBTBbBWDbGJYbIJHbFQqbFpQlDgQlOrFlVJRjGEBjZJRnXvJnXbBnEfHnOPDngJRnxfXnUJWwXEJwNpJwDpBwEfXwrEBMDCJMDGHMDIJMLJDcQGDcQpHcqXccqNFcqCXcFCJRBSBRBGBRBEJRBpQTBNFTBQJTBpBTBVXTFABTFSBTFCFTFGBTFMDrXCJrXLDrDNJrEfHrFQJrFitWNjdWNTR", - // 6-kana words - "AKLJMANOPFASNJIAEJWXAYJNRAIIbRAIcdaAeEfDAgidRAdjNYAMYEJAMIbRAFNJBAFpJFBBIJYBDZJFBSiJhBGdEBBEJfXBEJqXBEJWRBpaUJBLXrXBIYJMBOcfXBeEfFBestXBjNJRBcDJOBFEqXXNvJRXDMBhXCJNYXOAWpXONJWXHDEBXeIaRXhYJDXZJSJXMDJOXcASJXFVJXaBQqXaBZJFasXdQaFSJQaFEfXaFpJHaFOqXKBNSRKXvJBKQJhXKEJQJKEJGFKINJBKIJjNKgJNSKVElmKVhEBKiJGFKlBgJKjnUJKwsJYKMFIJKFNJDKFIJFKFOfXNJBSFNJBCXNBpJFNJBvQNJBMBNJLJXNJOqXNJeCXNJeGFNdsJCNbTKFNwXUJQNFEPQDiJcQDMSJQSFpBQGMQJQJeOcQyCJEQUJEBQJFBrQFEJqDXDJFDJXpBDJXIMDGiJhDIJGRDJeYcDHrDJDVXgFDkAWpDkIgRDjDEqDMvJRDJFNFDJFIBSKclmSJQOFSJQVHSJQjDSJGJBSJGJFSECJoSHEJqSJHTBSJVJDSViJYSZJNBSJsJDSFSJFSFEfXSJFLXCBUJVCJXSBCJXpBCXVJXCJXsXCJXdFCJNJHCLIJgCHiJFCVNJMChCJhCUHEJCsJTRCJdYcCoQJCCFEfXCFIJgCFUJxCFstFGJBaQGJBIDGQJqXGYJNRGJHKFGeQqDGHEJFGJeLXGHIiJGHdBlGUJEBGkIJTGFQPDGJFEqEAGegEJIJBEJVJXEhQJTEiJNcEJZJFEJoEqEjDEqEPDsXEPGJBEPOqXEPeQFEfDiDEJfEFEfepQEfMiJEqXNBEqDIDEqeSFEqVJXEMvJRYXNJDYXEJHYKVJcYYJEBYJeEcYJUqXYFpJFYFstXpAZJMpBSJFpNBNFpeQPDpHLJDpHIJFpHgJFpeitFpHZJFpJFADpFSJFpJFCJpFOqXpFitBpJFZJLXIJFLIJgRLVNJWLVHJMLwNpJLFGJBLFLJDLFOqXLJFUJIBDJXIBGJBIJBYQIJBIBIBOqXIBcqDIEGJFILNJTIIJEBIOiJhIJeNBIJeIBIhiJIIWoTRIJFAHIJFpBIJFuHIFUtFIJFTHOSBYJOEcqXOHEJqOvBpFOkVJrObBVJOncqDOcNJkHhNJRHuHJuHdMhBgBUqXgBsJXgONJBgHNJDgHHJQgJeitgHsJXgJyNagyDJBgZJDrgsVJQgkEJNgkjSJgJFAHgFCJDgFZtMVJXNFVXQfXVJXDJVXoQJVQVJQVDEfXVDvJHVEqNFVeQfXVHpJFVHxfXVVJSRVVmaRVlIJOhCXVJhHjYkhxCJVhWVUJhWiJcxBNJIxeEqDxfXBFxcFEPxFSJFxFYJXyBDQJydaUJyFOPDuYCJYuLvJRuHLJXuZJLDuFOPDuFZJHuFcqXmKHJdmCQJcmOsVJiJAGFitLCFieOfXiestXiZJMEikNJQirXzFiFQqXiFIJFiFZJFiFvtFUHpJFUteIcUteOcUVCJkUhdHcUbEJEUJqXQUMNJhURjYkUFitFZDGJHZJIxDZJVJXZJFDJZJFpQvBNJBvBSJFvJxBrseQqDsVFVJdFLJDkEJNBkmNJYkFLJDoQJOPoGsJRoEAHBoEJfFbBQqDbBZJHbFVJXlFIJBjYIrXjeitcjjCEBjWMNBwXQfXwXOaFwDsJXwCJTRwrCZJMDNJQcDDJFcqDOPRYiJFTBsJXTQIJBTFEfXTFLJDrXEJFrEJXMrFZJFWEJdEWYTlm", - // 7-kana words - "ABCDEFACNJTRAMBDJdAcNJVXBLNJEBXSIdWRXErNJkXYDJMBXZJCJaXMNJaYKKVJKcKDEJqXKDcNJhKVJrNYKbgJVXKFVJSBNBYBwDNJeQfXNJeEqXNhGJWENJFiJRQlIJbEQJfXxDQqXcfXQFNDEJQFwXUJDYcnUJDJIBgQDIUJTRDJFEqDSJQSJFSJQIJFSOPeZtSJFZJHCJXQfXCTDEqFGJBSJFGJBOfXGJBcqXGJHNJDGJRLiJEJfXEqEJFEJPEFpBEJYJBZJFYBwXUJYiJMEBYJZJyTYTONJXpQMFXFpeGIDdpJFstXpJFcPDLBVSJRLHQJqXLJFZJFIJBNJDIJBUqXIBkFDJIJEJPTIYJGWRIJeQPDIJeEfHIJFsJXOqGDSFHXEJqXgJCsJCgGQJqXgdQYJEgFMFNBgJFcqDVJwXUJVJFZJchIgJCCxOEJqXxOwXUJyDJBVRuscisciJBiJBieUtqXiJFDJkiFsJXQUGEZJcUJFsJXZtXIrXZDZJDrZJFNJDZJFstXvJFQqXvJFCJEsJXQJqkhkNGBbDJdTRbYJMEBlDwXUJMEFiJFcfXNJDRcNJWMTBLJXC", - // 8-kana words - "BraFUtHBFSJFdbNBLJXVJQoYJNEBSJBEJfHSJHwXUJCJdAZJMGjaFVJXEJPNJBlEJfFiJFpFbFEJqIJBVJCrIBdHiJhOPFChvJVJZJNJWxGFNIFLueIBQJqUHEJfUFstOZJDrlXEASJRlXVJXSFwVJNJWD", - // 9-kana words - "QJEJNNJDQJEJIBSFQJEJxegBQJEJfHEPSJBmXEJFSJCDEJqXLXNJFQqXIcQsFNJFIFEJqXUJgFsJXIJBUJEJfHNFvJxEqXNJnXUJFQqD", - // 10-kana words - "IJBEJqXZJ" -]; -// Maps each character into its kana value (the index) -var mapping = "~~AzB~X~a~KN~Q~D~S~C~G~E~Y~p~L~I~O~eH~g~V~hxyumi~~U~~Z~~v~~s~~dkoblPjfnqwMcRTr~W~~~F~~~~~Jt"; -var wordlist = null; -function hex(word) { - return (0, bytes_1.hexlify)((0, strings_1.toUtf8Bytes)(word)); -} -var KiYoKu = "0xe3818de38284e3818f"; -var KyoKu = "0xe3818de38283e3818f"; -function loadWords(lang) { - if (wordlist !== null) { - return; - } - wordlist = []; - // Transforms for normalizing (sort is a not quite UTF-8) - var transform = {}; - // Delete the diacritic marks - transform[(0, strings_1.toUtf8String)([227, 130, 154])] = false; - transform[(0, strings_1.toUtf8String)([227, 130, 153])] = false; - // Some simple transforms that sort out most of the order - transform[(0, strings_1.toUtf8String)([227, 130, 133])] = (0, strings_1.toUtf8String)([227, 130, 134]); - transform[(0, strings_1.toUtf8String)([227, 129, 163])] = (0, strings_1.toUtf8String)([227, 129, 164]); - transform[(0, strings_1.toUtf8String)([227, 130, 131])] = (0, strings_1.toUtf8String)([227, 130, 132]); - transform[(0, strings_1.toUtf8String)([227, 130, 135])] = (0, strings_1.toUtf8String)([227, 130, 136]); - // Normalize words using the transform - function normalize(word) { - var result = ""; - for (var i = 0; i < word.length; i++) { - var kana = word[i]; - var target = transform[kana]; - if (target === false) { - continue; - } - if (target) { - kana = target; - } - result += kana; - } - return result; - } - // Sort how the Japanese list is sorted - function sortJapanese(a, b) { - a = normalize(a); - b = normalize(b); - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - return 0; - } - // Load all the words - for (var length_1 = 3; length_1 <= 9; length_1++) { - var d = data[length_1 - 3]; - for (var offset = 0; offset < d.length; offset += length_1) { - var word = []; - for (var i = 0; i < length_1; i++) { - var k = mapping.indexOf(d[offset + i]); - word.push(227); - word.push((k & 0x40) ? 130 : 129); - word.push((k & 0x3f) + 128); - } - wordlist.push((0, strings_1.toUtf8String)(word)); - } - } - wordlist.sort(sortJapanese); - // For some reason kyoku and kiyoku are flipped in node (!!). - // The order SHOULD be: - // - kyoku - // - kiyoku - // This should ignore "if", but that doesn't work here?? - /* istanbul ignore next */ - if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) { - var tmp = wordlist[442]; - wordlist[442] = wordlist[443]; - wordlist[443] = tmp; - } - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600") { - wordlist = null; - throw new Error("BIP39 Wordlist for ja (Japanese) FAILED"); - } -} -var LangJa = /** @class */ (function (_super) { - __extends(LangJa, _super); - function LangJa() { - return _super.call(this, "ja") || this; - } - LangJa.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangJa.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - LangJa.prototype.split = function (mnemonic) { - wordlist_1.logger.checkNormalize(); - return mnemonic.split(/(?:\u3000| )+/g); - }; - LangJa.prototype.join = function (words) { - return words.join("\u3000"); - }; - return LangJa; -}(wordlist_1.Wordlist)); -var langJa = new LangJa(); -exports.langJa = langJa; -wordlist_1.Wordlist.register(langJa); - -},{"./wordlist":121,"@ethersproject/bytes":33,"@ethersproject/strings":100}],119:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langKo = void 0; -var strings_1 = require("@ethersproject/strings"); -var wordlist_1 = require("./wordlist"); -var data = [ - "OYAa", - "ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6", - "ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv", - "AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo", - "AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg", - "HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb", - "AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl" -]; -var codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*"; -function getHangul(code) { - if (code >= 40) { - code = code + 168 - 40; - } - else if (code >= 19) { - code = code + 97 - 19; - } - return (0, strings_1.toUtf8String)([225, (code >> 6) + 132, (code & 0x3f) + 128]); -} -var wordlist = null; -function loadWords(lang) { - if (wordlist != null) { - return; - } - wordlist = []; - data.forEach(function (data, length) { - length += 4; - for (var i = 0; i < data.length; i += length) { - var word = ""; - for (var j = 0; j < length; j++) { - word += getHangul(codes.indexOf(data[i + j])); - } - wordlist.push(word); - } - }); - wordlist.sort(); - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== "0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a") { - wordlist = null; - throw new Error("BIP39 Wordlist for ko (Korean) FAILED"); - } -} -var LangKo = /** @class */ (function (_super) { - __extends(LangKo, _super); - function LangKo() { - return _super.call(this, "ko") || this; - } - LangKo.prototype.getWord = function (index) { - loadWords(this); - return wordlist[index]; - }; - LangKo.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist.indexOf(word); - }; - return LangKo; -}(wordlist_1.Wordlist)); -var langKo = new LangKo(); -exports.langKo = langKo; -wordlist_1.Wordlist.register(langKo); - -},{"./wordlist":121,"@ethersproject/strings":100}],120:[function(require,module,exports){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.langZhTw = exports.langZhCn = void 0; -var strings_1 = require("@ethersproject/strings"); -var wordlist_1 = require("./wordlist"); -var data = "}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN> 2), - 128 + codes.indexOf(data[i * 3 + 1]), - 128 + codes.indexOf(data[i * 3 + 2]), - ]; - if (lang.locale === "zh_tw") { - var common = s % 4; - for (var i_1 = common; i_1 < 3; i_1++) { - bytes[i_1] = codes.indexOf(deltaData[deltaOffset++]) + ((i_1 == 0) ? 228 : 128); - } - } - wordlist[lang.locale].push((0, strings_1.toUtf8String)(bytes)); - } - // Verify the computed list matches the official list - /* istanbul ignore if */ - if (wordlist_1.Wordlist.check(lang) !== Checks[lang.locale]) { - wordlist[lang.locale] = null; - throw new Error("BIP39 Wordlist for " + lang.locale + " (Chinese) FAILED"); - } -} -var LangZh = /** @class */ (function (_super) { - __extends(LangZh, _super); - function LangZh(country) { - return _super.call(this, "zh_" + country) || this; - } - LangZh.prototype.getWord = function (index) { - loadWords(this); - return wordlist[this.locale][index]; - }; - LangZh.prototype.getWordIndex = function (word) { - loadWords(this); - return wordlist[this.locale].indexOf(word); - }; - LangZh.prototype.split = function (mnemonic) { - mnemonic = mnemonic.replace(/(?:\u3000| )+/g, ""); - return mnemonic.split(""); - }; - return LangZh; -}(wordlist_1.Wordlist)); -var langZhCn = new LangZh("cn"); -exports.langZhCn = langZhCn; -wordlist_1.Wordlist.register(langZhCn); -wordlist_1.Wordlist.register(langZhCn, "zh"); -var langZhTw = new LangZh("tw"); -exports.langZhTw = langZhTw; -wordlist_1.Wordlist.register(langZhTw); - -},{"./wordlist":121,"@ethersproject/strings":100}],121:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Wordlist = exports.logger = void 0; -// This gets overridden by rollup -var exportWordlist = false; -var hash_1 = require("@ethersproject/hash"); -var properties_1 = require("@ethersproject/properties"); -var logger_1 = require("@ethersproject/logger"); -var _version_1 = require("./_version"); -exports.logger = new logger_1.Logger(_version_1.version); -var Wordlist = /** @class */ (function () { - function Wordlist(locale) { - var _newTarget = this.constructor; - exports.logger.checkAbstract(_newTarget, Wordlist); - (0, properties_1.defineReadOnly)(this, "locale", locale); - } - // Subclasses may override this - Wordlist.prototype.split = function (mnemonic) { - return mnemonic.toLowerCase().split(/ +/g); - }; - // Subclasses may override this - Wordlist.prototype.join = function (words) { - return words.join(" "); - }; - Wordlist.check = function (wordlist) { - var words = []; - for (var i = 0; i < 2048; i++) { - var word = wordlist.getWord(i); - /* istanbul ignore if */ - if (i !== wordlist.getWordIndex(word)) { - return "0x"; - } - words.push(word); - } - return (0, hash_1.id)(words.join("\n") + "\n"); - }; - Wordlist.register = function (lang, name) { - if (!name) { - name = lang.locale; - } - /* istanbul ignore if */ - if (exportWordlist) { - try { - var anyGlobal = window; - if (anyGlobal._ethers && anyGlobal._ethers.wordlists) { - if (!anyGlobal._ethers.wordlists[name]) { - (0, properties_1.defineReadOnly)(anyGlobal._ethers.wordlists, name, lang); - } - } - } - catch (error) { } - } - }; - return Wordlist; -}()); -exports.Wordlist = Wordlist; - -},{"./_version":111,"@ethersproject/hash":43,"@ethersproject/logger":57,"@ethersproject/properties":63}],122:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.wordlists = void 0; -var lang_cz_1 = require("./lang-cz"); -var lang_en_1 = require("./lang-en"); -var lang_es_1 = require("./lang-es"); -var lang_fr_1 = require("./lang-fr"); -var lang_ja_1 = require("./lang-ja"); -var lang_ko_1 = require("./lang-ko"); -var lang_it_1 = require("./lang-it"); -var lang_zh_1 = require("./lang-zh"); -exports.wordlists = { - cz: lang_cz_1.langCz, - en: lang_en_1.langEn, - es: lang_es_1.langEs, - fr: lang_fr_1.langFr, - it: lang_it_1.langIt, - ja: lang_ja_1.langJa, - ko: lang_ko_1.langKo, - zh: lang_zh_1.langZhCn, - zh_cn: lang_zh_1.langZhCn, - zh_tw: lang_zh_1.langZhTw -}; - -},{"./lang-cz":113,"./lang-en":114,"./lang-es":115,"./lang-fr":116,"./lang-it":117,"./lang-ja":118,"./lang-ko":119,"./lang-zh":120}],123:[function(require,module,exports){ -module.exports = "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"; -},{}],124:[function(require,module,exports){ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -/* eslint-disable no-continue */ -/* eslint-disable no-unused-vars */ -/* eslint-disable no-param-reassign */ -/* eslint-disable no-prototype-builtins */ -var errorClasses = {}; -var deserializers = {}; -var addCustomErrorDeserializer = function (name, deserializer) { - deserializers[name] = deserializer; -}; -var createCustomErrorClass = function (name) { - var C = function CustomError(message, fields) { - Object.assign(this, fields); - this.name = name; - this.message = message || name; - this.stack = new Error().stack; - }; - C.prototype = new Error(); - errorClasses[name] = C; - return C; -}; -// inspired from https://github.com/programble/errio/blob/master/index.js -var deserializeError = function (object) { - if (typeof object === "object" && object) { - try { - // $FlowFixMe FIXME HACK - var msg = JSON.parse(object.message); - if (msg.message && msg.name) { - object = msg; - } - } - catch (e) { - // nothing - } - var error = void 0; - if (typeof object.name === "string") { - var name_1 = object.name; - var des = deserializers[name_1]; - if (des) { - error = des(object); - } - else { - var constructor = name_1 === "Error" ? Error : errorClasses[name_1]; - if (!constructor) { - console.warn("deserializing an unknown class '" + name_1 + "'"); - constructor = createCustomErrorClass(name_1); - } - error = Object.create(constructor.prototype); - try { - for (var prop in object) { - if (object.hasOwnProperty(prop)) { - error[prop] = object[prop]; - } - } - } - catch (e) { - // sometimes setting a property can fail (e.g. .name) - } - } - } - else { - error = new Error(object.message); - } - if (!error.stack && Error.captureStackTrace) { - Error.captureStackTrace(error, deserializeError); - } - return error; - } - return new Error(String(object)); -}; -// inspired from https://github.com/sindresorhus/serialize-error/blob/master/index.js -var serializeError = function (value) { - if (!value) - return value; - if (typeof value === "object") { - return destroyCircular(value, []); - } - if (typeof value === "function") { - return "[Function: " + (value.name || "anonymous") + "]"; - } - return value; -}; -// https://www.npmjs.com/package/destroy-circular -function destroyCircular(from, seen) { - var to = {}; - seen.push(from); - for (var _i = 0, _a = Object.keys(from); _i < _a.length; _i++) { - var key = _a[_i]; - var value = from[key]; - if (typeof value === "function") { - continue; - } - if (!value || typeof value !== "object") { - to[key] = value; - continue; - } - if (seen.indexOf(from[key]) === -1) { - to[key] = destroyCircular(from[key], seen.slice(0)); - continue; - } - to[key] = "[Circular]"; - } - if (typeof from.name === "string") { - to.name = from.name; - } - if (typeof from.message === "string") { - to.message = from.message; - } - if (typeof from.stack === "string") { - to.stack = from.stack; - } - return to; -} - -var AccountNameRequiredError = createCustomErrorClass("AccountNameRequired"); -var AccountNotSupported = createCustomErrorClass("AccountNotSupported"); -var AmountRequired = createCustomErrorClass("AmountRequired"); -var BluetoothRequired = createCustomErrorClass("BluetoothRequired"); -var BtcUnmatchedApp = createCustomErrorClass("BtcUnmatchedApp"); -var CantOpenDevice = createCustomErrorClass("CantOpenDevice"); -var CashAddrNotSupported = createCustomErrorClass("CashAddrNotSupported"); -var CurrencyNotSupported = createCustomErrorClass("CurrencyNotSupported"); -var DeviceAppVerifyNotSupported = createCustomErrorClass("DeviceAppVerifyNotSupported"); -var DeviceGenuineSocketEarlyClose = createCustomErrorClass("DeviceGenuineSocketEarlyClose"); -var DeviceNotGenuineError = createCustomErrorClass("DeviceNotGenuine"); -var DeviceOnDashboardExpected = createCustomErrorClass("DeviceOnDashboardExpected"); -var DeviceOnDashboardUnexpected = createCustomErrorClass("DeviceOnDashboardUnexpected"); -var DeviceInOSUExpected = createCustomErrorClass("DeviceInOSUExpected"); -var DeviceHalted = createCustomErrorClass("DeviceHalted"); -var DeviceNameInvalid = createCustomErrorClass("DeviceNameInvalid"); -var DeviceSocketFail = createCustomErrorClass("DeviceSocketFail"); -var DeviceSocketNoBulkStatus = createCustomErrorClass("DeviceSocketNoBulkStatus"); -var DisconnectedDevice = createCustomErrorClass("DisconnectedDevice"); -var DisconnectedDeviceDuringOperation = createCustomErrorClass("DisconnectedDeviceDuringOperation"); -var EnpointConfigError = createCustomErrorClass("EnpointConfig"); -var EthAppPleaseEnableContractData = createCustomErrorClass("EthAppPleaseEnableContractData"); -var FeeEstimationFailed = createCustomErrorClass("FeeEstimationFailed"); -var FirmwareNotRecognized = createCustomErrorClass("FirmwareNotRecognized"); -var HardResetFail = createCustomErrorClass("HardResetFail"); -var InvalidXRPTag = createCustomErrorClass("InvalidXRPTag"); -var InvalidAddress = createCustomErrorClass("InvalidAddress"); -var InvalidAddressBecauseDestinationIsAlsoSource = createCustomErrorClass("InvalidAddressBecauseDestinationIsAlsoSource"); -var LatestMCUInstalledError = createCustomErrorClass("LatestMCUInstalledError"); -var UnknownMCU = createCustomErrorClass("UnknownMCU"); -var LedgerAPIError = createCustomErrorClass("LedgerAPIError"); -var LedgerAPIErrorWithMessage = createCustomErrorClass("LedgerAPIErrorWithMessage"); -var LedgerAPINotAvailable = createCustomErrorClass("LedgerAPINotAvailable"); -var ManagerAppAlreadyInstalledError = createCustomErrorClass("ManagerAppAlreadyInstalled"); -var ManagerAppRelyOnBTCError = createCustomErrorClass("ManagerAppRelyOnBTC"); -var ManagerAppDepInstallRequired = createCustomErrorClass("ManagerAppDepInstallRequired"); -var ManagerAppDepUninstallRequired = createCustomErrorClass("ManagerAppDepUninstallRequired"); -var ManagerDeviceLockedError = createCustomErrorClass("ManagerDeviceLocked"); -var ManagerFirmwareNotEnoughSpaceError = createCustomErrorClass("ManagerFirmwareNotEnoughSpace"); -var ManagerNotEnoughSpaceError = createCustomErrorClass("ManagerNotEnoughSpace"); -var ManagerUninstallBTCDep = createCustomErrorClass("ManagerUninstallBTCDep"); -var NetworkDown = createCustomErrorClass("NetworkDown"); -var NoAddressesFound = createCustomErrorClass("NoAddressesFound"); -var NotEnoughBalance = createCustomErrorClass("NotEnoughBalance"); -var NotEnoughBalanceToDelegate = createCustomErrorClass("NotEnoughBalanceToDelegate"); -var NotEnoughBalanceInParentAccount = createCustomErrorClass("NotEnoughBalanceInParentAccount"); -var NotEnoughSpendableBalance = createCustomErrorClass("NotEnoughSpendableBalance"); -var NotEnoughBalanceBecauseDestinationNotCreated = createCustomErrorClass("NotEnoughBalanceBecauseDestinationNotCreated"); -var NoAccessToCamera = createCustomErrorClass("NoAccessToCamera"); -var NotEnoughGas = createCustomErrorClass("NotEnoughGas"); -var NotSupportedLegacyAddress = createCustomErrorClass("NotSupportedLegacyAddress"); -var GasLessThanEstimate = createCustomErrorClass("GasLessThanEstimate"); -var PasswordsDontMatchError = createCustomErrorClass("PasswordsDontMatch"); -var PasswordIncorrectError = createCustomErrorClass("PasswordIncorrect"); -var RecommendSubAccountsToEmpty = createCustomErrorClass("RecommendSubAccountsToEmpty"); -var RecommendUndelegation = createCustomErrorClass("RecommendUndelegation"); -var TimeoutTagged = createCustomErrorClass("TimeoutTagged"); -var UnexpectedBootloader = createCustomErrorClass("UnexpectedBootloader"); -var MCUNotGenuineToDashboard = createCustomErrorClass("MCUNotGenuineToDashboard"); -var RecipientRequired = createCustomErrorClass("RecipientRequired"); -var UnavailableTezosOriginatedAccountReceive = createCustomErrorClass("UnavailableTezosOriginatedAccountReceive"); -var UnavailableTezosOriginatedAccountSend = createCustomErrorClass("UnavailableTezosOriginatedAccountSend"); -var UpdateFetchFileFail = createCustomErrorClass("UpdateFetchFileFail"); -var UpdateIncorrectHash = createCustomErrorClass("UpdateIncorrectHash"); -var UpdateIncorrectSig = createCustomErrorClass("UpdateIncorrectSig"); -var UpdateYourApp = createCustomErrorClass("UpdateYourApp"); -var UserRefusedDeviceNameChange = createCustomErrorClass("UserRefusedDeviceNameChange"); -var UserRefusedAddress = createCustomErrorClass("UserRefusedAddress"); -var UserRefusedFirmwareUpdate = createCustomErrorClass("UserRefusedFirmwareUpdate"); -var UserRefusedAllowManager = createCustomErrorClass("UserRefusedAllowManager"); -var UserRefusedOnDevice = createCustomErrorClass("UserRefusedOnDevice"); // TODO rename because it's just for transaction refusal -var TransportOpenUserCancelled = createCustomErrorClass("TransportOpenUserCancelled"); -var TransportInterfaceNotAvailable = createCustomErrorClass("TransportInterfaceNotAvailable"); -var TransportRaceCondition = createCustomErrorClass("TransportRaceCondition"); -var TransportWebUSBGestureRequired = createCustomErrorClass("TransportWebUSBGestureRequired"); -var DeviceShouldStayInApp = createCustomErrorClass("DeviceShouldStayInApp"); -var WebsocketConnectionError = createCustomErrorClass("WebsocketConnectionError"); -var WebsocketConnectionFailed = createCustomErrorClass("WebsocketConnectionFailed"); -var WrongDeviceForAccount = createCustomErrorClass("WrongDeviceForAccount"); -var WrongAppForCurrency = createCustomErrorClass("WrongAppForCurrency"); -var ETHAddressNonEIP = createCustomErrorClass("ETHAddressNonEIP"); -var CantScanQRCode = createCustomErrorClass("CantScanQRCode"); -var FeeNotLoaded = createCustomErrorClass("FeeNotLoaded"); -var FeeRequired = createCustomErrorClass("FeeRequired"); -var FeeTooHigh = createCustomErrorClass("FeeTooHigh"); -var SyncError = createCustomErrorClass("SyncError"); -var PairingFailed = createCustomErrorClass("PairingFailed"); -var GenuineCheckFailed = createCustomErrorClass("GenuineCheckFailed"); -var LedgerAPI4xx = createCustomErrorClass("LedgerAPI4xx"); -var LedgerAPI5xx = createCustomErrorClass("LedgerAPI5xx"); -var FirmwareOrAppUpdateRequired = createCustomErrorClass("FirmwareOrAppUpdateRequired"); -// db stuff, no need to translate -var NoDBPathGiven = createCustomErrorClass("NoDBPathGiven"); -var DBWrongPassword = createCustomErrorClass("DBWrongPassword"); -var DBNotReset = createCustomErrorClass("DBNotReset"); -/** - * TransportError is used for any generic transport errors. - * e.g. Error thrown when data received by exchanges are incorrect or if exchanged failed to communicate with the device for various reason. - */ -function TransportError(message, id) { - this.name = "TransportError"; - this.message = message; - this.stack = new Error().stack; - this.id = id; -} -TransportError.prototype = new Error(); -addCustomErrorDeserializer("TransportError", function (e) { return new TransportError(e.message, e.id); }); -var StatusCodes = { - PIN_REMAINING_ATTEMPTS: 0x63c0, - INCORRECT_LENGTH: 0x6700, - MISSING_CRITICAL_PARAMETER: 0x6800, - COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981, - SECURITY_STATUS_NOT_SATISFIED: 0x6982, - CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985, - INCORRECT_DATA: 0x6a80, - NOT_ENOUGH_MEMORY_SPACE: 0x6a84, - REFERENCED_DATA_NOT_FOUND: 0x6a88, - FILE_ALREADY_EXISTS: 0x6a89, - INCORRECT_P1_P2: 0x6b00, - INS_NOT_SUPPORTED: 0x6d00, - CLA_NOT_SUPPORTED: 0x6e00, - TECHNICAL_PROBLEM: 0x6f00, - OK: 0x9000, - MEMORY_PROBLEM: 0x9240, - NO_EF_SELECTED: 0x9400, - INVALID_OFFSET: 0x9402, - FILE_NOT_FOUND: 0x9404, - INCONSISTENT_FILE: 0x9408, - ALGORITHM_NOT_SUPPORTED: 0x9484, - INVALID_KCV: 0x9485, - CODE_NOT_INITIALIZED: 0x9802, - ACCESS_CONDITION_NOT_FULFILLED: 0x9804, - CONTRADICTION_SECRET_CODE_STATUS: 0x9808, - CONTRADICTION_INVALIDATION: 0x9810, - CODE_BLOCKED: 0x9840, - MAX_VALUE_REACHED: 0x9850, - GP_AUTH_FAILED: 0x6300, - LICENSING: 0x6f42, - HALTED: 0x6faa, -}; -function getAltStatusMessage(code) { - switch (code) { - // improve text of most common errors - case 0x6700: - return "Incorrect length"; - case 0x6800: - return "Missing critical parameter"; - case 0x6982: - return "Security not satisfied (dongle locked or have invalid access rights)"; - case 0x6985: - return "Condition of use not satisfied (denied by the user?)"; - case 0x6a80: - return "Invalid data received"; - case 0x6b00: - return "Invalid parameter received"; - } - if (0x6f00 <= code && code <= 0x6fff) { - return "Internal error, please report"; - } -} -/** - * Error thrown when a device returned a non success status. - * the error.statusCode is one of the `StatusCodes` exported by this library. - */ -function TransportStatusError(statusCode) { - this.name = "TransportStatusError"; - var statusText = Object.keys(StatusCodes).find(function (k) { return StatusCodes[k] === statusCode; }) || - "UNKNOWN_ERROR"; - var smsg = getAltStatusMessage(statusCode) || statusText; - var statusCodeStr = statusCode.toString(16); - this.message = "Ledger device: " + smsg + " (0x" + statusCodeStr + ")"; - this.stack = new Error().stack; - this.statusCode = statusCode; - this.statusText = statusText; -} -TransportStatusError.prototype = new Error(); -addCustomErrorDeserializer("TransportStatusError", function (e) { return new TransportStatusError(e.statusCode); }); - -exports.AccountNameRequiredError = AccountNameRequiredError; -exports.AccountNotSupported = AccountNotSupported; -exports.AmountRequired = AmountRequired; -exports.BluetoothRequired = BluetoothRequired; -exports.BtcUnmatchedApp = BtcUnmatchedApp; -exports.CantOpenDevice = CantOpenDevice; -exports.CantScanQRCode = CantScanQRCode; -exports.CashAddrNotSupported = CashAddrNotSupported; -exports.CurrencyNotSupported = CurrencyNotSupported; -exports.DBNotReset = DBNotReset; -exports.DBWrongPassword = DBWrongPassword; -exports.DeviceAppVerifyNotSupported = DeviceAppVerifyNotSupported; -exports.DeviceGenuineSocketEarlyClose = DeviceGenuineSocketEarlyClose; -exports.DeviceHalted = DeviceHalted; -exports.DeviceInOSUExpected = DeviceInOSUExpected; -exports.DeviceNameInvalid = DeviceNameInvalid; -exports.DeviceNotGenuineError = DeviceNotGenuineError; -exports.DeviceOnDashboardExpected = DeviceOnDashboardExpected; -exports.DeviceOnDashboardUnexpected = DeviceOnDashboardUnexpected; -exports.DeviceShouldStayInApp = DeviceShouldStayInApp; -exports.DeviceSocketFail = DeviceSocketFail; -exports.DeviceSocketNoBulkStatus = DeviceSocketNoBulkStatus; -exports.DisconnectedDevice = DisconnectedDevice; -exports.DisconnectedDeviceDuringOperation = DisconnectedDeviceDuringOperation; -exports.ETHAddressNonEIP = ETHAddressNonEIP; -exports.EnpointConfigError = EnpointConfigError; -exports.EthAppPleaseEnableContractData = EthAppPleaseEnableContractData; -exports.FeeEstimationFailed = FeeEstimationFailed; -exports.FeeNotLoaded = FeeNotLoaded; -exports.FeeRequired = FeeRequired; -exports.FeeTooHigh = FeeTooHigh; -exports.FirmwareNotRecognized = FirmwareNotRecognized; -exports.FirmwareOrAppUpdateRequired = FirmwareOrAppUpdateRequired; -exports.GasLessThanEstimate = GasLessThanEstimate; -exports.GenuineCheckFailed = GenuineCheckFailed; -exports.HardResetFail = HardResetFail; -exports.InvalidAddress = InvalidAddress; -exports.InvalidAddressBecauseDestinationIsAlsoSource = InvalidAddressBecauseDestinationIsAlsoSource; -exports.InvalidXRPTag = InvalidXRPTag; -exports.LatestMCUInstalledError = LatestMCUInstalledError; -exports.LedgerAPI4xx = LedgerAPI4xx; -exports.LedgerAPI5xx = LedgerAPI5xx; -exports.LedgerAPIError = LedgerAPIError; -exports.LedgerAPIErrorWithMessage = LedgerAPIErrorWithMessage; -exports.LedgerAPINotAvailable = LedgerAPINotAvailable; -exports.MCUNotGenuineToDashboard = MCUNotGenuineToDashboard; -exports.ManagerAppAlreadyInstalledError = ManagerAppAlreadyInstalledError; -exports.ManagerAppDepInstallRequired = ManagerAppDepInstallRequired; -exports.ManagerAppDepUninstallRequired = ManagerAppDepUninstallRequired; -exports.ManagerAppRelyOnBTCError = ManagerAppRelyOnBTCError; -exports.ManagerDeviceLockedError = ManagerDeviceLockedError; -exports.ManagerFirmwareNotEnoughSpaceError = ManagerFirmwareNotEnoughSpaceError; -exports.ManagerNotEnoughSpaceError = ManagerNotEnoughSpaceError; -exports.ManagerUninstallBTCDep = ManagerUninstallBTCDep; -exports.NetworkDown = NetworkDown; -exports.NoAccessToCamera = NoAccessToCamera; -exports.NoAddressesFound = NoAddressesFound; -exports.NoDBPathGiven = NoDBPathGiven; -exports.NotEnoughBalance = NotEnoughBalance; -exports.NotEnoughBalanceBecauseDestinationNotCreated = NotEnoughBalanceBecauseDestinationNotCreated; -exports.NotEnoughBalanceInParentAccount = NotEnoughBalanceInParentAccount; -exports.NotEnoughBalanceToDelegate = NotEnoughBalanceToDelegate; -exports.NotEnoughGas = NotEnoughGas; -exports.NotEnoughSpendableBalance = NotEnoughSpendableBalance; -exports.NotSupportedLegacyAddress = NotSupportedLegacyAddress; -exports.PairingFailed = PairingFailed; -exports.PasswordIncorrectError = PasswordIncorrectError; -exports.PasswordsDontMatchError = PasswordsDontMatchError; -exports.RecipientRequired = RecipientRequired; -exports.RecommendSubAccountsToEmpty = RecommendSubAccountsToEmpty; -exports.RecommendUndelegation = RecommendUndelegation; -exports.StatusCodes = StatusCodes; -exports.SyncError = SyncError; -exports.TimeoutTagged = TimeoutTagged; -exports.TransportError = TransportError; -exports.TransportInterfaceNotAvailable = TransportInterfaceNotAvailable; -exports.TransportOpenUserCancelled = TransportOpenUserCancelled; -exports.TransportRaceCondition = TransportRaceCondition; -exports.TransportStatusError = TransportStatusError; -exports.TransportWebUSBGestureRequired = TransportWebUSBGestureRequired; -exports.UnavailableTezosOriginatedAccountReceive = UnavailableTezosOriginatedAccountReceive; -exports.UnavailableTezosOriginatedAccountSend = UnavailableTezosOriginatedAccountSend; -exports.UnexpectedBootloader = UnexpectedBootloader; -exports.UnknownMCU = UnknownMCU; -exports.UpdateFetchFileFail = UpdateFetchFileFail; -exports.UpdateIncorrectHash = UpdateIncorrectHash; -exports.UpdateIncorrectSig = UpdateIncorrectSig; -exports.UpdateYourApp = UpdateYourApp; -exports.UserRefusedAddress = UserRefusedAddress; -exports.UserRefusedAllowManager = UserRefusedAllowManager; -exports.UserRefusedDeviceNameChange = UserRefusedDeviceNameChange; -exports.UserRefusedFirmwareUpdate = UserRefusedFirmwareUpdate; -exports.UserRefusedOnDevice = UserRefusedOnDevice; -exports.WebsocketConnectionError = WebsocketConnectionError; -exports.WebsocketConnectionFailed = WebsocketConnectionFailed; -exports.WrongAppForCurrency = WrongAppForCurrency; -exports.WrongDeviceForAccount = WrongDeviceForAccount; -exports.addCustomErrorDeserializer = addCustomErrorDeserializer; -exports.createCustomErrorClass = createCustomErrorClass; -exports.deserializeError = deserializeError; -exports.getAltStatusMessage = getAltStatusMessage; -exports.serializeError = serializeError; - -},{}],125:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -exports.__esModule = true; -/******************************************************************************** - * Ledger Node JS API - * (c) 2016-2017 Ledger - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - ********************************************************************************/ -// FIXME drop: -var utils_1 = require("./utils"); -var logs_1 = require("@ledgerhq/logs"); -var errors_1 = require("@ledgerhq/errors"); -var bignumber_js_1 = require("bignumber.js"); -var ethers_1 = require("ethers"); -var erc20_1 = require("./erc20"); -var contracts_1 = require("./contracts"); -var starkQuantizationTypeMap = { - eth: 1, - erc20: 2, - erc721: 3, - erc20mintable: 4, - erc721mintable: 5 -}; -function hexBuffer(str) { - return Buffer.from(str.startsWith("0x") ? str.slice(2) : str, "hex"); -} -function maybeHexBuffer(str) { - if (!str) - return null; - return hexBuffer(str); -} -var remapTransactionRelatedErrors = function (e) { - if (e && e.statusCode === 0x6a80) { - return new errors_1.EthAppPleaseEnableContractData("Please enable Blind signing or Contract data in the Ethereum app Settings"); - } - return e; -}; -/** - * Ethereum API - * - * @example - * import Eth from "@ledgerhq/hw-app-eth"; - * const eth = new Eth(transport) - */ -var Eth = /** @class */ (function () { - function Eth(transport, scrambleKey, pluginsLoadConfig) { - if (scrambleKey === void 0) { scrambleKey = "w0w"; } - if (pluginsLoadConfig === void 0) { pluginsLoadConfig = {}; } - this.transport = transport; - this.pluginsLoadConfig = pluginsLoadConfig; - transport.decorateAppAPIMethods(this, [ - "getAddress", - "provideERC20TokenInformation", - "signTransaction", - "signPersonalMessage", - "getAppConfiguration", - "signEIP712HashedMessage", - "starkGetPublicKey", - "starkSignOrder", - "starkSignOrder_v2", - "starkSignTransfer", - "starkSignTransfer_v2", - "starkProvideQuantum", - "starkProvideQuantum_v2", - "starkUnsafeSign", - "eth2GetPublicKey", - "eth2SetWithdrawalIndex", - "setExternalPlugin", - ], scrambleKey); - } - Eth.prototype.setPluginsLoadConfig = function (pluginsLoadConfig) { - this.pluginsLoadConfig = pluginsLoadConfig; - }; - /** - * get Ethereum address for a given BIP 32 path. - * @param path a path in BIP 32 format - * @option boolDisplay optionally enable or not the display - * @option boolChaincode optionally enable or not the chaincode request - * @return an object with a publicKey, address and (optionally) chainCode - * @example - * eth.getAddress("44'/60'/0'/0/0").then(o => o.address) - */ - Eth.prototype.getAddress = function (path, boolDisplay, boolChaincode) { - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4); - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - return this.transport - .send(0xe0, 0x02, boolDisplay ? 0x01 : 0x00, boolChaincode ? 0x01 : 0x00, buffer) - .then(function (response) { - var publicKeyLength = response[0]; - var addressLength = response[1 + publicKeyLength]; - return { - publicKey: response.slice(1, 1 + publicKeyLength).toString("hex"), - address: "0x" + - response - .slice(1 + publicKeyLength + 1, 1 + publicKeyLength + 1 + addressLength) - .toString("ascii"), - chainCode: boolChaincode - ? response - .slice(1 + publicKeyLength + 1 + addressLength, 1 + publicKeyLength + 1 + addressLength + 32) - .toString("hex") - : undefined - }; - }); - }; - /** - * This commands provides a trusted description of an ERC 20 token - * to associate a contract address with a ticker and number of decimals. - * - * It shall be run immediately before performing a transaction involving a contract - * calling this contract address to display the proper token information to the user if necessary. - * - * @param {*} info: a blob from "erc20.js" utilities that contains all token information. - * - * @example - * import { byContractAddressAndChainId } from "@ledgerhq/hw-app-eth/erc20" - * const zrxInfo = byContractAddressAndChainId("0xe41d2489571d322189246dafa5ebde1f4699f498", chainId) - * if (zrxInfo) await appEth.provideERC20TokenInformation(zrxInfo) - * const signed = await appEth.signTransaction(path, rawTxHex) - */ - Eth.prototype.provideERC20TokenInformation = function (_a) { - var data = _a.data; - return provideERC20TokenInformation(this.transport, data); - }; - /** - * You can sign a transaction and retrieve v, r, s given the raw transaction and the BIP 32 path of the account to sign - * @example - eth.signTransaction("44'/60'/0'/0/0", "e8018504e3b292008252089428ee52a8f3d6e5d15f8b131996950d7f296c7952872bd72a2487400080").then(result => ...) - */ - Eth.prototype.signTransaction = function (path, rawTxHex) { - return __awaiter(this, void 0, void 0, function () { - var paths, offset, rawTx, VALID_TYPES, txType, rlpData, toSend, response, rlpTx, vrsOffset, chainId, chainIdTruncated, rlpDecoded, decodedTx, rlpVrs, sizeOfListLen, chainIdSrc, chainIdTruncatedBuf, _loop_1, provideForContract, selector, infos, plugin, payload, signature, erc20OfInterest, abi, contract, args, erc20OfInterest_1, erc20OfInterest_1_1, address, e_1_1; - var e_1, _a; - var _this = this; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - paths = (0, utils_1.splitPath)(path); - offset = 0; - rawTx = Buffer.from(rawTxHex, "hex"); - VALID_TYPES = [1, 2]; - txType = VALID_TYPES.includes(rawTx[0]) ? rawTx[0] : null; - rlpData = txType === null ? rawTx : rawTx.slice(1, rawTxHex.length); - toSend = []; - rlpTx = ethers_1.ethers.utils.RLP.decode(rlpData).map(function (hex) { - return Buffer.from(hex.slice(2), "hex"); - }); - vrsOffset = 0; - chainId = new bignumber_js_1.BigNumber(0); - chainIdTruncated = 0; - rlpDecoded = ethers_1.ethers.utils.RLP.decode(rlpData); - if (txType === 2) { - // EIP1559 - decodedTx = { - data: rlpDecoded[7], - to: rlpDecoded[5], - chainId: rlpTx[0] - }; - } - else if (txType === 1) { - // EIP2930 - decodedTx = { - data: rlpDecoded[6], - to: rlpDecoded[4], - chainId: rlpTx[0] - }; - } - else { - // Legacy tx - decodedTx = { - data: rlpDecoded[5], - to: rlpDecoded[3], - // Default to 1 for non EIP 155 txs - chainId: rlpTx.length > 6 ? rlpTx[6] : Buffer.from("0x01", "hex") - }; - } - if (txType === null && rlpTx.length > 6) { - rlpVrs = Buffer.from(ethers_1.ethers.utils.RLP.encode(rlpTx.slice(-3)).slice(2), "hex"); - vrsOffset = rawTx.length - (rlpVrs.length - 1); - // First byte > 0xf7 means the length of the list length doesn't fit in a single byte. - if (rlpVrs[0] > 0xf7) { - // Increment vrsOffset to account for that extra byte. - vrsOffset++; - sizeOfListLen = rlpVrs[0] - 0xf7; - // Increase rlpOffset by the size of the list length. - vrsOffset += sizeOfListLen - 1; - } - } - chainIdSrc = decodedTx.chainId; - if (chainIdSrc) { - // Using BigNumber because chainID could be any uint256. - chainId = new bignumber_js_1.BigNumber(chainIdSrc.toString("hex"), 16); - chainIdTruncatedBuf = Buffer.alloc(4); - if (chainIdSrc.length > 4) { - chainIdSrc.copy(chainIdTruncatedBuf); - } - else { - chainIdSrc.copy(chainIdTruncatedBuf, 4 - chainIdSrc.length); - } - chainIdTruncated = chainIdTruncatedBuf.readUInt32BE(0); - } - _loop_1 = function () { - var maxChunkSize = offset === 0 ? 150 - 1 - paths.length * 4 : 150; - var chunkSize = offset + maxChunkSize > rawTx.length - ? rawTx.length - offset - : maxChunkSize; - if (vrsOffset != 0 && offset + chunkSize >= vrsOffset) { - // Make sure that the chunk doesn't end right on the EIP 155 marker if set - chunkSize = rawTx.length - offset; - } - var buffer = Buffer.alloc(offset === 0 ? 1 + paths.length * 4 + chunkSize : chunkSize); - if (offset === 0) { - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - rawTx.copy(buffer, 1 + 4 * paths.length, offset, offset + chunkSize); - } - else { - rawTx.copy(buffer, 0, offset, offset + chunkSize); - } - toSend.push(buffer); - offset += chunkSize; - }; - while (offset !== rawTx.length) { - _loop_1(); - } - provideForContract = function (address) { return __awaiter(_this, void 0, void 0, function () { - var erc20Info; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - erc20Info = (0, erc20_1.byContractAddressAndChainId)(address, chainIdTruncated); - if (!erc20Info) return [3 /*break*/, 2]; - (0, logs_1.log)("ethereum", "loading erc20token info for " + - erc20Info.contractAddress + - " (" + - erc20Info.ticker + - ")"); - return [4 /*yield*/, provideERC20TokenInformation(this.transport, erc20Info.data)]; - case 1: - _a.sent(); - _a.label = 2; - case 2: return [2 /*return*/]; - } - }); - }); }; - if (!(decodedTx.data.length >= 10)) return [3 /*break*/, 15]; - selector = decodedTx.data.substring(0, 10); - return [4 /*yield*/, (0, contracts_1.loadInfosForContractMethod)(decodedTx.to, selector, chainIdTruncated, this.pluginsLoadConfig)]; - case 1: - infos = _b.sent(); - if (!infos) return [3 /*break*/, 12]; - plugin = infos.plugin, payload = infos.payload, signature = infos.signature, erc20OfInterest = infos.erc20OfInterest, abi = infos.abi; - if (!plugin) return [3 /*break*/, 3]; - (0, logs_1.log)("ethereum", "loading plugin for " + selector); - return [4 /*yield*/, setExternalPlugin(this.transport, payload, signature)]; - case 2: - _b.sent(); - _b.label = 3; - case 3: - if (!(erc20OfInterest && erc20OfInterest.length && abi)) return [3 /*break*/, 11]; - contract = new ethers_1.ethers.utils.Interface(abi); - args = contract.parseTransaction(decodedTx).args; - _b.label = 4; - case 4: - _b.trys.push([4, 9, 10, 11]); - erc20OfInterest_1 = __values(erc20OfInterest), erc20OfInterest_1_1 = erc20OfInterest_1.next(); - _b.label = 5; - case 5: - if (!!erc20OfInterest_1_1.done) return [3 /*break*/, 8]; - path = erc20OfInterest_1_1.value; - address = path.split(".").reduce(function (value, seg) { - if (seg === "-1" && Array.isArray(value)) { - return value[value.length - 1]; - } - return value[seg]; - }, args); - return [4 /*yield*/, provideForContract(address)]; - case 6: - _b.sent(); - _b.label = 7; - case 7: - erc20OfInterest_1_1 = erc20OfInterest_1.next(); - return [3 /*break*/, 5]; - case 8: return [3 /*break*/, 11]; - case 9: - e_1_1 = _b.sent(); - e_1 = { error: e_1_1 }; - return [3 /*break*/, 11]; - case 10: - try { - if (erc20OfInterest_1_1 && !erc20OfInterest_1_1.done && (_a = erc20OfInterest_1["return"])) _a.call(erc20OfInterest_1); - } - finally { if (e_1) throw e_1.error; } - return [7 /*endfinally*/]; - case 11: return [3 /*break*/, 13]; - case 12: - (0, logs_1.log)("ethereum", "no infos for selector " + selector); - _b.label = 13; - case 13: return [4 /*yield*/, provideForContract(decodedTx.to)]; - case 14: - _b.sent(); - _b.label = 15; - case 15: return [2 /*return*/, (0, utils_1.foreach)(toSend, function (data, i) { - return _this.transport - .send(0xe0, 0x04, i === 0 ? 0x00 : 0x80, 0x00, data) - .then(function (apduResponse) { - response = apduResponse; - }); - }).then(function () { - var response_byte = response.slice(0, 1)[0]; - var v = ""; - if (chainId.times(2).plus(35).plus(1).isGreaterThan(255)) { - var oneByteChainId = (chainIdTruncated * 2 + 35) % 256; - var ecc_parity = Math.abs(response_byte - oneByteChainId); - if (txType != null) { - // For EIP2930 and EIP1559 tx, v is simply the parity. - v = ecc_parity % 2 == 1 ? "00" : "01"; - } - else { - // Legacy type transaction with a big chain ID - v = chainId.times(2).plus(35).plus(ecc_parity).toString(16); - } - } - else { - v = response_byte.toString(16); - } - // Make sure v has is prefixed with a 0 if its length is odd ("1" -> "01"). - if (v.length % 2 == 1) { - v = "0" + v; - } - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - v: v, - r: r, - s: s - }; - }, function (e) { - throw remapTransactionRelatedErrors(e); - })]; - } - }); - }); - }; - /** - */ - Eth.prototype.getAppConfiguration = function () { - return this.transport.send(0xe0, 0x06, 0x00, 0x00).then(function (response) { - return { - arbitraryDataEnabled: response[0] & 0x01, - erc20ProvisioningNecessary: response[0] & 0x02, - starkEnabled: response[0] & 0x04, - starkv2Supported: response[0] & 0x08, - version: "" + response[1] + "." + response[2] + "." + response[3] - }; - }); - }; - /** - * You can sign a message according to eth_sign RPC call and retrieve v, r, s given the message and the BIP 32 path of the account to sign. - * @example - eth.signPersonalMessage("44'/60'/0'/0/0", Buffer.from("test").toString("hex")).then(result => { - var v = result['v'] - 27; - v = v.toString(16); - if (v.length < 2) { - v = "0" + v; - } - console.log("Signature 0x" + result['r'] + result['s'] + v); - }) - */ - Eth.prototype.signPersonalMessage = function (path, messageHex) { - var _this = this; - var paths = (0, utils_1.splitPath)(path); - var offset = 0; - var message = Buffer.from(messageHex, "hex"); - var toSend = []; - var response; - var _loop_2 = function () { - var maxChunkSize = offset === 0 ? 150 - 1 - paths.length * 4 - 4 : 150; - var chunkSize = offset + maxChunkSize > message.length - ? message.length - offset - : maxChunkSize; - var buffer = Buffer.alloc(offset === 0 ? 1 + paths.length * 4 + 4 + chunkSize : chunkSize); - if (offset === 0) { - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - buffer.writeUInt32BE(message.length, 1 + 4 * paths.length); - message.copy(buffer, 1 + 4 * paths.length + 4, offset, offset + chunkSize); - } - else { - message.copy(buffer, 0, offset, offset + chunkSize); - } - toSend.push(buffer); - offset += chunkSize; - }; - while (offset !== message.length) { - _loop_2(); - } - return (0, utils_1.foreach)(toSend, function (data, i) { - return _this.transport - .send(0xe0, 0x08, i === 0 ? 0x00 : 0x80, 0x00, data) - .then(function (apduResponse) { - response = apduResponse; - }); - }).then(function () { - var v = response[0]; - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - v: v, - r: r, - s: s - }; - }); - }; - /** - * Sign a prepared message following web3.eth.signTypedData specification. The host computes the domain separator and hashStruct(message) - * @example - eth.signEIP712HashedMessage("44'/60'/0'/0/0", Buffer.from("0101010101010101010101010101010101010101010101010101010101010101").toString("hex"), Buffer.from("0202020202020202020202020202020202020202020202020202020202020202").toString("hex")).then(result => { - var v = result['v'] - 27; - v = v.toString(16); - if (v.length < 2) { - v = "0" + v; - } - console.log("Signature 0x" + result['r'] + result['s'] + v); - }) - */ - Eth.prototype.signEIP712HashedMessage = function (path, domainSeparatorHex, hashStructMessageHex) { - var domainSeparator = hexBuffer(domainSeparatorHex); - var hashStruct = hexBuffer(hashStructMessageHex); - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4 + 32 + 32, 0); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - domainSeparator.copy(buffer, offset); - offset += 32; - hashStruct.copy(buffer, offset); - return this.transport - .send(0xe0, 0x0c, 0x00, 0x00, buffer) - .then(function (response) { - var v = response[0]; - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - v: v, - r: r, - s: s - }; - }); - }; - /** - * get Stark public key for a given BIP 32 path. - * @param path a path in BIP 32 format - * @option boolDisplay optionally enable or not the display - * @return the Stark public key - */ - Eth.prototype.starkGetPublicKey = function (path, boolDisplay) { - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4); - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - return this.transport - .send(0xf0, 0x02, boolDisplay ? 0x01 : 0x00, 0x00, buffer) - .then(function (response) { - return response.slice(0, response.length - 2); - }); - }; - /** - * sign a Stark order - * @param path a path in BIP 32 format - * @option sourceTokenAddress contract address of the source token (not present for ETH) - * @param sourceQuantization quantization used for the source token - * @option destinationTokenAddress contract address of the destination token (not present for ETH) - * @param destinationQuantization quantization used for the destination token - * @param sourceVault ID of the source vault - * @param destinationVault ID of the destination vault - * @param amountSell amount to sell - * @param amountBuy amount to buy - * @param nonce transaction nonce - * @param timestamp transaction validity timestamp - * @return the signature - */ - Eth.prototype.starkSignOrder = function (path, sourceTokenAddress, sourceQuantization, destinationTokenAddress, destinationQuantization, sourceVault, destinationVault, amountSell, amountBuy, nonce, timestamp) { - var sourceTokenAddressHex = maybeHexBuffer(sourceTokenAddress); - var destinationTokenAddressHex = maybeHexBuffer(destinationTokenAddress); - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4 + 20 + 32 + 20 + 32 + 4 + 4 + 8 + 8 + 4 + 4, 0); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - if (sourceTokenAddressHex) { - sourceTokenAddressHex.copy(buffer, offset); - } - offset += 20; - Buffer.from(sourceQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - offset += 32; - if (destinationTokenAddressHex) { - destinationTokenAddressHex.copy(buffer, offset); - } - offset += 20; - Buffer.from(destinationQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - offset += 32; - buffer.writeUInt32BE(sourceVault, offset); - offset += 4; - buffer.writeUInt32BE(destinationVault, offset); - offset += 4; - Buffer.from(amountSell.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - Buffer.from(amountBuy.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - buffer.writeUInt32BE(nonce, offset); - offset += 4; - buffer.writeUInt32BE(timestamp, offset); - return this.transport - .send(0xf0, 0x04, 0x01, 0x00, buffer) - .then(function (response) { - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - r: r, - s: s - }; - }); - }; - /** - * sign a Stark order using the Starkex V2 protocol - * @param path a path in BIP 32 format - * @option sourceTokenAddress contract address of the source token (not present for ETH) - * @param sourceQuantizationType quantization type used for the source token - * @option sourceQuantization quantization used for the source token (not present for erc 721 or mintable erc 721) - * @option sourceMintableBlobOrTokenId mintable blob (mintable erc 20 / mintable erc 721) or token id (erc 721) associated to the source token - * @option destinationTokenAddress contract address of the destination token (not present for ETH) - * @param destinationQuantizationType quantization type used for the destination token - * @option destinationQuantization quantization used for the destination token (not present for erc 721 or mintable erc 721) - * @option destinationMintableBlobOrTokenId mintable blob (mintable erc 20 / mintable erc 721) or token id (erc 721) associated to the destination token - * @param sourceVault ID of the source vault - * @param destinationVault ID of the destination vault - * @param amountSell amount to sell - * @param amountBuy amount to buy - * @param nonce transaction nonce - * @param timestamp transaction validity timestamp - * @return the signature - */ - Eth.prototype.starkSignOrder_v2 = function (path, sourceTokenAddress, sourceQuantizationType, sourceQuantization, sourceMintableBlobOrTokenId, destinationTokenAddress, destinationQuantizationType, destinationQuantization, destinationMintableBlobOrTokenId, sourceVault, destinationVault, amountSell, amountBuy, nonce, timestamp) { - var sourceTokenAddressHex = maybeHexBuffer(sourceTokenAddress); - var destinationTokenAddressHex = maybeHexBuffer(destinationTokenAddress); - if (!(sourceQuantizationType in starkQuantizationTypeMap)) { - throw new Error("eth.starkSignOrderv2 invalid source quantization type=" + - sourceQuantizationType); - } - if (!(destinationQuantizationType in starkQuantizationTypeMap)) { - throw new Error("eth.starkSignOrderv2 invalid destination quantization type=" + - destinationQuantizationType); - } - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + - paths.length * 4 + - 1 + - 20 + - 32 + - 32 + - 1 + - 20 + - 32 + - 32 + - 4 + - 4 + - 8 + - 8 + - 4 + - 4, 0); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - buffer[offset] = starkQuantizationTypeMap[sourceQuantizationType]; - offset++; - if (sourceTokenAddressHex) { - sourceTokenAddressHex.copy(buffer, offset); - } - offset += 20; - if (sourceQuantization) { - Buffer.from(sourceQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - if (sourceMintableBlobOrTokenId) { - Buffer.from(sourceMintableBlobOrTokenId.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - buffer[offset] = starkQuantizationTypeMap[destinationQuantizationType]; - offset++; - if (destinationTokenAddressHex) { - destinationTokenAddressHex.copy(buffer, offset); - } - offset += 20; - if (destinationQuantization) { - Buffer.from(destinationQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - if (destinationMintableBlobOrTokenId) { - Buffer.from(destinationMintableBlobOrTokenId.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - buffer.writeUInt32BE(sourceVault, offset); - offset += 4; - buffer.writeUInt32BE(destinationVault, offset); - offset += 4; - Buffer.from(amountSell.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - Buffer.from(amountBuy.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - buffer.writeUInt32BE(nonce, offset); - offset += 4; - buffer.writeUInt32BE(timestamp, offset); - return this.transport - .send(0xf0, 0x04, 0x03, 0x00, buffer) - .then(function (response) { - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - r: r, - s: s - }; - }); - }; - /** - * sign a Stark transfer - * @param path a path in BIP 32 format - * @option transferTokenAddress contract address of the token to be transferred (not present for ETH) - * @param transferQuantization quantization used for the token to be transferred - * @param targetPublicKey target Stark public key - * @param sourceVault ID of the source vault - * @param destinationVault ID of the destination vault - * @param amountTransfer amount to transfer - * @param nonce transaction nonce - * @param timestamp transaction validity timestamp - * @return the signature - */ - Eth.prototype.starkSignTransfer = function (path, transferTokenAddress, transferQuantization, targetPublicKey, sourceVault, destinationVault, amountTransfer, nonce, timestamp) { - var transferTokenAddressHex = maybeHexBuffer(transferTokenAddress); - var targetPublicKeyHex = hexBuffer(targetPublicKey); - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4 + 20 + 32 + 32 + 4 + 4 + 8 + 4 + 4, 0); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - if (transferTokenAddressHex) { - transferTokenAddressHex.copy(buffer, offset); - } - offset += 20; - Buffer.from(transferQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - offset += 32; - targetPublicKeyHex.copy(buffer, offset); - offset += 32; - buffer.writeUInt32BE(sourceVault, offset); - offset += 4; - buffer.writeUInt32BE(destinationVault, offset); - offset += 4; - Buffer.from(amountTransfer.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - buffer.writeUInt32BE(nonce, offset); - offset += 4; - buffer.writeUInt32BE(timestamp, offset); - return this.transport - .send(0xf0, 0x04, 0x02, 0x00, buffer) - .then(function (response) { - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - r: r, - s: s - }; - }); - }; - /** - * sign a Stark transfer or conditional transfer using the Starkex V2 protocol - * @param path a path in BIP 32 format - * @option transferTokenAddress contract address of the token to be transferred (not present for ETH) - * @param transferQuantizationType quantization type used for the token to be transferred - * @option transferQuantization quantization used for the token to be transferred (not present for erc 721 or mintable erc 721) - * @option transferMintableBlobOrTokenId mintable blob (mintable erc 20 / mintable erc 721) or token id (erc 721) associated to the token to be transferred - * @param targetPublicKey target Stark public key - * @param sourceVault ID of the source vault - * @param destinationVault ID of the destination vault - * @param amountTransfer amount to transfer - * @param nonce transaction nonce - * @param timestamp transaction validity timestamp - * @option conditionalTransferAddress onchain address of the condition for a conditional transfer - * @option conditionalTransferFact fact associated to the condition for a conditional transfer - * @return the signature - */ - Eth.prototype.starkSignTransfer_v2 = function (path, transferTokenAddress, transferQuantizationType, transferQuantization, transferMintableBlobOrTokenId, targetPublicKey, sourceVault, destinationVault, amountTransfer, nonce, timestamp, conditionalTransferAddress, conditionalTransferFact) { - var transferTokenAddressHex = maybeHexBuffer(transferTokenAddress); - var targetPublicKeyHex = hexBuffer(targetPublicKey); - var conditionalTransferAddressHex = maybeHexBuffer(conditionalTransferAddress); - if (!(transferQuantizationType in starkQuantizationTypeMap)) { - throw new Error("eth.starkSignTransferv2 invalid quantization type=" + - transferQuantizationType); - } - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + - paths.length * 4 + - 1 + - 20 + - 32 + - 32 + - 32 + - 4 + - 4 + - 8 + - 4 + - 4 + - (conditionalTransferAddressHex ? 32 + 20 : 0), 0); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - buffer[offset] = starkQuantizationTypeMap[transferQuantizationType]; - offset++; - if (transferTokenAddressHex) { - transferTokenAddressHex.copy(buffer, offset); - } - offset += 20; - if (transferQuantization) { - Buffer.from(transferQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - if (transferMintableBlobOrTokenId) { - Buffer.from(transferMintableBlobOrTokenId.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - targetPublicKeyHex.copy(buffer, offset); - offset += 32; - buffer.writeUInt32BE(sourceVault, offset); - offset += 4; - buffer.writeUInt32BE(destinationVault, offset); - offset += 4; - Buffer.from(amountTransfer.toString(16).padStart(16, "0"), "hex").copy(buffer, offset); - offset += 8; - buffer.writeUInt32BE(nonce, offset); - offset += 4; - buffer.writeUInt32BE(timestamp, offset); - if (conditionalTransferAddressHex && conditionalTransferFact) { - offset += 4; - Buffer.from(conditionalTransferFact.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - offset += 32; - conditionalTransferAddressHex.copy(buffer, offset); - } - return this.transport - .send(0xf0, 0x04, conditionalTransferAddressHex ? 0x05 : 0x04, 0x00, buffer) - .then(function (response) { - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - r: r, - s: s - }; - }); - }; - /** - * provide quantization information before singing a deposit or withdrawal Stark powered contract call - * - * It shall be run following a provideERC20TokenInformation call for the given contract - * - * @param operationContract contract address of the token to be transferred (not present for ETH) - * @param operationQuantization quantization used for the token to be transferred - */ - Eth.prototype.starkProvideQuantum = function (operationContract, operationQuantization) { - var operationContractHex = maybeHexBuffer(operationContract); - var buffer = Buffer.alloc(20 + 32, 0); - if (operationContractHex) { - operationContractHex.copy(buffer, 0); - } - Buffer.from(operationQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, 20); - return this.transport.send(0xf0, 0x08, 0x00, 0x00, buffer).then(function () { return true; }, function (e) { - if (e && e.statusCode === 0x6d00) { - // this case happen for ETH application versions not supporting Stark extensions - return false; - } - throw e; - }); - }; - /** - * provide quantization information before singing a deposit or withdrawal Stark powered contract call using the Starkex V2 protocol - * - * It shall be run following a provideERC20TokenInformation call for the given contract - * - * @param operationContract contract address of the token to be transferred (not present for ETH) - * @param operationQuantizationType quantization type of the token to be transferred - * @option operationQuantization quantization used for the token to be transferred (not present for erc 721 or mintable erc 721) - * @option operationMintableBlobOrTokenId mintable blob (mintable erc 20 / mintable erc 721) or token id (erc 721) of the token to be transferred - */ - Eth.prototype.starkProvideQuantum_v2 = function (operationContract, operationQuantizationType, operationQuantization, operationMintableBlobOrTokenId) { - var operationContractHex = maybeHexBuffer(operationContract); - if (!(operationQuantizationType in starkQuantizationTypeMap)) { - throw new Error("eth.starkProvideQuantumV2 invalid quantization type=" + - operationQuantizationType); - } - var buffer = Buffer.alloc(20 + 32 + 32, 0); - var offset = 0; - if (operationContractHex) { - operationContractHex.copy(buffer, offset); - } - offset += 20; - if (operationQuantization) { - Buffer.from(operationQuantization.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - offset += 32; - if (operationMintableBlobOrTokenId) { - Buffer.from(operationMintableBlobOrTokenId.toString(16).padStart(64, "0"), "hex").copy(buffer, offset); - } - return this.transport - .send(0xf0, 0x08, starkQuantizationTypeMap[operationQuantizationType], 0x00, buffer) - .then(function () { return true; }, function (e) { - if (e && e.statusCode === 0x6d00) { - // this case happen for ETH application versions not supporting Stark extensions - return false; - } - throw e; - }); - }; - /** - * sign the given hash over the Stark curve - * It is intended for speed of execution in case an unknown Stark model is pushed and should be avoided as much as possible. - * @param path a path in BIP 32 format - * @param hash hexadecimal hash to sign - * @return the signature - */ - Eth.prototype.starkUnsafeSign = function (path, hash) { - var hashHex = hexBuffer(hash); - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4 + 32); - var offset = 0; - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - offset = 1 + 4 * paths.length; - hashHex.copy(buffer, offset); - return this.transport - .send(0xf0, 0x0a, 0x00, 0x00, buffer) - .then(function (response) { - var r = response.slice(1, 1 + 32).toString("hex"); - var s = response.slice(1 + 32, 1 + 32 + 32).toString("hex"); - return { - r: r, - s: s - }; - }); - }; - /** - * get an Ethereum 2 BLS-12 381 public key for a given BIP 32 path. - * @param path a path in BIP 32 format - * @option boolDisplay optionally enable or not the display - * @return an object with a publicKey - * @example - * eth.eth2GetPublicKey("12381/3600/0/0").then(o => o.publicKey) - */ - Eth.prototype.eth2GetPublicKey = function (path, boolDisplay) { - var paths = (0, utils_1.splitPath)(path); - var buffer = Buffer.alloc(1 + paths.length * 4); - buffer[0] = paths.length; - paths.forEach(function (element, index) { - buffer.writeUInt32BE(element, 1 + 4 * index); - }); - return this.transport - .send(0xe0, 0x0e, boolDisplay ? 0x01 : 0x00, 0x00, buffer) - .then(function (response) { - return { - publicKey: response.slice(0, -2).toString("hex") - }; - }); - }; - /** - * Set the index of a Withdrawal key used as withdrawal credentials in an ETH 2 deposit contract call signature - * - * It shall be run before the ETH 2 deposit transaction is signed. If not called, the index is set to 0 - * - * @param withdrawalIndex index path in the EIP 2334 path m/12381/3600/withdrawalIndex/0 - * @return True if the method was executed successfully - */ - Eth.prototype.eth2SetWithdrawalIndex = function (withdrawalIndex) { - var buffer = Buffer.alloc(4, 0); - buffer.writeUInt32BE(withdrawalIndex, 0); - return this.transport.send(0xe0, 0x10, 0x00, 0x00, buffer).then(function () { return true; }, function (e) { - if (e && e.statusCode === 0x6d00) { - // this case happen for ETH application versions not supporting ETH 2 - return false; - } - throw e; - }); - }; - /** - * Set the name of the plugin that should be used to parse the next transaction - * - * @param pluginName string containing the name of the plugin, must have length between 1 and 30 bytes - * @return True if the method was executed successfully - */ - Eth.prototype.setExternalPlugin = function (pluginName, contractAddress, selector) { - return setExternalPlugin(this.transport, pluginName, selector); - }; - return Eth; -}()); -exports["default"] = Eth; -// internal helpers -function provideERC20TokenInformation(transport, data) { - return transport.send(0xe0, 0x0a, 0x00, 0x00, data).then(function () { return true; }, function (e) { - if (e && e.statusCode === 0x6d00) { - // this case happen for older version of ETH app, since older app version had the ERC20 data hardcoded, it's fine to assume it worked. - // we return a flag to know if the call was effective or not - return false; - } - throw e; - }); -} -function setExternalPlugin(transport, payload, signature) { - var payloadBuffer = Buffer.from(payload, "hex"); - var signatureBuffer = Buffer.from(signature, "hex"); - var buffer = Buffer.concat([payloadBuffer, signatureBuffer]); - return transport.send(0xe0, 0x12, 0x00, 0x00, buffer).then(function () { return true; }, function (e) { - if (e && e.statusCode === 0x6a80) { - // this case happen when the plugin name is too short or too long - return false; - } - else if (e && e.statusCode === 0x6984) { - // this case happen when the plugin requested is not installed on the device - return false; - } - else if (e && e.statusCode === 0x6d00) { - // this case happen for older version of ETH app - return false; - } - throw e; - }); -} - -}).call(this,require("buffer").Buffer) -},{"./contracts":126,"./erc20":127,"./utils":128,"@ledgerhq/errors":130,"@ledgerhq/logs":131,"bignumber.js":222,"buffer":226,"ethers":246}],126:[function(require,module,exports){ -"use strict"; -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -exports.__esModule = true; -exports.loadInfosForContractMethod = void 0; -var axios_1 = __importDefault(require("axios")); -var defaultPluginsLoadConfig = { - baseURL: "https://cdn.live.ledger.com", - extraPlugins: null -}; -/** - * Retrieve the metadatas a given contract address and a method selector - */ -var loadInfosForContractMethod = function (contractAddress, selector, chainId, userPluginsLoadConfig) { return __awaiter(void 0, void 0, void 0, function () { - var _a, baseURL, extraPlugins, data, _b, lcSelector, lcContractAddress, contractSelectors; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - _a = __assign(__assign({}, defaultPluginsLoadConfig), userPluginsLoadConfig), baseURL = _a.baseURL, extraPlugins = _a.extraPlugins; - if (!!baseURL) return [3 /*break*/, 1]; - _b = {}; - return [3 /*break*/, 3]; - case 1: return [4 /*yield*/, axios_1["default"] - .get(baseURL + "/plugins/ethereum.json") - .then(function (r) { return r.data; })["catch"](function (e) { - if (e.response && - 400 <= e.response.status && - e.response.status < 500) { - return null; // not found cases can be ignored to allow future changes in endpoint without failing a signature to be done. - } - throw e; - })]; - case 2: - _b = _c.sent(); - _c.label = 3; - case 3: - data = _b; - if (extraPlugins) { - data = __assign(__assign({}, data), extraPlugins); - } - if (!data) - return [2 /*return*/]; - lcSelector = selector.toLowerCase(); - lcContractAddress = contractAddress.toLowerCase(); - if (lcContractAddress in data) { - contractSelectors = data[lcContractAddress]; - if (lcSelector in contractSelectors) { - return [2 /*return*/, { - payload: contractSelectors[lcSelector]["serialized_data"], - signature: contractSelectors[lcSelector]["signature"], - plugin: contractSelectors[lcSelector]["plugin"], - erc20OfInterest: contractSelectors[lcSelector]["erc20OfInterest"], - abi: contractSelectors["abi"] - }]; - } - } - return [2 /*return*/]; - } - }); -}); }; -exports.loadInfosForContractMethod = loadInfosForContractMethod; - -},{"axios":132}],127:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -exports.__esModule = true; -exports.list = exports.byContractAddressAndChainId = void 0; -var erc20_signatures_1 = __importDefault(require("@ledgerhq/cryptoassets/data/erc20-signatures")); -/** - * Retrieve the token information by a given contract address if any - */ -var byContractAddressAndChainId = function (contract, chainId) { - return get().byContractAndChainId(asContractAddress(contract), chainId); -}; -exports.byContractAddressAndChainId = byContractAddressAndChainId; -/** - * list all the ERC20 tokens informations - */ -var list = function () { return get().list(); }; -exports.list = list; -var asContractAddress = function (addr) { - var a = addr.toLowerCase(); - return a.startsWith("0x") ? a : "0x" + a; -}; -// this internal get() will lazy load and cache the data from the erc20 data blob -var get = (function () { - var cache; - return function () { - if (cache) - return cache; - var buf = Buffer.from(erc20_signatures_1["default"], "base64"); - var map = {}; - var entries = []; - var i = 0; - while (i < buf.length) { - var length_1 = buf.readUInt32BE(i); - i += 4; - var item = buf.slice(i, i + length_1); - var j = 0; - var tickerLength = item.readUInt8(j); - j += 1; - var ticker = item.slice(j, j + tickerLength).toString("ascii"); - j += tickerLength; - var contractAddress = asContractAddress(item.slice(j, j + 20).toString("hex")); - j += 20; - var decimals = item.readUInt32BE(j); - j += 4; - var chainId = item.readUInt32BE(j); - j += 4; - var signature = item.slice(j); - var entry = { - ticker: ticker, - contractAddress: contractAddress, - decimals: decimals, - chainId: chainId, - signature: signature, - data: item - }; - entries.push(entry); - map[String(chainId) + ":" + contractAddress] = entry; - i += length_1; - } - var api = { - list: function () { return entries; }, - byContractAndChainId: function (contractAddress, chainId) { - return map[String(chainId) + ":" + contractAddress]; - } - }; - cache = api; - return api; - }; -})(); - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/cryptoassets/data/erc20-signatures":123,"buffer":226}],128:[function(require,module,exports){ -"use strict"; -exports.__esModule = true; -exports.asyncWhile = exports.doIf = exports.foreach = exports.eachSeries = exports.splitPath = exports.defer = void 0; -function defer() { - var resolve, reject; - var promise = new Promise(function (success, failure) { - resolve = success; - reject = failure; - }); - if (!resolve || !reject) - throw "defer() error"; // this never happens and is just to make flow happy - return { - promise: promise, - resolve: resolve, - reject: reject - }; -} -exports.defer = defer; -// TODO use bip32-path library -function splitPath(path) { - var result = []; - var components = path.split("/"); - components.forEach(function (element) { - var number = parseInt(element, 10); - if (isNaN(number)) { - return; // FIXME shouldn't it throws instead? - } - if (element.length > 1 && element[element.length - 1] === "'") { - number += 0x80000000; - } - result.push(number); - }); - return result; -} -exports.splitPath = splitPath; -// TODO use async await -function eachSeries(arr, fun) { - return arr.reduce(function (p, e) { return p.then(function () { return fun(e); }); }, Promise.resolve()); -} -exports.eachSeries = eachSeries; -function foreach(arr, callback) { - function iterate(index, array, result) { - if (index >= array.length) { - return result; - } - else - return callback(array[index], index).then(function (res) { - result.push(res); - return iterate(index + 1, array, result); - }); - } - return Promise.resolve().then(function () { return iterate(0, arr, []); }); -} -exports.foreach = foreach; -function doIf(condition, callback) { - return Promise.resolve().then(function () { - if (condition) { - return callback(); - } - }); -} -exports.doIf = doIf; -function asyncWhile(predicate, callback) { - function iterate(result) { - if (!predicate()) { - return result; - } - else { - return callback().then(function (res) { - result.push(res); - return iterate(result); - }); - } - } - return Promise.resolve([]).then(iterate); -} -exports.asyncWhile = asyncWhile; - -},{}],129:[function(require,module,exports){ -"use strict"; -/* eslint-disable no-continue */ -/* eslint-disable no-unused-vars */ -/* eslint-disable no-param-reassign */ -/* eslint-disable no-prototype-builtins */ -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -exports.__esModule = true; -exports.serializeError = exports.deserializeError = exports.createCustomErrorClass = exports.addCustomErrorDeserializer = void 0; -var errorClasses = {}; -var deserializers = {}; -var addCustomErrorDeserializer = function (name, deserializer) { - deserializers[name] = deserializer; -}; -exports.addCustomErrorDeserializer = addCustomErrorDeserializer; -var createCustomErrorClass = function (name) { - var C = function CustomError(message, fields) { - Object.assign(this, fields); - this.name = name; - this.message = message || name; - this.stack = new Error().stack; - }; - C.prototype = new Error(); - errorClasses[name] = C; - return C; -}; -exports.createCustomErrorClass = createCustomErrorClass; -// inspired from https://github.com/programble/errio/blob/master/index.js -var deserializeError = function (object) { - if (typeof object === "object" && object) { - try { - // $FlowFixMe FIXME HACK - var msg = JSON.parse(object.message); - if (msg.message && msg.name) { - object = msg; - } - } - catch (e) { - // nothing - } - var error = void 0; - if (typeof object.name === "string") { - var name_1 = object.name; - var des = deserializers[name_1]; - if (des) { - error = des(object); - } - else { - var constructor = name_1 === "Error" ? Error : errorClasses[name_1]; - if (!constructor) { - console.warn("deserializing an unknown class '" + name_1 + "'"); - constructor = (0, exports.createCustomErrorClass)(name_1); - } - error = Object.create(constructor.prototype); - try { - for (var prop in object) { - if (object.hasOwnProperty(prop)) { - error[prop] = object[prop]; - } - } - } - catch (e) { - // sometimes setting a property can fail (e.g. .name) - } - } - } - else { - error = new Error(object.message); - } - if (!error.stack && Error.captureStackTrace) { - Error.captureStackTrace(error, exports.deserializeError); - } - return error; - } - return new Error(String(object)); -}; -exports.deserializeError = deserializeError; -// inspired from https://github.com/sindresorhus/serialize-error/blob/master/index.js -var serializeError = function (value) { - if (!value) - return value; - if (typeof value === "object") { - return destroyCircular(value, []); - } - if (typeof value === "function") { - return "[Function: " + (value.name || "anonymous") + "]"; - } - return value; -}; -exports.serializeError = serializeError; -// https://www.npmjs.com/package/destroy-circular -function destroyCircular(from, seen) { - var e_1, _a; - var to = {}; - seen.push(from); - try { - for (var _b = __values(Object.keys(from)), _c = _b.next(); !_c.done; _c = _b.next()) { - var key = _c.value; - var value = from[key]; - if (typeof value === "function") { - continue; - } - if (!value || typeof value !== "object") { - to[key] = value; - continue; - } - if (seen.indexOf(from[key]) === -1) { - to[key] = destroyCircular(from[key], seen.slice(0)); - continue; - } - to[key] = "[Circular]"; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b["return"])) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - if (typeof from.name === "string") { - to.name = from.name; - } - if (typeof from.message === "string") { - to.message = from.message; - } - if (typeof from.stack === "string") { - to.stack = from.stack; - } - return to; -} - -},{}],130:[function(require,module,exports){ -"use strict"; -exports.__esModule = true; -exports.NotEnoughBalanceInParentAccount = exports.NotEnoughBalanceToDelegate = exports.NotEnoughBalance = exports.NoAddressesFound = exports.NetworkDown = exports.ManagerUninstallBTCDep = exports.ManagerNotEnoughSpaceError = exports.ManagerFirmwareNotEnoughSpaceError = exports.ManagerDeviceLockedError = exports.ManagerAppDepUninstallRequired = exports.ManagerAppDepInstallRequired = exports.ManagerAppRelyOnBTCError = exports.ManagerAppAlreadyInstalledError = exports.LedgerAPINotAvailable = exports.LedgerAPIErrorWithMessage = exports.LedgerAPIError = exports.UnknownMCU = exports.LatestMCUInstalledError = exports.InvalidAddressBecauseDestinationIsAlsoSource = exports.InvalidAddress = exports.InvalidXRPTag = exports.HardResetFail = exports.FirmwareNotRecognized = exports.FeeEstimationFailed = exports.EthAppPleaseEnableContractData = exports.EnpointConfigError = exports.DisconnectedDeviceDuringOperation = exports.DisconnectedDevice = exports.DeviceSocketNoBulkStatus = exports.DeviceSocketFail = exports.DeviceNameInvalid = exports.DeviceHalted = exports.DeviceInOSUExpected = exports.DeviceOnDashboardUnexpected = exports.DeviceOnDashboardExpected = exports.DeviceNotGenuineError = exports.DeviceGenuineSocketEarlyClose = exports.DeviceAppVerifyNotSupported = exports.CurrencyNotSupported = exports.CashAddrNotSupported = exports.CantOpenDevice = exports.BtcUnmatchedApp = exports.BluetoothRequired = exports.AmountRequired = exports.AccountNotSupported = exports.AccountNameRequiredError = exports.addCustomErrorDeserializer = exports.createCustomErrorClass = exports.deserializeError = exports.serializeError = void 0; -exports.StatusCodes = exports.TransportError = exports.DBNotReset = exports.DBWrongPassword = exports.NoDBPathGiven = exports.FirmwareOrAppUpdateRequired = exports.LedgerAPI5xx = exports.LedgerAPI4xx = exports.GenuineCheckFailed = exports.PairingFailed = exports.SyncError = exports.FeeTooHigh = exports.FeeRequired = exports.FeeNotLoaded = exports.CantScanQRCode = exports.ETHAddressNonEIP = exports.WrongAppForCurrency = exports.WrongDeviceForAccount = exports.WebsocketConnectionFailed = exports.WebsocketConnectionError = exports.DeviceShouldStayInApp = exports.TransportWebUSBGestureRequired = exports.TransportRaceCondition = exports.TransportInterfaceNotAvailable = exports.TransportOpenUserCancelled = exports.UserRefusedOnDevice = exports.UserRefusedAllowManager = exports.UserRefusedFirmwareUpdate = exports.UserRefusedAddress = exports.UserRefusedDeviceNameChange = exports.UpdateYourApp = exports.UpdateIncorrectSig = exports.UpdateIncorrectHash = exports.UpdateFetchFileFail = exports.UnavailableTezosOriginatedAccountSend = exports.UnavailableTezosOriginatedAccountReceive = exports.RecipientRequired = exports.MCUNotGenuineToDashboard = exports.UnexpectedBootloader = exports.TimeoutTagged = exports.RecommendUndelegation = exports.RecommendSubAccountsToEmpty = exports.PasswordIncorrectError = exports.PasswordsDontMatchError = exports.GasLessThanEstimate = exports.NotSupportedLegacyAddress = exports.NotEnoughGas = exports.NoAccessToCamera = exports.NotEnoughBalanceBecauseDestinationNotCreated = exports.NotEnoughSpendableBalance = void 0; -exports.TransportStatusError = exports.getAltStatusMessage = void 0; -var helpers_1 = require("./helpers"); -exports.serializeError = helpers_1.serializeError; -exports.deserializeError = helpers_1.deserializeError; -exports.createCustomErrorClass = helpers_1.createCustomErrorClass; -exports.addCustomErrorDeserializer = helpers_1.addCustomErrorDeserializer; -exports.AccountNameRequiredError = (0, helpers_1.createCustomErrorClass)("AccountNameRequired"); -exports.AccountNotSupported = (0, helpers_1.createCustomErrorClass)("AccountNotSupported"); -exports.AmountRequired = (0, helpers_1.createCustomErrorClass)("AmountRequired"); -exports.BluetoothRequired = (0, helpers_1.createCustomErrorClass)("BluetoothRequired"); -exports.BtcUnmatchedApp = (0, helpers_1.createCustomErrorClass)("BtcUnmatchedApp"); -exports.CantOpenDevice = (0, helpers_1.createCustomErrorClass)("CantOpenDevice"); -exports.CashAddrNotSupported = (0, helpers_1.createCustomErrorClass)("CashAddrNotSupported"); -exports.CurrencyNotSupported = (0, helpers_1.createCustomErrorClass)("CurrencyNotSupported"); -exports.DeviceAppVerifyNotSupported = (0, helpers_1.createCustomErrorClass)("DeviceAppVerifyNotSupported"); -exports.DeviceGenuineSocketEarlyClose = (0, helpers_1.createCustomErrorClass)("DeviceGenuineSocketEarlyClose"); -exports.DeviceNotGenuineError = (0, helpers_1.createCustomErrorClass)("DeviceNotGenuine"); -exports.DeviceOnDashboardExpected = (0, helpers_1.createCustomErrorClass)("DeviceOnDashboardExpected"); -exports.DeviceOnDashboardUnexpected = (0, helpers_1.createCustomErrorClass)("DeviceOnDashboardUnexpected"); -exports.DeviceInOSUExpected = (0, helpers_1.createCustomErrorClass)("DeviceInOSUExpected"); -exports.DeviceHalted = (0, helpers_1.createCustomErrorClass)("DeviceHalted"); -exports.DeviceNameInvalid = (0, helpers_1.createCustomErrorClass)("DeviceNameInvalid"); -exports.DeviceSocketFail = (0, helpers_1.createCustomErrorClass)("DeviceSocketFail"); -exports.DeviceSocketNoBulkStatus = (0, helpers_1.createCustomErrorClass)("DeviceSocketNoBulkStatus"); -exports.DisconnectedDevice = (0, helpers_1.createCustomErrorClass)("DisconnectedDevice"); -exports.DisconnectedDeviceDuringOperation = (0, helpers_1.createCustomErrorClass)("DisconnectedDeviceDuringOperation"); -exports.EnpointConfigError = (0, helpers_1.createCustomErrorClass)("EnpointConfig"); -exports.EthAppPleaseEnableContractData = (0, helpers_1.createCustomErrorClass)("EthAppPleaseEnableContractData"); -exports.FeeEstimationFailed = (0, helpers_1.createCustomErrorClass)("FeeEstimationFailed"); -exports.FirmwareNotRecognized = (0, helpers_1.createCustomErrorClass)("FirmwareNotRecognized"); -exports.HardResetFail = (0, helpers_1.createCustomErrorClass)("HardResetFail"); -exports.InvalidXRPTag = (0, helpers_1.createCustomErrorClass)("InvalidXRPTag"); -exports.InvalidAddress = (0, helpers_1.createCustomErrorClass)("InvalidAddress"); -exports.InvalidAddressBecauseDestinationIsAlsoSource = (0, helpers_1.createCustomErrorClass)("InvalidAddressBecauseDestinationIsAlsoSource"); -exports.LatestMCUInstalledError = (0, helpers_1.createCustomErrorClass)("LatestMCUInstalledError"); -exports.UnknownMCU = (0, helpers_1.createCustomErrorClass)("UnknownMCU"); -exports.LedgerAPIError = (0, helpers_1.createCustomErrorClass)("LedgerAPIError"); -exports.LedgerAPIErrorWithMessage = (0, helpers_1.createCustomErrorClass)("LedgerAPIErrorWithMessage"); -exports.LedgerAPINotAvailable = (0, helpers_1.createCustomErrorClass)("LedgerAPINotAvailable"); -exports.ManagerAppAlreadyInstalledError = (0, helpers_1.createCustomErrorClass)("ManagerAppAlreadyInstalled"); -exports.ManagerAppRelyOnBTCError = (0, helpers_1.createCustomErrorClass)("ManagerAppRelyOnBTC"); -exports.ManagerAppDepInstallRequired = (0, helpers_1.createCustomErrorClass)("ManagerAppDepInstallRequired"); -exports.ManagerAppDepUninstallRequired = (0, helpers_1.createCustomErrorClass)("ManagerAppDepUninstallRequired"); -exports.ManagerDeviceLockedError = (0, helpers_1.createCustomErrorClass)("ManagerDeviceLocked"); -exports.ManagerFirmwareNotEnoughSpaceError = (0, helpers_1.createCustomErrorClass)("ManagerFirmwareNotEnoughSpace"); -exports.ManagerNotEnoughSpaceError = (0, helpers_1.createCustomErrorClass)("ManagerNotEnoughSpace"); -exports.ManagerUninstallBTCDep = (0, helpers_1.createCustomErrorClass)("ManagerUninstallBTCDep"); -exports.NetworkDown = (0, helpers_1.createCustomErrorClass)("NetworkDown"); -exports.NoAddressesFound = (0, helpers_1.createCustomErrorClass)("NoAddressesFound"); -exports.NotEnoughBalance = (0, helpers_1.createCustomErrorClass)("NotEnoughBalance"); -exports.NotEnoughBalanceToDelegate = (0, helpers_1.createCustomErrorClass)("NotEnoughBalanceToDelegate"); -exports.NotEnoughBalanceInParentAccount = (0, helpers_1.createCustomErrorClass)("NotEnoughBalanceInParentAccount"); -exports.NotEnoughSpendableBalance = (0, helpers_1.createCustomErrorClass)("NotEnoughSpendableBalance"); -exports.NotEnoughBalanceBecauseDestinationNotCreated = (0, helpers_1.createCustomErrorClass)("NotEnoughBalanceBecauseDestinationNotCreated"); -exports.NoAccessToCamera = (0, helpers_1.createCustomErrorClass)("NoAccessToCamera"); -exports.NotEnoughGas = (0, helpers_1.createCustomErrorClass)("NotEnoughGas"); -exports.NotSupportedLegacyAddress = (0, helpers_1.createCustomErrorClass)("NotSupportedLegacyAddress"); -exports.GasLessThanEstimate = (0, helpers_1.createCustomErrorClass)("GasLessThanEstimate"); -exports.PasswordsDontMatchError = (0, helpers_1.createCustomErrorClass)("PasswordsDontMatch"); -exports.PasswordIncorrectError = (0, helpers_1.createCustomErrorClass)("PasswordIncorrect"); -exports.RecommendSubAccountsToEmpty = (0, helpers_1.createCustomErrorClass)("RecommendSubAccountsToEmpty"); -exports.RecommendUndelegation = (0, helpers_1.createCustomErrorClass)("RecommendUndelegation"); -exports.TimeoutTagged = (0, helpers_1.createCustomErrorClass)("TimeoutTagged"); -exports.UnexpectedBootloader = (0, helpers_1.createCustomErrorClass)("UnexpectedBootloader"); -exports.MCUNotGenuineToDashboard = (0, helpers_1.createCustomErrorClass)("MCUNotGenuineToDashboard"); -exports.RecipientRequired = (0, helpers_1.createCustomErrorClass)("RecipientRequired"); -exports.UnavailableTezosOriginatedAccountReceive = (0, helpers_1.createCustomErrorClass)("UnavailableTezosOriginatedAccountReceive"); -exports.UnavailableTezosOriginatedAccountSend = (0, helpers_1.createCustomErrorClass)("UnavailableTezosOriginatedAccountSend"); -exports.UpdateFetchFileFail = (0, helpers_1.createCustomErrorClass)("UpdateFetchFileFail"); -exports.UpdateIncorrectHash = (0, helpers_1.createCustomErrorClass)("UpdateIncorrectHash"); -exports.UpdateIncorrectSig = (0, helpers_1.createCustomErrorClass)("UpdateIncorrectSig"); -exports.UpdateYourApp = (0, helpers_1.createCustomErrorClass)("UpdateYourApp"); -exports.UserRefusedDeviceNameChange = (0, helpers_1.createCustomErrorClass)("UserRefusedDeviceNameChange"); -exports.UserRefusedAddress = (0, helpers_1.createCustomErrorClass)("UserRefusedAddress"); -exports.UserRefusedFirmwareUpdate = (0, helpers_1.createCustomErrorClass)("UserRefusedFirmwareUpdate"); -exports.UserRefusedAllowManager = (0, helpers_1.createCustomErrorClass)("UserRefusedAllowManager"); -exports.UserRefusedOnDevice = (0, helpers_1.createCustomErrorClass)("UserRefusedOnDevice"); // TODO rename because it's just for transaction refusal -exports.TransportOpenUserCancelled = (0, helpers_1.createCustomErrorClass)("TransportOpenUserCancelled"); -exports.TransportInterfaceNotAvailable = (0, helpers_1.createCustomErrorClass)("TransportInterfaceNotAvailable"); -exports.TransportRaceCondition = (0, helpers_1.createCustomErrorClass)("TransportRaceCondition"); -exports.TransportWebUSBGestureRequired = (0, helpers_1.createCustomErrorClass)("TransportWebUSBGestureRequired"); -exports.DeviceShouldStayInApp = (0, helpers_1.createCustomErrorClass)("DeviceShouldStayInApp"); -exports.WebsocketConnectionError = (0, helpers_1.createCustomErrorClass)("WebsocketConnectionError"); -exports.WebsocketConnectionFailed = (0, helpers_1.createCustomErrorClass)("WebsocketConnectionFailed"); -exports.WrongDeviceForAccount = (0, helpers_1.createCustomErrorClass)("WrongDeviceForAccount"); -exports.WrongAppForCurrency = (0, helpers_1.createCustomErrorClass)("WrongAppForCurrency"); -exports.ETHAddressNonEIP = (0, helpers_1.createCustomErrorClass)("ETHAddressNonEIP"); -exports.CantScanQRCode = (0, helpers_1.createCustomErrorClass)("CantScanQRCode"); -exports.FeeNotLoaded = (0, helpers_1.createCustomErrorClass)("FeeNotLoaded"); -exports.FeeRequired = (0, helpers_1.createCustomErrorClass)("FeeRequired"); -exports.FeeTooHigh = (0, helpers_1.createCustomErrorClass)("FeeTooHigh"); -exports.SyncError = (0, helpers_1.createCustomErrorClass)("SyncError"); -exports.PairingFailed = (0, helpers_1.createCustomErrorClass)("PairingFailed"); -exports.GenuineCheckFailed = (0, helpers_1.createCustomErrorClass)("GenuineCheckFailed"); -exports.LedgerAPI4xx = (0, helpers_1.createCustomErrorClass)("LedgerAPI4xx"); -exports.LedgerAPI5xx = (0, helpers_1.createCustomErrorClass)("LedgerAPI5xx"); -exports.FirmwareOrAppUpdateRequired = (0, helpers_1.createCustomErrorClass)("FirmwareOrAppUpdateRequired"); -// db stuff, no need to translate -exports.NoDBPathGiven = (0, helpers_1.createCustomErrorClass)("NoDBPathGiven"); -exports.DBWrongPassword = (0, helpers_1.createCustomErrorClass)("DBWrongPassword"); -exports.DBNotReset = (0, helpers_1.createCustomErrorClass)("DBNotReset"); -/** - * TransportError is used for any generic transport errors. - * e.g. Error thrown when data received by exchanges are incorrect or if exchanged failed to communicate with the device for various reason. - */ -function TransportError(message, id) { - this.name = "TransportError"; - this.message = message; - this.stack = new Error().stack; - this.id = id; -} -exports.TransportError = TransportError; -TransportError.prototype = new Error(); -(0, helpers_1.addCustomErrorDeserializer)("TransportError", function (e) { return new TransportError(e.message, e.id); }); -exports.StatusCodes = { - PIN_REMAINING_ATTEMPTS: 0x63c0, - INCORRECT_LENGTH: 0x6700, - MISSING_CRITICAL_PARAMETER: 0x6800, - COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981, - SECURITY_STATUS_NOT_SATISFIED: 0x6982, - CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985, - INCORRECT_DATA: 0x6a80, - NOT_ENOUGH_MEMORY_SPACE: 0x6a84, - REFERENCED_DATA_NOT_FOUND: 0x6a88, - FILE_ALREADY_EXISTS: 0x6a89, - INCORRECT_P1_P2: 0x6b00, - INS_NOT_SUPPORTED: 0x6d00, - CLA_NOT_SUPPORTED: 0x6e00, - TECHNICAL_PROBLEM: 0x6f00, - OK: 0x9000, - MEMORY_PROBLEM: 0x9240, - NO_EF_SELECTED: 0x9400, - INVALID_OFFSET: 0x9402, - FILE_NOT_FOUND: 0x9404, - INCONSISTENT_FILE: 0x9408, - ALGORITHM_NOT_SUPPORTED: 0x9484, - INVALID_KCV: 0x9485, - CODE_NOT_INITIALIZED: 0x9802, - ACCESS_CONDITION_NOT_FULFILLED: 0x9804, - CONTRADICTION_SECRET_CODE_STATUS: 0x9808, - CONTRADICTION_INVALIDATION: 0x9810, - CODE_BLOCKED: 0x9840, - MAX_VALUE_REACHED: 0x9850, - GP_AUTH_FAILED: 0x6300, - LICENSING: 0x6f42, - HALTED: 0x6faa -}; -function getAltStatusMessage(code) { - switch (code) { - // improve text of most common errors - case 0x6700: - return "Incorrect length"; - case 0x6800: - return "Missing critical parameter"; - case 0x6982: - return "Security not satisfied (dongle locked or have invalid access rights)"; - case 0x6985: - return "Condition of use not satisfied (denied by the user?)"; - case 0x6a80: - return "Invalid data received"; - case 0x6b00: - return "Invalid parameter received"; - } - if (0x6f00 <= code && code <= 0x6fff) { - return "Internal error, please report"; - } -} -exports.getAltStatusMessage = getAltStatusMessage; -/** - * Error thrown when a device returned a non success status. - * the error.statusCode is one of the `StatusCodes` exported by this library. - */ -function TransportStatusError(statusCode) { - this.name = "TransportStatusError"; - var statusText = Object.keys(exports.StatusCodes).find(function (k) { return exports.StatusCodes[k] === statusCode; }) || - "UNKNOWN_ERROR"; - var smsg = getAltStatusMessage(statusCode) || statusText; - var statusCodeStr = statusCode.toString(16); - this.message = "Ledger device: " + smsg + " (0x" + statusCodeStr + ")"; - this.stack = new Error().stack; - this.statusCode = statusCode; - this.statusText = statusText; -} -exports.TransportStatusError = TransportStatusError; -TransportStatusError.prototype = new Error(); -(0, helpers_1.addCustomErrorDeserializer)("TransportStatusError", function (e) { return new TransportStatusError(e.statusCode); }); - -},{"./helpers":129}],131:[function(require,module,exports){ -"use strict"; -exports.__esModule = true; -exports.listen = exports.log = void 0; -var id = 0; -var subscribers = []; -/** - * log something - * @param type a namespaced identifier of the log (it is not a level like "debug", "error" but more like "apdu-in", "apdu-out", etc...) - * @param message a clear message of the log associated to the type - */ -var log = function (type, message, data) { - var obj = { - type: type, - id: String(++id), - date: new Date() - }; - if (message) - obj.message = message; - if (data) - obj.data = data; - dispatch(obj); -}; -exports.log = log; -/** - * listen to logs. - * @param cb that is called for each future log() with the Log object - * @return a function that can be called to unsubscribe the listener - */ -var listen = function (cb) { - subscribers.push(cb); - return function () { - var i = subscribers.indexOf(cb); - if (i !== -1) { - // equivalent of subscribers.splice(i, 1) // https://twitter.com/Rich_Harris/status/1125850391155965952 - subscribers[i] = subscribers[subscribers.length - 1]; - subscribers.pop(); - } - }; -}; -exports.listen = listen; -function dispatch(log) { - for (var i = 0; i < subscribers.length; i++) { - try { - subscribers[i](log); - } - catch (e) { - console.error(e); - } - } -} -if (typeof window !== "undefined") { - window.__ledgerLogsListen = exports.listen; -} - -},{}],132:[function(require,module,exports){ -module.exports = require('./lib/axios'); -},{"./lib/axios":134}],133:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); -var settle = require('./../core/settle'); -var cookies = require('./../helpers/cookies'); -var buildURL = require('./../helpers/buildURL'); -var buildFullPath = require('../core/buildFullPath'); -var parseHeaders = require('./../helpers/parseHeaders'); -var isURLSameOrigin = require('./../helpers/isURLSameOrigin'); -var createError = require('../core/createError'); -var defaults = require('../defaults'); -var Cancel = require('../cancel/Cancel'); - -module.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - var responseType = config.responseType; - var onCanceled; - function done() { - if (config.cancelToken) { - config.cancelToken.unsubscribe(onCanceled); - } - - if (config.signal) { - config.signal.removeEventListener('abort', onCanceled); - } - } - - if (utils.isFormData(requestData)) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - - var fullPath = buildFullPath(config.baseURL, config.url); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - - function onloadend() { - if (!request) { - return; - } - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !responseType || responseType === 'text' || responseType === 'json' ? - request.responseText : request.response; - var response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - - settle(function _resolve(value) { - resolve(value); - done(); - }, function _reject(err) { - reject(err); - done(); - }, response); - - // Clean up request - request = null; - } - - if ('onloadend' in request) { - // Use onloadend if available - request.onloadend = onloadend; - } else { - // Listen for ready state to emulate onloadend - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - // With one exception: request that using file: protocol, most browsers - // will return status as 0 even though it's a successful request - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { - return; - } - // readystate handler is calling before onerror or ontimeout handlers, - // so we should call onloadend on the next 'tick' - setTimeout(onloadend); - }; - } - - // Handle browser request cancellation (as opposed to a manual cancellation) - request.onabort = function handleAbort() { - if (!request) { - return; - } - - reject(createError('Request aborted', config, 'ECONNABORTED', request)); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(createError('Network Error', config, null, request)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; - var transitional = config.transitional || defaults.transitional; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - reject(createError( - timeoutErrorMessage, - config, - transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED', - request)); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - // Add xsrf header - var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? - cookies.read(config.xsrfCookieName) : - undefined; - - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - } - - // Add responseType to request if needed - if (responseType && responseType !== 'json') { - request.responseType = config.responseType; - } - - // Handle progress if needed - if (typeof config.onDownloadProgress === 'function') { - request.addEventListener('progress', config.onDownloadProgress); - } - - // Not all browsers support upload events - if (typeof config.onUploadProgress === 'function' && request.upload) { - request.upload.addEventListener('progress', config.onUploadProgress); - } - - if (config.cancelToken || config.signal) { - // Handle cancellation - // eslint-disable-next-line func-names - onCanceled = function(cancel) { - if (!request) { - return; - } - reject(!cancel || (cancel && cancel.type) ? new Cancel('canceled') : cancel); - request.abort(); - request = null; - }; - - config.cancelToken && config.cancelToken.subscribe(onCanceled); - if (config.signal) { - config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); - } - } - - if (!requestData) { - requestData = null; - } - - // Send the request - request.send(requestData); - }); -}; - -},{"../cancel/Cancel":135,"../core/buildFullPath":140,"../core/createError":141,"../defaults":147,"./../core/settle":145,"./../helpers/buildURL":150,"./../helpers/cookies":152,"./../helpers/isURLSameOrigin":155,"./../helpers/parseHeaders":157,"./../utils":160}],134:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var bind = require('./helpers/bind'); -var Axios = require('./core/Axios'); -var mergeConfig = require('./core/mergeConfig'); -var defaults = require('./defaults'); - -/** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * @return {Axios} A new instance of Axios - */ -function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - - // Copy axios.prototype to instance - utils.extend(instance, Axios.prototype, context); - - // Copy context to instance - utils.extend(instance, context); - - // Factory for creating new instances - instance.create = function create(instanceConfig) { - return createInstance(mergeConfig(defaultConfig, instanceConfig)); - }; - - return instance; -} - -// Create the default instance to be exported -var axios = createInstance(defaults); - -// Expose Axios class to allow class inheritance -axios.Axios = Axios; - -// Expose Cancel & CancelToken -axios.Cancel = require('./cancel/Cancel'); -axios.CancelToken = require('./cancel/CancelToken'); -axios.isCancel = require('./cancel/isCancel'); -axios.VERSION = require('./env/data').version; - -// Expose all/spread -axios.all = function all(promises) { - return Promise.all(promises); -}; -axios.spread = require('./helpers/spread'); - -// Expose isAxiosError -axios.isAxiosError = require('./helpers/isAxiosError'); - -module.exports = axios; - -// Allow use of default import syntax in TypeScript -module.exports.default = axios; - -},{"./cancel/Cancel":135,"./cancel/CancelToken":136,"./cancel/isCancel":137,"./core/Axios":138,"./core/mergeConfig":144,"./defaults":147,"./env/data":148,"./helpers/bind":149,"./helpers/isAxiosError":154,"./helpers/spread":158,"./utils":160}],135:[function(require,module,exports){ -'use strict'; - -/** - * A `Cancel` is an object that is thrown when an operation is canceled. - * - * @class - * @param {string=} message The message. - */ -function Cancel(message) { - this.message = message; -} - -Cancel.prototype.toString = function toString() { - return 'Cancel' + (this.message ? ': ' + this.message : ''); -}; - -Cancel.prototype.__CANCEL__ = true; - -module.exports = Cancel; - -},{}],136:[function(require,module,exports){ -'use strict'; - -var Cancel = require('./Cancel'); - -/** - * A `CancelToken` is an object that can be used to request cancellation of an operation. - * - * @class - * @param {Function} executor The executor function. - */ -function CancelToken(executor) { - if (typeof executor !== 'function') { - throw new TypeError('executor must be a function.'); - } - - var resolvePromise; - - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - - var token = this; - - // eslint-disable-next-line func-names - this.promise.then(function(cancel) { - if (!token._listeners) return; - - var i; - var l = token._listeners.length; - - for (i = 0; i < l; i++) { - token._listeners[i](cancel); - } - token._listeners = null; - }); - - // eslint-disable-next-line func-names - this.promise.then = function(onfulfilled) { - var _resolve; - // eslint-disable-next-line func-names - var promise = new Promise(function(resolve) { - token.subscribe(resolve); - _resolve = resolve; - }).then(onfulfilled); - - promise.cancel = function reject() { - token.unsubscribe(_resolve); - }; - - return promise; - }; - - executor(function cancel(message) { - if (token.reason) { - // Cancellation has already been requested - return; - } - - token.reason = new Cancel(message); - resolvePromise(token.reason); - }); -} - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -CancelToken.prototype.throwIfRequested = function throwIfRequested() { - if (this.reason) { - throw this.reason; - } -}; - -/** - * Subscribe to the cancel signal - */ - -CancelToken.prototype.subscribe = function subscribe(listener) { - if (this.reason) { - listener(this.reason); - return; - } - - if (this._listeners) { - this._listeners.push(listener); - } else { - this._listeners = [listener]; - } -}; - -/** - * Unsubscribe from the cancel signal - */ - -CancelToken.prototype.unsubscribe = function unsubscribe(listener) { - if (!this._listeners) { - return; - } - var index = this._listeners.indexOf(listener); - if (index !== -1) { - this._listeners.splice(index, 1); - } -}; - -/** - * Returns an object that contains a new `CancelToken` and a function that, when called, - * cancels the `CancelToken`. - */ -CancelToken.source = function source() { - var cancel; - var token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token: token, - cancel: cancel - }; -}; - -module.exports = CancelToken; - -},{"./Cancel":135}],137:[function(require,module,exports){ -'use strict'; - -module.exports = function isCancel(value) { - return !!(value && value.__CANCEL__); -}; - -},{}],138:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); -var buildURL = require('../helpers/buildURL'); -var InterceptorManager = require('./InterceptorManager'); -var dispatchRequest = require('./dispatchRequest'); -var mergeConfig = require('./mergeConfig'); -var validator = require('../helpers/validator'); - -var validators = validator.validators; -/** - * Create a new instance of Axios - * - * @param {Object} instanceConfig The default config for the instance - */ -function Axios(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; -} - -/** - * Dispatch a request - * - * @param {Object} config The config specific for this request (merged with this.defaults) - */ -Axios.prototype.request = function request(config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof config === 'string') { - config = arguments[1] || {}; - config.url = arguments[0]; - } else { - config = config || {}; - } - - config = mergeConfig(this.defaults, config); - - // Set config.method - if (config.method) { - config.method = config.method.toLowerCase(); - } else if (this.defaults.method) { - config.method = this.defaults.method.toLowerCase(); - } else { - config.method = 'get'; - } - - var transitional = config.transitional; - - if (transitional !== undefined) { - validator.assertOptions(transitional, { - silentJSONParsing: validators.transitional(validators.boolean), - forcedJSONParsing: validators.transitional(validators.boolean), - clarifyTimeoutError: validators.transitional(validators.boolean) - }, false); - } - - // filter out skipped interceptors - var requestInterceptorChain = []; - var synchronousRequestInterceptors = true; - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { - return; - } - - synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; - - requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - - var responseInterceptorChain = []; - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); - }); - - var promise; - - if (!synchronousRequestInterceptors) { - var chain = [dispatchRequest, undefined]; - - Array.prototype.unshift.apply(chain, requestInterceptorChain); - chain = chain.concat(responseInterceptorChain); - - promise = Promise.resolve(config); - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - - return promise; - } - - - var newConfig = config; - while (requestInterceptorChain.length) { - var onFulfilled = requestInterceptorChain.shift(); - var onRejected = requestInterceptorChain.shift(); - try { - newConfig = onFulfilled(newConfig); - } catch (error) { - onRejected(error); - break; - } - } - - try { - promise = dispatchRequest(newConfig); - } catch (error) { - return Promise.reject(error); - } - - while (responseInterceptorChain.length) { - promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); - } - - return promise; -}; - -Axios.prototype.getUri = function getUri(config) { - config = mergeConfig(this.defaults, config); - return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, ''); -}; - -// Provide aliases for supported request methods -utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, config) { - return this.request(mergeConfig(config || {}, { - method: method, - url: url, - data: (config || {}).data - })); - }; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function(url, data, config) { - return this.request(mergeConfig(config || {}, { - method: method, - url: url, - data: data - })); - }; -}); - -module.exports = Axios; - -},{"../helpers/buildURL":150,"../helpers/validator":159,"./../utils":160,"./InterceptorManager":139,"./dispatchRequest":142,"./mergeConfig":144}],139:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); - -function InterceptorManager() { - this.handlers = []; -} - -/** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ -InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; -}; - -/** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ -InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } -}; - -/** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ -InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); -}; - -module.exports = InterceptorManager; - -},{"./../utils":160}],140:[function(require,module,exports){ -'use strict'; - -var isAbsoluteURL = require('../helpers/isAbsoluteURL'); -var combineURLs = require('../helpers/combineURLs'); - -/** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * @returns {string} The combined full path - */ -module.exports = function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; -}; - -},{"../helpers/combineURLs":151,"../helpers/isAbsoluteURL":153}],141:[function(require,module,exports){ -'use strict'; - -var enhanceError = require('./enhanceError'); - -/** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The created error. - */ -module.exports = function createError(message, config, code, request, response) { - var error = new Error(message); - return enhanceError(error, config, code, request, response); -}; - -},{"./enhanceError":143}],142:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); -var transformData = require('./transformData'); -var isCancel = require('../cancel/isCancel'); -var defaults = require('../defaults'); -var Cancel = require('../cancel/Cancel'); - -/** - * Throws a `Cancel` if cancellation has been requested. - */ -function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } - - if (config.signal && config.signal.aborted) { - throw new Cancel('canceled'); - } -} - -/** - * Dispatch a request to the server using the configured adapter. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ -module.exports = function dispatchRequest(config) { - throwIfCancellationRequested(config); - - // Ensure headers exist - config.headers = config.headers || {}; - - // Transform request data - config.data = transformData.call( - config, - config.data, - config.headers, - config.transformRequest - ); - - // Flatten headers - config.headers = utils.merge( - config.headers.common || {}, - config.headers[config.method] || {}, - config.headers - ); - - utils.forEach( - ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], - function cleanHeaderConfig(method) { - delete config.headers[method]; - } - ); - - var adapter = config.adapter || defaults.adapter; - - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - - // Transform response data - response.data = transformData.call( - config, - response.data, - response.headers, - config.transformResponse - ); - - return response; - }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { - throwIfCancellationRequested(config); - - // Transform response data - if (reason && reason.response) { - reason.response.data = transformData.call( - config, - reason.response.data, - reason.response.headers, - config.transformResponse - ); - } - } - - return Promise.reject(reason); - }); -}; - -},{"../cancel/Cancel":135,"../cancel/isCancel":137,"../defaults":147,"./../utils":160,"./transformData":146}],143:[function(require,module,exports){ -'use strict'; - -/** - * Update an Error with the specified config, error code, and response. - * - * @param {Error} error The error to update. - * @param {Object} config The config. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The error. - */ -module.exports = function enhanceError(error, config, code, request, response) { - error.config = config; - if (code) { - error.code = code; - } - - error.request = request; - error.response = response; - error.isAxiosError = true; - - error.toJSON = function toJSON() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: this.config, - code: this.code, - status: this.response && this.response.status ? this.response.status : null - }; - }; - return error; -}; - -},{}],144:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * @returns {Object} New object resulting from merging config2 to config1 - */ -module.exports = function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - var config = {}; - - function getMergedValue(target, source) { - if (utils.isPlainObject(target) && utils.isPlainObject(source)) { - return utils.merge(target, source); - } else if (utils.isPlainObject(source)) { - return utils.merge({}, source); - } else if (utils.isArray(source)) { - return source.slice(); - } - return source; - } - - // eslint-disable-next-line consistent-return - function mergeDeepProperties(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(config1[prop], config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(undefined, config1[prop]); - } - } - - // eslint-disable-next-line consistent-return - function valueFromConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(undefined, config2[prop]); - } - } - - // eslint-disable-next-line consistent-return - function defaultToConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(undefined, config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(undefined, config1[prop]); - } - } - - // eslint-disable-next-line consistent-return - function mergeDirectKeys(prop) { - if (prop in config2) { - return getMergedValue(config1[prop], config2[prop]); - } else if (prop in config1) { - return getMergedValue(undefined, config1[prop]); - } - } - - var mergeMap = { - 'url': valueFromConfig2, - 'method': valueFromConfig2, - 'data': valueFromConfig2, - 'baseURL': defaultToConfig2, - 'transformRequest': defaultToConfig2, - 'transformResponse': defaultToConfig2, - 'paramsSerializer': defaultToConfig2, - 'timeout': defaultToConfig2, - 'timeoutMessage': defaultToConfig2, - 'withCredentials': defaultToConfig2, - 'adapter': defaultToConfig2, - 'responseType': defaultToConfig2, - 'xsrfCookieName': defaultToConfig2, - 'xsrfHeaderName': defaultToConfig2, - 'onUploadProgress': defaultToConfig2, - 'onDownloadProgress': defaultToConfig2, - 'decompress': defaultToConfig2, - 'maxContentLength': defaultToConfig2, - 'maxBodyLength': defaultToConfig2, - 'transport': defaultToConfig2, - 'httpAgent': defaultToConfig2, - 'httpsAgent': defaultToConfig2, - 'cancelToken': defaultToConfig2, - 'socketPath': defaultToConfig2, - 'responseEncoding': defaultToConfig2, - 'validateStatus': mergeDirectKeys - }; - - utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { - var merge = mergeMap[prop] || mergeDeepProperties; - var configValue = merge(prop); - (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); - }); - - return config; -}; - -},{"../utils":160}],145:[function(require,module,exports){ -'use strict'; - -var createError = require('./createError'); - -/** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ -module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(createError( - 'Request failed with status code ' + response.status, - response.config, - null, - response.request, - response - )); - } -}; - -},{"./createError":141}],146:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); -var defaults = require('./../defaults'); - -/** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ -module.exports = function transformData(data, headers, fns) { - var context = this || defaults; - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn.call(context, data, headers); - }); - - return data; -}; - -},{"./../defaults":147,"./../utils":160}],147:[function(require,module,exports){ -(function (process){ -'use strict'; - -var utils = require('./utils'); -var normalizeHeaderName = require('./helpers/normalizeHeaderName'); -var enhanceError = require('./core/enhanceError'); - -var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' -}; - -function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } -} - -function getDefaultAdapter() { - var adapter; - if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = require('./adapters/xhr'); - } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { - // For node use HTTP adapter - adapter = require('./adapters/http'); - } - return adapter; -} - -function stringifySafely(rawValue, parser, encoder) { - if (utils.isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return utils.trim(rawValue); - } catch (e) { - if (e.name !== 'SyntaxError') { - throw e; - } - } - } - - return (encoder || JSON.stringify)(rawValue); -} - -var defaults = { - - transitional: { - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false - }, - - adapter: getDefaultAdapter(), - - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Accept'); - normalizeHeaderName(headers, 'Content-Type'); - - if (utils.isFormData(data) || - utils.isArrayBuffer(data) || - utils.isBuffer(data) || - utils.isStream(data) || - utils.isFile(data) || - utils.isBlob(data) - ) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) { - setContentTypeIfUnset(headers, 'application/json'); - return stringifySafely(data); - } - return data; - }], - - transformResponse: [function transformResponse(data) { - var transitional = this.transitional || defaults.transitional; - var silentJSONParsing = transitional && transitional.silentJSONParsing; - var forcedJSONParsing = transitional && transitional.forcedJSONParsing; - var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; - - if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) { - try { - return JSON.parse(data); - } catch (e) { - if (strictJSONParsing) { - if (e.name === 'SyntaxError') { - throw enhanceError(e, this, 'E_JSON_PARSE'); - } - throw e; - } - } - } - - return data; - }], - - /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. - */ - timeout: 0, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - maxContentLength: -1, - maxBodyLength: -1, - - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - }, - - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - } - } -}; - -utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - defaults.headers[method] = {}; -}); - -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -}); - -module.exports = defaults; - -}).call(this,require('_process')) -},{"./adapters/http":133,"./adapters/xhr":133,"./core/enhanceError":143,"./helpers/normalizeHeaderName":156,"./utils":160,"_process":268}],148:[function(require,module,exports){ -module.exports = { - "version": "0.23.0" -}; -},{}],149:[function(require,module,exports){ -'use strict'; - -module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; -}; - -},{}],150:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); - -function encode(val) { - return encodeURIComponent(val). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, '+'). - replace(/%5B/gi, '['). - replace(/%5D/gi, ']'); -} - -/** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ -module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - - if (utils.isArray(val)) { - key = key + '[]'; - } else { - val = [val]; - } - - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - - serializedParams = parts.join('&'); - } - - if (serializedParams) { - var hashmarkIndex = url.indexOf('#'); - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - - return url; -}; - -},{"./../utils":160}],151:[function(require,module,exports){ -'use strict'; - -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL - */ -module.exports = function combineURLs(baseURL, relativeURL) { - return relativeURL - ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') - : baseURL; -}; - -},{}],152:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs support document.cookie - (function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - - if (utils.isString(path)) { - cookie.push('path=' + path); - } - - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - - if (secure === true) { - cookie.push('secure'); - } - - document.cookie = cookie.join('; '); - }, - - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return (match ? decodeURIComponent(match[3]) : null); - }, - - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; - })() : - - // Non standard browser env (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { return null; }, - remove: function remove() {} - }; - })() -); - -},{"./../utils":160}],153:[function(require,module,exports){ -'use strict'; - -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url); -}; - -},{}],154:[function(require,module,exports){ -'use strict'; - -/** - * Determines whether the payload is an error thrown by Axios - * - * @param {*} payload The value to test - * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false - */ -module.exports = function isAxiosError(payload) { - return (typeof payload === 'object') && (payload.isAxiosError === true); -}; - -},{}],155:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); - -module.exports = ( - utils.isStandardBrowserEnv() ? - - // Standard browser envs have full support of the APIs needed to test - // whether the request URL is of the same origin as current location. - (function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') ? - urlParsingNode.pathname : - '/' + urlParsingNode.pathname - }; - } - - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; - return (parsed.protocol === originURL.protocol && - parsed.host === originURL.host); - }; - })() : - - // Non standard browser envs (web workers, react-native) lack needed support. - (function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; - })() -); - -},{"./../utils":160}],156:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); - -module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); -}; - -},{"../utils":160}],157:[function(require,module,exports){ -'use strict'; - -var utils = require('./../utils'); - -// Headers whose duplicates are ignored by node -// c.f. https://nodejs.org/api/http.html#http_message_headers -var ignoreDuplicateOf = [ - 'age', 'authorization', 'content-length', 'content-type', 'etag', - 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', - 'last-modified', 'location', 'max-forwards', 'proxy-authorization', - 'referer', 'retry-after', 'user-agent' -]; - -/** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ -module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - - if (!headers) { return parsed; } - - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - - if (key) { - if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { - return; - } - if (key === 'set-cookie') { - parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); - } else { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - }); - - return parsed; -}; - -},{"./../utils":160}],158:[function(require,module,exports){ -'use strict'; - -/** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * @returns {Function} - */ -module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; -}; - -},{}],159:[function(require,module,exports){ -'use strict'; - -var VERSION = require('../env/data').version; - -var validators = {}; - -// eslint-disable-next-line func-names -['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) { - validators[type] = function validator(thing) { - return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; - }; -}); - -var deprecatedWarnings = {}; - -/** - * Transitional option validator - * @param {function|boolean?} validator - set to false if the transitional option has been removed - * @param {string?} version - deprecated version / removed since version - * @param {string?} message - some message with additional info - * @returns {function} - */ -validators.transitional = function transitional(validator, version, message) { - function formatMessage(opt, desc) { - return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); - } - - // eslint-disable-next-line func-names - return function(value, opt, opts) { - if (validator === false) { - throw new Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : ''))); - } - - if (version && !deprecatedWarnings[opt]) { - deprecatedWarnings[opt] = true; - // eslint-disable-next-line no-console - console.warn( - formatMessage( - opt, - ' has been deprecated since v' + version + ' and will be removed in the near future' - ) - ); - } - - return validator ? validator(value, opt, opts) : true; - }; -}; - -/** - * Assert object's properties type - * @param {object} options - * @param {object} schema - * @param {boolean?} allowUnknown - */ - -function assertOptions(options, schema, allowUnknown) { - if (typeof options !== 'object') { - throw new TypeError('options must be an object'); - } - var keys = Object.keys(options); - var i = keys.length; - while (i-- > 0) { - var opt = keys[i]; - var validator = schema[opt]; - if (validator) { - var value = options[opt]; - var result = value === undefined || validator(value, opt, options); - if (result !== true) { - throw new TypeError('option ' + opt + ' must be ' + result); - } - continue; - } - if (allowUnknown !== true) { - throw Error('Unknown option ' + opt); - } - } -} - -module.exports = { - assertOptions: assertOptions, - validators: validators -}; - -},{"../env/data":148}],160:[function(require,module,exports){ -'use strict'; - -var bind = require('./helpers/bind'); - -// utils is a library of generic helper functions non-specific to axios - -var toString = Object.prototype.toString; - -/** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ -function isArray(val) { - return toString.call(val) === '[object Array]'; -} - -/** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ -function isUndefined(val) { - return typeof val === 'undefined'; -} - -/** - * Determine if a value is a Buffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Buffer, otherwise false - */ -function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) - && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); -} - -/** - * Determine if a value is an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ -function isArrayBuffer(val) { - return toString.call(val) === '[object ArrayBuffer]'; -} - -/** - * Determine if a value is a FormData - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ -function isFormData(val) { - return (typeof FormData !== 'undefined') && (val instanceof FormData); -} - -/** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ -function isArrayBufferView(val) { - var result; - if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { - result = ArrayBuffer.isView(val); - } else { - result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer); - } - return result; -} - -/** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ -function isString(val) { - return typeof val === 'string'; -} - -/** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ -function isNumber(val) { - return typeof val === 'number'; -} - -/** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ -function isObject(val) { - return val !== null && typeof val === 'object'; -} - -/** - * Determine if a value is a plain Object - * - * @param {Object} val The value to test - * @return {boolean} True if value is a plain Object, otherwise false - */ -function isPlainObject(val) { - if (toString.call(val) !== '[object Object]') { - return false; - } - - var prototype = Object.getPrototypeOf(val); - return prototype === null || prototype === Object.prototype; -} - -/** - * Determine if a value is a Date - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ -function isDate(val) { - return toString.call(val) === '[object Date]'; -} - -/** - * Determine if a value is a File - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ -function isFile(val) { - return toString.call(val) === '[object File]'; -} - -/** - * Determine if a value is a Blob - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ -function isBlob(val) { - return toString.call(val) === '[object Blob]'; -} - -/** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ -function isFunction(val) { - return toString.call(val) === '[object Function]'; -} - -/** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ -function isStream(val) { - return isObject(val) && isFunction(val.pipe); -} - -/** - * Determine if a value is a URLSearchParams object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ -function isURLSearchParams(val) { - return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams; -} - -/** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ -function trim(str) { - return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); -} - -/** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * navigator.product -> 'ReactNative' - * nativescript - * navigator.product -> 'NativeScript' or 'NS' - */ -function isStandardBrowserEnv() { - if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || - navigator.product === 'NativeScript' || - navigator.product === 'NS')) { - return false; - } - return ( - typeof window !== 'undefined' && - typeof document !== 'undefined' - ); -} - -/** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ -function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (typeof obj !== 'object') { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - fn.call(null, obj[key], key, obj); - } - } - } -} - -/** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ -function merge(/* obj1, obj2, obj3, ... */) { - var result = {}; - function assignValue(val, key) { - if (isPlainObject(result[key]) && isPlainObject(val)) { - result[key] = merge(result[key], val); - } else if (isPlainObject(val)) { - result[key] = merge({}, val); - } else if (isArray(val)) { - result[key] = val.slice(); - } else { - result[key] = val; - } - } - - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * @return {Object} The resulting value of object a - */ -function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === 'function') { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; -} - -/** - * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) - * - * @param {string} content with BOM - * @return {string} content value without BOM - */ -function stripBOM(content) { - if (content.charCodeAt(0) === 0xFEFF) { - content = content.slice(1); - } - return content; -} - -module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isBuffer: isBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isPlainObject: isPlainObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isURLSearchParams: isURLSearchParams, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - extend: extend, - trim: trim, - stripBOM: stripBOM -}; - -},{"./helpers/bind":149}],161:[function(require,module,exports){ -(function (global,Buffer){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _hwTransport = _interopRequireDefault(require("@ledgerhq/hw-transport")); - -var _errors = require("@ledgerhq/errors"); - -var _logs = require("@ledgerhq/logs"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -const WebSocket = global.WebSocket || require("ws"); -/** - * WebSocket transport implementation - */ - - -class WebSocketTransport extends _hwTransport.default { - // this transport is not discoverable - static async open(url) { - const exchangeMethods = await new Promise((resolve, reject) => { - try { - const socket = new WebSocket(url); - const exchangeMethods = { - resolveExchange: _b => {}, - rejectExchange: _e => {}, - onDisconnect: () => {}, - close: () => socket.close(), - send: msg => socket.send(msg) - }; - - socket.onopen = () => { - socket.send("open"); - }; - - socket.onerror = e => { - exchangeMethods.onDisconnect(); - reject(e); - }; - - socket.onclose = () => { - exchangeMethods.onDisconnect(); - reject(new _errors.TransportError("OpenFailed", "OpenFailed")); - }; - - socket.onmessage = e => { - if (typeof e.data !== "string") return; - const data = JSON.parse(e.data); - - switch (data.type) { - case "opened": - return resolve(exchangeMethods); - - case "error": - reject(new Error(data.error)); - return exchangeMethods.rejectExchange(new _errors.TransportError(data.error, "WSError")); - - case "response": - return exchangeMethods.resolveExchange(Buffer.from(data.data, "hex")); - } - }; - } catch (e) { - reject(e); - } - }); - return new WebSocketTransport(exchangeMethods); - } - - constructor(hook) { - super(); - this.hook = void 0; - this.hook = hook; - - hook.onDisconnect = () => { - this.emit("disconnect"); - this.hook.rejectExchange(new _errors.TransportError("WebSocket disconnected", "WSDisconnect")); - }; - } - - async exchange(apdu) { - const hex = apdu.toString("hex"); - (0, _logs.log)("apdu", "=> " + hex); - const res = await new Promise((resolve, reject) => { - this.hook.rejectExchange = e => reject(e); - - this.hook.resolveExchange = b => resolve(b); - - this.hook.send(hex); - }); - (0, _logs.log)("apdu", "<= " + res.toString("hex")); - return res; - } - - setScrambleKey() {} - - async close() { - this.hook.close(); - return new Promise(success => { - setTimeout(success, 200); - }); - } - -} - -exports.default = WebSocketTransport; - -WebSocketTransport.isSupported = () => Promise.resolve(typeof WebSocket === "function"); - -WebSocketTransport.list = () => Promise.resolve([]); - -WebSocketTransport.listen = _observer => ({ - unsubscribe: () => {} -}); - -WebSocketTransport.check = async (url, timeout = 5000) => new Promise((resolve, reject) => { - const socket = new WebSocket(url); - let success = false; - setTimeout(() => { - socket.close(); - }, timeout); - - socket.onopen = () => { - success = true; - socket.close(); - }; - - socket.onclose = () => { - if (success) resolve();else { - reject(new _errors.TransportError("failed to access WebSocketTransport(" + url + ")", "WebSocketTransportNotAccessible")); - } - }; - - socket.onerror = () => { - reject(new _errors.TransportError("failed to access WebSocketTransport(" + url + "): error", "WebSocketTransportNotAccessible")); - }; -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"@ledgerhq/errors":162,"@ledgerhq/hw-transport":163,"@ledgerhq/logs":164,"buffer":226,"ws":274}],162:[function(require,module,exports){ -arguments[4][124][0].apply(exports,arguments) -},{"dup":124}],163:[function(require,module,exports){ -(function (Buffer){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "TransportError", { - enumerable: true, - get: function () { - return _errors.TransportError; - } -}); -Object.defineProperty(exports, "StatusCodes", { - enumerable: true, - get: function () { - return _errors.StatusCodes; - } -}); -Object.defineProperty(exports, "getAltStatusMessage", { - enumerable: true, - get: function () { - return _errors.getAltStatusMessage; - } -}); -Object.defineProperty(exports, "TransportStatusError", { - enumerable: true, - get: function () { - return _errors.TransportStatusError; - } -}); -exports.default = void 0; - -var _events = _interopRequireDefault(require("events")); - -var _errors = require("@ledgerhq/errors"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Transport defines the generic interface to share between node/u2f impl - * A **Descriptor** is a parametric type that is up to be determined for the implementation. - * it can be for instance an ID, an file path, a URL,... - */ -class Transport { - constructor() { - this.exchangeTimeout = 30000; - this.unresponsiveTimeout = 15000; - this.deviceModel = null; - this._events = new _events.default(); - - this.send = async (cla, ins, p1, p2, data = Buffer.alloc(0), statusList = [_errors.StatusCodes.OK]) => { - if (data.length >= 256) { - throw new _errors.TransportError("data.length exceed 256 bytes limit. Got: " + data.length, "DataLengthTooBig"); - } - - const response = await this.exchange(Buffer.concat([Buffer.from([cla, ins, p1, p2]), Buffer.from([data.length]), data])); - const sw = response.readUInt16BE(response.length - 2); - - if (!statusList.some(s => s === sw)) { - throw new _errors.TransportStatusError(sw); - } - - return response; - }; - - this.exchangeBusyPromise = void 0; - - this.exchangeAtomicImpl = async f => { - if (this.exchangeBusyPromise) { - throw new _errors.TransportRaceCondition("An action was already pending on the Ledger device. Please deny or reconnect."); - } - - let resolveBusy; - const busyPromise = new Promise(r => { - resolveBusy = r; - }); - this.exchangeBusyPromise = busyPromise; - let unresponsiveReached = false; - const timeout = setTimeout(() => { - unresponsiveReached = true; - this.emit("unresponsive"); - }, this.unresponsiveTimeout); - - try { - const res = await f(); - - if (unresponsiveReached) { - this.emit("responsive"); - } - - return res; - } finally { - clearTimeout(timeout); - if (resolveBusy) resolveBusy(); - this.exchangeBusyPromise = null; - } - }; - - this._appAPIlock = null; - } - - /** - * low level api to communicate with the device - * This method is for implementations to implement but should not be directly called. - * Instead, the recommanded way is to use send() method - * @param apdu the data to send - * @return a Promise of response data - */ - exchange(_apdu) { - throw new Error("exchange not implemented"); - } - /** - * set the "scramble key" for the next exchanges with the device. - * Each App can have a different scramble key and they internally will set it at instanciation. - * @param key the scramble key - */ - - - setScrambleKey(_key) {} - /** - * close the exchange with the device. - * @return a Promise that ends when the transport is closed. - */ - - - close() { - return Promise.resolve(); - } - - /** - * Listen to an event on an instance of transport. - * Transport implementation can have specific events. Here is the common events: - * * `"disconnect"` : triggered if Transport is disconnected - */ - on(eventName, cb) { - this._events.on(eventName, cb); - } - /** - * Stop listening to an event on an instance of transport. - */ - - - off(eventName, cb) { - this._events.removeListener(eventName, cb); - } - - emit(event, ...args) { - this._events.emit(event, ...args); - } - /** - * Enable or not logs of the binary exchange - */ - - - setDebugMode() { - console.warn("setDebugMode is deprecated. use @ledgerhq/logs instead. No logs are emitted in this anymore."); - } - /** - * Set a timeout (in milliseconds) for the exchange call. Only some transport might implement it. (e.g. U2F) - */ - - - setExchangeTimeout(exchangeTimeout) { - this.exchangeTimeout = exchangeTimeout; - } - /** - * Define the delay before emitting "unresponsive" on an exchange that does not respond - */ - - - setExchangeUnresponsiveTimeout(unresponsiveTimeout) { - this.unresponsiveTimeout = unresponsiveTimeout; - } - /** - * wrapper on top of exchange to simplify work of the implementation. - * @param cla - * @param ins - * @param p1 - * @param p2 - * @param data - * @param statusList is a list of accepted status code (shorts). [0x9000] by default - * @return a Promise of response buffer - */ - - - /** - * create() allows to open the first descriptor available or - * throw if there is none or if timeout is reached. - * This is a light helper, alternative to using listen() and open() (that you may need for any more advanced usecase) - * @example - TransportFoo.create().then(transport => ...) - */ - static create(openTimeout = 3000, listenTimeout) { - return new Promise((resolve, reject) => { - let found = false; - const sub = this.listen({ - next: e => { - found = true; - if (sub) sub.unsubscribe(); - if (listenTimeoutId) clearTimeout(listenTimeoutId); - this.open(e.descriptor, openTimeout).then(resolve, reject); - }, - error: e => { - if (listenTimeoutId) clearTimeout(listenTimeoutId); - reject(e); - }, - complete: () => { - if (listenTimeoutId) clearTimeout(listenTimeoutId); - - if (!found) { - reject(new _errors.TransportError(this.ErrorMessage_NoDeviceFound, "NoDeviceFound")); - } - } - }); - const listenTimeoutId = listenTimeout ? setTimeout(() => { - sub.unsubscribe(); - reject(new _errors.TransportError(this.ErrorMessage_ListenTimeout, "ListenTimeout")); - }, listenTimeout) : null; - }); - } - - decorateAppAPIMethods(self, methods, scrambleKey) { - for (let methodName of methods) { - self[methodName] = this.decorateAppAPIMethod(methodName, self[methodName], self, scrambleKey); - } - } - - decorateAppAPIMethod(methodName, f, ctx, scrambleKey) { - return async (...args) => { - const { - _appAPIlock - } = this; - - if (_appAPIlock) { - return Promise.reject(new _errors.TransportError("Ledger Device is busy (lock " + _appAPIlock + ")", "TransportLocked")); - } - - try { - this._appAPIlock = methodName; - this.setScrambleKey(scrambleKey); - return await f.apply(ctx, args); - } finally { - this._appAPIlock = null; - } - }; - } - -} - -exports.default = Transport; -Transport.isSupported = void 0; -Transport.list = void 0; -Transport.listen = void 0; -Transport.open = void 0; -Transport.ErrorMessage_ListenTimeout = "No Ledger device found (timeout)"; -Transport.ErrorMessage_NoDeviceFound = "No Ledger device found"; - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/errors":162,"buffer":226,"events":248}],164:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.listen = exports.log = void 0; - -/** - * A Log object - */ -let id = 0; -const subscribers = []; -/** - * log something - * @param type a namespaced identifier of the log (it is not a level like "debug", "error" but more like "apdu-in", "apdu-out", etc...) - * @param message a clear message of the log associated to the type - */ - -const log = (type, message, data) => { - const obj = { - type, - id: String(++id), - date: new Date() - }; - if (message) obj.message = message; - if (data) obj.data = data; - dispatch(obj); -}; -/** - * listen to logs. - * @param cb that is called for each future log() with the Log object - * @return a function that can be called to unsubscribe the listener - */ - - -exports.log = log; - -const listen = cb => { - subscribers.push(cb); - return () => { - const i = subscribers.indexOf(cb); - - if (i !== -1) { - // equivalent of subscribers.splice(i, 1) // https://twitter.com/Rich_Harris/status/1125850391155965952 - subscribers[i] = subscribers[subscribers.length - 1]; - subscribers.pop(); - } - }; -}; - -exports.listen = listen; - -function dispatch(log) { - for (let i = 0; i < subscribers.length; i++) { - try { - subscribers[i](log); - } catch (e) { - console.error(e); - } - } -} // for debug purpose - - -if (typeof window !== "undefined") { - window.__ledgerLogsListen = listen; -} - -},{}],165:[function(require,module,exports){ -(function (Buffer){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var _u2fApi = require("u2f-api"); - -var _hwTransport = _interopRequireDefault(require("@ledgerhq/hw-transport")); - -var _logs = require("@ledgerhq/logs"); - -var _errors = require("@ledgerhq/errors"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function wrapU2FTransportError(originalError, message, id) { - const err = new _errors.TransportError(message, id); // $FlowFixMe - - err.originalError = originalError; - return err; -} - -function wrapApdu(apdu, key) { - const result = Buffer.alloc(apdu.length); - - for (let i = 0; i < apdu.length; i++) { - result[i] = apdu[i] ^ key[i % key.length]; - } - - return result; -} // Convert from normal to web-safe, strip trailing "="s - - -const webSafe64 = base64 => base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); // Convert from web-safe to normal, add trailing "="s - - -const normal64 = base64 => base64.replace(/-/g, "+").replace(/_/g, "/") + "==".substring(0, 3 * base64.length % 4); - -function attemptExchange(apdu, timeoutMillis, scrambleKey, unwrap) { - const keyHandle = wrapApdu(apdu, scrambleKey); - const challenge = Buffer.from("0000000000000000000000000000000000000000000000000000000000000000", "hex"); - const signRequest = { - version: "U2F_V2", - keyHandle: webSafe64(keyHandle.toString("base64")), - challenge: webSafe64(challenge.toString("base64")), - appId: location.origin - }; - (0, _logs.log)("apdu", "=> " + apdu.toString("hex")); - return (0, _u2fApi.sign)(signRequest, timeoutMillis / 1000).then(response => { - const { - signatureData - } = response; - - if (typeof signatureData === "string") { - const data = Buffer.from(normal64(signatureData), "base64"); - let result; - - if (!unwrap) { - result = data; - } else { - result = data.slice(5); - } - - (0, _logs.log)("apdu", "<= " + result.toString("hex")); - return result; - } else { - throw response; - } - }); -} - -let transportInstances = []; - -function emitDisconnect() { - transportInstances.forEach(t => t.emit("disconnect")); - transportInstances = []; -} - -function isTimeoutU2FError(u2fError) { - return u2fError.metaData.code === 5; -} -/** - * U2F web Transport implementation - * @example - * import TransportU2F from "@ledgerhq/hw-transport-u2f"; - * ... - * TransportU2F.create().then(transport => ...) - */ - - -class TransportU2F extends _hwTransport.default { - /* - */ - - /* - */ - - /** - * static function to create a new Transport from a connected Ledger device discoverable via U2F (browser support) - */ - static async open(_, _openTimeout = 5000) { - return new TransportU2F(); - } - - constructor() { - super(); - this.scrambleKey = void 0; - this.unwrap = true; - transportInstances.push(this); - } - /** - * Exchange with the device using APDU protocol. - * @param apdu - * @returns a promise of apdu response - */ - - - async exchange(apdu) { - try { - return await attemptExchange(apdu, this.exchangeTimeout, this.scrambleKey, this.unwrap); - } catch (e) { - const isU2FError = typeof e.metaData === "object"; - - if (isU2FError) { - if (isTimeoutU2FError(e)) { - emitDisconnect(); - } // the wrapping make error more usable and "printable" to the end user. - - - throw wrapU2FTransportError(e, "Failed to sign with Ledger device: U2F " + e.metaData.type, "U2F_" + e.metaData.code); - } else { - throw e; - } - } - } - /** - */ - - - setScrambleKey(scrambleKey) { - this.scrambleKey = Buffer.from(scrambleKey, "ascii"); - } - /** - */ - - - setUnwrap(unwrap) { - this.unwrap = unwrap; - } - - close() { - // u2f have no way to clean things up - return Promise.resolve(); - } - -} - -exports.default = TransportU2F; -TransportU2F.isSupported = _u2fApi.isSupported; - -TransportU2F.list = () => // this transport is not discoverable but we are going to guess if it is here with isSupported() -(0, _u2fApi.isSupported)().then(supported => supported ? [null] : []); - -TransportU2F.listen = observer => { - let unsubscribed = false; - (0, _u2fApi.isSupported)().then(supported => { - if (unsubscribed) return; - - if (supported) { - observer.next({ - type: "add", - descriptor: null - }); - observer.complete(); - } else { - observer.error(new _errors.TransportError("U2F browser support is needed for Ledger. " + "Please use Chrome, Opera or Firefox with a U2F extension. " + "Also make sure you're on an HTTPS connection", "U2FNotSupported")); - } - }); - return { - unsubscribe: () => { - unsubscribed = true; - } - }; -}; - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/errors":124,"@ledgerhq/hw-transport":217,"@ledgerhq/logs":218,"buffer":226,"u2f-api":271}],166:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -exports.__esModule = true; -var hw_transport_1 = __importDefault(require("@ledgerhq/hw-transport")); -var hid_framing_1 = __importDefault(require("@ledgerhq/devices/lib/hid-framing")); -var devices_1 = require("@ledgerhq/devices"); -var logs_1 = require("@ledgerhq/logs"); -var errors_1 = require("@ledgerhq/errors"); -var ledgerDevices = [ - { - vendorId: devices_1.ledgerUSBVendorId - }, -]; -var isSupported = function () { - return Promise.resolve(!!(window.navigator && window.navigator.hid)); -}; -var getHID = function () { - // $FlowFixMe - var hid = navigator.hid; - if (!hid) - throw new errors_1.TransportError("navigator.hid is not supported", "HIDNotSupported"); - return hid; -}; -function requestLedgerDevices() { - return __awaiter(this, void 0, void 0, function () { - var device; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, getHID().requestDevice({ - filters: ledgerDevices - })]; - case 1: - device = _a.sent(); - if (Array.isArray(device)) - return [2 /*return*/, device]; - return [2 /*return*/, [device]]; - } - }); - }); -} -function getLedgerDevices() { - return __awaiter(this, void 0, void 0, function () { - var devices; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, getHID().getDevices()]; - case 1: - devices = _a.sent(); - return [2 /*return*/, devices.filter(function (d) { return d.vendorId === devices_1.ledgerUSBVendorId; })]; - } - }); - }); -} -function getFirstLedgerDevice() { - return __awaiter(this, void 0, void 0, function () { - var existingDevices, devices; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, getLedgerDevices()]; - case 1: - existingDevices = _a.sent(); - if (existingDevices.length > 0) - return [2 /*return*/, existingDevices[0]]; - return [4 /*yield*/, requestLedgerDevices()]; - case 2: - devices = _a.sent(); - return [2 /*return*/, devices[0]]; - } - }); - }); -} -/** - * WebHID Transport implementation - * @example - * import TransportWebHID from "@ledgerhq/hw-transport-webhid"; - * ... - * TransportWebHID.create().then(transport => ...) - */ -var TransportWebHID = /** @class */ (function (_super) { - __extends(TransportWebHID, _super); - function TransportWebHID(device) { - var _this = _super.call(this) || this; - _this.channel = Math.floor(Math.random() * 0xffff); - _this.packetSize = 64; - _this.inputs = []; - _this.read = function () { - if (_this.inputs.length) { - return Promise.resolve(_this.inputs.shift()); - } - return new Promise(function (success) { - _this.inputCallback = success; - }); - }; - _this.onInputReport = function (e) { - var buffer = Buffer.from(e.data.buffer); - if (_this.inputCallback) { - _this.inputCallback(buffer); - _this.inputCallback = null; - } - else { - _this.inputs.push(buffer); - } - }; - _this._disconnectEmitted = false; - _this._emitDisconnect = function (e) { - if (_this._disconnectEmitted) - return; - _this._disconnectEmitted = true; - _this.emit("disconnect", e); - }; - /** - * Exchange with the device using APDU protocol. - * @param apdu - * @returns a promise of apdu response - */ - _this.exchange = function (apdu) { return __awaiter(_this, void 0, void 0, function () { - var b; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.exchangeAtomicImpl(function () { return __awaiter(_this, void 0, void 0, function () { - var _a, channel, packetSize, framing, blocks, i, result, acc, buffer; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - _a = this, channel = _a.channel, packetSize = _a.packetSize; - (0, logs_1.log)("apdu", "=> " + apdu.toString("hex")); - framing = (0, hid_framing_1["default"])(channel, packetSize); - blocks = framing.makeBlocks(apdu); - i = 0; - _b.label = 1; - case 1: - if (!(i < blocks.length)) return [3 /*break*/, 4]; - return [4 /*yield*/, this.device.sendReport(0, blocks[i])]; - case 2: - _b.sent(); - _b.label = 3; - case 3: - i++; - return [3 /*break*/, 1]; - case 4: - if (!!(result = framing.getReducedResult(acc))) return [3 /*break*/, 6]; - return [4 /*yield*/, this.read()]; - case 5: - buffer = _b.sent(); - acc = framing.reduceResponse(acc, buffer); - return [3 /*break*/, 4]; - case 6: - (0, logs_1.log)("apdu", "<= " + result.toString("hex")); - return [2 /*return*/, result]; - } - }); - }); })["catch"](function (e) { - if (e && e.message && e.message.includes("write")) { - _this._emitDisconnect(e); - throw new errors_1.DisconnectedDeviceDuringOperation(e.message); - } - throw e; - })]; - case 1: - b = _a.sent(); - return [2 /*return*/, b]; - } - }); - }); }; - _this.device = device; - _this.deviceModel = - typeof device.productId === "number" - ? (0, devices_1.identifyUSBProductId)(device.productId) - : undefined; - device.addEventListener("inputreport", _this.onInputReport); - return _this; - } - /** - * Similar to create() except it will always display the device permission (even if some devices are already accepted). - */ - TransportWebHID.request = function () { - return __awaiter(this, void 0, void 0, function () { - var _a, device; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, requestLedgerDevices()]; - case 1: - _a = __read.apply(void 0, [_b.sent(), 1]), device = _a[0]; - return [2 /*return*/, TransportWebHID.open(device)]; - } - }); - }); - }; - /** - * Similar to create() except it will never display the device permission (it returns a Promise, null if it fails to find a device). - */ - TransportWebHID.openConnected = function () { - return __awaiter(this, void 0, void 0, function () { - var devices; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, getLedgerDevices()]; - case 1: - devices = _a.sent(); - if (devices.length === 0) - return [2 /*return*/, null]; - return [2 /*return*/, TransportWebHID.open(devices[0])]; - } - }); - }); - }; - /** - * Create a Ledger transport with a HIDDevice - */ - TransportWebHID.open = function (device) { - return __awaiter(this, void 0, void 0, function () { - var transport, onDisconnect; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, device.open()]; - case 1: - _a.sent(); - transport = new TransportWebHID(device); - onDisconnect = function (e) { - if (device === e.device) { - getHID().removeEventListener("disconnect", onDisconnect); - transport._emitDisconnect(new errors_1.DisconnectedDevice()); - } - }; - getHID().addEventListener("disconnect", onDisconnect); - return [2 /*return*/, transport]; - } - }); - }); - }; - /** - * Release the transport device - */ - TransportWebHID.prototype.close = function () { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.exchangeBusyPromise]; - case 1: - _a.sent(); - this.device.removeEventListener("inputreport", this.onInputReport); - return [4 /*yield*/, this.device.close()]; - case 2: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - TransportWebHID.prototype.setScrambleKey = function () { }; - /** - * Check if WebUSB transport is supported. - */ - TransportWebHID.isSupported = isSupported; - /** - * List the WebUSB devices that was previously authorized by the user. - */ - TransportWebHID.list = getLedgerDevices; - /** - * Actively listen to WebUSB devices and emit ONE device - * that was either accepted before, if not it will trigger the native permission UI. - * - * Important: it must be called in the context of a UI click! - */ - TransportWebHID.listen = function (observer) { - var unsubscribed = false; - getFirstLedgerDevice().then(function (device) { - if (!device) { - observer.error(new errors_1.TransportOpenUserCancelled("Access denied to use Ledger device")); - } - else if (!unsubscribed) { - var deviceModel = typeof device.productId === "number" - ? (0, devices_1.identifyUSBProductId)(device.productId) - : undefined; - observer.next({ - type: "add", - descriptor: device, - deviceModel: deviceModel - }); - observer.complete(); - } - }, function (error) { - observer.error(new errors_1.TransportOpenUserCancelled(error.message)); - }); - function unsubscribe() { - unsubscribed = true; - } - return { - unsubscribe: unsubscribe - }; - }; - return TransportWebHID; -}(hw_transport_1["default"])); -exports["default"] = TransportWebHID; - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/devices":168,"@ledgerhq/devices/lib/hid-framing":167,"@ledgerhq/errors":170,"@ledgerhq/hw-transport":171,"@ledgerhq/logs":172,"buffer":226}],167:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -exports.__esModule = true; -var errors_1 = require("@ledgerhq/errors"); -var Tag = 0x05; -function asUInt16BE(value) { - var b = Buffer.alloc(2); - b.writeUInt16BE(value, 0); - return b; -} -var initialAcc = { - data: Buffer.alloc(0), - dataLength: 0, - sequence: 0 -}; -/** - * - */ -var createHIDframing = function (channel, packetSize) { - return { - makeBlocks: function (apdu) { - var data = Buffer.concat([asUInt16BE(apdu.length), apdu]); - var blockSize = packetSize - 5; - var nbBlocks = Math.ceil(data.length / blockSize); - data = Buffer.concat([ - data, - Buffer.alloc(nbBlocks * blockSize - data.length + 1).fill(0), - ]); - var blocks = []; - for (var i = 0; i < nbBlocks; i++) { - var head = Buffer.alloc(5); - head.writeUInt16BE(channel, 0); - head.writeUInt8(Tag, 2); - head.writeUInt16BE(i, 3); - var chunk = data.slice(i * blockSize, (i + 1) * blockSize); - blocks.push(Buffer.concat([head, chunk])); - } - return blocks; - }, - reduceResponse: function (acc, chunk) { - var _a = acc || initialAcc, data = _a.data, dataLength = _a.dataLength, sequence = _a.sequence; - if (chunk.readUInt16BE(0) !== channel) { - throw new errors_1.TransportError("Invalid channel", "InvalidChannel"); - } - if (chunk.readUInt8(2) !== Tag) { - throw new errors_1.TransportError("Invalid tag", "InvalidTag"); - } - if (chunk.readUInt16BE(3) !== sequence) { - throw new errors_1.TransportError("Invalid sequence", "InvalidSequence"); - } - if (!acc) { - dataLength = chunk.readUInt16BE(5); - } - sequence++; - var chunkData = chunk.slice(acc ? 5 : 7); - data = Buffer.concat([data, chunkData]); - if (data.length > dataLength) { - data = data.slice(0, dataLength); - } - return { - data: data, - dataLength: dataLength, - sequence: sequence - }; - }, - getReducedResult: function (acc) { - if (acc && acc.dataLength === acc.data.length) { - return acc.data; - } - } - }; -}; -exports["default"] = createHIDframing; - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/errors":170,"buffer":226}],168:[function(require,module,exports){ -"use strict"; -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var _a; -exports.__esModule = true; -exports.getInfosForServiceUuid = exports.getBluetoothServiceUuids = exports.identifyProductName = exports.identifyUSBProductId = exports.identifyTargetId = exports.getDeviceModel = exports.ledgerUSBVendorId = exports.DeviceModelId = exports.IIWebUSB = exports.IICCID = exports.IIU2F = exports.IIKeyboardHID = exports.IIGenericHID = void 0; -var semver_1 = __importDefault(require("semver")); -/** - * The USB product IDs will be defined as MMII, encoding a model (MM) and an interface bitfield (II) - * - ** Model - * Ledger Nano S : 0x10 - * Ledger Blue : 0x00 - * Ledger Nano X : 0x40 - * - ** Interface support bitfield - * Generic HID : 0x01 - * Keyboard HID : 0x02 - * U2F : 0x04 - * CCID : 0x08 - * WebUSB : 0x10 - */ -exports.IIGenericHID = 0x01; -exports.IIKeyboardHID = 0x02; -exports.IIU2F = 0x04; -exports.IICCID = 0x08; -exports.IIWebUSB = 0x10; -var DeviceModelId; -(function (DeviceModelId) { - DeviceModelId["blue"] = "blue"; - DeviceModelId["nanoS"] = "nanoS"; - DeviceModelId["nanoSP"] = "nanoSP"; - DeviceModelId["nanoX"] = "nanoX"; -})(DeviceModelId = exports.DeviceModelId || (exports.DeviceModelId = {})); -var devices = (_a = {}, - _a[DeviceModelId.blue] = { - id: DeviceModelId.blue, - productName: "Ledger Blue", - productIdMM: 0x00, - legacyUsbProductId: 0x0000, - usbOnly: true, - memorySize: 480 * 1024, - masks: [0x31000000, 0x31010000], - getBlockSize: function (_firwareVersion) { return 4 * 1024; } - }, - _a[DeviceModelId.nanoS] = { - id: DeviceModelId.nanoS, - productName: "Ledger Nano S", - productIdMM: 0x10, - legacyUsbProductId: 0x0001, - usbOnly: true, - memorySize: 320 * 1024, - masks: [0x31100000], - getBlockSize: function (firmwareVersion) { - var _a; - return semver_1["default"].lt((_a = semver_1["default"].coerce(firmwareVersion)) !== null && _a !== void 0 ? _a : "", "2.0.0") - ? 4 * 1024 - : 2 * 1024; - } - }, - _a[DeviceModelId.nanoSP] = { - id: DeviceModelId.nanoSP, - productName: "Ledger Nano SP", - productIdMM: 0x50, - legacyUsbProductId: 0x0005, - usbOnly: true, - memorySize: 1533 * 1024, - masks: [0x33100000], - getBlockSize: function (_firmwareVersion) { return 512; } - }, - _a[DeviceModelId.nanoX] = { - id: DeviceModelId.nanoX, - productName: "Ledger Nano X", - productIdMM: 0x40, - legacyUsbProductId: 0x0004, - usbOnly: false, - memorySize: 2 * 1024 * 1024, - masks: [0x33000000], - getBlockSize: function (_firwareVersion) { return 4 * 1024; }, - bluetoothSpec: [ - { - // this is the legacy one (prototype version). we will eventually drop it. - serviceUuid: "d973f2e0-b19e-11e2-9e96-0800200c9a66", - notifyUuid: "d973f2e1-b19e-11e2-9e96-0800200c9a66", - writeUuid: "d973f2e2-b19e-11e2-9e96-0800200c9a66" - }, - { - serviceUuid: "13d63400-2c97-0004-0000-4c6564676572", - notifyUuid: "13d63400-2c97-0004-0001-4c6564676572", - writeUuid: "13d63400-2c97-0004-0002-4c6564676572" - }, - ] - }, - _a); -var productMap = { - Blue: DeviceModelId.blue, - "Nano S": DeviceModelId.nanoS, - "Nano X": DeviceModelId.nanoX -}; -var devicesList = Object.values(devices); -/** - * - */ -exports.ledgerUSBVendorId = 0x2c97; -/** - * - */ -var getDeviceModel = function (id) { - var info = devices[id]; - if (!info) - throw new Error("device '" + id + "' does not exist"); - return info; -}; -exports.getDeviceModel = getDeviceModel; -/** - * Given a `targetId`, return the deviceModel associated to it, - * based on the first two bytes. - */ -var identifyTargetId = function (targetId) { - var deviceModel = devicesList.find(function (_a) { - var masks = _a.masks; - return masks.find(function (mask) { return (targetId & 0xffff0000) === mask; }); - }); - return deviceModel; -}; -exports.identifyTargetId = identifyTargetId; -/** - * - */ -var identifyUSBProductId = function (usbProductId) { - var legacy = devicesList.find(function (d) { return d.legacyUsbProductId === usbProductId; }); - if (legacy) - return legacy; - var mm = usbProductId >> 8; - var deviceModel = devicesList.find(function (d) { return d.productIdMM === mm; }); - return deviceModel; -}; -exports.identifyUSBProductId = identifyUSBProductId; -var identifyProductName = function (productName) { - var productId = productMap[productName]; - if (!productId && productName.startsWith("Nano S")) { - productId = DeviceModelId.nanoSP; - } - var deviceModel = devicesList.find(function (d) { return d.id === productId; }); - return deviceModel; -}; -exports.identifyProductName = identifyProductName; -var bluetoothServices = []; -var serviceUuidToInfos = {}; -for (var id in devices) { - var deviceModel = devices[id]; - var bluetoothSpec = deviceModel.bluetoothSpec; - if (bluetoothSpec) { - for (var i = 0; i < bluetoothSpec.length; i++) { - var spec = bluetoothSpec[i]; - bluetoothServices.push(spec.serviceUuid); - serviceUuidToInfos[spec.serviceUuid] = serviceUuidToInfos[spec.serviceUuid.replace(/-/g, "")] = __assign({ deviceModel: deviceModel }, spec); - } - } -} -/** - * - */ -var getBluetoothServiceUuids = function () { return bluetoothServices; }; -exports.getBluetoothServiceUuids = getBluetoothServiceUuids; -/** - * - */ -var getInfosForServiceUuid = function (uuid) { return serviceUuidToInfos[uuid.toLowerCase()]; }; -exports.getInfosForServiceUuid = getInfosForServiceUuid; - -},{"semver":200}],169:[function(require,module,exports){ -"use strict"; -/* eslint-disable no-continue */ -/* eslint-disable no-unused-vars */ -/* eslint-disable no-param-reassign */ -/* eslint-disable no-prototype-builtins */ -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -exports.__esModule = true; -exports.serializeError = exports.deserializeError = exports.createCustomErrorClass = exports.addCustomErrorDeserializer = void 0; -var errorClasses = {}; -var deserializers = {}; -var addCustomErrorDeserializer = function (name, deserializer) { - deserializers[name] = deserializer; -}; -exports.addCustomErrorDeserializer = addCustomErrorDeserializer; -var createCustomErrorClass = function (name) { - var C = function CustomError(message, fields) { - Object.assign(this, fields); - this.name = name; - this.message = message || name; - this.stack = new Error().stack; - }; - C.prototype = new Error(); - errorClasses[name] = C; - return C; -}; -exports.createCustomErrorClass = createCustomErrorClass; -// inspired from https://github.com/programble/errio/blob/master/index.js -var deserializeError = function (object) { - if (typeof object === "object" && object) { - try { - // $FlowFixMe FIXME HACK - var msg = JSON.parse(object.message); - if (msg.message && msg.name) { - object = msg; - } - } - catch (e) { - // nothing - } - var error = void 0; - if (typeof object.name === "string") { - var name_1 = object.name; - var des = deserializers[name_1]; - if (des) { - error = des(object); - } - else { - var constructor = name_1 === "Error" ? Error : errorClasses[name_1]; - if (!constructor) { - console.warn("deserializing an unknown class '" + name_1 + "'"); - constructor = exports.createCustomErrorClass(name_1); - } - error = Object.create(constructor.prototype); - try { - for (var prop in object) { - if (object.hasOwnProperty(prop)) { - error[prop] = object[prop]; - } - } - } - catch (e) { - // sometimes setting a property can fail (e.g. .name) - } - } - } - else { - error = new Error(object.message); - } - if (!error.stack && Error.captureStackTrace) { - Error.captureStackTrace(error, exports.deserializeError); - } - return error; - } - return new Error(String(object)); -}; -exports.deserializeError = deserializeError; -// inspired from https://github.com/sindresorhus/serialize-error/blob/master/index.js -var serializeError = function (value) { - if (!value) - return value; - if (typeof value === "object") { - return destroyCircular(value, []); - } - if (typeof value === "function") { - return "[Function: " + (value.name || "anonymous") + "]"; - } - return value; -}; -exports.serializeError = serializeError; -// https://www.npmjs.com/package/destroy-circular -function destroyCircular(from, seen) { - var e_1, _a; - var to = {}; - seen.push(from); - try { - for (var _b = __values(Object.keys(from)), _c = _b.next(); !_c.done; _c = _b.next()) { - var key = _c.value; - var value = from[key]; - if (typeof value === "function") { - continue; - } - if (!value || typeof value !== "object") { - to[key] = value; - continue; - } - if (seen.indexOf(from[key]) === -1) { - to[key] = destroyCircular(from[key], seen.slice(0)); - continue; - } - to[key] = "[Circular]"; - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (_c && !_c.done && (_a = _b["return"])) _a.call(_b); - } - finally { if (e_1) throw e_1.error; } - } - if (typeof from.name === "string") { - to.name = from.name; - } - if (typeof from.message === "string") { - to.message = from.message; - } - if (typeof from.stack === "string") { - to.stack = from.stack; - } - return to; -} - -},{}],170:[function(require,module,exports){ -"use strict"; -exports.__esModule = true; -exports.NotEnoughBalanceInParentAccount = exports.NotEnoughBalanceToDelegate = exports.NotEnoughBalance = exports.NoAddressesFound = exports.NetworkDown = exports.ManagerUninstallBTCDep = exports.ManagerNotEnoughSpaceError = exports.ManagerFirmwareNotEnoughSpaceError = exports.ManagerDeviceLockedError = exports.ManagerAppDepUninstallRequired = exports.ManagerAppDepInstallRequired = exports.ManagerAppRelyOnBTCError = exports.ManagerAppAlreadyInstalledError = exports.LedgerAPINotAvailable = exports.LedgerAPIErrorWithMessage = exports.LedgerAPIError = exports.UnknownMCU = exports.LatestMCUInstalledError = exports.InvalidAddressBecauseDestinationIsAlsoSource = exports.InvalidAddress = exports.InvalidXRPTag = exports.HardResetFail = exports.FirmwareNotRecognized = exports.FeeEstimationFailed = exports.EthAppPleaseEnableContractData = exports.EnpointConfigError = exports.DisconnectedDeviceDuringOperation = exports.DisconnectedDevice = exports.DeviceSocketNoBulkStatus = exports.DeviceSocketFail = exports.DeviceNameInvalid = exports.DeviceHalted = exports.DeviceInOSUExpected = exports.DeviceOnDashboardUnexpected = exports.DeviceOnDashboardExpected = exports.DeviceNotGenuineError = exports.DeviceGenuineSocketEarlyClose = exports.DeviceAppVerifyNotSupported = exports.CurrencyNotSupported = exports.CashAddrNotSupported = exports.CantOpenDevice = exports.BtcUnmatchedApp = exports.BluetoothRequired = exports.AmountRequired = exports.AccountNotSupported = exports.AccountNameRequiredError = exports.addCustomErrorDeserializer = exports.createCustomErrorClass = exports.deserializeError = exports.serializeError = void 0; -exports.StatusCodes = exports.TransportError = exports.DBNotReset = exports.DBWrongPassword = exports.NoDBPathGiven = exports.FirmwareOrAppUpdateRequired = exports.LedgerAPI5xx = exports.LedgerAPI4xx = exports.GenuineCheckFailed = exports.PairingFailed = exports.SyncError = exports.FeeTooHigh = exports.FeeRequired = exports.FeeNotLoaded = exports.CantScanQRCode = exports.ETHAddressNonEIP = exports.WrongAppForCurrency = exports.WrongDeviceForAccount = exports.WebsocketConnectionFailed = exports.WebsocketConnectionError = exports.DeviceShouldStayInApp = exports.TransportWebUSBGestureRequired = exports.TransportRaceCondition = exports.TransportInterfaceNotAvailable = exports.TransportOpenUserCancelled = exports.UserRefusedOnDevice = exports.UserRefusedAllowManager = exports.UserRefusedFirmwareUpdate = exports.UserRefusedAddress = exports.UserRefusedDeviceNameChange = exports.UpdateYourApp = exports.UpdateIncorrectSig = exports.UpdateIncorrectHash = exports.UpdateFetchFileFail = exports.UnavailableTezosOriginatedAccountSend = exports.UnavailableTezosOriginatedAccountReceive = exports.RecipientRequired = exports.MCUNotGenuineToDashboard = exports.UnexpectedBootloader = exports.TimeoutTagged = exports.RecommendUndelegation = exports.RecommendSubAccountsToEmpty = exports.PasswordIncorrectError = exports.PasswordsDontMatchError = exports.GasLessThanEstimate = exports.NotSupportedLegacyAddress = exports.NotEnoughGas = exports.NoAccessToCamera = exports.NotEnoughBalanceBecauseDestinationNotCreated = exports.NotEnoughSpendableBalance = void 0; -exports.TransportStatusError = exports.getAltStatusMessage = void 0; -var helpers_1 = require("./helpers"); -exports.serializeError = helpers_1.serializeError; -exports.deserializeError = helpers_1.deserializeError; -exports.createCustomErrorClass = helpers_1.createCustomErrorClass; -exports.addCustomErrorDeserializer = helpers_1.addCustomErrorDeserializer; -exports.AccountNameRequiredError = helpers_1.createCustomErrorClass("AccountNameRequired"); -exports.AccountNotSupported = helpers_1.createCustomErrorClass("AccountNotSupported"); -exports.AmountRequired = helpers_1.createCustomErrorClass("AmountRequired"); -exports.BluetoothRequired = helpers_1.createCustomErrorClass("BluetoothRequired"); -exports.BtcUnmatchedApp = helpers_1.createCustomErrorClass("BtcUnmatchedApp"); -exports.CantOpenDevice = helpers_1.createCustomErrorClass("CantOpenDevice"); -exports.CashAddrNotSupported = helpers_1.createCustomErrorClass("CashAddrNotSupported"); -exports.CurrencyNotSupported = helpers_1.createCustomErrorClass("CurrencyNotSupported"); -exports.DeviceAppVerifyNotSupported = helpers_1.createCustomErrorClass("DeviceAppVerifyNotSupported"); -exports.DeviceGenuineSocketEarlyClose = helpers_1.createCustomErrorClass("DeviceGenuineSocketEarlyClose"); -exports.DeviceNotGenuineError = helpers_1.createCustomErrorClass("DeviceNotGenuine"); -exports.DeviceOnDashboardExpected = helpers_1.createCustomErrorClass("DeviceOnDashboardExpected"); -exports.DeviceOnDashboardUnexpected = helpers_1.createCustomErrorClass("DeviceOnDashboardUnexpected"); -exports.DeviceInOSUExpected = helpers_1.createCustomErrorClass("DeviceInOSUExpected"); -exports.DeviceHalted = helpers_1.createCustomErrorClass("DeviceHalted"); -exports.DeviceNameInvalid = helpers_1.createCustomErrorClass("DeviceNameInvalid"); -exports.DeviceSocketFail = helpers_1.createCustomErrorClass("DeviceSocketFail"); -exports.DeviceSocketNoBulkStatus = helpers_1.createCustomErrorClass("DeviceSocketNoBulkStatus"); -exports.DisconnectedDevice = helpers_1.createCustomErrorClass("DisconnectedDevice"); -exports.DisconnectedDeviceDuringOperation = helpers_1.createCustomErrorClass("DisconnectedDeviceDuringOperation"); -exports.EnpointConfigError = helpers_1.createCustomErrorClass("EnpointConfig"); -exports.EthAppPleaseEnableContractData = helpers_1.createCustomErrorClass("EthAppPleaseEnableContractData"); -exports.FeeEstimationFailed = helpers_1.createCustomErrorClass("FeeEstimationFailed"); -exports.FirmwareNotRecognized = helpers_1.createCustomErrorClass("FirmwareNotRecognized"); -exports.HardResetFail = helpers_1.createCustomErrorClass("HardResetFail"); -exports.InvalidXRPTag = helpers_1.createCustomErrorClass("InvalidXRPTag"); -exports.InvalidAddress = helpers_1.createCustomErrorClass("InvalidAddress"); -exports.InvalidAddressBecauseDestinationIsAlsoSource = helpers_1.createCustomErrorClass("InvalidAddressBecauseDestinationIsAlsoSource"); -exports.LatestMCUInstalledError = helpers_1.createCustomErrorClass("LatestMCUInstalledError"); -exports.UnknownMCU = helpers_1.createCustomErrorClass("UnknownMCU"); -exports.LedgerAPIError = helpers_1.createCustomErrorClass("LedgerAPIError"); -exports.LedgerAPIErrorWithMessage = helpers_1.createCustomErrorClass("LedgerAPIErrorWithMessage"); -exports.LedgerAPINotAvailable = helpers_1.createCustomErrorClass("LedgerAPINotAvailable"); -exports.ManagerAppAlreadyInstalledError = helpers_1.createCustomErrorClass("ManagerAppAlreadyInstalled"); -exports.ManagerAppRelyOnBTCError = helpers_1.createCustomErrorClass("ManagerAppRelyOnBTC"); -exports.ManagerAppDepInstallRequired = helpers_1.createCustomErrorClass("ManagerAppDepInstallRequired"); -exports.ManagerAppDepUninstallRequired = helpers_1.createCustomErrorClass("ManagerAppDepUninstallRequired"); -exports.ManagerDeviceLockedError = helpers_1.createCustomErrorClass("ManagerDeviceLocked"); -exports.ManagerFirmwareNotEnoughSpaceError = helpers_1.createCustomErrorClass("ManagerFirmwareNotEnoughSpace"); -exports.ManagerNotEnoughSpaceError = helpers_1.createCustomErrorClass("ManagerNotEnoughSpace"); -exports.ManagerUninstallBTCDep = helpers_1.createCustomErrorClass("ManagerUninstallBTCDep"); -exports.NetworkDown = helpers_1.createCustomErrorClass("NetworkDown"); -exports.NoAddressesFound = helpers_1.createCustomErrorClass("NoAddressesFound"); -exports.NotEnoughBalance = helpers_1.createCustomErrorClass("NotEnoughBalance"); -exports.NotEnoughBalanceToDelegate = helpers_1.createCustomErrorClass("NotEnoughBalanceToDelegate"); -exports.NotEnoughBalanceInParentAccount = helpers_1.createCustomErrorClass("NotEnoughBalanceInParentAccount"); -exports.NotEnoughSpendableBalance = helpers_1.createCustomErrorClass("NotEnoughSpendableBalance"); -exports.NotEnoughBalanceBecauseDestinationNotCreated = helpers_1.createCustomErrorClass("NotEnoughBalanceBecauseDestinationNotCreated"); -exports.NoAccessToCamera = helpers_1.createCustomErrorClass("NoAccessToCamera"); -exports.NotEnoughGas = helpers_1.createCustomErrorClass("NotEnoughGas"); -exports.NotSupportedLegacyAddress = helpers_1.createCustomErrorClass("NotSupportedLegacyAddress"); -exports.GasLessThanEstimate = helpers_1.createCustomErrorClass("GasLessThanEstimate"); -exports.PasswordsDontMatchError = helpers_1.createCustomErrorClass("PasswordsDontMatch"); -exports.PasswordIncorrectError = helpers_1.createCustomErrorClass("PasswordIncorrect"); -exports.RecommendSubAccountsToEmpty = helpers_1.createCustomErrorClass("RecommendSubAccountsToEmpty"); -exports.RecommendUndelegation = helpers_1.createCustomErrorClass("RecommendUndelegation"); -exports.TimeoutTagged = helpers_1.createCustomErrorClass("TimeoutTagged"); -exports.UnexpectedBootloader = helpers_1.createCustomErrorClass("UnexpectedBootloader"); -exports.MCUNotGenuineToDashboard = helpers_1.createCustomErrorClass("MCUNotGenuineToDashboard"); -exports.RecipientRequired = helpers_1.createCustomErrorClass("RecipientRequired"); -exports.UnavailableTezosOriginatedAccountReceive = helpers_1.createCustomErrorClass("UnavailableTezosOriginatedAccountReceive"); -exports.UnavailableTezosOriginatedAccountSend = helpers_1.createCustomErrorClass("UnavailableTezosOriginatedAccountSend"); -exports.UpdateFetchFileFail = helpers_1.createCustomErrorClass("UpdateFetchFileFail"); -exports.UpdateIncorrectHash = helpers_1.createCustomErrorClass("UpdateIncorrectHash"); -exports.UpdateIncorrectSig = helpers_1.createCustomErrorClass("UpdateIncorrectSig"); -exports.UpdateYourApp = helpers_1.createCustomErrorClass("UpdateYourApp"); -exports.UserRefusedDeviceNameChange = helpers_1.createCustomErrorClass("UserRefusedDeviceNameChange"); -exports.UserRefusedAddress = helpers_1.createCustomErrorClass("UserRefusedAddress"); -exports.UserRefusedFirmwareUpdate = helpers_1.createCustomErrorClass("UserRefusedFirmwareUpdate"); -exports.UserRefusedAllowManager = helpers_1.createCustomErrorClass("UserRefusedAllowManager"); -exports.UserRefusedOnDevice = helpers_1.createCustomErrorClass("UserRefusedOnDevice"); // TODO rename because it's just for transaction refusal -exports.TransportOpenUserCancelled = helpers_1.createCustomErrorClass("TransportOpenUserCancelled"); -exports.TransportInterfaceNotAvailable = helpers_1.createCustomErrorClass("TransportInterfaceNotAvailable"); -exports.TransportRaceCondition = helpers_1.createCustomErrorClass("TransportRaceCondition"); -exports.TransportWebUSBGestureRequired = helpers_1.createCustomErrorClass("TransportWebUSBGestureRequired"); -exports.DeviceShouldStayInApp = helpers_1.createCustomErrorClass("DeviceShouldStayInApp"); -exports.WebsocketConnectionError = helpers_1.createCustomErrorClass("WebsocketConnectionError"); -exports.WebsocketConnectionFailed = helpers_1.createCustomErrorClass("WebsocketConnectionFailed"); -exports.WrongDeviceForAccount = helpers_1.createCustomErrorClass("WrongDeviceForAccount"); -exports.WrongAppForCurrency = helpers_1.createCustomErrorClass("WrongAppForCurrency"); -exports.ETHAddressNonEIP = helpers_1.createCustomErrorClass("ETHAddressNonEIP"); -exports.CantScanQRCode = helpers_1.createCustomErrorClass("CantScanQRCode"); -exports.FeeNotLoaded = helpers_1.createCustomErrorClass("FeeNotLoaded"); -exports.FeeRequired = helpers_1.createCustomErrorClass("FeeRequired"); -exports.FeeTooHigh = helpers_1.createCustomErrorClass("FeeTooHigh"); -exports.SyncError = helpers_1.createCustomErrorClass("SyncError"); -exports.PairingFailed = helpers_1.createCustomErrorClass("PairingFailed"); -exports.GenuineCheckFailed = helpers_1.createCustomErrorClass("GenuineCheckFailed"); -exports.LedgerAPI4xx = helpers_1.createCustomErrorClass("LedgerAPI4xx"); -exports.LedgerAPI5xx = helpers_1.createCustomErrorClass("LedgerAPI5xx"); -exports.FirmwareOrAppUpdateRequired = helpers_1.createCustomErrorClass("FirmwareOrAppUpdateRequired"); -// db stuff, no need to translate -exports.NoDBPathGiven = helpers_1.createCustomErrorClass("NoDBPathGiven"); -exports.DBWrongPassword = helpers_1.createCustomErrorClass("DBWrongPassword"); -exports.DBNotReset = helpers_1.createCustomErrorClass("DBNotReset"); -/** - * TransportError is used for any generic transport errors. - * e.g. Error thrown when data received by exchanges are incorrect or if exchanged failed to communicate with the device for various reason. - */ -function TransportError(message, id) { - this.name = "TransportError"; - this.message = message; - this.stack = new Error().stack; - this.id = id; -} -exports.TransportError = TransportError; -TransportError.prototype = new Error(); -helpers_1.addCustomErrorDeserializer("TransportError", function (e) { return new TransportError(e.message, e.id); }); -exports.StatusCodes = { - PIN_REMAINING_ATTEMPTS: 0x63c0, - INCORRECT_LENGTH: 0x6700, - MISSING_CRITICAL_PARAMETER: 0x6800, - COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981, - SECURITY_STATUS_NOT_SATISFIED: 0x6982, - CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985, - INCORRECT_DATA: 0x6a80, - NOT_ENOUGH_MEMORY_SPACE: 0x6a84, - REFERENCED_DATA_NOT_FOUND: 0x6a88, - FILE_ALREADY_EXISTS: 0x6a89, - INCORRECT_P1_P2: 0x6b00, - INS_NOT_SUPPORTED: 0x6d00, - CLA_NOT_SUPPORTED: 0x6e00, - TECHNICAL_PROBLEM: 0x6f00, - OK: 0x9000, - MEMORY_PROBLEM: 0x9240, - NO_EF_SELECTED: 0x9400, - INVALID_OFFSET: 0x9402, - FILE_NOT_FOUND: 0x9404, - INCONSISTENT_FILE: 0x9408, - ALGORITHM_NOT_SUPPORTED: 0x9484, - INVALID_KCV: 0x9485, - CODE_NOT_INITIALIZED: 0x9802, - ACCESS_CONDITION_NOT_FULFILLED: 0x9804, - CONTRADICTION_SECRET_CODE_STATUS: 0x9808, - CONTRADICTION_INVALIDATION: 0x9810, - CODE_BLOCKED: 0x9840, - MAX_VALUE_REACHED: 0x9850, - GP_AUTH_FAILED: 0x6300, - LICENSING: 0x6f42, - HALTED: 0x6faa -}; -function getAltStatusMessage(code) { - switch (code) { - // improve text of most common errors - case 0x6700: - return "Incorrect length"; - case 0x6800: - return "Missing critical parameter"; - case 0x6982: - return "Security not satisfied (dongle locked or have invalid access rights)"; - case 0x6985: - return "Condition of use not satisfied (denied by the user?)"; - case 0x6a80: - return "Invalid data received"; - case 0x6b00: - return "Invalid parameter received"; - } - if (0x6f00 <= code && code <= 0x6fff) { - return "Internal error, please report"; - } -} -exports.getAltStatusMessage = getAltStatusMessage; -/** - * Error thrown when a device returned a non success status. - * the error.statusCode is one of the `StatusCodes` exported by this library. - */ -function TransportStatusError(statusCode) { - this.name = "TransportStatusError"; - var statusText = Object.keys(exports.StatusCodes).find(function (k) { return exports.StatusCodes[k] === statusCode; }) || - "UNKNOWN_ERROR"; - var smsg = getAltStatusMessage(statusCode) || statusText; - var statusCodeStr = statusCode.toString(16); - this.message = "Ledger device: " + smsg + " (0x" + statusCodeStr + ")"; - this.stack = new Error().stack; - this.statusCode = statusCode; - this.statusText = statusText; -} -exports.TransportStatusError = TransportStatusError; -TransportStatusError.prototype = new Error(); -helpers_1.addCustomErrorDeserializer("TransportStatusError", function (e) { return new TransportStatusError(e.statusCode); }); - -},{"./helpers":169}],171:[function(require,module,exports){ -(function (Buffer){ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -var __read = (this && this.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; -var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { - if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { - if (ar || !(i in from)) { - if (!ar) ar = Array.prototype.slice.call(from, 0, i); - ar[i] = from[i]; - } - } - return to.concat(ar || Array.prototype.slice.call(from)); -}; -var __values = (this && this.__values) || function(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -exports.__esModule = true; -exports.getAltStatusMessage = exports.StatusCodes = exports.TransportStatusError = exports.TransportError = void 0; -var events_1 = __importDefault(require("events")); -var errors_1 = require("@ledgerhq/errors"); -exports.TransportError = errors_1.TransportError; -exports.StatusCodes = errors_1.StatusCodes; -exports.getAltStatusMessage = errors_1.getAltStatusMessage; -exports.TransportStatusError = errors_1.TransportStatusError; -/** - * Transport defines the generic interface to share between node/u2f impl - * A **Descriptor** is a parametric type that is up to be determined for the implementation. - * it can be for instance an ID, an file path, a URL,... - */ -var Transport = /** @class */ (function () { - function Transport() { - var _this = this; - this.exchangeTimeout = 30000; - this.unresponsiveTimeout = 15000; - this.deviceModel = null; - this._events = new events_1["default"](); - /** - * wrapper on top of exchange to simplify work of the implementation. - * @param cla - * @param ins - * @param p1 - * @param p2 - * @param data - * @param statusList is a list of accepted status code (shorts). [0x9000] by default - * @return a Promise of response buffer - */ - this.send = function (cla, ins, p1, p2, data, statusList) { - if (data === void 0) { data = Buffer.alloc(0); } - if (statusList === void 0) { statusList = [errors_1.StatusCodes.OK]; } - return __awaiter(_this, void 0, void 0, function () { - var response, sw; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (data.length >= 256) { - throw new errors_1.TransportError("data.length exceed 256 bytes limit. Got: " + data.length, "DataLengthTooBig"); - } - return [4 /*yield*/, this.exchange(Buffer.concat([ - Buffer.from([cla, ins, p1, p2]), - Buffer.from([data.length]), - data, - ]))]; - case 1: - response = _a.sent(); - sw = response.readUInt16BE(response.length - 2); - if (!statusList.some(function (s) { return s === sw; })) { - throw new errors_1.TransportStatusError(sw); - } - return [2 /*return*/, response]; - } - }); - }); - }; - this.exchangeAtomicImpl = function (f) { return __awaiter(_this, void 0, void 0, function () { - var resolveBusy, busyPromise, unresponsiveReached, timeout, res; - var _this = this; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - if (this.exchangeBusyPromise) { - throw new errors_1.TransportRaceCondition("An action was already pending on the Ledger device. Please deny or reconnect."); - } - busyPromise = new Promise(function (r) { - resolveBusy = r; - }); - this.exchangeBusyPromise = busyPromise; - unresponsiveReached = false; - timeout = setTimeout(function () { - unresponsiveReached = true; - _this.emit("unresponsive"); - }, this.unresponsiveTimeout); - _a.label = 1; - case 1: - _a.trys.push([1, , 3, 4]); - return [4 /*yield*/, f()]; - case 2: - res = _a.sent(); - if (unresponsiveReached) { - this.emit("responsive"); - } - return [2 /*return*/, res]; - case 3: - clearTimeout(timeout); - if (resolveBusy) - resolveBusy(); - this.exchangeBusyPromise = null; - return [7 /*endfinally*/]; - case 4: return [2 /*return*/]; - } - }); - }); }; - this._appAPIlock = null; - } - /** - * low level api to communicate with the device - * This method is for implementations to implement but should not be directly called. - * Instead, the recommanded way is to use send() method - * @param apdu the data to send - * @return a Promise of response data - */ - Transport.prototype.exchange = function (_apdu) { - throw new Error("exchange not implemented"); - }; - /** - * set the "scramble key" for the next exchanges with the device. - * Each App can have a different scramble key and they internally will set it at instanciation. - * @param key the scramble key - */ - Transport.prototype.setScrambleKey = function (_key) { }; - /** - * close the exchange with the device. - * @return a Promise that ends when the transport is closed. - */ - Transport.prototype.close = function () { - return Promise.resolve(); - }; - /** - * Listen to an event on an instance of transport. - * Transport implementation can have specific events. Here is the common events: - * * `"disconnect"` : triggered if Transport is disconnected - */ - Transport.prototype.on = function (eventName, cb) { - this._events.on(eventName, cb); - }; - /** - * Stop listening to an event on an instance of transport. - */ - Transport.prototype.off = function (eventName, cb) { - this._events.removeListener(eventName, cb); - }; - Transport.prototype.emit = function (event) { - var _a; - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - (_a = this._events).emit.apply(_a, __spreadArray([event], __read(args), false)); - }; - /** - * Enable or not logs of the binary exchange - */ - Transport.prototype.setDebugMode = function () { - console.warn("setDebugMode is deprecated. use @ledgerhq/logs instead. No logs are emitted in this anymore."); - }; - /** - * Set a timeout (in milliseconds) for the exchange call. Only some transport might implement it. (e.g. U2F) - */ - Transport.prototype.setExchangeTimeout = function (exchangeTimeout) { - this.exchangeTimeout = exchangeTimeout; - }; - /** - * Define the delay before emitting "unresponsive" on an exchange that does not respond - */ - Transport.prototype.setExchangeUnresponsiveTimeout = function (unresponsiveTimeout) { - this.unresponsiveTimeout = unresponsiveTimeout; - }; - /** - * create() allows to open the first descriptor available or - * throw if there is none or if timeout is reached. - * This is a light helper, alternative to using listen() and open() (that you may need for any more advanced usecase) - * @example - TransportFoo.create().then(transport => ...) - */ - Transport.create = function (openTimeout, listenTimeout) { - var _this = this; - if (openTimeout === void 0) { openTimeout = 3000; } - return new Promise(function (resolve, reject) { - var found = false; - var sub = _this.listen({ - next: function (e) { - found = true; - if (sub) - sub.unsubscribe(); - if (listenTimeoutId) - clearTimeout(listenTimeoutId); - _this.open(e.descriptor, openTimeout).then(resolve, reject); - }, - error: function (e) { - if (listenTimeoutId) - clearTimeout(listenTimeoutId); - reject(e); - }, - complete: function () { - if (listenTimeoutId) - clearTimeout(listenTimeoutId); - if (!found) { - reject(new errors_1.TransportError(_this.ErrorMessage_NoDeviceFound, "NoDeviceFound")); - } - } - }); - var listenTimeoutId = listenTimeout - ? setTimeout(function () { - sub.unsubscribe(); - reject(new errors_1.TransportError(_this.ErrorMessage_ListenTimeout, "ListenTimeout")); - }, listenTimeout) - : null; - }); - }; - Transport.prototype.decorateAppAPIMethods = function (self, methods, scrambleKey) { - var e_1, _a; - try { - for (var methods_1 = __values(methods), methods_1_1 = methods_1.next(); !methods_1_1.done; methods_1_1 = methods_1.next()) { - var methodName = methods_1_1.value; - self[methodName] = this.decorateAppAPIMethod(methodName, self[methodName], self, scrambleKey); - } - } - catch (e_1_1) { e_1 = { error: e_1_1 }; } - finally { - try { - if (methods_1_1 && !methods_1_1.done && (_a = methods_1["return"])) _a.call(methods_1); - } - finally { if (e_1) throw e_1.error; } - } - }; - Transport.prototype.decorateAppAPIMethod = function (methodName, f, ctx, scrambleKey) { - var _this = this; - return function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - return __awaiter(_this, void 0, void 0, function () { - var _appAPIlock; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - _appAPIlock = this._appAPIlock; - if (_appAPIlock) { - return [2 /*return*/, Promise.reject(new errors_1.TransportError("Ledger Device is busy (lock " + _appAPIlock + ")", "TransportLocked"))]; - } - _a.label = 1; - case 1: - _a.trys.push([1, , 3, 4]); - this._appAPIlock = methodName; - this.setScrambleKey(scrambleKey); - return [4 /*yield*/, f.apply(ctx, args)]; - case 2: return [2 /*return*/, _a.sent()]; - case 3: - this._appAPIlock = null; - return [7 /*endfinally*/]; - case 4: return [2 /*return*/]; - } - }); - }); - }; - }; - Transport.ErrorMessage_ListenTimeout = "No Ledger device found (timeout)"; - Transport.ErrorMessage_NoDeviceFound = "No Ledger device found"; - return Transport; -}()); -exports["default"] = Transport; - -}).call(this,require("buffer").Buffer) -},{"@ledgerhq/errors":170,"buffer":226,"events":248}],172:[function(require,module,exports){ -arguments[4][131][0].apply(exports,arguments) -},{"dup":131}],173:[function(require,module,exports){ -const ANY = Symbol('SemVer ANY') -// hoisted class for cyclic dependency -class Comparator { - static get ANY () { - return ANY - } - constructor (comp, options) { - options = parseOptions(options) - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } - } - - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) - - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } - - debug('comp', this) - } - - parse (comp) { - const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const m = comp.match(r) - - if (!m) { - throw new TypeError(`Invalid comparator: ${comp}`) - } - - this.operator = m[1] !== undefined ? m[1] : '' - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } - } - - toString () { - return this.value - } - - test (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY || version === ANY) { - return true - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - return cmp(version, this.operator, this.semver, this.options) - } - - intersects (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (this.operator === '') { - if (this.value === '') { - return true - } - return new Range(comp.value, options).test(this.value) - } else if (comp.operator === '') { - if (comp.value === '') { - return true - } - return new Range(this.value, options).test(comp.semver) - } - - const sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - const sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - const sameSemVer = this.semver.version === comp.semver.version - const differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - const oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<') - const oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>') - - return ( - sameDirectionIncreasing || - sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || - oppositeDirectionsGreaterThan - ) - } -} - -module.exports = Comparator - -const parseOptions = require('../internal/parse-options') -const {re, t} = require('../internal/re') -const cmp = require('../functions/cmp') -const debug = require('../internal/debug') -const SemVer = require('./semver') -const Range = require('./range') - -},{"../functions/cmp":177,"../internal/debug":202,"../internal/parse-options":204,"../internal/re":205,"./range":174,"./semver":175}],174:[function(require,module,exports){ -// hoisted class for cyclic dependency -class Range { - constructor (range, options) { - options = parseOptions(options) - - if (range instanceof Range) { - if ( - range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease - ) { - return range - } else { - return new Range(range.raw, options) - } - } - - if (range instanceof Comparator) { - // just put it in the set and return - this.raw = range.value - this.set = [[range]] - this.format() - return this - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range - .split(/\s*\|\|\s*/) - // map the range to a 2d array of comparators - .map(range => this.parseRange(range.trim())) - // throw out any comparator lists that are empty - // this generally means that it was not a valid range, which is allowed - // in loose mode, but will still throw if the WHOLE range is invalid. - .filter(c => c.length) - - if (!this.set.length) { - throw new TypeError(`Invalid SemVer Range: ${range}`) - } - - // if we have any that are not the null set, throw out null sets. - if (this.set.length > 1) { - // keep the first one, in case they're all null sets - const first = this.set[0] - this.set = this.set.filter(c => !isNullSet(c[0])) - if (this.set.length === 0) - this.set = [first] - else if (this.set.length > 1) { - // if we have any that are *, then the range is just * - for (const c of this.set) { - if (c.length === 1 && isAny(c[0])) { - this.set = [c] - break - } - } - } - } - - this.format() - } - - format () { - this.range = this.set - .map((comps) => { - return comps.join(' ').trim() - }) - .join('||') - .trim() - return this.range - } - - toString () { - return this.range - } - - parseRange (range) { - range = range.trim() - - // memoize range parsing for performance. - // this is a very hot path, and fully deterministic. - const memoOpts = Object.keys(this.options).join(',') - const memoKey = `parseRange:${memoOpts}:${range}` - const cached = cache.get(memoKey) - if (cached) - return cached - - const loose = this.options.loose - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE] - range = range.replace(hr, hyphenReplace(this.options.includePrerelease)) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[t.COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[t.TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[t.CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR] - const rangeList = range - .split(' ') - .map(comp => parseComparator(comp, this.options)) - .join(' ') - .split(/\s+/) - // >=0.0.0 is equivalent to * - .map(comp => replaceGTE0(comp, this.options)) - // in loose mode, throw out any that are not valid comparators - .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true) - .map(comp => new Comparator(comp, this.options)) - - // if any comparators are the null set, then replace with JUST null set - // if more than one comparator, remove any * comparators - // also, don't include the same comparator more than once - const l = rangeList.length - const rangeMap = new Map() - for (const comp of rangeList) { - if (isNullSet(comp)) - return [comp] - rangeMap.set(comp.value, comp) - } - if (rangeMap.size > 1 && rangeMap.has('')) - rangeMap.delete('') - - const result = [...rangeMap.values()] - cache.set(memoKey, result) - return result - } - - intersects (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } - - return this.set.some((thisComparators) => { - return ( - isSatisfiable(thisComparators, options) && - range.set.some((rangeComparators) => { - return ( - isSatisfiable(rangeComparators, options) && - thisComparators.every((thisComparator) => { - return rangeComparators.every((rangeComparator) => { - return thisComparator.intersects(rangeComparator, options) - }) - }) - ) - }) - ) - }) - } - - // if ANY of the sets match ALL of its comparators, then pass - test (version) { - if (!version) { - return false - } - - if (typeof version === 'string') { - try { - version = new SemVer(version, this.options) - } catch (er) { - return false - } - } - - for (let i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false - } -} -module.exports = Range - -const LRU = require('lru-cache') -const cache = new LRU({ max: 1000 }) - -const parseOptions = require('../internal/parse-options') -const Comparator = require('./comparator') -const debug = require('../internal/debug') -const SemVer = require('./semver') -const { - re, - t, - comparatorTrimReplace, - tildeTrimReplace, - caretTrimReplace -} = require('../internal/re') - -const isNullSet = c => c.value === '<0.0.0-0' -const isAny = c => c.value === '' - -// take a set of comparators and determine whether there -// exists a version which can satisfy it -const isSatisfiable = (comparators, options) => { - let result = true - const remainingComparators = comparators.slice() - let testComparator = remainingComparators.pop() - - while (result && remainingComparators.length) { - result = remainingComparators.every((otherComparator) => { - return testComparator.intersects(otherComparator, options) - }) - - testComparator = remainingComparators.pop() - } - - return result -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -const parseComparator = (comp, options) => { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} - -const isX = id => !id || id.toLowerCase() === 'x' || id === '*' - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0 -const replaceTildes = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceTilde(comp, options) - }).join(' ') - -const replaceTilde = (comp, options) => { - const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE] - return comp.replace(r, (_, M, m, p, pr) => { - debug('tilde', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0 <${+M + 1}.0.0-0` - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0-0 - ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0` - } else if (pr) { - debug('replaceTilde pr', pr) - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } else { - // ~1.2.3 == >=1.2.3 <1.3.0-0 - ret = `>=${M}.${m}.${p - } <${M}.${+m + 1}.0-0` - } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0 -// ^1.2.3 --> >=1.2.3 <2.0.0-0 -// ^1.2.0 --> >=1.2.0 <2.0.0-0 -const replaceCarets = (comp, options) => - comp.trim().split(/\s+/).map((comp) => { - return replaceCaret(comp, options) - }).join(' ') - -const replaceCaret = (comp, options) => { - debug('caret', comp, options) - const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET] - const z = options.includePrerelease ? '-0' : '' - return comp.replace(r, (_, M, m, p, pr) => { - debug('caret', comp, _, M, m, p, pr) - let ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0` - } else if (isX(p)) { - if (M === '0') { - ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0` - } else { - ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0` - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p}-${pr - } <${+M + 1}.0.0-0` - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = `>=${M}.${m}.${p - }${z} <${M}.${m}.${+p + 1}-0` - } else { - ret = `>=${M}.${m}.${p - }${z} <${M}.${+m + 1}.0-0` - } - } else { - ret = `>=${M}.${m}.${p - } <${+M + 1}.0.0-0` - } - } - - debug('caret return', ret) - return ret - }) -} - -const replaceXRanges = (comp, options) => { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map((comp) => { - return replaceXRange(comp, options) - }).join(' ') -} - -const replaceXRange = (comp, options) => { - comp = comp.trim() - const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE] - return comp.replace(r, (ret, gtlt, M, m, p, pr) => { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - const xM = isX(M) - const xm = xM || isX(m) - const xp = xm || isX(p) - const anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' - } - - // if we're including prereleases in the match, then we need - // to fix this to -0, the lowest possible prerelease value - pr = options.includePrerelease ? '-0' : '' - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0-0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 - } - } - - if (gtlt === '<') - pr = '-0' - - ret = `${gtlt + M}.${m}.${p}${pr}` - } else if (xm) { - ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0` - } else if (xp) { - ret = `>=${M}.${m}.0${pr - } <${M}.${+m + 1}.0-0` - } - - debug('xRange return', ret) - - return ret - }) -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -const replaceStars = (comp, options) => { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[t.STAR], '') -} - -const replaceGTE0 = (comp, options) => { - debug('replaceGTE0', comp, options) - return comp.trim() - .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '') -} - -// This function is passed to string.replace(re[t.HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0-0 -const hyphenReplace = incPr => ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) => { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = `>=${fM}.0.0${incPr ? '-0' : ''}` - } else if (isX(fp)) { - from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}` - } else if (fpr) { - from = `>=${from}` - } else { - from = `>=${from}${incPr ? '-0' : ''}` - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = `<${+tM + 1}.0.0-0` - } else if (isX(tp)) { - to = `<${tM}.${+tm + 1}.0-0` - } else if (tpr) { - to = `<=${tM}.${tm}.${tp}-${tpr}` - } else if (incPr) { - to = `<${tM}.${tm}.${+tp + 1}-0` - } else { - to = `<=${to}` - } - - return (`${from} ${to}`).trim() -} - -const testSet = (set, version, options) => { - for (let i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (let i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === Comparator.ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - const allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true -} - -},{"../internal/debug":202,"../internal/parse-options":204,"../internal/re":205,"./comparator":173,"./semver":175,"lru-cache":265}],175:[function(require,module,exports){ -const debug = require('../internal/debug') -const { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants') -const { re, t } = require('../internal/re') - -const parseOptions = require('../internal/parse-options') -const { compareIdentifiers } = require('../internal/identifiers') -class SemVer { - constructor (version, options) { - options = parseOptions(options) - - if (version instanceof SemVer) { - if (version.loose === !!options.loose && - version.includePrerelease === !!options.includePrerelease) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError(`Invalid Version: ${version}`) - } - - if (version.length > MAX_LENGTH) { - throw new TypeError( - `version is longer than ${MAX_LENGTH} characters` - ) - } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - // this isn't actually relevant for versions, but keep it so that we - // don't run into trouble passing this.options around. - this.includePrerelease = !!options.includePrerelease - - const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]) - - if (!m) { - throw new TypeError(`Invalid Version: ${version}`) - } - - this.raw = version - - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map((id) => { - if (/^[0-9]+$/.test(id)) { - const num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } - - this.build = m[5] ? m[5].split('.') : [] - this.format() - } - - format () { - this.version = `${this.major}.${this.minor}.${this.patch}` - if (this.prerelease.length) { - this.version += `-${this.prerelease.join('.')}` - } - return this.version - } - - toString () { - return this.version - } - - compare (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - if (typeof other === 'string' && other === this.version) { - return 0 - } - other = new SemVer(other, this.options) - } - - if (other.version === this.version) { - return 0 - } - - return this.compareMain(other) || this.comparePre(other) - } - - compareMain (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return ( - compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) - ) - } - - comparePre (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - let i = 0 - do { - const a = this.prerelease[i] - const b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - compareBuild (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - let i = 0 - do { - const a = this.build[i] - const b = other.build[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) - } - - // preminor will bump the version up to the next minor release, and immediately - // down to pre-release. premajor and prepatch work the same way. - inc (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if ( - this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0 - ) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - let i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break - - default: - throw new Error(`invalid increment argument: ${release}`) - } - this.format() - this.raw = this.version - return this - } -} - -module.exports = SemVer - -},{"../internal/constants":201,"../internal/debug":202,"../internal/identifiers":203,"../internal/parse-options":204,"../internal/re":205}],176:[function(require,module,exports){ -const parse = require('./parse') -const clean = (version, options) => { - const s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} -module.exports = clean - -},{"./parse":192}],177:[function(require,module,exports){ -const eq = require('./eq') -const neq = require('./neq') -const gt = require('./gt') -const gte = require('./gte') -const lt = require('./lt') -const lte = require('./lte') - -const cmp = (a, op, b, loose) => { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError(`Invalid operator: ${op}`) - } -} -module.exports = cmp - -},{"./eq":183,"./gt":184,"./gte":185,"./lt":187,"./lte":188,"./neq":191}],178:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const parse = require('./parse') -const {re, t} = require('../internal/re') - -const coerce = (version, options) => { - if (version instanceof SemVer) { - return version - } - - if (typeof version === 'number') { - version = String(version) - } - - if (typeof version !== 'string') { - return null - } - - options = options || {} - - let match = null - if (!options.rtl) { - match = version.match(re[t.COERCE]) - } else { - // Find the right-most coercible string that does not share - // a terminus with a more left-ward coercible string. - // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4' - // - // Walk through the string checking with a /g regexp - // Manually set the index so as to pick up overlapping matches. - // Stop when we get a match that ends at the string end, since no - // coercible string can be more right-ward without the same terminus. - let next - while ((next = re[t.COERCERTL].exec(version)) && - (!match || match.index + match[0].length !== version.length) - ) { - if (!match || - next.index + next[0].length !== match.index + match[0].length) { - match = next - } - re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length - } - // leave it in a clean state - re[t.COERCERTL].lastIndex = -1 - } - - if (match === null) - return null - - return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options) -} -module.exports = coerce - -},{"../classes/semver":175,"../internal/re":205,"./parse":192}],179:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const compareBuild = (a, b, loose) => { - const versionA = new SemVer(a, loose) - const versionB = new SemVer(b, loose) - return versionA.compare(versionB) || versionA.compareBuild(versionB) -} -module.exports = compareBuild - -},{"../classes/semver":175}],180:[function(require,module,exports){ -const compare = require('./compare') -const compareLoose = (a, b) => compare(a, b, true) -module.exports = compareLoose - -},{"./compare":181}],181:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const compare = (a, b, loose) => - new SemVer(a, loose).compare(new SemVer(b, loose)) - -module.exports = compare - -},{"../classes/semver":175}],182:[function(require,module,exports){ -const parse = require('./parse') -const eq = require('./eq') - -const diff = (version1, version2) => { - if (eq(version1, version2)) { - return null - } else { - const v1 = parse(version1) - const v2 = parse(version2) - const hasPre = v1.prerelease.length || v2.prerelease.length - const prefix = hasPre ? 'pre' : '' - const defaultResult = hasPre ? 'prerelease' : '' - for (const key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} -module.exports = diff - -},{"./eq":183,"./parse":192}],183:[function(require,module,exports){ -const compare = require('./compare') -const eq = (a, b, loose) => compare(a, b, loose) === 0 -module.exports = eq - -},{"./compare":181}],184:[function(require,module,exports){ -const compare = require('./compare') -const gt = (a, b, loose) => compare(a, b, loose) > 0 -module.exports = gt - -},{"./compare":181}],185:[function(require,module,exports){ -const compare = require('./compare') -const gte = (a, b, loose) => compare(a, b, loose) >= 0 -module.exports = gte - -},{"./compare":181}],186:[function(require,module,exports){ -const SemVer = require('../classes/semver') - -const inc = (version, release, options, identifier) => { - if (typeof (options) === 'string') { - identifier = options - options = undefined - } - - try { - return new SemVer(version, options).inc(release, identifier).version - } catch (er) { - return null - } -} -module.exports = inc - -},{"../classes/semver":175}],187:[function(require,module,exports){ -const compare = require('./compare') -const lt = (a, b, loose) => compare(a, b, loose) < 0 -module.exports = lt - -},{"./compare":181}],188:[function(require,module,exports){ -const compare = require('./compare') -const lte = (a, b, loose) => compare(a, b, loose) <= 0 -module.exports = lte - -},{"./compare":181}],189:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const major = (a, loose) => new SemVer(a, loose).major -module.exports = major - -},{"../classes/semver":175}],190:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const minor = (a, loose) => new SemVer(a, loose).minor -module.exports = minor - -},{"../classes/semver":175}],191:[function(require,module,exports){ -const compare = require('./compare') -const neq = (a, b, loose) => compare(a, b, loose) !== 0 -module.exports = neq - -},{"./compare":181}],192:[function(require,module,exports){ -const {MAX_LENGTH} = require('../internal/constants') -const { re, t } = require('../internal/re') -const SemVer = require('../classes/semver') - -const parseOptions = require('../internal/parse-options') -const parse = (version, options) => { - options = parseOptions(options) - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - const r = options.loose ? re[t.LOOSE] : re[t.FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -module.exports = parse - -},{"../classes/semver":175,"../internal/constants":201,"../internal/parse-options":204,"../internal/re":205}],193:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const patch = (a, loose) => new SemVer(a, loose).patch -module.exports = patch - -},{"../classes/semver":175}],194:[function(require,module,exports){ -const parse = require('./parse') -const prerelease = (version, options) => { - const parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} -module.exports = prerelease - -},{"./parse":192}],195:[function(require,module,exports){ -const compare = require('./compare') -const rcompare = (a, b, loose) => compare(b, a, loose) -module.exports = rcompare - -},{"./compare":181}],196:[function(require,module,exports){ -const compareBuild = require('./compare-build') -const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose)) -module.exports = rsort - -},{"./compare-build":179}],197:[function(require,module,exports){ -const Range = require('../classes/range') -const satisfies = (version, range, options) => { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} -module.exports = satisfies - -},{"../classes/range":174}],198:[function(require,module,exports){ -const compareBuild = require('./compare-build') -const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose)) -module.exports = sort - -},{"./compare-build":179}],199:[function(require,module,exports){ -const parse = require('./parse') -const valid = (version, options) => { - const v = parse(version, options) - return v ? v.version : null -} -module.exports = valid - -},{"./parse":192}],200:[function(require,module,exports){ -// just pre-load all the stuff that index.js lazily exports -const internalRe = require('./internal/re') -module.exports = { - re: internalRe.re, - src: internalRe.src, - tokens: internalRe.t, - SEMVER_SPEC_VERSION: require('./internal/constants').SEMVER_SPEC_VERSION, - SemVer: require('./classes/semver'), - compareIdentifiers: require('./internal/identifiers').compareIdentifiers, - rcompareIdentifiers: require('./internal/identifiers').rcompareIdentifiers, - parse: require('./functions/parse'), - valid: require('./functions/valid'), - clean: require('./functions/clean'), - inc: require('./functions/inc'), - diff: require('./functions/diff'), - major: require('./functions/major'), - minor: require('./functions/minor'), - patch: require('./functions/patch'), - prerelease: require('./functions/prerelease'), - compare: require('./functions/compare'), - rcompare: require('./functions/rcompare'), - compareLoose: require('./functions/compare-loose'), - compareBuild: require('./functions/compare-build'), - sort: require('./functions/sort'), - rsort: require('./functions/rsort'), - gt: require('./functions/gt'), - lt: require('./functions/lt'), - eq: require('./functions/eq'), - neq: require('./functions/neq'), - gte: require('./functions/gte'), - lte: require('./functions/lte'), - cmp: require('./functions/cmp'), - coerce: require('./functions/coerce'), - Comparator: require('./classes/comparator'), - Range: require('./classes/range'), - satisfies: require('./functions/satisfies'), - toComparators: require('./ranges/to-comparators'), - maxSatisfying: require('./ranges/max-satisfying'), - minSatisfying: require('./ranges/min-satisfying'), - minVersion: require('./ranges/min-version'), - validRange: require('./ranges/valid'), - outside: require('./ranges/outside'), - gtr: require('./ranges/gtr'), - ltr: require('./ranges/ltr'), - intersects: require('./ranges/intersects'), - simplifyRange: require('./ranges/simplify'), - subset: require('./ranges/subset'), -} - -},{"./classes/comparator":173,"./classes/range":174,"./classes/semver":175,"./functions/clean":176,"./functions/cmp":177,"./functions/coerce":178,"./functions/compare":181,"./functions/compare-build":179,"./functions/compare-loose":180,"./functions/diff":182,"./functions/eq":183,"./functions/gt":184,"./functions/gte":185,"./functions/inc":186,"./functions/lt":187,"./functions/lte":188,"./functions/major":189,"./functions/minor":190,"./functions/neq":191,"./functions/parse":192,"./functions/patch":193,"./functions/prerelease":194,"./functions/rcompare":195,"./functions/rsort":196,"./functions/satisfies":197,"./functions/sort":198,"./functions/valid":199,"./internal/constants":201,"./internal/identifiers":203,"./internal/re":205,"./ranges/gtr":206,"./ranges/intersects":207,"./ranges/ltr":208,"./ranges/max-satisfying":209,"./ranges/min-satisfying":210,"./ranges/min-version":211,"./ranges/outside":212,"./ranges/simplify":213,"./ranges/subset":214,"./ranges/to-comparators":215,"./ranges/valid":216}],201:[function(require,module,exports){ -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -const SEMVER_SPEC_VERSION = '2.0.0' - -const MAX_LENGTH = 256 -const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -const MAX_SAFE_COMPONENT_LENGTH = 16 - -module.exports = { - SEMVER_SPEC_VERSION, - MAX_LENGTH, - MAX_SAFE_INTEGER, - MAX_SAFE_COMPONENT_LENGTH -} - -},{}],202:[function(require,module,exports){ -(function (process){ -const debug = ( - typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG) -) ? (...args) => console.error('SEMVER', ...args) - : () => {} - -module.exports = debug - -}).call(this,require('_process')) -},{"_process":268}],203:[function(require,module,exports){ -const numeric = /^[0-9]+$/ -const compareIdentifiers = (a, b) => { - const anum = numeric.test(a) - const bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b - } - - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} - -const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a) - -module.exports = { - compareIdentifiers, - rcompareIdentifiers -} - -},{}],204:[function(require,module,exports){ -// parse out just the options we care about so we always get a consistent -// obj with keys in a consistent order. -const opts = ['includePrerelease', 'loose', 'rtl'] -const parseOptions = options => - !options ? {} - : typeof options !== 'object' ? { loose: true } - : opts.filter(k => options[k]).reduce((options, k) => { - options[k] = true - return options - }, {}) -module.exports = parseOptions - -},{}],205:[function(require,module,exports){ -const { MAX_SAFE_COMPONENT_LENGTH } = require('./constants') -const debug = require('./debug') -exports = module.exports = {} - -// The actual regexps go on exports.re -const re = exports.re = [] -const src = exports.src = [] -const t = exports.t = {} -let R = 0 - -const createToken = (name, value, isGlobal) => { - const index = R++ - debug(index, value) - t[name] = index - src[index] = value - re[index] = new RegExp(value, isGlobal ? 'g' : undefined) -} - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*') -createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+') - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*') - -// ## Main Version -// Three dot-separated numeric identifiers. - -createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})\\.` + - `(${src[t.NUMERICIDENTIFIER]})`) - -createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + - `(${src[t.NUMERICIDENTIFIERLOOSE]})`) - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER] -}|${src[t.NONNUMERICIDENTIFIER]})`) - -createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE] -}|${src[t.NONNUMERICIDENTIFIER]})`) - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER] -}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`) - -createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE] -}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`) - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+') - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER] -}(?:\\.${src[t.BUILDIDENTIFIER]})*))`) - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -createToken('FULLPLAIN', `v?${src[t.MAINVERSION] -}${src[t.PRERELEASE]}?${ - src[t.BUILD]}?`) - -createToken('FULL', `^${src[t.FULLPLAIN]}$`) - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE] -}${src[t.PRERELEASELOOSE]}?${ - src[t.BUILD]}?`) - -createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`) - -createToken('GTLT', '((?:<|>)?=?)') - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`) -createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`) - -createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + - `(?:${src[t.PRERELEASE]})?${ - src[t.BUILD]}?` + - `)?)?`) - -createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + - `(?:${src[t.PRERELEASELOOSE]})?${ - src[t.BUILD]}?` + - `)?)?`) - -createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`) -createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`) - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -createToken('COERCE', `${'(^|[^\\d])' + - '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + - `(?:$|[^\\d])`) -createToken('COERCERTL', src[t.COERCE], true) - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -createToken('LONETILDE', '(?:~>?)') - -createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true) -exports.tildeTrimReplace = '$1~' - -createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`) -createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`) - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -createToken('LONECARET', '(?:\\^)') - -createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true) -exports.caretTrimReplace = '$1^' - -createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`) -createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`) - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`) -createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`) - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT] -}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true) -exports.comparatorTrimReplace = '$1$2$3' - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAIN]})` + - `\\s*$`) - -createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + - `\\s+-\\s+` + - `(${src[t.XRANGEPLAINLOOSE]})` + - `\\s*$`) - -// Star ranges basically just allow anything at all. -createToken('STAR', '(<|>)?=?\\s*\\*') -// >=0.0.0 is like a star -createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$') -createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$') - -},{"./constants":201,"./debug":202}],206:[function(require,module,exports){ -// Determine if version is greater than all the versions possible in the range. -const outside = require('./outside') -const gtr = (version, range, options) => outside(version, range, '>', options) -module.exports = gtr - -},{"./outside":212}],207:[function(require,module,exports){ -const Range = require('../classes/range') -const intersects = (r1, r2, options) => { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} -module.exports = intersects - -},{"../classes/range":174}],208:[function(require,module,exports){ -const outside = require('./outside') -// Determine if version is less than all the versions possible in the range -const ltr = (version, range, options) => outside(version, range, '<', options) -module.exports = ltr - -},{"./outside":212}],209:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const Range = require('../classes/range') - -const maxSatisfying = (versions, range, options) => { - let max = null - let maxSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max -} -module.exports = maxSatisfying - -},{"../classes/range":174,"../classes/semver":175}],210:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const Range = require('../classes/range') -const minSatisfying = (versions, range, options) => { - let min = null - let minSV = null - let rangeObj = null - try { - rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach((v) => { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} -module.exports = minSatisfying - -},{"../classes/range":174,"../classes/semver":175}],211:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const Range = require('../classes/range') -const gt = require('../functions/gt') - -const minVersion = (range, loose) => { - range = new Range(range, loose) - - let minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } - - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } - - minver = null - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let setMin = null - comparators.forEach((comparator) => { - // Clone to avoid manipulating the comparator's semver object. - const compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!setMin || gt(compver, setMin)) { - setMin = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error(`Unexpected operation: ${comparator.operator}`) - } - }) - if (setMin && (!minver || gt(minver, setMin))) - minver = setMin - } - - if (minver && range.test(minver)) { - return minver - } - - return null -} -module.exports = minVersion - -},{"../classes/range":174,"../classes/semver":175,"../functions/gt":184}],212:[function(require,module,exports){ -const SemVer = require('../classes/semver') -const Comparator = require('../classes/comparator') -const {ANY} = Comparator -const Range = require('../classes/range') -const satisfies = require('../functions/satisfies') -const gt = require('../functions/gt') -const lt = require('../functions/lt') -const lte = require('../functions/lte') -const gte = require('../functions/gte') - -const outside = (version, range, hilo, options) => { - version = new SemVer(version, options) - range = new Range(range, options) - - let gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisfies the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (let i = 0; i < range.set.length; ++i) { - const comparators = range.set[i] - - let high = null - let low = null - - comparators.forEach((comparator) => { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -module.exports = outside - -},{"../classes/comparator":173,"../classes/range":174,"../classes/semver":175,"../functions/gt":184,"../functions/gte":185,"../functions/lt":187,"../functions/lte":188,"../functions/satisfies":197}],213:[function(require,module,exports){ -// given a set of versions and a range, create a "simplified" range -// that includes the same versions that the original range does -// If the original range is shorter than the simplified one, return that. -const satisfies = require('../functions/satisfies.js') -const compare = require('../functions/compare.js') -module.exports = (versions, range, options) => { - const set = [] - let min = null - let prev = null - const v = versions.sort((a, b) => compare(a, b, options)) - for (const version of v) { - const included = satisfies(version, range, options) - if (included) { - prev = version - if (!min) - min = version - } else { - if (prev) { - set.push([min, prev]) - } - prev = null - min = null - } - } - if (min) - set.push([min, null]) - - const ranges = [] - for (const [min, max] of set) { - if (min === max) - ranges.push(min) - else if (!max && min === v[0]) - ranges.push('*') - else if (!max) - ranges.push(`>=${min}`) - else if (min === v[0]) - ranges.push(`<=${max}`) - else - ranges.push(`${min} - ${max}`) - } - const simplified = ranges.join(' || ') - const original = typeof range.raw === 'string' ? range.raw : String(range) - return simplified.length < original.length ? simplified : range -} - -},{"../functions/compare.js":181,"../functions/satisfies.js":197}],214:[function(require,module,exports){ -const Range = require('../classes/range.js') -const Comparator = require('../classes/comparator.js') -const { ANY } = Comparator -const satisfies = require('../functions/satisfies.js') -const compare = require('../functions/compare.js') - -// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff: -// - Every simple range `r1, r2, ...` is a null set, OR -// - Every simple range `r1, r2, ...` which is not a null set is a subset of -// some `R1, R2, ...` -// -// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff: -// - If c is only the ANY comparator -// - If C is only the ANY comparator, return true -// - Else if in prerelease mode, return false -// - else replace c with `[>=0.0.0]` -// - If C is only the ANY comparator -// - if in prerelease mode, return true -// - else replace C with `[>=0.0.0]` -// - Let EQ be the set of = comparators in c -// - If EQ is more than one, return true (null set) -// - Let GT be the highest > or >= comparator in c -// - Let LT be the lowest < or <= comparator in c -// - If GT and LT, and GT.semver > LT.semver, return true (null set) -// - If any C is a = range, and GT or LT are set, return false -// - If EQ -// - If GT, and EQ does not satisfy GT, return true (null set) -// - If LT, and EQ does not satisfy LT, return true (null set) -// - If EQ satisfies every C, return true -// - Else return false -// - If GT -// - If GT.semver is lower than any > or >= comp in C, return false -// - If GT is >=, and GT.semver does not satisfy every C, return false -// - If GT.semver has a prerelease, and not in prerelease mode -// - If no C has a prerelease and the GT.semver tuple, return false -// - If LT -// - If LT.semver is greater than any < or <= comp in C, return false -// - If LT is <=, and LT.semver does not satisfy every C, return false -// - If GT.semver has a prerelease, and not in prerelease mode -// - If no C has a prerelease and the LT.semver tuple, return false -// - Else return true - -const subset = (sub, dom, options = {}) => { - if (sub === dom) - return true - - sub = new Range(sub, options) - dom = new Range(dom, options) - let sawNonNull = false - - OUTER: for (const simpleSub of sub.set) { - for (const simpleDom of dom.set) { - const isSub = simpleSubset(simpleSub, simpleDom, options) - sawNonNull = sawNonNull || isSub !== null - if (isSub) - continue OUTER - } - // the null set is a subset of everything, but null simple ranges in - // a complex range should be ignored. so if we saw a non-null range, - // then we know this isn't a subset, but if EVERY simple range was null, - // then it is a subset. - if (sawNonNull) - return false - } - return true -} - -const simpleSubset = (sub, dom, options) => { - if (sub === dom) - return true - - if (sub.length === 1 && sub[0].semver === ANY) { - if (dom.length === 1 && dom[0].semver === ANY) - return true - else if (options.includePrerelease) - sub = [ new Comparator('>=0.0.0-0') ] - else - sub = [ new Comparator('>=0.0.0') ] - } - - if (dom.length === 1 && dom[0].semver === ANY) { - if (options.includePrerelease) - return true - else - dom = [ new Comparator('>=0.0.0') ] - } - - const eqSet = new Set() - let gt, lt - for (const c of sub) { - if (c.operator === '>' || c.operator === '>=') - gt = higherGT(gt, c, options) - else if (c.operator === '<' || c.operator === '<=') - lt = lowerLT(lt, c, options) - else - eqSet.add(c.semver) - } - - if (eqSet.size > 1) - return null - - let gtltComp - if (gt && lt) { - gtltComp = compare(gt.semver, lt.semver, options) - if (gtltComp > 0) - return null - else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) - return null - } - - // will iterate one or zero times - for (const eq of eqSet) { - if (gt && !satisfies(eq, String(gt), options)) - return null - - if (lt && !satisfies(eq, String(lt), options)) - return null - - for (const c of dom) { - if (!satisfies(eq, String(c), options)) - return false - } - - return true - } - - let higher, lower - let hasDomLT, hasDomGT - // if the subset has a prerelease, we need a comparator in the superset - // with the same tuple and a prerelease, or it's not a subset - let needDomLTPre = lt && - !options.includePrerelease && - lt.semver.prerelease.length ? lt.semver : false - let needDomGTPre = gt && - !options.includePrerelease && - gt.semver.prerelease.length ? gt.semver : false - // exception: <1.2.3-0 is the same as <1.2.3 - if (needDomLTPre && needDomLTPre.prerelease.length === 1 && - lt.operator === '<' && needDomLTPre.prerelease[0] === 0) { - needDomLTPre = false - } - - for (const c of dom) { - hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=' - hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=' - if (gt) { - if (needDomGTPre) { - if (c.semver.prerelease && c.semver.prerelease.length && - c.semver.major === needDomGTPre.major && - c.semver.minor === needDomGTPre.minor && - c.semver.patch === needDomGTPre.patch) { - needDomGTPre = false - } - } - if (c.operator === '>' || c.operator === '>=') { - higher = higherGT(gt, c, options) - if (higher === c && higher !== gt) - return false - } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) - return false - } - if (lt) { - if (needDomLTPre) { - if (c.semver.prerelease && c.semver.prerelease.length && - c.semver.major === needDomLTPre.major && - c.semver.minor === needDomLTPre.minor && - c.semver.patch === needDomLTPre.patch) { - needDomLTPre = false - } - } - if (c.operator === '<' || c.operator === '<=') { - lower = lowerLT(lt, c, options) - if (lower === c && lower !== lt) - return false - } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) - return false - } - if (!c.operator && (lt || gt) && gtltComp !== 0) - return false - } - - // if there was a < or >, and nothing in the dom, then must be false - // UNLESS it was limited by another range in the other direction. - // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0 - if (gt && hasDomLT && !lt && gtltComp !== 0) - return false - - if (lt && hasDomGT && !gt && gtltComp !== 0) - return false - - // we needed a prerelease range in a specific tuple, but didn't get one - // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0, - // because it includes prereleases in the 1.2.3 tuple - if (needDomGTPre || needDomLTPre) - return false - - return true -} - -// >=1.2.3 is lower than >1.2.3 -const higherGT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp > 0 ? a - : comp < 0 ? b - : b.operator === '>' && a.operator === '>=' ? b - : a -} - -// <=1.2.3 is higher than <1.2.3 -const lowerLT = (a, b, options) => { - if (!a) - return b - const comp = compare(a.semver, b.semver, options) - return comp < 0 ? a - : comp > 0 ? b - : b.operator === '<' && a.operator === '<=' ? b - : a -} - -module.exports = subset - -},{"../classes/comparator.js":173,"../classes/range.js":174,"../functions/compare.js":181,"../functions/satisfies.js":197}],215:[function(require,module,exports){ -const Range = require('../classes/range') - -// Mostly just for testing and legacy API reasons -const toComparators = (range, options) => - new Range(range, options).set - .map(comp => comp.map(c => c.value).join(' ').trim().split(' ')) - -module.exports = toComparators - -},{"../classes/range":174}],216:[function(require,module,exports){ -const Range = require('../classes/range') -const validRange = (range, options) => { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} -module.exports = validRange - -},{"../classes/range":174}],217:[function(require,module,exports){ -arguments[4][163][0].apply(exports,arguments) -},{"@ledgerhq/errors":124,"buffer":226,"dup":163,"events":248}],218:[function(require,module,exports){ -arguments[4][164][0].apply(exports,arguments) -},{"dup":164}],219:[function(require,module,exports){ -"use strict"; - -(function(root) { - - function checkInt(value) { - return (parseInt(value) === value); - } - - function checkInts(arrayish) { - if (!checkInt(arrayish.length)) { return false; } - - for (var i = 0; i < arrayish.length; i++) { - if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) { - return false; - } - } - - return true; - } - - function coerceArray(arg, copy) { - - // ArrayBuffer view - if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') { - - if (copy) { - if (arg.slice) { - arg = arg.slice(); - } else { - arg = Array.prototype.slice.call(arg); - } - } - - return arg; - } - - // It's an array; check it is a valid representation of a byte - if (Array.isArray(arg)) { - if (!checkInts(arg)) { - throw new Error('Array contains invalid value: ' + arg); - } - - return new Uint8Array(arg); - } - - // Something else, but behaves like an array (maybe a Buffer? Arguments?) - if (checkInt(arg.length) && checkInts(arg)) { - return new Uint8Array(arg); - } - - throw new Error('unsupported array-like object'); - } - - function createArray(length) { - return new Uint8Array(length); - } - - function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { - if (sourceStart != null || sourceEnd != null) { - if (sourceArray.slice) { - sourceArray = sourceArray.slice(sourceStart, sourceEnd); - } else { - sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); - } - } - targetArray.set(sourceArray, targetStart); - } - - - - var convertUtf8 = (function() { - function toBytes(text) { - var result = [], i = 0; - text = encodeURI(text); - while (i < text.length) { - var c = text.charCodeAt(i++); - - // if it is a % sign, encode the following 2 bytes as a hex value - if (c === 37) { - result.push(parseInt(text.substr(i, 2), 16)) - i += 2; - - // otherwise, just the actual byte - } else { - result.push(c) - } - } - - return coerceArray(result); - } - - function fromBytes(bytes) { - var result = [], i = 0; - - while (i < bytes.length) { - var c = bytes[i]; - - if (c < 128) { - result.push(String.fromCharCode(c)); - i++; - } else if (c > 191 && c < 224) { - result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); - i += 2; - } else { - result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); - i += 3; - } - } - - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - var convertHex = (function() { - function toBytes(text) { - var result = []; - for (var i = 0; i < text.length; i += 2) { - result.push(parseInt(text.substr(i, 2), 16)); - } - - return result; - } - - // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html - var Hex = '0123456789abcdef'; - - function fromBytes(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i++) { - var v = bytes[i]; - result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); - } - return result.join(''); - } - - return { - toBytes: toBytes, - fromBytes: fromBytes, - } - })(); - - - // Number of rounds by keysize - var numberOfRounds = {16: 10, 24: 12, 32: 14} - - // Round constant words - var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; - - // S-box and Inverse S-box (S is for Substitution) - var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; - var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; - - // Transformations for encryption - var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; - var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; - var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; - var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; - - // Transformations for decryption - var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; - var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; - var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; - var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; - - // Transformations for decryption key expansion - var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; - var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; - var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; - var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; - - function convertToInt32(bytes) { - var result = []; - for (var i = 0; i < bytes.length; i += 4) { - result.push( - (bytes[i ] << 24) | - (bytes[i + 1] << 16) | - (bytes[i + 2] << 8) | - bytes[i + 3] - ); - } - return result; - } - - var AES = function(key) { - if (!(this instanceof AES)) { - throw Error('AES must be instanitated with `new`'); - } - - Object.defineProperty(this, 'key', { - value: coerceArray(key, true) - }); - - this._prepare(); - } - - - AES.prototype._prepare = function() { - - var rounds = numberOfRounds[this.key.length]; - if (rounds == null) { - throw new Error('invalid key size (must be 16, 24 or 32 bytes)'); - } - - // encryption round keys - this._Ke = []; - - // decryption round keys - this._Kd = []; - - for (var i = 0; i <= rounds; i++) { - this._Ke.push([0, 0, 0, 0]); - this._Kd.push([0, 0, 0, 0]); - } - - var roundKeyCount = (rounds + 1) * 4; - var KC = this.key.length / 4; - - // convert the key into ints - var tk = convertToInt32(this.key); - - // copy values into round key arrays - var index; - for (var i = 0; i < KC; i++) { - index = i >> 2; - this._Ke[index][i % 4] = tk[i]; - this._Kd[rounds - index][i % 4] = tk[i]; - } - - // key expansion (fips-197 section 5.2) - var rconpointer = 0; - var t = KC, tt; - while (t < roundKeyCount) { - tt = tk[KC - 1]; - tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ - (S[(tt >> 8) & 0xFF] << 16) ^ - (S[ tt & 0xFF] << 8) ^ - S[(tt >> 24) & 0xFF] ^ - (rcon[rconpointer] << 24)); - rconpointer += 1; - - // key expansion (for non-256 bit) - if (KC != 8) { - for (var i = 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - - // key expansion for 256-bit keys is "slightly different" (fips-197) - } else { - for (var i = 1; i < (KC / 2); i++) { - tk[i] ^= tk[i - 1]; - } - tt = tk[(KC / 2) - 1]; - - tk[KC / 2] ^= (S[ tt & 0xFF] ^ - (S[(tt >> 8) & 0xFF] << 8) ^ - (S[(tt >> 16) & 0xFF] << 16) ^ - (S[(tt >> 24) & 0xFF] << 24)); - - for (var i = (KC / 2) + 1; i < KC; i++) { - tk[i] ^= tk[i - 1]; - } - } - - // copy values into round key arrays - var i = 0, r, c; - while (i < KC && t < roundKeyCount) { - r = t >> 2; - c = t % 4; - this._Ke[r][c] = tk[i]; - this._Kd[rounds - r][c] = tk[i++]; - t++; - } - } - - // inverse-cipher-ify the decryption round key (fips-197 section 5.3) - for (var r = 1; r < rounds; r++) { - for (var c = 0; c < 4; c++) { - tt = this._Kd[r][c]; - this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ - U2[(tt >> 16) & 0xFF] ^ - U3[(tt >> 8) & 0xFF] ^ - U4[ tt & 0xFF]); - } - } - } - - AES.prototype.encrypt = function(plaintext) { - if (plaintext.length != 16) { - throw new Error('invalid plaintext size (must be 16 bytes)'); - } - - var rounds = this._Ke.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(plaintext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Ke[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ - T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ - T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T4[ t[(i + 3) % 4] & 0xff] ^ - this._Ke[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Ke[rounds][i]; - result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - AES.prototype.decrypt = function(ciphertext) { - if (ciphertext.length != 16) { - throw new Error('invalid ciphertext size (must be 16 bytes)'); - } - - var rounds = this._Kd.length - 1; - var a = [0, 0, 0, 0]; - - // convert plaintext to (ints ^ key) - var t = convertToInt32(ciphertext); - for (var i = 0; i < 4; i++) { - t[i] ^= this._Kd[0][i]; - } - - // apply round transforms - for (var r = 1; r < rounds; r++) { - for (var i = 0; i < 4; i++) { - a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ - T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ - T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ - T8[ t[(i + 1) % 4] & 0xff] ^ - this._Kd[r][i]); - } - t = a.slice(); - } - - // the last round is special - var result = createArray(16), tt; - for (var i = 0; i < 4; i++) { - tt = this._Kd[rounds][i]; - result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; - result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; - result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; - result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; - } - - return result; - } - - - /** - * Mode Of Operation - Electonic Codebook (ECB) - */ - var ModeOfOperationECB = function(key) { - if (!(this instanceof ModeOfOperationECB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Electronic Code Block"; - this.name = "ecb"; - - this._aes = new AES(key); - } - - ModeOfOperationECB.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - block = this._aes.encrypt(block); - copyArray(block, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationECB.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - copyArray(block, plaintext, i); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Block Chaining (CBC) - */ - var ModeOfOperationCBC = function(key, iv) { - if (!(this instanceof ModeOfOperationCBC)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Block Chaining"; - this.name = "cbc"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastCipherblock = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCBC.prototype.encrypt = function(plaintext) { - plaintext = coerceArray(plaintext); - - if ((plaintext.length % 16) !== 0) { - throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); - } - - var ciphertext = createArray(plaintext.length); - var block = createArray(16); - - for (var i = 0; i < plaintext.length; i += 16) { - copyArray(plaintext, block, 0, i, i + 16); - - for (var j = 0; j < 16; j++) { - block[j] ^= this._lastCipherblock[j]; - } - - this._lastCipherblock = this._aes.encrypt(block); - copyArray(this._lastCipherblock, ciphertext, i); - } - - return ciphertext; - } - - ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { - ciphertext = coerceArray(ciphertext); - - if ((ciphertext.length % 16) !== 0) { - throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); - } - - var plaintext = createArray(ciphertext.length); - var block = createArray(16); - - for (var i = 0; i < ciphertext.length; i += 16) { - copyArray(ciphertext, block, 0, i, i + 16); - block = this._aes.decrypt(block); - - for (var j = 0; j < 16; j++) { - plaintext[i + j] = block[j] ^ this._lastCipherblock[j]; - } - - copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16); - } - - return plaintext; - } - - - /** - * Mode Of Operation - Cipher Feedback (CFB) - */ - var ModeOfOperationCFB = function(key, iv, segmentSize) { - if (!(this instanceof ModeOfOperationCFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Cipher Feedback"; - this.name = "cfb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 size)'); - } - - if (!segmentSize) { segmentSize = 1; } - - this.segmentSize = segmentSize; - - this._shiftRegister = coerceArray(iv, true); - - this._aes = new AES(key); - } - - ModeOfOperationCFB.prototype.encrypt = function(plaintext) { - if ((plaintext.length % this.segmentSize) != 0) { - throw new Error('invalid plaintext size (must be segmentSize bytes)'); - } - - var encrypted = coerceArray(plaintext, true); - - var xorSegment; - for (var i = 0; i < encrypted.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - for (var j = 0; j < this.segmentSize; j++) { - encrypted[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return encrypted; - } - - ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { - if ((ciphertext.length % this.segmentSize) != 0) { - throw new Error('invalid ciphertext size (must be segmentSize bytes)'); - } - - var plaintext = coerceArray(ciphertext, true); - - var xorSegment; - for (var i = 0; i < plaintext.length; i += this.segmentSize) { - xorSegment = this._aes.encrypt(this._shiftRegister); - - for (var j = 0; j < this.segmentSize; j++) { - plaintext[i + j] ^= xorSegment[j]; - } - - // Shift the register - copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); - copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); - } - - return plaintext; - } - - /** - * Mode Of Operation - Output Feedback (OFB) - */ - var ModeOfOperationOFB = function(key, iv) { - if (!(this instanceof ModeOfOperationOFB)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Output Feedback"; - this.name = "ofb"; - - if (!iv) { - iv = createArray(16); - - } else if (iv.length != 16) { - throw new Error('invalid initialation vector size (must be 16 bytes)'); - } - - this._lastPrecipher = coerceArray(iv, true); - this._lastPrecipherIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationOFB.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._lastPrecipherIndex === 16) { - this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); - this._lastPrecipherIndex = 0; - } - encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; - - - /** - * Counter object for CTR common mode of operation - */ - var Counter = function(initialValue) { - if (!(this instanceof Counter)) { - throw Error('Counter must be instanitated with `new`'); - } - - // We allow 0, but anything false-ish uses the default 1 - if (initialValue !== 0 && !initialValue) { initialValue = 1; } - - if (typeof(initialValue) === 'number') { - this._counter = createArray(16); - this.setValue(initialValue); - - } else { - this.setBytes(initialValue); - } - } - - Counter.prototype.setValue = function(value) { - if (typeof(value) !== 'number' || parseInt(value) != value) { - throw new Error('invalid counter value (must be an integer)'); - } - - for (var index = 15; index >= 0; --index) { - this._counter[index] = value % 256; - value = value >> 8; - } - } - - Counter.prototype.setBytes = function(bytes) { - bytes = coerceArray(bytes, true); - - if (bytes.length != 16) { - throw new Error('invalid counter bytes size (must be 16 bytes)'); - } - - this._counter = bytes; - }; - - Counter.prototype.increment = function() { - for (var i = 15; i >= 0; i--) { - if (this._counter[i] === 255) { - this._counter[i] = 0; - } else { - this._counter[i]++; - break; - } - } - } - - - /** - * Mode Of Operation - Counter (CTR) - */ - var ModeOfOperationCTR = function(key, counter) { - if (!(this instanceof ModeOfOperationCTR)) { - throw Error('AES must be instanitated with `new`'); - } - - this.description = "Counter"; - this.name = "ctr"; - - if (!(counter instanceof Counter)) { - counter = new Counter(counter) - } - - this._counter = counter; - - this._remainingCounter = null; - this._remainingCounterIndex = 16; - - this._aes = new AES(key); - } - - ModeOfOperationCTR.prototype.encrypt = function(plaintext) { - var encrypted = coerceArray(plaintext, true); - - for (var i = 0; i < encrypted.length; i++) { - if (this._remainingCounterIndex === 16) { - this._remainingCounter = this._aes.encrypt(this._counter._counter); - this._remainingCounterIndex = 0; - this._counter.increment(); - } - encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; - } - - return encrypted; - } - - // Decryption is symetric - ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; - - - /////////////////////// - // Padding - - // See:https://tools.ietf.org/html/rfc2315 - function pkcs7pad(data) { - data = coerceArray(data, true); - var padder = 16 - (data.length % 16); - var result = createArray(data.length + padder); - copyArray(data, result); - for (var i = data.length; i < result.length; i++) { - result[i] = padder; - } - return result; - } - - function pkcs7strip(data) { - data = coerceArray(data, true); - if (data.length < 16) { throw new Error('PKCS#7 invalid length'); } - - var padder = data[data.length - 1]; - if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); } - - var length = data.length - padder; - for (var i = 0; i < padder; i++) { - if (data[length + i] !== padder) { - throw new Error('PKCS#7 invalid padding byte'); - } - } - - var result = createArray(length); - copyArray(data, result, 0, 0, length); - return result; - } - - /////////////////////// - // Exporting - - - // The block cipher - var aesjs = { - AES: AES, - Counter: Counter, - - ModeOfOperation: { - ecb: ModeOfOperationECB, - cbc: ModeOfOperationCBC, - cfb: ModeOfOperationCFB, - ofb: ModeOfOperationOFB, - ctr: ModeOfOperationCTR - }, - - utils: { - hex: convertHex, - utf8: convertUtf8 - }, - - padding: { - pkcs7: { - pad: pkcs7pad, - strip: pkcs7strip - } - }, - - _arrayTest: { - coerceArray: coerceArray, - createArray: createArray, - copyArray: copyArray, - } - }; - - - // node.js - if (typeof exports !== 'undefined') { - module.exports = aesjs - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(aesjs); - - // Web Browsers - } else { - - // If there was an existing library at "aesjs" make sure it's still available - if (root.aesjs) { - aesjs._aesjs = root.aesjs; - } - - root.aesjs = aesjs; - } - - -})(this); - -},{}],220:[function(require,module,exports){ -'use strict' - -exports.byteLength = byteLength -exports.toByteArray = toByteArray -exports.fromByteArray = fromByteArray - -var lookup = [] -var revLookup = [] -var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array - -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i] - revLookup[code.charCodeAt(i)] = i -} - -// Support decoding URL-safe base64 strings, as Node.js does. -// See: https://en.wikipedia.org/wiki/Base64#URL_applications -revLookup['-'.charCodeAt(0)] = 62 -revLookup['_'.charCodeAt(0)] = 63 - -function getLens (b64) { - var len = b64.length - - if (len % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } - - // Trim off extra bytes after placeholder bytes are found - // See: https://github.com/beatgammit/base64-js/issues/42 - var validLen = b64.indexOf('=') - if (validLen === -1) validLen = len - - var placeHoldersLen = validLen === len - ? 0 - : 4 - (validLen % 4) - - return [validLen, placeHoldersLen] -} - -// base64 is 4/3 + up to two characters of the original data -function byteLength (b64) { - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function _byteLength (b64, validLen, placeHoldersLen) { - return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen -} - -function toByteArray (b64) { - var tmp - var lens = getLens(b64) - var validLen = lens[0] - var placeHoldersLen = lens[1] - - var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) - - var curByte = 0 - - // if there are placeholders, only get up to the last complete 4 chars - var len = placeHoldersLen > 0 - ? validLen - 4 - : validLen - - for (var i = 0; i < len; i += 4) { - tmp = - (revLookup[b64.charCodeAt(i)] << 18) | - (revLookup[b64.charCodeAt(i + 1)] << 12) | - (revLookup[b64.charCodeAt(i + 2)] << 6) | - revLookup[b64.charCodeAt(i + 3)] - arr[curByte++] = (tmp >> 16) & 0xFF - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 2) { - tmp = - (revLookup[b64.charCodeAt(i)] << 2) | - (revLookup[b64.charCodeAt(i + 1)] >> 4) - arr[curByte++] = tmp & 0xFF - } - - if (placeHoldersLen === 1) { - tmp = - (revLookup[b64.charCodeAt(i)] << 10) | - (revLookup[b64.charCodeAt(i + 1)] << 4) | - (revLookup[b64.charCodeAt(i + 2)] >> 2) - arr[curByte++] = (tmp >> 8) & 0xFF - arr[curByte++] = tmp & 0xFF - } - - return arr -} - -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} - -function encodeChunk (uint8, start, end) { - var tmp - var output = [] - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF) - output.push(tripletToBase64(tmp)) - } - return output.join('') -} - -function fromByteArray (uint8) { - var tmp - var len = uint8.length - var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes - var parts = [] - var maxChunkLength = 16383 // must be multiple of 3 - - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk( - uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) - )) - } - - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1] - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ) - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1] - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ) - } - - return parts.join('') -} - -},{}],221:[function(require,module,exports){ -'use strict' -var ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l' - -// pre-compute lookup table -var ALPHABET_MAP = {} -for (var z = 0; z < ALPHABET.length; z++) { - var x = ALPHABET.charAt(z) - - if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous') - ALPHABET_MAP[x] = z -} - -function polymodStep (pre) { - var b = pre >> 25 - return ((pre & 0x1FFFFFF) << 5) ^ - (-((b >> 0) & 1) & 0x3b6a57b2) ^ - (-((b >> 1) & 1) & 0x26508e6d) ^ - (-((b >> 2) & 1) & 0x1ea119fa) ^ - (-((b >> 3) & 1) & 0x3d4233dd) ^ - (-((b >> 4) & 1) & 0x2a1462b3) -} - -function prefixChk (prefix) { - var chk = 1 - for (var i = 0; i < prefix.length; ++i) { - var c = prefix.charCodeAt(i) - if (c < 33 || c > 126) return 'Invalid prefix (' + prefix + ')' - - chk = polymodStep(chk) ^ (c >> 5) - } - chk = polymodStep(chk) - - for (i = 0; i < prefix.length; ++i) { - var v = prefix.charCodeAt(i) - chk = polymodStep(chk) ^ (v & 0x1f) - } - return chk -} - -function encode (prefix, words, LIMIT) { - LIMIT = LIMIT || 90 - if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit') - - prefix = prefix.toLowerCase() - - // determine chk mod - var chk = prefixChk(prefix) - if (typeof chk === 'string') throw new Error(chk) - - var result = prefix + '1' - for (var i = 0; i < words.length; ++i) { - var x = words[i] - if ((x >> 5) !== 0) throw new Error('Non 5-bit word') - - chk = polymodStep(chk) ^ x - result += ALPHABET.charAt(x) - } - - for (i = 0; i < 6; ++i) { - chk = polymodStep(chk) - } - chk ^= 1 - - for (i = 0; i < 6; ++i) { - var v = (chk >> ((5 - i) * 5)) & 0x1f - result += ALPHABET.charAt(v) - } - - return result -} - -function __decode (str, LIMIT) { - LIMIT = LIMIT || 90 - if (str.length < 8) return str + ' too short' - if (str.length > LIMIT) return 'Exceeds length limit' - - // don't allow mixed case - var lowered = str.toLowerCase() - var uppered = str.toUpperCase() - if (str !== lowered && str !== uppered) return 'Mixed-case string ' + str - str = lowered - - var split = str.lastIndexOf('1') - if (split === -1) return 'No separator character for ' + str - if (split === 0) return 'Missing prefix for ' + str - - var prefix = str.slice(0, split) - var wordChars = str.slice(split + 1) - if (wordChars.length < 6) return 'Data too short' - - var chk = prefixChk(prefix) - if (typeof chk === 'string') return chk - - var words = [] - for (var i = 0; i < wordChars.length; ++i) { - var c = wordChars.charAt(i) - var v = ALPHABET_MAP[c] - if (v === undefined) return 'Unknown character ' + c - chk = polymodStep(chk) ^ v - - // not in the checksum? - if (i + 6 >= wordChars.length) continue - words.push(v) - } - - if (chk !== 1) return 'Invalid checksum for ' + str - return { prefix: prefix, words: words } -} - -function decodeUnsafe () { - var res = __decode.apply(null, arguments) - if (typeof res === 'object') return res -} - -function decode (str) { - var res = __decode.apply(null, arguments) - if (typeof res === 'object') return res - - throw new Error(res) -} - -function convert (data, inBits, outBits, pad) { - var value = 0 - var bits = 0 - var maxV = (1 << outBits) - 1 - - var result = [] - for (var i = 0; i < data.length; ++i) { - value = (value << inBits) | data[i] - bits += inBits - - while (bits >= outBits) { - bits -= outBits - result.push((value >> bits) & maxV) - } - } - - if (pad) { - if (bits > 0) { - result.push((value << (outBits - bits)) & maxV) - } - } else { - if (bits >= inBits) return 'Excess padding' - if ((value << (outBits - bits)) & maxV) return 'Non-zero padding' - } - - return result -} - -function toWordsUnsafe (bytes) { - var res = convert(bytes, 8, 5, true) - if (Array.isArray(res)) return res -} - -function toWords (bytes) { - var res = convert(bytes, 8, 5, true) - if (Array.isArray(res)) return res - - throw new Error(res) -} - -function fromWordsUnsafe (words) { - var res = convert(words, 5, 8, false) - if (Array.isArray(res)) return res -} - -function fromWords (words) { - var res = convert(words, 5, 8, false) - if (Array.isArray(res)) return res - - throw new Error(res) -} - -module.exports = { - decodeUnsafe: decodeUnsafe, - decode: decode, - encode: encode, - toWordsUnsafe: toWordsUnsafe, - toWords: toWords, - fromWordsUnsafe: fromWordsUnsafe, - fromWords: fromWords -} - -},{}],222:[function(require,module,exports){ -;(function (globalObject) { - 'use strict'; - -/* - * bignumber.js v9.0.1 - * A JavaScript library for arbitrary-precision arithmetic. - * https://github.com/MikeMcl/bignumber.js - * Copyright (c) 2020 Michael Mclaughlin - * MIT Licensed. - * - * BigNumber.prototype methods | BigNumber methods - * | - * absoluteValue abs | clone - * comparedTo | config set - * decimalPlaces dp | DECIMAL_PLACES - * dividedBy div | ROUNDING_MODE - * dividedToIntegerBy idiv | EXPONENTIAL_AT - * exponentiatedBy pow | RANGE - * integerValue | CRYPTO - * isEqualTo eq | MODULO_MODE - * isFinite | POW_PRECISION - * isGreaterThan gt | FORMAT - * isGreaterThanOrEqualTo gte | ALPHABET - * isInteger | isBigNumber - * isLessThan lt | maximum max - * isLessThanOrEqualTo lte | minimum min - * isNaN | random - * isNegative | sum - * isPositive | - * isZero | - * minus | - * modulo mod | - * multipliedBy times | - * negated | - * plus | - * precision sd | - * shiftedBy | - * squareRoot sqrt | - * toExponential | - * toFixed | - * toFormat | - * toFraction | - * toJSON | - * toNumber | - * toPrecision | - * toString | - * valueOf | - * - */ - - - var BigNumber, - isNumeric = /^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i, - mathceil = Math.ceil, - mathfloor = Math.floor, - - bignumberError = '[BigNumber Error] ', - tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ', - - BASE = 1e14, - LOG_BASE = 14, - MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1 - // MAX_INT32 = 0x7fffffff, // 2^31 - 1 - POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13], - SQRT_BASE = 1e7, - - // EDITABLE - // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and - // the arguments to toExponential, toFixed, toFormat, and toPrecision. - MAX = 1E9; // 0 to MAX_INT32 - - - /* - * Create and return a BigNumber constructor. - */ - function clone(configObject) { - var div, convertBase, parseNumeric, - P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null }, - ONE = new BigNumber(1), - - - //----------------------------- EDITABLE CONFIG DEFAULTS ------------------------------- - - - // The default values below must be integers within the inclusive ranges stated. - // The values can also be changed at run-time using BigNumber.set. - - // The maximum number of decimal places for operations involving division. - DECIMAL_PLACES = 20, // 0 to MAX - - // The rounding mode used when rounding to the above decimal places, and when using - // toExponential, toFixed, toFormat and toPrecision, and round (default value). - // UP 0 Away from zero. - // DOWN 1 Towards zero. - // CEIL 2 Towards +Infinity. - // FLOOR 3 Towards -Infinity. - // HALF_UP 4 Towards nearest neighbour. If equidistant, up. - // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down. - // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour. - // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity. - // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity. - ROUNDING_MODE = 4, // 0 to 8 - - // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS] - - // The exponent value at and beneath which toString returns exponential notation. - // Number type: -7 - TO_EXP_NEG = -7, // 0 to -MAX - - // The exponent value at and above which toString returns exponential notation. - // Number type: 21 - TO_EXP_POS = 21, // 0 to MAX - - // RANGE : [MIN_EXP, MAX_EXP] - - // The minimum exponent value, beneath which underflow to zero occurs. - // Number type: -324 (5e-324) - MIN_EXP = -1e7, // -1 to -MAX - - // The maximum exponent value, above which overflow to Infinity occurs. - // Number type: 308 (1.7976931348623157e+308) - // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow. - MAX_EXP = 1e7, // 1 to MAX - - // Whether to use cryptographically-secure random number generation, if available. - CRYPTO = false, // true or false - - // The modulo mode used when calculating the modulus: a mod n. - // The quotient (q = a / n) is calculated according to the corresponding rounding mode. - // The remainder (r) is calculated as: r = a - n * q. - // - // UP 0 The remainder is positive if the dividend is negative, else is negative. - // DOWN 1 The remainder has the same sign as the dividend. - // This modulo mode is commonly known as 'truncated division' and is - // equivalent to (a % n) in JavaScript. - // FLOOR 3 The remainder has the same sign as the divisor (Python %). - // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function. - // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)). - // The remainder is always positive. - // - // The truncated division, floored division, Euclidian division and IEEE 754 remainder - // modes are commonly used for the modulus operation. - // Although the other rounding modes can also be used, they may not give useful results. - MODULO_MODE = 1, // 0 to 9 - - // The maximum number of significant digits of the result of the exponentiatedBy operation. - // If POW_PRECISION is 0, there will be unlimited significant digits. - POW_PRECISION = 0, // 0 to MAX - - // The format specification used by the BigNumber.prototype.toFormat method. - FORMAT = { - prefix: '', - groupSize: 3, - secondaryGroupSize: 0, - groupSeparator: ',', - decimalSeparator: '.', - fractionGroupSize: 0, - fractionGroupSeparator: '\xA0', // non-breaking space - suffix: '' - }, - - // The alphabet used for base conversion. It must be at least 2 characters long, with no '+', - // '-', '.', whitespace, or repeated character. - // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_' - ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz'; - - - //------------------------------------------------------------------------------------------ - - - // CONSTRUCTOR - - - /* - * The BigNumber constructor and exported function. - * Create and return a new instance of a BigNumber object. - * - * v {number|string|BigNumber} A numeric value. - * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive. - */ - function BigNumber(v, b) { - var alphabet, c, caseChanged, e, i, isNum, len, str, - x = this; - - // Enable constructor call without `new`. - if (!(x instanceof BigNumber)) return new BigNumber(v, b); - - if (b == null) { - - if (v && v._isBigNumber === true) { - x.s = v.s; - - if (!v.c || v.e > MAX_EXP) { - x.c = x.e = null; - } else if (v.e < MIN_EXP) { - x.c = [x.e = 0]; - } else { - x.e = v.e; - x.c = v.c.slice(); - } - - return; - } - - if ((isNum = typeof v == 'number') && v * 0 == 0) { - - // Use `1 / n` to handle minus zero also. - x.s = 1 / v < 0 ? (v = -v, -1) : 1; - - // Fast path for integers, where n < 2147483648 (2**31). - if (v === ~~v) { - for (e = 0, i = v; i >= 10; i /= 10, e++); - - if (e > MAX_EXP) { - x.c = x.e = null; - } else { - x.e = e; - x.c = [v]; - } - - return; - } - - str = String(v); - } else { - - if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum); - - x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1; - } - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - - // Exponential form? - if ((i = str.search(/e/i)) > 0) { - - // Determine exponent. - if (e < 0) e = i; - e += +str.slice(i + 1); - str = str.substring(0, i); - } else if (e < 0) { - - // Integer. - e = str.length; - } - - } else { - - // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - intCheck(b, 2, ALPHABET.length, 'Base'); - - // Allow exponential notation to be used with base 10 argument, while - // also rounding to DECIMAL_PLACES as with other bases. - if (b == 10) { - x = new BigNumber(v); - return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE); - } - - str = String(v); - - if (isNum = typeof v == 'number') { - - // Avoid potential interpretation of Infinity and NaN as base 44+ values. - if (v * 0 != 0) return parseNumeric(x, str, isNum, b); - - x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (BigNumber.DEBUG && str.replace(/^0\.0*|\./, '').length > 15) { - throw Error - (tooManyDigits + v); - } - } else { - x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1; - } - - alphabet = ALPHABET.slice(0, b); - e = i = 0; - - // Check that str is a valid base b number. - // Don't use RegExp, so alphabet can contain special characters. - for (len = str.length; i < len; i++) { - if (alphabet.indexOf(c = str.charAt(i)) < 0) { - if (c == '.') { - - // If '.' is not the first character and it has not be found before. - if (i > e) { - e = len; - continue; - } - } else if (!caseChanged) { - - // Allow e.g. hexadecimal 'FF' as well as 'ff'. - if (str == str.toUpperCase() && (str = str.toLowerCase()) || - str == str.toLowerCase() && (str = str.toUpperCase())) { - caseChanged = true; - i = -1; - e = 0; - continue; - } - } - - return parseNumeric(x, String(v), isNum, b); - } - } - - // Prevent later check for length on converted number. - isNum = false; - str = convertBase(str, b, 10, x.s); - - // Decimal point? - if ((e = str.indexOf('.')) > -1) str = str.replace('.', ''); - else e = str.length; - } - - // Determine leading zeros. - for (i = 0; str.charCodeAt(i) === 48; i++); - - // Determine trailing zeros. - for (len = str.length; str.charCodeAt(--len) === 48;); - - if (str = str.slice(i, ++len)) { - len -= i; - - // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}' - if (isNum && BigNumber.DEBUG && - len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) { - throw Error - (tooManyDigits + (x.s * v)); - } - - // Overflow? - if ((e = e - i - 1) > MAX_EXP) { - - // Infinity. - x.c = x.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - x.c = [x.e = 0]; - } else { - x.e = e; - x.c = []; - - // Transform base - - // e is the base 10 exponent. - // i is where to slice str to get the first element of the coefficient array. - i = (e + 1) % LOG_BASE; - if (e < 0) i += LOG_BASE; // i < 1 - - if (i < len) { - if (i) x.c.push(+str.slice(0, i)); - - for (len -= LOG_BASE; i < len;) { - x.c.push(+str.slice(i, i += LOG_BASE)); - } - - i = LOG_BASE - (str = str.slice(i)).length; - } else { - i -= len; - } - - for (; i--; str += '0'); - x.c.push(+str); - } - } else { - - // Zero. - x.c = [x.e = 0]; - } - } - - - // CONSTRUCTOR PROPERTIES - - - BigNumber.clone = clone; - - BigNumber.ROUND_UP = 0; - BigNumber.ROUND_DOWN = 1; - BigNumber.ROUND_CEIL = 2; - BigNumber.ROUND_FLOOR = 3; - BigNumber.ROUND_HALF_UP = 4; - BigNumber.ROUND_HALF_DOWN = 5; - BigNumber.ROUND_HALF_EVEN = 6; - BigNumber.ROUND_HALF_CEIL = 7; - BigNumber.ROUND_HALF_FLOOR = 8; - BigNumber.EUCLID = 9; - - - /* - * Configure infrequently-changing library-wide settings. - * - * Accept an object with the following optional properties (if the value of a property is - * a number, it must be an integer within the inclusive range stated): - * - * DECIMAL_PLACES {number} 0 to MAX - * ROUNDING_MODE {number} 0 to 8 - * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX] - * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX] - * CRYPTO {boolean} true or false - * MODULO_MODE {number} 0 to 9 - * POW_PRECISION {number} 0 to MAX - * ALPHABET {string} A string of two or more unique characters which does - * not contain '.'. - * FORMAT {object} An object with some of the following properties: - * prefix {string} - * groupSize {number} - * secondaryGroupSize {number} - * groupSeparator {string} - * decimalSeparator {string} - * fractionGroupSize {number} - * fractionGroupSeparator {string} - * suffix {string} - * - * (The values assigned to the above FORMAT object properties are not checked for validity.) - * - * E.g. - * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 }) - * - * Ignore properties/parameters set to null or undefined, except for ALPHABET. - * - * Return an object with the properties current values. - */ - BigNumber.config = BigNumber.set = function (obj) { - var p, v; - - if (obj != null) { - - if (typeof obj == 'object') { - - // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - DECIMAL_PLACES = v; - } - - // ROUNDING_MODE {number} Integer, 0 to 8 inclusive. - // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) { - v = obj[p]; - intCheck(v, 0, 8, p); - ROUNDING_MODE = v; - } - - // EXPONENTIAL_AT {number|number[]} - // Integer, -MAX to MAX inclusive or - // [integer -MAX to 0 inclusive, 0 to MAX inclusive]. - // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, 0, p); - intCheck(v[1], 0, MAX, p); - TO_EXP_NEG = v[0]; - TO_EXP_POS = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v); - } - } - - // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or - // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive]. - // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}' - if (obj.hasOwnProperty(p = 'RANGE')) { - v = obj[p]; - if (v && v.pop) { - intCheck(v[0], -MAX, -1, p); - intCheck(v[1], 1, MAX, p); - MIN_EXP = v[0]; - MAX_EXP = v[1]; - } else { - intCheck(v, -MAX, MAX, p); - if (v) { - MIN_EXP = -(MAX_EXP = v < 0 ? -v : v); - } else { - throw Error - (bignumberError + p + ' cannot be zero: ' + v); - } - } - } - - // CRYPTO {boolean} true or false. - // '[BigNumber Error] CRYPTO not true or false: {v}' - // '[BigNumber Error] crypto unavailable' - if (obj.hasOwnProperty(p = 'CRYPTO')) { - v = obj[p]; - if (v === !!v) { - if (v) { - if (typeof crypto != 'undefined' && crypto && - (crypto.getRandomValues || crypto.randomBytes)) { - CRYPTO = v; - } else { - CRYPTO = !v; - throw Error - (bignumberError + 'crypto unavailable'); - } - } else { - CRYPTO = v; - } - } else { - throw Error - (bignumberError + p + ' not true or false: ' + v); - } - } - - // MODULO_MODE {number} Integer, 0 to 9 inclusive. - // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'MODULO_MODE')) { - v = obj[p]; - intCheck(v, 0, 9, p); - MODULO_MODE = v; - } - - // POW_PRECISION {number} Integer, 0 to MAX inclusive. - // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}' - if (obj.hasOwnProperty(p = 'POW_PRECISION')) { - v = obj[p]; - intCheck(v, 0, MAX, p); - POW_PRECISION = v; - } - - // FORMAT {object} - // '[BigNumber Error] FORMAT not an object: {v}' - if (obj.hasOwnProperty(p = 'FORMAT')) { - v = obj[p]; - if (typeof v == 'object') FORMAT = v; - else throw Error - (bignumberError + p + ' not an object: ' + v); - } - - // ALPHABET {string} - // '[BigNumber Error] ALPHABET invalid: {v}' - if (obj.hasOwnProperty(p = 'ALPHABET')) { - v = obj[p]; - - // Disallow if less than two characters, - // or if it contains '+', '-', '.', whitespace, or a repeated character. - if (typeof v == 'string' && !/^.?$|[+\-.\s]|(.).*\1/.test(v)) { - ALPHABET = v; - } else { - throw Error - (bignumberError + p + ' invalid: ' + v); - } - } - - } else { - - // '[BigNumber Error] Object expected: {v}' - throw Error - (bignumberError + 'Object expected: ' + obj); - } - } - - return { - DECIMAL_PLACES: DECIMAL_PLACES, - ROUNDING_MODE: ROUNDING_MODE, - EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS], - RANGE: [MIN_EXP, MAX_EXP], - CRYPTO: CRYPTO, - MODULO_MODE: MODULO_MODE, - POW_PRECISION: POW_PRECISION, - FORMAT: FORMAT, - ALPHABET: ALPHABET - }; - }; - - - /* - * Return true if v is a BigNumber instance, otherwise return false. - * - * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed. - * - * v {any} - * - * '[BigNumber Error] Invalid BigNumber: {v}' - */ - BigNumber.isBigNumber = function (v) { - if (!v || v._isBigNumber !== true) return false; - if (!BigNumber.DEBUG) return true; - - var i, n, - c = v.c, - e = v.e, - s = v.s; - - out: if ({}.toString.call(c) == '[object Array]') { - - if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) { - - // If the first element is zero, the BigNumber value must be zero. - if (c[0] === 0) { - if (e === 0 && c.length === 1) return true; - break out; - } - - // Calculate number of digits that c[0] should have, based on the exponent. - i = (e + 1) % LOG_BASE; - if (i < 1) i += LOG_BASE; - - // Calculate number of digits of c[0]. - //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) { - if (String(c[0]).length == i) { - - for (i = 0; i < c.length; i++) { - n = c[i]; - if (n < 0 || n >= BASE || n !== mathfloor(n)) break out; - } - - // Last element cannot be zero, unless it is the only element. - if (n !== 0) return true; - } - } - - // Infinity/NaN - } else if (c === null && e === null && (s === null || s === 1 || s === -1)) { - return true; - } - - throw Error - (bignumberError + 'Invalid BigNumber: ' + v); - }; - - - /* - * Return a new BigNumber whose value is the maximum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.maximum = BigNumber.max = function () { - return maxOrMin(arguments, P.lt); - }; - - - /* - * Return a new BigNumber whose value is the minimum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.minimum = BigNumber.min = function () { - return maxOrMin(arguments, P.gt); - }; - - - /* - * Return a new BigNumber with a random value equal to or greater than 0 and less than 1, - * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing - * zeros are produced). - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}' - * '[BigNumber Error] crypto unavailable' - */ - BigNumber.random = (function () { - var pow2_53 = 0x20000000000000; - - // Return a 53 bit integer n, where 0 <= n < 9007199254740992. - // Check if Math.random() produces more than 32 bits of randomness. - // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits. - // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1. - var random53bitInt = (Math.random() * pow2_53) & 0x1fffff - ? function () { return mathfloor(Math.random() * pow2_53); } - : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) + - (Math.random() * 0x800000 | 0); }; - - return function (dp) { - var a, b, e, k, v, - i = 0, - c = [], - rand = new BigNumber(ONE); - - if (dp == null) dp = DECIMAL_PLACES; - else intCheck(dp, 0, MAX); - - k = mathceil(dp / LOG_BASE); - - if (CRYPTO) { - - // Browsers supporting crypto.getRandomValues. - if (crypto.getRandomValues) { - - a = crypto.getRandomValues(new Uint32Array(k *= 2)); - - for (; i < k;) { - - // 53 bits: - // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2) - // 11111 11111111 11111111 11111111 11100000 00000000 00000000 - // ((Math.pow(2, 32) - 1) >>> 11).toString(2) - // 11111 11111111 11111111 - // 0x20000 is 2^21. - v = a[i] * 0x20000 + (a[i + 1] >>> 11); - - // Rejection sampling: - // 0 <= v < 9007199254740992 - // Probability that v >= 9e15, is - // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251 - if (v >= 9e15) { - b = crypto.getRandomValues(new Uint32Array(2)); - a[i] = b[0]; - a[i + 1] = b[1]; - } else { - - // 0 <= v <= 8999999999999999 - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 2; - } - } - i = k / 2; - - // Node.js supporting crypto.randomBytes. - } else if (crypto.randomBytes) { - - // buffer - a = crypto.randomBytes(k *= 7); - - for (; i < k;) { - - // 0x1000000000000 is 2^48, 0x10000000000 is 2^40 - // 0x100000000 is 2^32, 0x1000000 is 2^24 - // 11111 11111111 11111111 11111111 11111111 11111111 11111111 - // 0 <= v < 9007199254740992 - v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) + - (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) + - (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6]; - - if (v >= 9e15) { - crypto.randomBytes(7).copy(a, i); - } else { - - // 0 <= (v % 1e14) <= 99999999999999 - c.push(v % 1e14); - i += 7; - } - } - i = k / 7; - } else { - CRYPTO = false; - throw Error - (bignumberError + 'crypto unavailable'); - } - } - - // Use Math.random. - if (!CRYPTO) { - - for (; i < k;) { - v = random53bitInt(); - if (v < 9e15) c[i++] = v % 1e14; - } - } - - k = c[--i]; - dp %= LOG_BASE; - - // Convert trailing digits to zeros according to dp. - if (k && dp) { - v = POWS_TEN[LOG_BASE - dp]; - c[i] = mathfloor(k / v) * v; - } - - // Remove trailing elements which are zero. - for (; c[i] === 0; c.pop(), i--); - - // Zero? - if (i < 0) { - c = [e = 0]; - } else { - - // Remove leading elements which are zero and adjust exponent accordingly. - for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE); - - // Count the digits of the first element of c to determine leading zeros, and... - for (i = 1, v = c[0]; v >= 10; v /= 10, i++); - - // adjust the exponent accordingly. - if (i < LOG_BASE) e -= LOG_BASE - i; - } - - rand.e = e; - rand.c = c; - return rand; - }; - })(); - - - /* - * Return a BigNumber whose value is the sum of the arguments. - * - * arguments {number|string|BigNumber} - */ - BigNumber.sum = function () { - var i = 1, - args = arguments, - sum = new BigNumber(args[0]); - for (; i < args.length;) sum = sum.plus(args[i++]); - return sum; - }; - - - // PRIVATE FUNCTIONS - - - // Called by BigNumber and BigNumber.prototype.toString. - convertBase = (function () { - var decimal = '0123456789'; - - /* - * Convert string of baseIn to an array of numbers of baseOut. - * Eg. toBaseOut('255', 10, 16) returns [15, 15]. - * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5]. - */ - function toBaseOut(str, baseIn, baseOut, alphabet) { - var j, - arr = [0], - arrL, - i = 0, - len = str.length; - - for (; i < len;) { - for (arrL = arr.length; arrL--; arr[arrL] *= baseIn); - - arr[0] += alphabet.indexOf(str.charAt(i++)); - - for (j = 0; j < arr.length; j++) { - - if (arr[j] > baseOut - 1) { - if (arr[j + 1] == null) arr[j + 1] = 0; - arr[j + 1] += arr[j] / baseOut | 0; - arr[j] %= baseOut; - } - } - } - - return arr.reverse(); - } - - // Convert a numeric string of baseIn to a numeric string of baseOut. - // If the caller is toString, we are converting from base 10 to baseOut. - // If the caller is BigNumber, we are converting from baseIn to base 10. - return function (str, baseIn, baseOut, sign, callerIsToString) { - var alphabet, d, e, k, r, x, xc, y, - i = str.indexOf('.'), - dp = DECIMAL_PLACES, - rm = ROUNDING_MODE; - - // Non-integer. - if (i >= 0) { - k = POW_PRECISION; - - // Unlimited precision. - POW_PRECISION = 0; - str = str.replace('.', ''); - y = new BigNumber(baseIn); - x = y.pow(str.length - i); - POW_PRECISION = k; - - // Convert str as if an integer, then restore the fraction part by dividing the - // result by its base raised to a power. - - y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'), - 10, baseOut, decimal); - y.e = y.c.length; - } - - // Convert the number as integer. - - xc = toBaseOut(str, baseIn, baseOut, callerIsToString - ? (alphabet = ALPHABET, decimal) - : (alphabet = decimal, ALPHABET)); - - // xc now represents str as an integer and converted to baseOut. e is the exponent. - e = k = xc.length; - - // Remove trailing zeros. - for (; xc[--k] == 0; xc.pop()); - - // Zero? - if (!xc[0]) return alphabet.charAt(0); - - // Does str represent an integer? If so, no need for the division. - if (i < 0) { - --e; - } else { - x.c = xc; - x.e = e; - - // The sign is needed for correct rounding. - x.s = sign; - x = div(x, y, dp, rm, baseOut); - xc = x.c; - r = x.r; - e = x.e; - } - - // xc now represents str converted to baseOut. - - // THe index of the rounding digit. - d = e + dp + 1; - - // The rounding digit: the digit to the right of the digit that may be rounded up. - i = xc[d]; - - // Look at the rounding digits and mode to determine whether to round up. - - k = baseOut / 2; - r = r || d < 0 || xc[d + 1] != null; - - r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 || - rm == (x.s < 0 ? 8 : 7)); - - // If the index of the rounding digit is not greater than zero, or xc represents - // zero, then the result of the base conversion is zero or, if rounding up, a value - // such as 0.00001. - if (d < 1 || !xc[0]) { - - // 1^-dp or 0 - str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0); - } else { - - // Truncate xc to the required number of decimal places. - xc.length = d; - - // Round up? - if (r) { - - // Rounding up may mean the previous digit has to be rounded up and so on. - for (--baseOut; ++xc[--d] > baseOut;) { - xc[d] = 0; - - if (!d) { - ++e; - xc = [1].concat(xc); - } - } - } - - // Determine trailing zeros. - for (k = xc.length; !xc[--k];); - - // E.g. [4, 11, 15] becomes 4bf. - for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++])); - - // Add leading zeros, decimal point and trailing zeros as required. - str = toFixedPoint(str, e, alphabet.charAt(0)); - } - - // The caller will add the sign. - return str; - }; - })(); - - - // Perform division in the specified base. Called by div and convertBase. - div = (function () { - - // Assume non-zero x and k. - function multiply(x, k, base) { - var m, temp, xlo, xhi, - carry = 0, - i = x.length, - klo = k % SQRT_BASE, - khi = k / SQRT_BASE | 0; - - for (x = x.slice(); i--;) { - xlo = x[i] % SQRT_BASE; - xhi = x[i] / SQRT_BASE | 0; - m = khi * xlo + xhi * klo; - temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry; - carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi; - x[i] = temp % base; - } - - if (carry) x = [carry].concat(x); - - return x; - } - - function compare(a, b, aL, bL) { - var i, cmp; - - if (aL != bL) { - cmp = aL > bL ? 1 : -1; - } else { - - for (i = cmp = 0; i < aL; i++) { - - if (a[i] != b[i]) { - cmp = a[i] > b[i] ? 1 : -1; - break; - } - } - } - - return cmp; - } - - function subtract(a, b, aL, base) { - var i = 0; - - // Subtract b from a. - for (; aL--;) { - a[aL] -= i; - i = a[aL] < b[aL] ? 1 : 0; - a[aL] = i * base + a[aL] - b[aL]; - } - - // Remove leading zeros. - for (; !a[0] && a.length > 1; a.splice(0, 1)); - } - - // x: dividend, y: divisor. - return function (x, y, dp, rm, base) { - var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0, - yL, yz, - s = x.s == y.s ? 1 : -1, - xc = x.c, - yc = y.c; - - // Either NaN, Infinity or 0? - if (!xc || !xc[0] || !yc || !yc[0]) { - - return new BigNumber( - - // Return NaN if either NaN, or both Infinity or 0. - !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN : - - // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0. - xc && xc[0] == 0 || !yc ? s * 0 : s / 0 - ); - } - - q = new BigNumber(s); - qc = q.c = []; - e = x.e - y.e; - s = dp + e + 1; - - if (!base) { - base = BASE; - e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE); - s = s / LOG_BASE | 0; - } - - // Result exponent may be one less then the current value of e. - // The coefficients of the BigNumbers from convertBase may have trailing zeros. - for (i = 0; yc[i] == (xc[i] || 0); i++); - - if (yc[i] > (xc[i] || 0)) e--; - - if (s < 0) { - qc.push(1); - more = true; - } else { - xL = xc.length; - yL = yc.length; - i = 0; - s += 2; - - // Normalise xc and yc so highest order digit of yc is >= base / 2. - - n = mathfloor(base / (yc[0] + 1)); - - // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1. - // if (n > 1 || n++ == 1 && yc[0] < base / 2) { - if (n > 1) { - yc = multiply(yc, n, base); - xc = multiply(xc, n, base); - yL = yc.length; - xL = xc.length; - } - - xi = yL; - rem = xc.slice(0, yL); - remL = rem.length; - - // Add zeros to make remainder as long as divisor. - for (; remL < yL; rem[remL++] = 0); - yz = yc.slice(); - yz = [0].concat(yz); - yc0 = yc[0]; - if (yc[1] >= base / 2) yc0++; - // Not necessary, but to prevent trial digit n > base, when using base 3. - // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15; - - do { - n = 0; - - // Compare divisor and remainder. - cmp = compare(yc, rem, yL, remL); - - // If divisor < remainder. - if (cmp < 0) { - - // Calculate trial digit, n. - - rem0 = rem[0]; - if (yL != remL) rem0 = rem0 * base + (rem[1] || 0); - - // n is how many times the divisor goes into the current remainder. - n = mathfloor(rem0 / yc0); - - // Algorithm: - // product = divisor multiplied by trial digit (n). - // Compare product and remainder. - // If product is greater than remainder: - // Subtract divisor from product, decrement trial digit. - // Subtract product from remainder. - // If product was less than remainder at the last compare: - // Compare new remainder and divisor. - // If remainder is greater than divisor: - // Subtract divisor from remainder, increment trial digit. - - if (n > 1) { - - // n may be > base only when base is 3. - if (n >= base) n = base - 1; - - // product = divisor * trial digit. - prod = multiply(yc, n, base); - prodL = prod.length; - remL = rem.length; - - // Compare product and remainder. - // If product > remainder then trial digit n too high. - // n is 1 too high about 5% of the time, and is not known to have - // ever been more than 1 too high. - while (compare(prod, rem, prodL, remL) == 1) { - n--; - - // Subtract divisor from product. - subtract(prod, yL < prodL ? yz : yc, prodL, base); - prodL = prod.length; - cmp = 1; - } - } else { - - // n is 0 or 1, cmp is -1. - // If n is 0, there is no need to compare yc and rem again below, - // so change cmp to 1 to avoid it. - // If n is 1, leave cmp as -1, so yc and rem are compared again. - if (n == 0) { - - // divisor < remainder, so n must be at least 1. - cmp = n = 1; - } - - // product = divisor - prod = yc.slice(); - prodL = prod.length; - } - - if (prodL < remL) prod = [0].concat(prod); - - // Subtract product from remainder. - subtract(rem, prod, remL, base); - remL = rem.length; - - // If product was < remainder. - if (cmp == -1) { - - // Compare divisor and new remainder. - // If divisor < new remainder, subtract divisor from remainder. - // Trial digit n too low. - // n is 1 too low about 5% of the time, and very rarely 2 too low. - while (compare(yc, rem, yL, remL) < 1) { - n++; - - // Subtract divisor from remainder. - subtract(rem, yL < remL ? yz : yc, remL, base); - remL = rem.length; - } - } - } else if (cmp === 0) { - n++; - rem = [0]; - } // else cmp === 1 and n will be 0 - - // Add the next digit, n, to the result array. - qc[i++] = n; - - // Update the remainder. - if (rem[0]) { - rem[remL++] = xc[xi] || 0; - } else { - rem = [xc[xi]]; - remL = 1; - } - } while ((xi++ < xL || rem[0] != null) && s--); - - more = rem[0] != null; - - // Leading zero? - if (!qc[0]) qc.splice(0, 1); - } - - if (base == BASE) { - - // To calculate q.e, first get the number of digits of qc[0]. - for (i = 1, s = qc[0]; s >= 10; s /= 10, i++); - - round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more); - - // Caller is convertBase. - } else { - q.e = e; - q.r = +more; - } - - return q; - }; - })(); - - - /* - * Return a string representing the value of BigNumber n in fixed-point or exponential - * notation rounded to the specified decimal places or significant digits. - * - * n: a BigNumber. - * i: the index of the last digit required (i.e. the digit that may be rounded up). - * rm: the rounding mode. - * id: 1 (toExponential) or 2 (toPrecision). - */ - function format(n, i, rm, id) { - var c0, e, ne, len, str; - - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - if (!n.c) return n.toString(); - - c0 = n.c[0]; - ne = n.e; - - if (i == null) { - str = coeffToString(n.c); - str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS) - ? toExponential(str, ne) - : toFixedPoint(str, ne, '0'); - } else { - n = round(new BigNumber(n), i, rm); - - // n.e may have changed if the value was rounded up. - e = n.e; - - str = coeffToString(n.c); - len = str.length; - - // toPrecision returns exponential notation if the number of significant digits - // specified is less than the number of digits necessary to represent the integer - // part of the value in fixed-point notation. - - // Exponential notation. - if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) { - - // Append zeros? - for (; len < i; str += '0', len++); - str = toExponential(str, e); - - // Fixed-point notation. - } else { - i -= ne; - str = toFixedPoint(str, e, '0'); - - // Append zeros? - if (e + 1 > len) { - if (--i > 0) for (str += '.'; i--; str += '0'); - } else { - i += e - len; - if (i > 0) { - if (e + 1 == len) str += '.'; - for (; i--; str += '0'); - } - } - } - } - - return n.s < 0 && c0 ? '-' + str : str; - } - - - // Handle BigNumber.max and BigNumber.min. - function maxOrMin(args, method) { - var n, - i = 1, - m = new BigNumber(args[0]); - - for (; i < args.length; i++) { - n = new BigNumber(args[i]); - - // If any number is NaN, return NaN. - if (!n.s) { - m = n; - break; - } else if (method.call(m, n)) { - m = n; - } - } - - return m; - } - - - /* - * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP. - * Called by minus, plus and times. - */ - function normalise(n, c, e) { - var i = 1, - j = c.length; - - // Remove trailing zeros. - for (; !c[--j]; c.pop()); - - // Calculate the base 10 exponent. First get the number of digits of c[0]. - for (j = c[0]; j >= 10; j /= 10, i++); - - // Overflow? - if ((e = i + e * LOG_BASE - 1) > MAX_EXP) { - - // Infinity. - n.c = n.e = null; - - // Underflow? - } else if (e < MIN_EXP) { - - // Zero. - n.c = [n.e = 0]; - } else { - n.e = e; - n.c = c; - } - - return n; - } - - - // Handle values that fail the validity test in BigNumber. - parseNumeric = (function () { - var basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i, - dotAfter = /^([^.]+)\.$/, - dotBefore = /^\.([^.]+)$/, - isInfinityOrNaN = /^-?(Infinity|NaN)$/, - whitespaceOrPlus = /^\s*\+(?=[\w.])|^\s+|\s+$/g; - - return function (x, str, isNum, b) { - var base, - s = isNum ? str : str.replace(whitespaceOrPlus, ''); - - // No exception on ±Infinity or NaN. - if (isInfinityOrNaN.test(s)) { - x.s = isNaN(s) ? null : s < 0 ? -1 : 1; - } else { - if (!isNum) { - - // basePrefix = /^(-?)0([xbo])(?=\w[\w.]*$)/i - s = s.replace(basePrefix, function (m, p1, p2) { - base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8; - return !b || b == base ? p1 : m; - }); - - if (b) { - base = b; - - // E.g. '1.' to '1', '.1' to '0.1' - s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1'); - } - - if (str != s) return new BigNumber(s, base); - } - - // '[BigNumber Error] Not a number: {n}' - // '[BigNumber Error] Not a base {b} number: {n}' - if (BigNumber.DEBUG) { - throw Error - (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str); - } - - // NaN - x.s = null; - } - - x.c = x.e = null; - } - })(); - - - /* - * Round x to sd significant digits using rounding mode rm. Check for over/under-flow. - * If r is truthy, it is known that there are more digits after the rounding digit. - */ - function round(x, sd, rm, r) { - var d, i, j, k, n, ni, rd, - xc = x.c, - pows10 = POWS_TEN; - - // if x is not Infinity or NaN... - if (xc) { - - // rd is the rounding digit, i.e. the digit after the digit that may be rounded up. - // n is a base 1e14 number, the value of the element of array x.c containing rd. - // ni is the index of n within x.c. - // d is the number of digits of n. - // i is the index of rd within n including leading zeros. - // j is the actual index of rd within n (if < 0, rd is a leading zero). - out: { - - // Get the number of digits of the first element of xc. - for (d = 1, k = xc[0]; k >= 10; k /= 10, d++); - i = sd - d; - - // If the rounding digit is in the first element of xc... - if (i < 0) { - i += LOG_BASE; - j = sd; - n = xc[ni = 0]; - - // Get the rounding digit at index j of n. - rd = n / pows10[d - j - 1] % 10 | 0; - } else { - ni = mathceil((i + 1) / LOG_BASE); - - if (ni >= xc.length) { - - if (r) { - - // Needed by sqrt. - for (; xc.length <= ni; xc.push(0)); - n = rd = 0; - d = 1; - i %= LOG_BASE; - j = i - LOG_BASE + 1; - } else { - break out; - } - } else { - n = k = xc[ni]; - - // Get the number of digits of n. - for (d = 1; k >= 10; k /= 10, d++); - - // Get the index of rd within n. - i %= LOG_BASE; - - // Get the index of rd within n, adjusted for leading zeros. - // The number of leading zeros of n is given by LOG_BASE - d. - j = i - LOG_BASE + d; - - // Get the rounding digit at index j of n. - rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0; - } - } - - r = r || sd < 0 || - - // Are there any non-zero digits after the rounding digit? - // The expression n % pows10[d - j - 1] returns all digits of n to the right - // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714. - xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]); - - r = rm < 4 - ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2)) - : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 && - - // Check whether the digit to the left of the rounding digit is odd. - ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 || - rm == (x.s < 0 ? 8 : 7)); - - if (sd < 1 || !xc[0]) { - xc.length = 0; - - if (r) { - - // Convert sd to decimal places. - sd -= x.e + 1; - - // 1, 0.1, 0.01, 0.001, 0.0001 etc. - xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE]; - x.e = -sd || 0; - } else { - - // Zero. - xc[0] = x.e = 0; - } - - return x; - } - - // Remove excess digits. - if (i == 0) { - xc.length = ni; - k = 1; - ni--; - } else { - xc.length = ni + 1; - k = pows10[LOG_BASE - i]; - - // E.g. 56700 becomes 56000 if 7 is the rounding digit. - // j > 0 means i > number of leading zeros of n. - xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0; - } - - // Round up? - if (r) { - - for (; ;) { - - // If the digit to be rounded up is in the first element of xc... - if (ni == 0) { - - // i will be the length of xc[0] before k is added. - for (i = 1, j = xc[0]; j >= 10; j /= 10, i++); - j = xc[0] += k; - for (k = 1; j >= 10; j /= 10, k++); - - // if i != k the length has increased. - if (i != k) { - x.e++; - if (xc[0] == BASE) xc[0] = 1; - } - - break; - } else { - xc[ni] += k; - if (xc[ni] != BASE) break; - xc[ni--] = 0; - k = 1; - } - } - } - - // Remove trailing zeros. - for (i = xc.length; xc[--i] === 0; xc.pop()); - } - - // Overflow? Infinity. - if (x.e > MAX_EXP) { - x.c = x.e = null; - - // Underflow? Zero. - } else if (x.e < MIN_EXP) { - x.c = [x.e = 0]; - } - } - - return x; - } - - - function valueOf(n) { - var str, - e = n.e; - - if (e === null) return n.toString(); - - str = coeffToString(n.c); - - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(str, e) - : toFixedPoint(str, e, '0'); - - return n.s < 0 ? '-' + str : str; - } - - - // PROTOTYPE/INSTANCE METHODS - - - /* - * Return a new BigNumber whose value is the absolute value of this BigNumber. - */ - P.absoluteValue = P.abs = function () { - var x = new BigNumber(this); - if (x.s < 0) x.s = 1; - return x; - }; - - - /* - * Return - * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b), - * -1 if the value of this BigNumber is less than the value of BigNumber(y, b), - * 0 if they have the same value, - * or null if the value of either is NaN. - */ - P.comparedTo = function (y, b) { - return compare(this, new BigNumber(y, b)); - }; - - - /* - * If dp is undefined or null or true or false, return the number of decimal places of the - * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * - * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * [dp] {number} Decimal places: integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.decimalPlaces = P.dp = function (dp, rm) { - var c, n, v, - x = this; - - if (dp != null) { - intCheck(dp, 0, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), dp + x.e + 1, rm); - } - - if (!(c = x.c)) return null; - n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE; - - // Subtract the number of trailing zeros of the last number. - if (v = c[v]) for (; v % 10 == 0; v /= 10, n--); - if (n < 0) n = 0; - - return n; - }; - - - /* - * n / 0 = I - * n / N = N - * n / I = 0 - * 0 / n = 0 - * 0 / 0 = N - * 0 / N = N - * 0 / I = 0 - * N / n = N - * N / 0 = N - * N / N = N - * N / I = N - * I / n = I - * I / 0 = I - * I / N = N - * I / I = N - * - * Return a new BigNumber whose value is the value of this BigNumber divided by the value of - * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.dividedBy = P.div = function (y, b) { - return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE); - }; - - - /* - * Return a new BigNumber whose value is the integer part of dividing the value of this - * BigNumber by the value of BigNumber(y, b). - */ - P.dividedToIntegerBy = P.idiv = function (y, b) { - return div(this, new BigNumber(y, b), 0, 1); - }; - - - /* - * Return a BigNumber whose value is the value of this BigNumber exponentiated by n. - * - * If m is present, return the result modulo m. - * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE. - * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE. - * - * The modular power operation works efficiently when x, n, and m are integers, otherwise it - * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0. - * - * n {number|string|BigNumber} The exponent. An integer. - * [m] {number|string|BigNumber} The modulus. - * - * '[BigNumber Error] Exponent not an integer: {n}' - */ - P.exponentiatedBy = P.pow = function (n, m) { - var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y, - x = this; - - n = new BigNumber(n); - - // Allow NaN and ±Infinity, but not other non-integers. - if (n.c && !n.isInteger()) { - throw Error - (bignumberError + 'Exponent not an integer: ' + valueOf(n)); - } - - if (m != null) m = new BigNumber(m); - - // Exponent of MAX_SAFE_INTEGER is 15. - nIsBig = n.e > 14; - - // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0. - if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) { - - // The sign of the result of pow when x is negative depends on the evenness of n. - // If +n overflows to ±Infinity, the evenness of n would be not be known. - y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n))); - return m ? y.mod(m) : y; - } - - nIsNeg = n.s < 0; - - if (m) { - - // x % m returns NaN if abs(m) is zero, or m is NaN. - if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN); - - isModExp = !nIsNeg && x.isInteger() && m.isInteger(); - - if (isModExp) x = x.mod(m); - - // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15. - // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15. - } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0 - // [1, 240000000] - ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7 - // [80000000000000] [99999750000000] - : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) { - - // If x is negative and n is odd, k = -0, else k = 0. - k = x.s < 0 && isOdd(n) ? -0 : 0; - - // If x >= 1, k = ±Infinity. - if (x.e > -1) k = 1 / k; - - // If n is negative return ±0, else return ±Infinity. - return new BigNumber(nIsNeg ? 1 / k : k); - - } else if (POW_PRECISION) { - - // Truncating each coefficient array to a length of k after each multiplication - // equates to truncating significant digits to POW_PRECISION + [28, 41], - // i.e. there will be a minimum of 28 guard digits retained. - k = mathceil(POW_PRECISION / LOG_BASE + 2); - } - - if (nIsBig) { - half = new BigNumber(0.5); - if (nIsNeg) n.s = 1; - nIsOdd = isOdd(n); - } else { - i = Math.abs(+valueOf(n)); - nIsOdd = i % 2; - } - - y = new BigNumber(ONE); - - // Performs 54 loop iterations for n of 9007199254740991. - for (; ;) { - - if (nIsOdd) { - y = y.times(x); - if (!y.c) break; - - if (k) { - if (y.c.length > k) y.c.length = k; - } else if (isModExp) { - y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m)); - } - } - - if (i) { - i = mathfloor(i / 2); - if (i === 0) break; - nIsOdd = i % 2; - } else { - n = n.times(half); - round(n, n.e + 1, 1); - - if (n.e > 14) { - nIsOdd = isOdd(n); - } else { - i = +valueOf(n); - if (i === 0) break; - nIsOdd = i % 2; - } - } - - x = x.times(x); - - if (k) { - if (x.c && x.c.length > k) x.c.length = k; - } else if (isModExp) { - x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m)); - } - } - - if (isModExp) return y; - if (nIsNeg) y = ONE.div(y); - - return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer - * using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}' - */ - P.integerValue = function (rm) { - var n = new BigNumber(this); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - return round(n, n.e + 1, rm); - }; - - - /* - * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b), - * otherwise return false. - */ - P.isEqualTo = P.eq = function (y, b) { - return compare(this, new BigNumber(y, b)) === 0; - }; - - - /* - * Return true if the value of this BigNumber is a finite number, otherwise return false. - */ - P.isFinite = function () { - return !!this.c; - }; - - - /* - * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isGreaterThan = P.gt = function (y, b) { - return compare(this, new BigNumber(y, b)) > 0; - }; - - - /* - * Return true if the value of this BigNumber is greater than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isGreaterThanOrEqualTo = P.gte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0; - - }; - - - /* - * Return true if the value of this BigNumber is an integer, otherwise return false. - */ - P.isInteger = function () { - return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2; - }; - - - /* - * Return true if the value of this BigNumber is less than the value of BigNumber(y, b), - * otherwise return false. - */ - P.isLessThan = P.lt = function (y, b) { - return compare(this, new BigNumber(y, b)) < 0; - }; - - - /* - * Return true if the value of this BigNumber is less than or equal to the value of - * BigNumber(y, b), otherwise return false. - */ - P.isLessThanOrEqualTo = P.lte = function (y, b) { - return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0; - }; - - - /* - * Return true if the value of this BigNumber is NaN, otherwise return false. - */ - P.isNaN = function () { - return !this.s; - }; - - - /* - * Return true if the value of this BigNumber is negative, otherwise return false. - */ - P.isNegative = function () { - return this.s < 0; - }; - - - /* - * Return true if the value of this BigNumber is positive, otherwise return false. - */ - P.isPositive = function () { - return this.s > 0; - }; - - - /* - * Return true if the value of this BigNumber is 0 or -0, otherwise return false. - */ - P.isZero = function () { - return !!this.c && this.c[0] == 0; - }; - - - /* - * n - 0 = n - * n - N = N - * n - I = -I - * 0 - n = -n - * 0 - 0 = 0 - * 0 - N = N - * 0 - I = -I - * N - n = N - * N - 0 = N - * N - N = N - * N - I = N - * I - n = I - * I - 0 = I - * I - N = N - * I - I = N - * - * Return a new BigNumber whose value is the value of this BigNumber minus the value of - * BigNumber(y, b). - */ - P.minus = function (y, b) { - var i, j, t, xLTy, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.plus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Either Infinity? - if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN); - - // Either zero? - if (!xc[0] || !yc[0]) { - - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x : - - // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity - ROUNDING_MODE == 3 ? -0 : 0); - } - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Determine which is the bigger number. - if (a = xe - ye) { - - if (xLTy = a < 0) { - a = -a; - t = xc; - } else { - ye = xe; - t = yc; - } - - t.reverse(); - - // Prepend zeros to equalise exponents. - for (b = a; b--; t.push(0)); - t.reverse(); - } else { - - // Exponents equal. Check digit by digit. - j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b; - - for (a = b = 0; b < j; b++) { - - if (xc[b] != yc[b]) { - xLTy = xc[b] < yc[b]; - break; - } - } - } - - // x < y? Point xc to the array of the bigger number. - if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s; - - b = (j = yc.length) - (i = xc.length); - - // Append zeros to xc if shorter. - // No need to add zeros to yc if shorter as subtract only needs to start at yc.length. - if (b > 0) for (; b--; xc[i++] = 0); - b = BASE - 1; - - // Subtract yc from xc. - for (; j > a;) { - - if (xc[--j] < yc[j]) { - for (i = j; i && !xc[--i]; xc[i] = b); - --xc[i]; - xc[j] += BASE; - } - - xc[j] -= yc[j]; - } - - // Remove leading zeros and adjust exponent accordingly. - for (; xc[0] == 0; xc.splice(0, 1), --ye); - - // Zero? - if (!xc[0]) { - - // Following IEEE 754 (2008) 6.3, - // n - n = +0 but n - n = -0 when rounding towards -Infinity. - y.s = ROUNDING_MODE == 3 ? -1 : 1; - y.c = [y.e = 0]; - return y; - } - - // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity - // for finite x and y. - return normalise(y, xc, ye); - }; - - - /* - * n % 0 = N - * n % N = N - * n % I = n - * 0 % n = 0 - * -0 % n = -0 - * 0 % 0 = N - * 0 % N = N - * 0 % I = 0 - * N % n = N - * N % 0 = N - * N % N = N - * N % I = N - * I % n = N - * I % 0 = N - * I % N = N - * I % I = N - * - * Return a new BigNumber whose value is the value of this BigNumber modulo the value of - * BigNumber(y, b). The result depends on the value of MODULO_MODE. - */ - P.modulo = P.mod = function (y, b) { - var q, s, - x = this; - - y = new BigNumber(y, b); - - // Return NaN if x is Infinity or NaN, or y is NaN or zero. - if (!x.c || !y.s || y.c && !y.c[0]) { - return new BigNumber(NaN); - - // Return x if y is Infinity or x is zero. - } else if (!y.c || x.c && !x.c[0]) { - return new BigNumber(x); - } - - if (MODULO_MODE == 9) { - - // Euclidian division: q = sign(y) * floor(x / abs(y)) - // r = x - qy where 0 <= r < abs(y) - s = y.s; - y.s = 1; - q = div(x, y, 0, 3); - y.s = s; - q.s *= s; - } else { - q = div(x, y, 0, MODULO_MODE); - } - - y = x.minus(q.times(y)); - - // To match JavaScript %, ensure sign of zero is sign of dividend. - if (!y.c[0] && MODULO_MODE == 1) y.s = x.s; - - return y; - }; - - - /* - * n * 0 = 0 - * n * N = N - * n * I = I - * 0 * n = 0 - * 0 * 0 = 0 - * 0 * N = N - * 0 * I = N - * N * n = N - * N * 0 = N - * N * N = N - * N * I = N - * I * n = I - * I * 0 = N - * I * N = N - * I * I = I - * - * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value - * of BigNumber(y, b). - */ - P.multipliedBy = P.times = function (y, b) { - var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc, - base, sqrtBase, - x = this, - xc = x.c, - yc = (y = new BigNumber(y, b)).c; - - // Either NaN, ±Infinity or ±0? - if (!xc || !yc || !xc[0] || !yc[0]) { - - // Return NaN if either is NaN, or one is 0 and the other is Infinity. - if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) { - y.c = y.e = y.s = null; - } else { - y.s *= x.s; - - // Return ±Infinity if either is ±Infinity. - if (!xc || !yc) { - y.c = y.e = null; - - // Return ±0 if either is ±0. - } else { - y.c = [0]; - y.e = 0; - } - } - - return y; - } - - e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE); - y.s *= x.s; - xcL = xc.length; - ycL = yc.length; - - // Ensure xc points to longer array and xcL to its length. - if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i; - - // Initialise the result array with zeros. - for (i = xcL + ycL, zc = []; i--; zc.push(0)); - - base = BASE; - sqrtBase = SQRT_BASE; - - for (i = ycL; --i >= 0;) { - c = 0; - ylo = yc[i] % sqrtBase; - yhi = yc[i] / sqrtBase | 0; - - for (k = xcL, j = i + k; j > i;) { - xlo = xc[--k] % sqrtBase; - xhi = xc[k] / sqrtBase | 0; - m = yhi * xlo + xhi * ylo; - xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c; - c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi; - zc[j--] = xlo % base; - } - - zc[j] = c; - } - - if (c) { - ++e; - } else { - zc.splice(0, 1); - } - - return normalise(y, zc, e); - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber negated, - * i.e. multiplied by -1. - */ - P.negated = function () { - var x = new BigNumber(this); - x.s = -x.s || null; - return x; - }; - - - /* - * n + 0 = n - * n + N = N - * n + I = I - * 0 + n = n - * 0 + 0 = 0 - * 0 + N = N - * 0 + I = I - * N + n = N - * N + 0 = N - * N + N = N - * N + I = N - * I + n = I - * I + 0 = I - * I + N = N - * I + I = I - * - * Return a new BigNumber whose value is the value of this BigNumber plus the value of - * BigNumber(y, b). - */ - P.plus = function (y, b) { - var t, - x = this, - a = x.s; - - y = new BigNumber(y, b); - b = y.s; - - // Either NaN? - if (!a || !b) return new BigNumber(NaN); - - // Signs differ? - if (a != b) { - y.s = -b; - return x.minus(y); - } - - var xe = x.e / LOG_BASE, - ye = y.e / LOG_BASE, - xc = x.c, - yc = y.c; - - if (!xe || !ye) { - - // Return ±Infinity if either ±Infinity. - if (!xc || !yc) return new BigNumber(a / 0); - - // Either zero? - // Return y if y is non-zero, x if x is non-zero, or zero if both are zero. - if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0); - } - - xe = bitFloor(xe); - ye = bitFloor(ye); - xc = xc.slice(); - - // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts. - if (a = xe - ye) { - if (a > 0) { - ye = xe; - t = yc; - } else { - a = -a; - t = xc; - } - - t.reverse(); - for (; a--; t.push(0)); - t.reverse(); - } - - a = xc.length; - b = yc.length; - - // Point xc to the longer array, and b to the shorter length. - if (a - b < 0) t = yc, yc = xc, xc = t, b = a; - - // Only start adding at yc.length - 1 as the further digits of xc can be ignored. - for (a = 0; b;) { - a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0; - xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE; - } - - if (a) { - xc = [a].concat(xc); - ++ye; - } - - // No need to check for zero, as +x + +y != 0 && -x + -y != 0 - // ye = MAX_EXP + 1 possible - return normalise(y, xc, ye); - }; - - - /* - * If sd is undefined or null or true or false, return the number of significant digits of - * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN. - * If sd is true include integer-part trailing zeros in the count. - * - * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this - * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or - * ROUNDING_MODE if rm is omitted. - * - * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive. - * boolean: whether to count integer-part trailing zeros: true or false. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.precision = P.sd = function (sd, rm) { - var c, n, v, - x = this; - - if (sd != null && sd !== !!sd) { - intCheck(sd, 1, MAX); - if (rm == null) rm = ROUNDING_MODE; - else intCheck(rm, 0, 8); - - return round(new BigNumber(x), sd, rm); - } - - if (!(c = x.c)) return null; - v = c.length - 1; - n = v * LOG_BASE + 1; - - if (v = c[v]) { - - // Subtract the number of trailing zeros of the last element. - for (; v % 10 == 0; v /= 10, n--); - - // Add the number of digits of the first element. - for (v = c[0]; v >= 10; v /= 10, n++); - } - - if (sd && x.e + 1 > n) n = x.e + 1; - - return n; - }; - - - /* - * Return a new BigNumber whose value is the value of this BigNumber shifted by k places - * (powers of 10). Shift to the right if n > 0, and to the left if n < 0. - * - * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}' - */ - P.shiftedBy = function (k) { - intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - return this.times('1e' + k); - }; - - - /* - * sqrt(-n) = N - * sqrt(N) = N - * sqrt(-I) = N - * sqrt(I) = I - * sqrt(0) = 0 - * sqrt(-0) = -0 - * - * Return a new BigNumber whose value is the square root of the value of this BigNumber, - * rounded according to DECIMAL_PLACES and ROUNDING_MODE. - */ - P.squareRoot = P.sqrt = function () { - var m, n, r, rep, t, - x = this, - c = x.c, - s = x.s, - e = x.e, - dp = DECIMAL_PLACES + 4, - half = new BigNumber('0.5'); - - // Negative/NaN/Infinity/zero? - if (s !== 1 || !c || !c[0]) { - return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0); - } - - // Initial estimate. - s = Math.sqrt(+valueOf(x)); - - // Math.sqrt underflow/overflow? - // Pass x to Math.sqrt as integer, then adjust the exponent of the result. - if (s == 0 || s == 1 / 0) { - n = coeffToString(c); - if ((n.length + e) % 2 == 0) n += '0'; - s = Math.sqrt(+n); - e = bitFloor((e + 1) / 2) - (e < 0 || e % 2); - - if (s == 1 / 0) { - n = '5e' + e; - } else { - n = s.toExponential(); - n = n.slice(0, n.indexOf('e') + 1) + e; - } - - r = new BigNumber(n); - } else { - r = new BigNumber(s + ''); - } - - // Check for zero. - // r could be zero if MIN_EXP is changed after the this value was created. - // This would cause a division by zero (x/t) and hence Infinity below, which would cause - // coeffToString to throw. - if (r.c[0]) { - e = r.e; - s = e + dp; - if (s < 3) s = 0; - - // Newton-Raphson iteration. - for (; ;) { - t = r; - r = half.times(t.plus(div(x, t, dp, 1))); - - if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) { - - // The exponent of r may here be one less than the final result exponent, - // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits - // are indexed correctly. - if (r.e < e) --s; - n = n.slice(s - 3, s + 1); - - // The 4th rounding digit may be in error by -1 so if the 4 rounding digits - // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the - // iteration. - if (n == '9999' || !rep && n == '4999') { - - // On the first iteration only, check to see if rounding up gives the - // exact result as the nines may infinitely repeat. - if (!rep) { - round(t, t.e + DECIMAL_PLACES + 2, 0); - - if (t.times(t).eq(x)) { - r = t; - break; - } - } - - dp += 4; - s += 4; - rep = 1; - } else { - - // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact - // result. If not, then there are further digits and m will be truthy. - if (!+n || !+n.slice(1) && n.charAt(0) == '5') { - - // Truncate to the first rounding digit. - round(r, r.e + DECIMAL_PLACES + 2, 1); - m = !r.times(r).eq(x); - } - - break; - } - } - } - } - - return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m); - }; - - - /* - * Return a string representing the value of this BigNumber in exponential notation and - * rounded using ROUNDING_MODE to dp fixed decimal places. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toExponential = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp++; - } - return format(this, dp, rm, 1); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounding - * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted. - * - * Note: as with JavaScript's number type, (-0).toFixed(0) is '0', - * but e.g. (-0.00001).toFixed(0) is '-0'. - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - */ - P.toFixed = function (dp, rm) { - if (dp != null) { - intCheck(dp, 0, MAX); - dp = dp + this.e + 1; - } - return format(this, dp, rm); - }; - - - /* - * Return a string representing the value of this BigNumber in fixed-point notation rounded - * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties - * of the format or FORMAT object (see BigNumber.set). - * - * The formatting object may contain some or all of the properties shown below. - * - * FORMAT = { - * prefix: '', - * groupSize: 3, - * secondaryGroupSize: 0, - * groupSeparator: ',', - * decimalSeparator: '.', - * fractionGroupSize: 0, - * fractionGroupSeparator: '\xA0', // non-breaking space - * suffix: '' - * }; - * - * [dp] {number} Decimal places. Integer, 0 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * [format] {object} Formatting options. See FORMAT pbject above. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}' - * '[BigNumber Error] Argument not an object: {format}' - */ - P.toFormat = function (dp, rm, format) { - var str, - x = this; - - if (format == null) { - if (dp != null && rm && typeof rm == 'object') { - format = rm; - rm = null; - } else if (dp && typeof dp == 'object') { - format = dp; - dp = rm = null; - } else { - format = FORMAT; - } - } else if (typeof format != 'object') { - throw Error - (bignumberError + 'Argument not an object: ' + format); - } - - str = x.toFixed(dp, rm); - - if (x.c) { - var i, - arr = str.split('.'), - g1 = +format.groupSize, - g2 = +format.secondaryGroupSize, - groupSeparator = format.groupSeparator || '', - intPart = arr[0], - fractionPart = arr[1], - isNeg = x.s < 0, - intDigits = isNeg ? intPart.slice(1) : intPart, - len = intDigits.length; - - if (g2) i = g1, g1 = g2, g2 = i, len -= i; - - if (g1 > 0 && len > 0) { - i = len % g1 || g1; - intPart = intDigits.substr(0, i); - for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1); - if (g2 > 0) intPart += groupSeparator + intDigits.slice(i); - if (isNeg) intPart = '-' + intPart; - } - - str = fractionPart - ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize) - ? fractionPart.replace(new RegExp('\\d{' + g2 + '}\\B', 'g'), - '$&' + (format.fractionGroupSeparator || '')) - : fractionPart) - : intPart; - } - - return (format.prefix || '') + str + (format.suffix || ''); - }; - - - /* - * Return an array of two BigNumbers representing the value of this BigNumber as a simple - * fraction with an integer numerator and an integer denominator. - * The denominator will be a positive non-zero value less than or equal to the specified - * maximum denominator. If a maximum denominator is not specified, the denominator will be - * the lowest value necessary to represent the number exactly. - * - * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator. - * - * '[BigNumber Error] Argument {not an integer|out of range} : {md}' - */ - P.toFraction = function (md) { - var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s, - x = this, - xc = x.c; - - if (md != null) { - n = new BigNumber(md); - - // Throw if md is less than one or is not an integer, unless it is Infinity. - if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) { - throw Error - (bignumberError + 'Argument ' + - (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n)); - } - } - - if (!xc) return new BigNumber(x); - - d = new BigNumber(ONE); - n1 = d0 = new BigNumber(ONE); - d1 = n0 = new BigNumber(ONE); - s = coeffToString(xc); - - // Determine initial denominator. - // d is a power of 10 and the minimum max denominator that specifies the value exactly. - e = d.e = s.length - x.e - 1; - d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp]; - md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n; - - exp = MAX_EXP; - MAX_EXP = 1 / 0; - n = new BigNumber(s); - - // n0 = d1 = 0 - n0.c[0] = 0; - - for (; ;) { - q = div(n, d, 0, 1); - d2 = d0.plus(q.times(d1)); - if (d2.comparedTo(md) == 1) break; - d0 = d1; - d1 = d2; - n1 = n0.plus(q.times(d2 = n1)); - n0 = d2; - d = n.minus(q.times(d2 = d)); - n = d2; - } - - d2 = div(md.minus(d0), d1, 0, 1); - n0 = n0.plus(d2.times(n1)); - d0 = d0.plus(d2.times(d1)); - n0.s = n1.s = x.s; - e = e * 2; - - // Determine which fraction is closer to x, n0/d0 or n1/d1 - r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo( - div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0]; - - MAX_EXP = exp; - - return r; - }; - - - /* - * Return the value of this BigNumber converted to a number primitive. - */ - P.toNumber = function () { - return +valueOf(this); - }; - - - /* - * Return a string representing the value of this BigNumber rounded to sd significant digits - * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits - * necessary to represent the integer part of the value in fixed-point notation, then use - * exponential notation. - * - * [sd] {number} Significant digits. Integer, 1 to MAX inclusive. - * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive. - * - * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}' - */ - P.toPrecision = function (sd, rm) { - if (sd != null) intCheck(sd, 1, MAX); - return format(this, sd, rm, 2); - }; - - - /* - * Return a string representing the value of this BigNumber in base b, or base 10 if b is - * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and - * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent - * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than - * TO_EXP_NEG, return exponential notation. - * - * [b] {number} Integer, 2 to ALPHABET.length inclusive. - * - * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}' - */ - P.toString = function (b) { - var str, - n = this, - s = n.s, - e = n.e; - - // Infinity or NaN? - if (e === null) { - if (s) { - str = 'Infinity'; - if (s < 0) str = '-' + str; - } else { - str = 'NaN'; - } - } else { - if (b == null) { - str = e <= TO_EXP_NEG || e >= TO_EXP_POS - ? toExponential(coeffToString(n.c), e) - : toFixedPoint(coeffToString(n.c), e, '0'); - } else if (b === 10) { - n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE); - str = toFixedPoint(coeffToString(n.c), n.e, '0'); - } else { - intCheck(b, 2, ALPHABET.length, 'Base'); - str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true); - } - - if (s < 0 && n.c[0]) str = '-' + str; - } - - return str; - }; - - - /* - * Return as toString, but do not accept a base argument, and include the minus sign for - * negative zero. - */ - P.valueOf = P.toJSON = function () { - return valueOf(this); - }; - - - P._isBigNumber = true; - - if (configObject != null) BigNumber.set(configObject); - - return BigNumber; - } - - - // PRIVATE HELPER FUNCTIONS - - // These functions don't need access to variables, - // e.g. DECIMAL_PLACES, in the scope of the `clone` function above. - - - function bitFloor(n) { - var i = n | 0; - return n > 0 || n === i ? i : i - 1; - } - - - // Return a coefficient array as a string of base 10 digits. - function coeffToString(a) { - var s, z, - i = 1, - j = a.length, - r = a[0] + ''; - - for (; i < j;) { - s = a[i++] + ''; - z = LOG_BASE - s.length; - for (; z--; s = '0' + s); - r += s; - } - - // Determine trailing zeros. - for (j = r.length; r.charCodeAt(--j) === 48;); - - return r.slice(0, j + 1 || 1); - } - - - // Compare the value of BigNumbers x and y. - function compare(x, y) { - var a, b, - xc = x.c, - yc = y.c, - i = x.s, - j = y.s, - k = x.e, - l = y.e; - - // Either NaN? - if (!i || !j) return null; - - a = xc && !xc[0]; - b = yc && !yc[0]; - - // Either zero? - if (a || b) return a ? b ? 0 : -j : i; - - // Signs differ? - if (i != j) return i; - - a = i < 0; - b = k == l; - - // Either Infinity? - if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1; - - // Compare exponents. - if (!b) return k > l ^ a ? 1 : -1; - - j = (k = xc.length) < (l = yc.length) ? k : l; - - // Compare digit by digit. - for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1; - - // Compare lengths. - return k == l ? 0 : k > l ^ a ? 1 : -1; - } - - - /* - * Check that n is a primitive number, an integer, and in range, otherwise throw. - */ - function intCheck(n, min, max, name) { - if (n < min || n > max || n !== mathfloor(n)) { - throw Error - (bignumberError + (name || 'Argument') + (typeof n == 'number' - ? n < min || n > max ? ' out of range: ' : ' not an integer: ' - : ' not a primitive number: ') + String(n)); - } - } - - - // Assumes finite n. - function isOdd(n) { - var k = n.c.length - 1; - return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0; - } - - - function toExponential(str, e) { - return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) + - (e < 0 ? 'e' : 'e+') + e; - } - - - function toFixedPoint(str, e, z) { - var len, zs; - - // Negative exponent? - if (e < 0) { - - // Prepend zeros. - for (zs = z + '.'; ++e; zs += z); - str = zs + str; - - // Positive exponent - } else { - len = str.length; - - // Append zeros. - if (++e > len) { - for (zs = z, e -= len; --e; zs += z); - str += zs; - } else if (e < len) { - str = str.slice(0, e) + '.' + str.slice(e); - } - } - - return str; - } - - - // EXPORT - - - BigNumber = clone(); - BigNumber['default'] = BigNumber.BigNumber = BigNumber; - - // AMD. - if (typeof define == 'function' && define.amd) { - define(function () { return BigNumber; }); - - // Node.js and other environments that support module.exports. - } else if (typeof module != 'undefined' && module.exports) { - module.exports = BigNumber; - - // Browser. - } else { - if (!globalObject) { - globalObject = typeof self != 'undefined' && self ? self : window; - } - - globalObject.BigNumber = BigNumber; - } -})(this); - -},{}],223:[function(require,module,exports){ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN - - function BN (number, base, endian) { - if (BN.isBN(number)) { - return number; - } - - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } - - this._init(number || 0, base || 10, endian || 'be'); - } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') { - Buffer = window.Buffer; - } else { - Buffer = require('buffer').Buffer; - } - } catch (e) { - } - - BN.isBN = function isBN (num) { - if (num instanceof BN) { - return true; - } - - return num !== null && typeof num === 'object' && - num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); - }; - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } - - if (typeof number === 'object') { - return this._initArray(number, base, endian); - } - - if (base === 'hex') { - base = 16; - } - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; - this.negative = 1; - } - - if (start < number.length) { - if (base === 16) { - this._parseHex(number, start, endian); - } else { - this._parseBase(number, base, start); - if (endian === 'le') { - this._initArray(this.toArray(), base, endian); - } - } - } - }; - - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); - }; - - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } - - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); - }; - - function parseHex4Bits (string, index) { - var c = string.charCodeAt(index); - // 'A' - 'F' - if (c >= 65 && c <= 70) { - return c - 55; - // 'a' - 'f' - } else if (c >= 97 && c <= 102) { - return c - 87; - // '0' - '9' - } else { - return (c - 48) & 0xf; - } - } - - function parseHexByte (string, lowerBound, index) { - var r = parseHex4Bits(string, index); - if (index - 1 >= lowerBound) { - r |= parseHex4Bits(string, index - 1) << 4; - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start, endian) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - // 24-bits chunks - var off = 0; - var j = 0; - - var w; - if (endian === 'be') { - for (i = number.length - 1; i >= start; i -= 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } else { - var parseLength = number.length - start; - for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) { - w = parseHexByte(number, start, i) << off; - this.words[j] |= w & 0x3ffffff; - if (off >= 18) { - off -= 18; - j += 1; - this.words[j] |= w >>> 26; - } else { - off += 8; - } - } - } - - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - this.strip(); - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - BN.prototype._expand = function _expand (size) { - while (this.length < size) { - this.words[this.length++] = 0; - } - return this; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var ret = this.words[0]; - if (this.length === 2) { - ret += this.words[1] * 0x4000000; - } else if (this.length === 3 && this.words[2] === 0x01) { - // NOTE: at this stage it is known that the top bit is set - ret += 0x10000000000000 + (this.words[1] * 0x4000000); - } else if (this.length > 2) { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - this._expand(bytesNeeded); - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - this._expand(off + 1); - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid = (mid + Math.imul(ah0, bl0)) | 0; - hi = Math.imul(ah0, bh0); - var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid = (mid + Math.imul(ah1, bl0)) | 0; - hi = Math.imul(ah1, bh0); - lo = (lo + Math.imul(al0, bl1)) | 0; - mid = (mid + Math.imul(al0, bh1)) | 0; - mid = (mid + Math.imul(ah0, bl1)) | 0; - hi = (hi + Math.imul(ah0, bh1)) | 0; - var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid = (mid + Math.imul(ah2, bl0)) | 0; - hi = Math.imul(ah2, bh0); - lo = (lo + Math.imul(al1, bl1)) | 0; - mid = (mid + Math.imul(al1, bh1)) | 0; - mid = (mid + Math.imul(ah1, bl1)) | 0; - hi = (hi + Math.imul(ah1, bh1)) | 0; - lo = (lo + Math.imul(al0, bl2)) | 0; - mid = (mid + Math.imul(al0, bh2)) | 0; - mid = (mid + Math.imul(ah0, bl2)) | 0; - hi = (hi + Math.imul(ah0, bh2)) | 0; - var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid = (mid + Math.imul(ah3, bl0)) | 0; - hi = Math.imul(ah3, bh0); - lo = (lo + Math.imul(al2, bl1)) | 0; - mid = (mid + Math.imul(al2, bh1)) | 0; - mid = (mid + Math.imul(ah2, bl1)) | 0; - hi = (hi + Math.imul(ah2, bh1)) | 0; - lo = (lo + Math.imul(al1, bl2)) | 0; - mid = (mid + Math.imul(al1, bh2)) | 0; - mid = (mid + Math.imul(ah1, bl2)) | 0; - hi = (hi + Math.imul(ah1, bh2)) | 0; - lo = (lo + Math.imul(al0, bl3)) | 0; - mid = (mid + Math.imul(al0, bh3)) | 0; - mid = (mid + Math.imul(ah0, bl3)) | 0; - hi = (hi + Math.imul(ah0, bh3)) | 0; - var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid = (mid + Math.imul(ah4, bl0)) | 0; - hi = Math.imul(ah4, bh0); - lo = (lo + Math.imul(al3, bl1)) | 0; - mid = (mid + Math.imul(al3, bh1)) | 0; - mid = (mid + Math.imul(ah3, bl1)) | 0; - hi = (hi + Math.imul(ah3, bh1)) | 0; - lo = (lo + Math.imul(al2, bl2)) | 0; - mid = (mid + Math.imul(al2, bh2)) | 0; - mid = (mid + Math.imul(ah2, bl2)) | 0; - hi = (hi + Math.imul(ah2, bh2)) | 0; - lo = (lo + Math.imul(al1, bl3)) | 0; - mid = (mid + Math.imul(al1, bh3)) | 0; - mid = (mid + Math.imul(ah1, bl3)) | 0; - hi = (hi + Math.imul(ah1, bh3)) | 0; - lo = (lo + Math.imul(al0, bl4)) | 0; - mid = (mid + Math.imul(al0, bh4)) | 0; - mid = (mid + Math.imul(ah0, bl4)) | 0; - hi = (hi + Math.imul(ah0, bh4)) | 0; - var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid = (mid + Math.imul(ah5, bl0)) | 0; - hi = Math.imul(ah5, bh0); - lo = (lo + Math.imul(al4, bl1)) | 0; - mid = (mid + Math.imul(al4, bh1)) | 0; - mid = (mid + Math.imul(ah4, bl1)) | 0; - hi = (hi + Math.imul(ah4, bh1)) | 0; - lo = (lo + Math.imul(al3, bl2)) | 0; - mid = (mid + Math.imul(al3, bh2)) | 0; - mid = (mid + Math.imul(ah3, bl2)) | 0; - hi = (hi + Math.imul(ah3, bh2)) | 0; - lo = (lo + Math.imul(al2, bl3)) | 0; - mid = (mid + Math.imul(al2, bh3)) | 0; - mid = (mid + Math.imul(ah2, bl3)) | 0; - hi = (hi + Math.imul(ah2, bh3)) | 0; - lo = (lo + Math.imul(al1, bl4)) | 0; - mid = (mid + Math.imul(al1, bh4)) | 0; - mid = (mid + Math.imul(ah1, bl4)) | 0; - hi = (hi + Math.imul(ah1, bh4)) | 0; - lo = (lo + Math.imul(al0, bl5)) | 0; - mid = (mid + Math.imul(al0, bh5)) | 0; - mid = (mid + Math.imul(ah0, bl5)) | 0; - hi = (hi + Math.imul(ah0, bh5)) | 0; - var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid = (mid + Math.imul(ah6, bl0)) | 0; - hi = Math.imul(ah6, bh0); - lo = (lo + Math.imul(al5, bl1)) | 0; - mid = (mid + Math.imul(al5, bh1)) | 0; - mid = (mid + Math.imul(ah5, bl1)) | 0; - hi = (hi + Math.imul(ah5, bh1)) | 0; - lo = (lo + Math.imul(al4, bl2)) | 0; - mid = (mid + Math.imul(al4, bh2)) | 0; - mid = (mid + Math.imul(ah4, bl2)) | 0; - hi = (hi + Math.imul(ah4, bh2)) | 0; - lo = (lo + Math.imul(al3, bl3)) | 0; - mid = (mid + Math.imul(al3, bh3)) | 0; - mid = (mid + Math.imul(ah3, bl3)) | 0; - hi = (hi + Math.imul(ah3, bh3)) | 0; - lo = (lo + Math.imul(al2, bl4)) | 0; - mid = (mid + Math.imul(al2, bh4)) | 0; - mid = (mid + Math.imul(ah2, bl4)) | 0; - hi = (hi + Math.imul(ah2, bh4)) | 0; - lo = (lo + Math.imul(al1, bl5)) | 0; - mid = (mid + Math.imul(al1, bh5)) | 0; - mid = (mid + Math.imul(ah1, bl5)) | 0; - hi = (hi + Math.imul(ah1, bh5)) | 0; - lo = (lo + Math.imul(al0, bl6)) | 0; - mid = (mid + Math.imul(al0, bh6)) | 0; - mid = (mid + Math.imul(ah0, bl6)) | 0; - hi = (hi + Math.imul(ah0, bh6)) | 0; - var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid = (mid + Math.imul(ah7, bl0)) | 0; - hi = Math.imul(ah7, bh0); - lo = (lo + Math.imul(al6, bl1)) | 0; - mid = (mid + Math.imul(al6, bh1)) | 0; - mid = (mid + Math.imul(ah6, bl1)) | 0; - hi = (hi + Math.imul(ah6, bh1)) | 0; - lo = (lo + Math.imul(al5, bl2)) | 0; - mid = (mid + Math.imul(al5, bh2)) | 0; - mid = (mid + Math.imul(ah5, bl2)) | 0; - hi = (hi + Math.imul(ah5, bh2)) | 0; - lo = (lo + Math.imul(al4, bl3)) | 0; - mid = (mid + Math.imul(al4, bh3)) | 0; - mid = (mid + Math.imul(ah4, bl3)) | 0; - hi = (hi + Math.imul(ah4, bh3)) | 0; - lo = (lo + Math.imul(al3, bl4)) | 0; - mid = (mid + Math.imul(al3, bh4)) | 0; - mid = (mid + Math.imul(ah3, bl4)) | 0; - hi = (hi + Math.imul(ah3, bh4)) | 0; - lo = (lo + Math.imul(al2, bl5)) | 0; - mid = (mid + Math.imul(al2, bh5)) | 0; - mid = (mid + Math.imul(ah2, bl5)) | 0; - hi = (hi + Math.imul(ah2, bh5)) | 0; - lo = (lo + Math.imul(al1, bl6)) | 0; - mid = (mid + Math.imul(al1, bh6)) | 0; - mid = (mid + Math.imul(ah1, bl6)) | 0; - hi = (hi + Math.imul(ah1, bh6)) | 0; - lo = (lo + Math.imul(al0, bl7)) | 0; - mid = (mid + Math.imul(al0, bh7)) | 0; - mid = (mid + Math.imul(ah0, bl7)) | 0; - hi = (hi + Math.imul(ah0, bh7)) | 0; - var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid = (mid + Math.imul(ah8, bl0)) | 0; - hi = Math.imul(ah8, bh0); - lo = (lo + Math.imul(al7, bl1)) | 0; - mid = (mid + Math.imul(al7, bh1)) | 0; - mid = (mid + Math.imul(ah7, bl1)) | 0; - hi = (hi + Math.imul(ah7, bh1)) | 0; - lo = (lo + Math.imul(al6, bl2)) | 0; - mid = (mid + Math.imul(al6, bh2)) | 0; - mid = (mid + Math.imul(ah6, bl2)) | 0; - hi = (hi + Math.imul(ah6, bh2)) | 0; - lo = (lo + Math.imul(al5, bl3)) | 0; - mid = (mid + Math.imul(al5, bh3)) | 0; - mid = (mid + Math.imul(ah5, bl3)) | 0; - hi = (hi + Math.imul(ah5, bh3)) | 0; - lo = (lo + Math.imul(al4, bl4)) | 0; - mid = (mid + Math.imul(al4, bh4)) | 0; - mid = (mid + Math.imul(ah4, bl4)) | 0; - hi = (hi + Math.imul(ah4, bh4)) | 0; - lo = (lo + Math.imul(al3, bl5)) | 0; - mid = (mid + Math.imul(al3, bh5)) | 0; - mid = (mid + Math.imul(ah3, bl5)) | 0; - hi = (hi + Math.imul(ah3, bh5)) | 0; - lo = (lo + Math.imul(al2, bl6)) | 0; - mid = (mid + Math.imul(al2, bh6)) | 0; - mid = (mid + Math.imul(ah2, bl6)) | 0; - hi = (hi + Math.imul(ah2, bh6)) | 0; - lo = (lo + Math.imul(al1, bl7)) | 0; - mid = (mid + Math.imul(al1, bh7)) | 0; - mid = (mid + Math.imul(ah1, bl7)) | 0; - hi = (hi + Math.imul(ah1, bh7)) | 0; - lo = (lo + Math.imul(al0, bl8)) | 0; - mid = (mid + Math.imul(al0, bh8)) | 0; - mid = (mid + Math.imul(ah0, bl8)) | 0; - hi = (hi + Math.imul(ah0, bh8)) | 0; - var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid = (mid + Math.imul(ah9, bl0)) | 0; - hi = Math.imul(ah9, bh0); - lo = (lo + Math.imul(al8, bl1)) | 0; - mid = (mid + Math.imul(al8, bh1)) | 0; - mid = (mid + Math.imul(ah8, bl1)) | 0; - hi = (hi + Math.imul(ah8, bh1)) | 0; - lo = (lo + Math.imul(al7, bl2)) | 0; - mid = (mid + Math.imul(al7, bh2)) | 0; - mid = (mid + Math.imul(ah7, bl2)) | 0; - hi = (hi + Math.imul(ah7, bh2)) | 0; - lo = (lo + Math.imul(al6, bl3)) | 0; - mid = (mid + Math.imul(al6, bh3)) | 0; - mid = (mid + Math.imul(ah6, bl3)) | 0; - hi = (hi + Math.imul(ah6, bh3)) | 0; - lo = (lo + Math.imul(al5, bl4)) | 0; - mid = (mid + Math.imul(al5, bh4)) | 0; - mid = (mid + Math.imul(ah5, bl4)) | 0; - hi = (hi + Math.imul(ah5, bh4)) | 0; - lo = (lo + Math.imul(al4, bl5)) | 0; - mid = (mid + Math.imul(al4, bh5)) | 0; - mid = (mid + Math.imul(ah4, bl5)) | 0; - hi = (hi + Math.imul(ah4, bh5)) | 0; - lo = (lo + Math.imul(al3, bl6)) | 0; - mid = (mid + Math.imul(al3, bh6)) | 0; - mid = (mid + Math.imul(ah3, bl6)) | 0; - hi = (hi + Math.imul(ah3, bh6)) | 0; - lo = (lo + Math.imul(al2, bl7)) | 0; - mid = (mid + Math.imul(al2, bh7)) | 0; - mid = (mid + Math.imul(ah2, bl7)) | 0; - hi = (hi + Math.imul(ah2, bh7)) | 0; - lo = (lo + Math.imul(al1, bl8)) | 0; - mid = (mid + Math.imul(al1, bh8)) | 0; - mid = (mid + Math.imul(ah1, bl8)) | 0; - hi = (hi + Math.imul(ah1, bh8)) | 0; - lo = (lo + Math.imul(al0, bl9)) | 0; - mid = (mid + Math.imul(al0, bh9)) | 0; - mid = (mid + Math.imul(ah0, bl9)) | 0; - hi = (hi + Math.imul(ah0, bh9)) | 0; - var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid = (mid + Math.imul(ah9, bl1)) | 0; - hi = Math.imul(ah9, bh1); - lo = (lo + Math.imul(al8, bl2)) | 0; - mid = (mid + Math.imul(al8, bh2)) | 0; - mid = (mid + Math.imul(ah8, bl2)) | 0; - hi = (hi + Math.imul(ah8, bh2)) | 0; - lo = (lo + Math.imul(al7, bl3)) | 0; - mid = (mid + Math.imul(al7, bh3)) | 0; - mid = (mid + Math.imul(ah7, bl3)) | 0; - hi = (hi + Math.imul(ah7, bh3)) | 0; - lo = (lo + Math.imul(al6, bl4)) | 0; - mid = (mid + Math.imul(al6, bh4)) | 0; - mid = (mid + Math.imul(ah6, bl4)) | 0; - hi = (hi + Math.imul(ah6, bh4)) | 0; - lo = (lo + Math.imul(al5, bl5)) | 0; - mid = (mid + Math.imul(al5, bh5)) | 0; - mid = (mid + Math.imul(ah5, bl5)) | 0; - hi = (hi + Math.imul(ah5, bh5)) | 0; - lo = (lo + Math.imul(al4, bl6)) | 0; - mid = (mid + Math.imul(al4, bh6)) | 0; - mid = (mid + Math.imul(ah4, bl6)) | 0; - hi = (hi + Math.imul(ah4, bh6)) | 0; - lo = (lo + Math.imul(al3, bl7)) | 0; - mid = (mid + Math.imul(al3, bh7)) | 0; - mid = (mid + Math.imul(ah3, bl7)) | 0; - hi = (hi + Math.imul(ah3, bh7)) | 0; - lo = (lo + Math.imul(al2, bl8)) | 0; - mid = (mid + Math.imul(al2, bh8)) | 0; - mid = (mid + Math.imul(ah2, bl8)) | 0; - hi = (hi + Math.imul(ah2, bh8)) | 0; - lo = (lo + Math.imul(al1, bl9)) | 0; - mid = (mid + Math.imul(al1, bh9)) | 0; - mid = (mid + Math.imul(ah1, bl9)) | 0; - hi = (hi + Math.imul(ah1, bh9)) | 0; - var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid = (mid + Math.imul(ah9, bl2)) | 0; - hi = Math.imul(ah9, bh2); - lo = (lo + Math.imul(al8, bl3)) | 0; - mid = (mid + Math.imul(al8, bh3)) | 0; - mid = (mid + Math.imul(ah8, bl3)) | 0; - hi = (hi + Math.imul(ah8, bh3)) | 0; - lo = (lo + Math.imul(al7, bl4)) | 0; - mid = (mid + Math.imul(al7, bh4)) | 0; - mid = (mid + Math.imul(ah7, bl4)) | 0; - hi = (hi + Math.imul(ah7, bh4)) | 0; - lo = (lo + Math.imul(al6, bl5)) | 0; - mid = (mid + Math.imul(al6, bh5)) | 0; - mid = (mid + Math.imul(ah6, bl5)) | 0; - hi = (hi + Math.imul(ah6, bh5)) | 0; - lo = (lo + Math.imul(al5, bl6)) | 0; - mid = (mid + Math.imul(al5, bh6)) | 0; - mid = (mid + Math.imul(ah5, bl6)) | 0; - hi = (hi + Math.imul(ah5, bh6)) | 0; - lo = (lo + Math.imul(al4, bl7)) | 0; - mid = (mid + Math.imul(al4, bh7)) | 0; - mid = (mid + Math.imul(ah4, bl7)) | 0; - hi = (hi + Math.imul(ah4, bh7)) | 0; - lo = (lo + Math.imul(al3, bl8)) | 0; - mid = (mid + Math.imul(al3, bh8)) | 0; - mid = (mid + Math.imul(ah3, bl8)) | 0; - hi = (hi + Math.imul(ah3, bh8)) | 0; - lo = (lo + Math.imul(al2, bl9)) | 0; - mid = (mid + Math.imul(al2, bh9)) | 0; - mid = (mid + Math.imul(ah2, bl9)) | 0; - hi = (hi + Math.imul(ah2, bh9)) | 0; - var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid = (mid + Math.imul(ah9, bl3)) | 0; - hi = Math.imul(ah9, bh3); - lo = (lo + Math.imul(al8, bl4)) | 0; - mid = (mid + Math.imul(al8, bh4)) | 0; - mid = (mid + Math.imul(ah8, bl4)) | 0; - hi = (hi + Math.imul(ah8, bh4)) | 0; - lo = (lo + Math.imul(al7, bl5)) | 0; - mid = (mid + Math.imul(al7, bh5)) | 0; - mid = (mid + Math.imul(ah7, bl5)) | 0; - hi = (hi + Math.imul(ah7, bh5)) | 0; - lo = (lo + Math.imul(al6, bl6)) | 0; - mid = (mid + Math.imul(al6, bh6)) | 0; - mid = (mid + Math.imul(ah6, bl6)) | 0; - hi = (hi + Math.imul(ah6, bh6)) | 0; - lo = (lo + Math.imul(al5, bl7)) | 0; - mid = (mid + Math.imul(al5, bh7)) | 0; - mid = (mid + Math.imul(ah5, bl7)) | 0; - hi = (hi + Math.imul(ah5, bh7)) | 0; - lo = (lo + Math.imul(al4, bl8)) | 0; - mid = (mid + Math.imul(al4, bh8)) | 0; - mid = (mid + Math.imul(ah4, bl8)) | 0; - hi = (hi + Math.imul(ah4, bh8)) | 0; - lo = (lo + Math.imul(al3, bl9)) | 0; - mid = (mid + Math.imul(al3, bh9)) | 0; - mid = (mid + Math.imul(ah3, bl9)) | 0; - hi = (hi + Math.imul(ah3, bh9)) | 0; - var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid = (mid + Math.imul(ah9, bl4)) | 0; - hi = Math.imul(ah9, bh4); - lo = (lo + Math.imul(al8, bl5)) | 0; - mid = (mid + Math.imul(al8, bh5)) | 0; - mid = (mid + Math.imul(ah8, bl5)) | 0; - hi = (hi + Math.imul(ah8, bh5)) | 0; - lo = (lo + Math.imul(al7, bl6)) | 0; - mid = (mid + Math.imul(al7, bh6)) | 0; - mid = (mid + Math.imul(ah7, bl6)) | 0; - hi = (hi + Math.imul(ah7, bh6)) | 0; - lo = (lo + Math.imul(al6, bl7)) | 0; - mid = (mid + Math.imul(al6, bh7)) | 0; - mid = (mid + Math.imul(ah6, bl7)) | 0; - hi = (hi + Math.imul(ah6, bh7)) | 0; - lo = (lo + Math.imul(al5, bl8)) | 0; - mid = (mid + Math.imul(al5, bh8)) | 0; - mid = (mid + Math.imul(ah5, bl8)) | 0; - hi = (hi + Math.imul(ah5, bh8)) | 0; - lo = (lo + Math.imul(al4, bl9)) | 0; - mid = (mid + Math.imul(al4, bh9)) | 0; - mid = (mid + Math.imul(ah4, bl9)) | 0; - hi = (hi + Math.imul(ah4, bh9)) | 0; - var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid = (mid + Math.imul(ah9, bl5)) | 0; - hi = Math.imul(ah9, bh5); - lo = (lo + Math.imul(al8, bl6)) | 0; - mid = (mid + Math.imul(al8, bh6)) | 0; - mid = (mid + Math.imul(ah8, bl6)) | 0; - hi = (hi + Math.imul(ah8, bh6)) | 0; - lo = (lo + Math.imul(al7, bl7)) | 0; - mid = (mid + Math.imul(al7, bh7)) | 0; - mid = (mid + Math.imul(ah7, bl7)) | 0; - hi = (hi + Math.imul(ah7, bh7)) | 0; - lo = (lo + Math.imul(al6, bl8)) | 0; - mid = (mid + Math.imul(al6, bh8)) | 0; - mid = (mid + Math.imul(ah6, bl8)) | 0; - hi = (hi + Math.imul(ah6, bh8)) | 0; - lo = (lo + Math.imul(al5, bl9)) | 0; - mid = (mid + Math.imul(al5, bh9)) | 0; - mid = (mid + Math.imul(ah5, bl9)) | 0; - hi = (hi + Math.imul(ah5, bh9)) | 0; - var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid = (mid + Math.imul(ah9, bl6)) | 0; - hi = Math.imul(ah9, bh6); - lo = (lo + Math.imul(al8, bl7)) | 0; - mid = (mid + Math.imul(al8, bh7)) | 0; - mid = (mid + Math.imul(ah8, bl7)) | 0; - hi = (hi + Math.imul(ah8, bh7)) | 0; - lo = (lo + Math.imul(al7, bl8)) | 0; - mid = (mid + Math.imul(al7, bh8)) | 0; - mid = (mid + Math.imul(ah7, bl8)) | 0; - hi = (hi + Math.imul(ah7, bh8)) | 0; - lo = (lo + Math.imul(al6, bl9)) | 0; - mid = (mid + Math.imul(al6, bh9)) | 0; - mid = (mid + Math.imul(ah6, bl9)) | 0; - hi = (hi + Math.imul(ah6, bh9)) | 0; - var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid = (mid + Math.imul(ah9, bl7)) | 0; - hi = Math.imul(ah9, bh7); - lo = (lo + Math.imul(al8, bl8)) | 0; - mid = (mid + Math.imul(al8, bh8)) | 0; - mid = (mid + Math.imul(ah8, bl8)) | 0; - hi = (hi + Math.imul(ah8, bh8)) | 0; - lo = (lo + Math.imul(al7, bl9)) | 0; - mid = (mid + Math.imul(al7, bh9)) | 0; - mid = (mid + Math.imul(ah7, bl9)) | 0; - hi = (hi + Math.imul(ah7, bh9)) | 0; - var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid = (mid + Math.imul(ah9, bl8)) | 0; - hi = Math.imul(ah9, bh8); - lo = (lo + Math.imul(al8, bl9)) | 0; - mid = (mid + Math.imul(al8, bh9)) | 0; - mid = (mid + Math.imul(ah8, bl9)) | 0; - hi = (hi + Math.imul(ah8, bh9)) | 0; - var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid = (mid + Math.imul(ah9, bl9)) | 0; - hi = Math.imul(ah9, bh9); - var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; - c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (this.length <= s) { - return this; - } - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - var len = num.length + shift; - var i; - - this._expand(len); - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); - - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; - } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); - }; - - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } - - A.iushrn(1); - B.iushrn(1); - } - } - - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } - - C.iushrn(1); - D.iushrn(1); - } - } - - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); - } - } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); - } else { - a = a.clone(); - } - - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } - - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } - - var res; - if (a.cmpn(1) === 0) { - res = x1; - } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); - } - - return res; - }; - - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - this._expand(s + 1); - this.words[s] |= q; - return this; - } - - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - return this; - }; - - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; - }; - - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); - - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res | 0; - return res; - }; - - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; - } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; - }; - - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; - - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; - - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; - - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; - - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; - - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; - - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; - - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; - - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; - - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; - - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); - }; - - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); - }; - - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; - - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); - }; - - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; - - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; - - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; - - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; - - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); - }; - - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; - - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); - - this.tmp = this._tmp(); - } - - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; - }; - - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; - - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); - - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - if (r.strip !== undefined) { - // r is BN v4 instance - r.strip(); - } else { - // r is BN v5 instance - r._strip(); - } - } - - return r; - }; - - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; - - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); - }; - - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); - - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; - - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; - - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } - - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; - - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; - - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; - - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } - - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } - } - return num; - }; - - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); - - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); - - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); - - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; - - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; - }; - - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; - - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); - } - primes[name] = prime; - - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - assert(m.gtn(1), 'modulus must be greater than 1'); - this.m = m; - this.prime = null; - } - } - - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); - }; - - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); - }; - - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); - }; - - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); - }; - - Red.prototype.add = function add (a, b) { - this._verify2(a, b); - - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); - - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); - } - return res; - }; - - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); - - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; - - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); - - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res; - }; - - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; - - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; - - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; - - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); - }; - - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); - }; - - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); - } - assert(!q.isZero()); - - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } - - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); - } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } - - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1).toRed(this); - if (num.cmpn(1) === 0) return a.clone(); - - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); - } - - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; - } - - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } - - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } - - return res; - }; - - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); - - return r === num ? r.clone() : r; - }; - - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; - }; - - // - // Montgomery method engine - // - - BN.mont = function mont (num) { - return new Mont(num); - }; - - function Mont (m) { - Red.call(this, m); - - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } - - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); - - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); - - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); - }; - - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; - }; - - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; - } - - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); - } - - return res._forceRed(this); - }; - - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); - }; -})(typeof module === 'undefined' || module, this); - -},{"buffer":225}],224:[function(require,module,exports){ -var r; - -module.exports = function rand(len) { - if (!r) - r = new Rand(null); - - return r.generate(len); -}; - -function Rand(rand) { - this.rand = rand; -} -module.exports.Rand = Rand; - -Rand.prototype.generate = function generate(len) { - return this._rand(len); -}; - -// Emulate crypto API using randy -Rand.prototype._rand = function _rand(n) { - if (this.rand.getBytes) - return this.rand.getBytes(n); - - var res = new Uint8Array(n); - for (var i = 0; i < res.length; i++) - res[i] = this.rand.getByte(); - return res; -}; - -if (typeof self === 'object') { - if (self.crypto && self.crypto.getRandomValues) { - // Modern browsers - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.crypto.getRandomValues(arr); - return arr; - }; - } else if (self.msCrypto && self.msCrypto.getRandomValues) { - // IE - Rand.prototype._rand = function _rand(n) { - var arr = new Uint8Array(n); - self.msCrypto.getRandomValues(arr); - return arr; - }; - - // Safari's WebWorkers do not have `crypto` - } else if (typeof window === 'object') { - // Old junk - Rand.prototype._rand = function() { - throw new Error('Not implemented yet'); - }; - } -} else { - // Node.js or Web worker with no crypto support - try { - var crypto = require('crypto'); - if (typeof crypto.randomBytes !== 'function') - throw new Error('Not supported'); - - Rand.prototype._rand = function _rand(n) { - return crypto.randomBytes(n); - }; - } catch (e) { - } -} - -},{"crypto":225}],225:[function(require,module,exports){ - -},{}],226:[function(require,module,exports){ -(function (Buffer){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ - -'use strict' - -var base64 = require('base64-js') -var ieee754 = require('ieee754') - -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 - -var K_MAX_LENGTH = 0x7fffffff -exports.kMaxLength = K_MAX_LENGTH - -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Print warning and recommend using `buffer` v4.x which has an Object - * implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * We report that the browser does not support typed arrays if the are not subclassable - * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` - * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support - * for __proto__ and has a buggy typed array implementation. - */ -Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() - -if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && - typeof console.error === 'function') { - console.error( - 'This browser lacks typed array (Uint8Array) support which is required by ' + - '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' - ) -} - -function typedArraySupport () { - // Can typed array instances can be augmented? - try { - var arr = new Uint8Array(1) - arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } - return arr.foo() === 42 - } catch (e) { - return false - } -} - -Object.defineProperty(Buffer.prototype, 'parent', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.buffer - } -}) - -Object.defineProperty(Buffer.prototype, 'offset', { - enumerable: true, - get: function () { - if (!Buffer.isBuffer(this)) return undefined - return this.byteOffset - } -}) - -function createBuffer (length) { - if (length > K_MAX_LENGTH) { - throw new RangeError('The value "' + length + '" is invalid for option "size"') - } - // Return an augmented `Uint8Array` instance - var buf = new Uint8Array(length) - buf.__proto__ = Buffer.prototype - return buf -} - -/** - * The Buffer constructor returns instances of `Uint8Array` that have their - * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of - * `Uint8Array`, so the returned instances will have all the node `Buffer` methods - * and the `Uint8Array` methods. Square bracket notation works as expected -- it - * returns a single octet. - * - * The `Uint8Array` prototype remains unmodified. - */ - -function Buffer (arg, encodingOrOffset, length) { - // Common case. - if (typeof arg === 'number') { - if (typeof encodingOrOffset === 'string') { - throw new TypeError( - 'The "string" argument must be of type string. Received type number' - ) - } - return allocUnsafe(arg) - } - return from(arg, encodingOrOffset, length) -} - -// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species != null && - Buffer[Symbol.species] === Buffer) { - Object.defineProperty(Buffer, Symbol.species, { - value: null, - configurable: true, - enumerable: false, - writable: false - }) -} - -Buffer.poolSize = 8192 // not used by this implementation - -function from (value, encodingOrOffset, length) { - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) - } - - if (ArrayBuffer.isView(value)) { - return fromArrayLike(value) - } - - if (value == null) { - throw TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) - } - - if (isInstance(value, ArrayBuffer) || - (value && isInstance(value.buffer, ArrayBuffer))) { - return fromArrayBuffer(value, encodingOrOffset, length) - } - - if (typeof value === 'number') { - throw new TypeError( - 'The "value" argument must not be of type number. Received type number' - ) - } - - var valueOf = value.valueOf && value.valueOf() - if (valueOf != null && valueOf !== value) { - return Buffer.from(valueOf, encodingOrOffset, length) - } - - var b = fromObject(value) - if (b) return b - - if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && - typeof value[Symbol.toPrimitive] === 'function') { - return Buffer.from( - value[Symbol.toPrimitive]('string'), encodingOrOffset, length - ) - } - - throw new TypeError( - 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + - 'or Array-like Object. Received type ' + (typeof value) - ) -} - -/** - * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError - * if value is a number. - * Buffer.from(str[, encoding]) - * Buffer.from(array) - * Buffer.from(buffer) - * Buffer.from(arrayBuffer[, byteOffset[, length]]) - **/ -Buffer.from = function (value, encodingOrOffset, length) { - return from(value, encodingOrOffset, length) -} - -// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: -// https://github.com/feross/buffer/pull/148 -Buffer.prototype.__proto__ = Uint8Array.prototype -Buffer.__proto__ = Uint8Array - -function assertSize (size) { - if (typeof size !== 'number') { - throw new TypeError('"size" argument must be of type number') - } else if (size < 0) { - throw new RangeError('The value "' + size + '" is invalid for option "size"') - } -} - -function alloc (size, fill, encoding) { - assertSize(size) - if (size <= 0) { - return createBuffer(size) - } - if (fill !== undefined) { - // Only pay attention to encoding if it's a string. This - // prevents accidentally sending in a number that would - // be interpretted as a start offset. - return typeof encoding === 'string' - ? createBuffer(size).fill(fill, encoding) - : createBuffer(size).fill(fill) - } - return createBuffer(size) -} - -/** - * Creates a new filled Buffer instance. - * alloc(size[, fill[, encoding]]) - **/ -Buffer.alloc = function (size, fill, encoding) { - return alloc(size, fill, encoding) -} - -function allocUnsafe (size) { - assertSize(size) - return createBuffer(size < 0 ? 0 : checked(size) | 0) -} - -/** - * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. - * */ -Buffer.allocUnsafe = function (size) { - return allocUnsafe(size) -} -/** - * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. - */ -Buffer.allocUnsafeSlow = function (size) { - return allocUnsafe(size) -} - -function fromString (string, encoding) { - if (typeof encoding !== 'string' || encoding === '') { - encoding = 'utf8' - } - - if (!Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - - var length = byteLength(string, encoding) | 0 - var buf = createBuffer(length) - - var actual = buf.write(string, encoding) - - if (actual !== length) { - // Writing a hex string, for example, that contains invalid characters will - // cause everything after the first invalid character to be ignored. (e.g. - // 'abxxcd' will be treated as 'ab') - buf = buf.slice(0, actual) - } - - return buf -} - -function fromArrayLike (array) { - var length = array.length < 0 ? 0 : checked(array.length) | 0 - var buf = createBuffer(length) - for (var i = 0; i < length; i += 1) { - buf[i] = array[i] & 255 - } - return buf -} - -function fromArrayBuffer (array, byteOffset, length) { - if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('"offset" is outside of buffer bounds') - } - - if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('"length" is outside of buffer bounds') - } - - var buf - if (byteOffset === undefined && length === undefined) { - buf = new Uint8Array(array) - } else if (length === undefined) { - buf = new Uint8Array(array, byteOffset) - } else { - buf = new Uint8Array(array, byteOffset, length) - } - - // Return an augmented `Uint8Array` instance - buf.__proto__ = Buffer.prototype - return buf -} - -function fromObject (obj) { - if (Buffer.isBuffer(obj)) { - var len = checked(obj.length) | 0 - var buf = createBuffer(len) - - if (buf.length === 0) { - return buf - } - - obj.copy(buf, 0, 0, len) - return buf - } - - if (obj.length !== undefined) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) - } -} - -function checked (length) { - // Note: cannot use `length < K_MAX_LENGTH` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= K_MAX_LENGTH) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') - } - return length | 0 -} - -function SlowBuffer (length) { - if (+length != length) { // eslint-disable-line eqeqeq - length = 0 - } - return Buffer.alloc(+length) -} - -Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true && - b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false -} - -Buffer.compare = function compare (a, b) { - if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) - if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError( - 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' - ) - } - - if (a === b) return 0 - - var x = a.length - var y = b.length - - for (var i = 0, len = Math.min(x, y); i < len; ++i) { - if (a[i] !== b[i]) { - x = a[i] - y = b[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'latin1': - case 'binary': - case 'base64': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false - } -} - -Buffer.concat = function concat (list, length) { - if (!Array.isArray(list)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - - if (list.length === 0) { - return Buffer.alloc(0) - } - - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; ++i) { - length += list[i].length - } - } - - var buffer = Buffer.allocUnsafe(length) - var pos = 0 - for (i = 0; i < list.length; ++i) { - var buf = list[i] - if (isInstance(buf, Uint8Array)) { - buf = Buffer.from(buf) - } - if (!Buffer.isBuffer(buf)) { - throw new TypeError('"list" argument must be an Array of Buffers') - } - buf.copy(buffer, pos) - pos += buf.length - } - return buffer -} - -function byteLength (string, encoding) { - if (Buffer.isBuffer(string)) { - return string.length - } - if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { - return string.byteLength - } - if (typeof string !== 'string') { - throw new TypeError( - 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + - 'Received type ' + typeof string - ) - } - - var len = string.length - var mustMatch = (arguments.length > 2 && arguments[2] === true) - if (!mustMatch && len === 0) return 0 - - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'latin1': - case 'binary': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) { - return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 - } - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength - -function slowToString (encoding, start, end) { - var loweredCase = false - - // No need to verify that "this.length <= MAX_UINT32" since it's a read-only - // property of a typed array. - - // This behaves neither like String nor Uint8Array in that we set start/end - // to their upper/lower bounds if the value passed is out of range. - // undefined is handled specially as per ECMA-262 6th Edition, - // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. - if (start === undefined || start < 0) { - start = 0 - } - // Return early if start > this.length. Done here to prevent potential uint32 - // coercion fail below. - if (start > this.length) { - return '' - } - - if (end === undefined || end > this.length) { - end = this.length - } - - if (end <= 0) { - return '' - } - - // Force coersion to uint32. This will also coerce falsey/NaN values to 0. - end >>>= 0 - start >>>= 0 - - if (end <= start) { - return '' - } - - if (!encoding) encoding = 'utf8' - - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) - - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) - - case 'ascii': - return asciiSlice(this, start, end) - - case 'latin1': - case 'binary': - return latin1Slice(this, start, end) - - case 'base64': - return base64Slice(this, start, end) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true - } - } -} - -// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) -// to detect a Buffer instance. It's not possible to use `instanceof Buffer` -// reliably in a browserify context because there could be multiple different -// copies of the 'buffer' package in use. This method works even for Buffer -// instances that were created from another copy of the `buffer` package. -// See: https://github.com/feross/buffer/issues/154 -Buffer.prototype._isBuffer = true - -function swap (b, n, m) { - var i = b[n] - b[n] = b[m] - b[m] = i -} - -Buffer.prototype.swap16 = function swap16 () { - var len = this.length - if (len % 2 !== 0) { - throw new RangeError('Buffer size must be a multiple of 16-bits') - } - for (var i = 0; i < len; i += 2) { - swap(this, i, i + 1) - } - return this -} - -Buffer.prototype.swap32 = function swap32 () { - var len = this.length - if (len % 4 !== 0) { - throw new RangeError('Buffer size must be a multiple of 32-bits') - } - for (var i = 0; i < len; i += 4) { - swap(this, i, i + 3) - swap(this, i + 1, i + 2) - } - return this -} - -Buffer.prototype.swap64 = function swap64 () { - var len = this.length - if (len % 8 !== 0) { - throw new RangeError('Buffer size must be a multiple of 64-bits') - } - for (var i = 0; i < len; i += 8) { - swap(this, i, i + 7) - swap(this, i + 1, i + 6) - swap(this, i + 2, i + 5) - swap(this, i + 3, i + 4) - } - return this -} - -Buffer.prototype.toString = function toString () { - var length = this.length - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} - -Buffer.prototype.toLocaleString = Buffer.prototype.toString - -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() - if (this.length > max) str += ' ... ' - return '' -} - -Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { - if (isInstance(target, Uint8Array)) { - target = Buffer.from(target, target.offset, target.byteLength) - } - if (!Buffer.isBuffer(target)) { - throw new TypeError( - 'The "target" argument must be one of type Buffer or Uint8Array. ' + - 'Received type ' + (typeof target) - ) - } - - if (start === undefined) { - start = 0 - } - if (end === undefined) { - end = target ? target.length : 0 - } - if (thisStart === undefined) { - thisStart = 0 - } - if (thisEnd === undefined) { - thisEnd = this.length - } - - if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { - throw new RangeError('out of range index') - } - - if (thisStart >= thisEnd && start >= end) { - return 0 - } - if (thisStart >= thisEnd) { - return -1 - } - if (start >= end) { - return 1 - } - - start >>>= 0 - end >>>= 0 - thisStart >>>= 0 - thisEnd >>>= 0 - - if (this === target) return 0 - - var x = thisEnd - thisStart - var y = end - start - var len = Math.min(x, y) - - var thisCopy = this.slice(thisStart, thisEnd) - var targetCopy = target.slice(start, end) - - for (var i = 0; i < len; ++i) { - if (thisCopy[i] !== targetCopy[i]) { - x = thisCopy[i] - y = targetCopy[i] - break - } - } - - if (x < y) return -1 - if (y < x) return 1 - return 0 -} - -// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, -// OR the last index of `val` in `buffer` at offset <= `byteOffset`. -// -// Arguments: -// - buffer - a Buffer to search -// - val - a string, Buffer, or number -// - byteOffset - an index into `buffer`; will be clamped to an int32 -// - encoding - an optional encoding, relevant is val is a string -// - dir - true for indexOf, false for lastIndexOf -function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { - // Empty buffer means no match - if (buffer.length === 0) return -1 - - // Normalize byteOffset - if (typeof byteOffset === 'string') { - encoding = byteOffset - byteOffset = 0 - } else if (byteOffset > 0x7fffffff) { - byteOffset = 0x7fffffff - } else if (byteOffset < -0x80000000) { - byteOffset = -0x80000000 - } - byteOffset = +byteOffset // Coerce to Number. - if (numberIsNaN(byteOffset)) { - // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer - byteOffset = dir ? 0 : (buffer.length - 1) - } - - // Normalize byteOffset: negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = buffer.length + byteOffset - if (byteOffset >= buffer.length) { - if (dir) return -1 - else byteOffset = buffer.length - 1 - } else if (byteOffset < 0) { - if (dir) byteOffset = 0 - else return -1 - } - - // Normalize val - if (typeof val === 'string') { - val = Buffer.from(val, encoding) - } - - // Finally, search either indexOf (if dir is true) or lastIndexOf - if (Buffer.isBuffer(val)) { - // Special case: looking for empty string/buffer always fails - if (val.length === 0) { - return -1 - } - return arrayIndexOf(buffer, val, byteOffset, encoding, dir) - } else if (typeof val === 'number') { - val = val & 0xFF // Search for a byte value [0-255] - if (typeof Uint8Array.prototype.indexOf === 'function') { - if (dir) { - return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) - } else { - return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) - } - } - return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) - } - - throw new TypeError('val must be string, number or Buffer') -} - -function arrayIndexOf (arr, val, byteOffset, encoding, dir) { - var indexSize = 1 - var arrLength = arr.length - var valLength = val.length - - if (encoding !== undefined) { - encoding = String(encoding).toLowerCase() - if (encoding === 'ucs2' || encoding === 'ucs-2' || - encoding === 'utf16le' || encoding === 'utf-16le') { - if (arr.length < 2 || val.length < 2) { - return -1 - } - indexSize = 2 - arrLength /= 2 - valLength /= 2 - byteOffset /= 2 - } - } - - function read (buf, i) { - if (indexSize === 1) { - return buf[i] - } else { - return buf.readUInt16BE(i * indexSize) - } - } - - var i - if (dir) { - var foundIndex = -1 - for (i = byteOffset; i < arrLength; i++) { - if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === valLength) return foundIndex * indexSize - } else { - if (foundIndex !== -1) i -= i - foundIndex - foundIndex = -1 - } - } - } else { - if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength - for (i = byteOffset; i >= 0; i--) { - var found = true - for (var j = 0; j < valLength; j++) { - if (read(arr, i + j) !== read(val, j)) { - found = false - break - } - } - if (found) return i - } - } - - return -1 -} - -Buffer.prototype.includes = function includes (val, byteOffset, encoding) { - return this.indexOf(val, byteOffset, encoding) !== -1 -} - -Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, true) -} - -Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { - return bidirectionalIndexOf(this, val, byteOffset, encoding, false) -} - -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } - - var strLen = string.length - - if (length > strLen / 2) { - length = strLen / 2 - } - for (var i = 0; i < length; ++i) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (numberIsNaN(parsed)) return i - buf[offset + i] = parsed - } - return i -} - -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} - -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} - -function latin1Write (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} - -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} - -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} - -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset >>> 0 - if (isFinite(length)) { - length = length >>> 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - } else { - throw new Error( - 'Buffer.write(string, encoding, offset[, length]) is no longer supported' - ) - } - - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('Attempt to write outside buffer bounds') - } - - if (!encoding) encoding = 'utf8' - - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) - - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) - - case 'ascii': - return asciiWrite(this, string, offset, length) - - case 'latin1': - case 'binary': - return latin1Write(this, string, offset, length) - - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) - - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) - - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} - -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} - -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} - -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] - - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 - - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint - - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } - - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } - - res.push(codePoint) - i += bytesPerSequence - } - - return decodeCodePointsArray(res) -} - -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 - -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() - } - - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} - -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i] & 0x7F) - } - return ret -} - -function latin1Slice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) - - for (var i = start; i < end; ++i) { - ret += String.fromCharCode(buf[i]) - } - return ret -} - -function hexSlice (buf, start, end) { - var len = buf.length - - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len - - var out = '' - for (var i = start; i < end; ++i) { - out += toHex(buf[i]) - } - return out -} - -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) - } - return res -} - -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end - - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } - - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } - - if (end < start) end = start - - var newBuf = this.subarray(start, end) - // Return an augmented `Uint8Array` instance - newBuf.__proto__ = Buffer.prototype - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) - } - - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul - } - - return val -} - -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} - -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} - -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} - -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} - -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} - -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) - - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul - } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) - - return val -} - -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} - -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} - -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} - -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} - -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} - -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} - -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} - -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - offset = offset >>> 0 - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} - -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') - if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') - if (offset + ext > buf.length) throw new RangeError('Index out of range') -} - -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - byteLength = byteLength >>> 0 - if (!noAssert) { - var maxBytes = Math.pow(2, 8 * byteLength) - 1 - checkInt(this, value, offset, byteLength, maxBytes, 0) - } - - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = 0 - var mul = 1 - var sub = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - var limit = Math.pow(2, (8 * byteLength) - 1) - - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } - - var i = byteLength - 1 - var mul = 1 - var sub = 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { - sub = 1 - } - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } - - return offset + byteLength -} - -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} - -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - return offset + 2 -} - -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - return offset + 2 -} - -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - return offset + 4 -} - -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - return offset + 4 -} - -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (offset + ext > buf.length) throw new RangeError('Index out of range') - if (offset < 0) throw new RangeError('Index out of range') -} - -function writeFloat (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} - -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} - -function writeDouble (buf, value, offset, littleEndian, noAssert) { - value = +value - offset = offset >>> 0 - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} - -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} - -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} - -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start - - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 - - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') - } - if (start < 0 || start >= this.length) throw new RangeError('Index out of range') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start - } - - var len = end - start - - if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { - // Use built-in when available, missing from IE11 - this.copyWithin(targetStart, start, end) - } else if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (var i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else { - Uint8Array.prototype.set.call( - target, - this.subarray(start, end), - targetStart - ) - } - - return len -} - -// Usage: -// buffer.fill(number[, offset[, end]]) -// buffer.fill(buffer[, offset[, end]]) -// buffer.fill(string[, offset[, end]][, encoding]) -Buffer.prototype.fill = function fill (val, start, end, encoding) { - // Handle string cases: - if (typeof val === 'string') { - if (typeof start === 'string') { - encoding = start - start = 0 - end = this.length - } else if (typeof end === 'string') { - encoding = end - end = this.length - } - if (encoding !== undefined && typeof encoding !== 'string') { - throw new TypeError('encoding must be a string') - } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { - throw new TypeError('Unknown encoding: ' + encoding) - } - if (val.length === 1) { - var code = val.charCodeAt(0) - if ((encoding === 'utf8' && code < 128) || - encoding === 'latin1') { - // Fast path: If `val` fits into a single byte, use that numeric value. - val = code - } - } - } else if (typeof val === 'number') { - val = val & 255 - } - - // Invalid ranges are not set to a default, so can range check early. - if (start < 0 || this.length < start || this.length < end) { - throw new RangeError('Out of range index') - } - - if (end <= start) { - return this - } - - start = start >>> 0 - end = end === undefined ? this.length : end >>> 0 - - if (!val) val = 0 - - var i - if (typeof val === 'number') { - for (i = start; i < end; ++i) { - this[i] = val - } - } else { - var bytes = Buffer.isBuffer(val) - ? val - : Buffer.from(val, encoding) - var len = bytes.length - if (len === 0) { - throw new TypeError('The value "' + val + - '" is invalid for argument "value"') - } - for (i = 0; i < end - start; ++i) { - this[i + start] = bytes[i % len] - } - } - - return this -} - -// HELPER FUNCTIONS -// ================ - -var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g - -function base64clean (str) { - // Node takes equal signs as end of the Base64 encoding - str = str.split('=')[0] - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = str.trim().replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} - -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} - -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] - - for (var i = 0; i < length; ++i) { - codePoint = string.charCodeAt(i) - - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } - - // valid lead - leadSurrogate = codePoint - - continue - } - - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } - - return bytes -} - -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} - -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; ++i) { - if ((units -= 2) < 0) break - - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } - - return byteArray -} - -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} - -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; ++i) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i -} - -// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass -// the `instanceof` check but they should be treated as of that type. -// See: https://github.com/feross/buffer/issues/166 -function isInstance (obj, type) { - return obj instanceof type || - (obj != null && obj.constructor != null && obj.constructor.name != null && - obj.constructor.name === type.name) -} -function numberIsNaN (obj) { - // For IE11 support - return obj !== obj // eslint-disable-line no-self-compare -} - -}).call(this,require("buffer").Buffer) -},{"base64-js":220,"buffer":226,"ieee754":262}],227:[function(require,module,exports){ -'use strict'; - -var elliptic = exports; - -elliptic.version = require('../package.json').version; -elliptic.utils = require('./elliptic/utils'); -elliptic.rand = require('brorand'); -elliptic.curve = require('./elliptic/curve'); -elliptic.curves = require('./elliptic/curves'); - -// Protocols -elliptic.ec = require('./elliptic/ec'); -elliptic.eddsa = require('./elliptic/eddsa'); - -},{"../package.json":243,"./elliptic/curve":230,"./elliptic/curves":233,"./elliptic/ec":234,"./elliptic/eddsa":237,"./elliptic/utils":241,"brorand":224}],228:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; - -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); - - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); - - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); - - this._bitLength = this.n ? this.n.bitLength() : 0; - - // Generalized Greg Maxwell's trick - var adjustCount = this.n && this.p.div(this.n); - if (!adjustCount || adjustCount.cmpn(100) > 0) { - this.redN = null; - } else { - this._maxwellTrick = true; - this.redN = this.n.toRed(this.red); - } -} -module.exports = BaseCurve; - -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; - -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); - - var naf = getNAF(k, 1, this._bitLength); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; - - // Translate into more windowed form - var repr = []; - var j; - var nafW; - for (j = 0; j < naf.length; j += doubles.step) { - nafW = 0; - for (var l = j + doubles.step - 1; l >= j; l--) - nafW = (nafW << 1) + naf[l]; - repr.push(nafW); - } - - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (j = 0; j < repr.length; j++) { - nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); - } - return a.toP(); -}; - -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w, this._bitLength); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var l = 0; i >= 0 && naf[i] === 0; i--) - l++; - if (i >= 0) - l++; - acc = acc.dblp(l); - - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); - } - } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len, - jacobianResult) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; - - // Fill all arrays - var max = 0; - var i; - var j; - var p; - for (i = 0; i < len; i++) { - p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } - - // Comb small window NAFs - for (i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength); - naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b], /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3, /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; - - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; - } - } - - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; - } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (j = 0; j < len; j++) { - var z = tmp[j]; - p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (i = 0; i < len; i++) - wnd[i] = null; - - if (jacobianResult) - return acc; - else - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); - - var len = this.p.byteLength(); - - // uncompressed, hybrid-odd, hybrid-even - if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && - bytes.length - 1 === 2 * len) { - if (bytes[0] === 0x06) - assert(bytes[bytes.length - 1] % 2 === 0); - else if (bytes[0] === 0x07) - assert(bytes[bytes.length - 1] % 2 === 1); - - var res = this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - - return res; - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; - -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; - -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); - - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - - return [ 0x04 ].concat(x, this.getY().toArray('be', len)); -}; - -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null, - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - - return this; -}; - -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; - - var doubles = this.precomputed.doubles; - if (!doubles) - return false; - - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; - -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; - - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles, - }; -}; - -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; - - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res, - }; -}; - -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; - -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; - -},{"../utils":241,"bn.js":223}],229:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var assert = utils.assert; - -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; - - Base.call(this, 'edwards', conf); - - this.a = new BN(conf.a, 16).umod(this.red.m); - this.a = this.a.toRed(this.red); - this.c = new BN(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new BN(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); - - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; - -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; - -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; - -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; - -EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - - var y2 = rhs.redMul(lhs.redInvm()); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { - y = new BN(y, 16); - if (!y.red) - y = y.toRed(this.red); - - // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) - var y2 = y.redSqr(); - var lhs = y2.redSub(this.c2); - var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); - var x2 = lhs.redMul(rhs.redInvm()); - - if (x2.cmp(this.zero) === 0) { - if (odd) - throw new Error('invalid point'); - else - return this.point(this.zero, y); - } - - var x = x2.redSqrt(); - if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - if (x.fromRed().isOdd() !== odd) - x = x.redNeg(); - - return this.point(x, y); -}; - -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; - - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); - - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); - - return lhs.cmp(rhs) === 0; -}; - -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = z ? new BN(z, 16) : this.curve.one; - this.t = t && new BN(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; - - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); - -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - (this.y.cmp(this.z) === 0 || - (this.zOne && this.y.cmp(this.curve.c) === 0)); -}; - -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S - - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); - - var nx; - var ny; - var nz; - var e; - var h; - var j; - if (this.curve.twisted) { - // E = a * C - e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - h = this.z.redSqr(); - // J = F - 2 * H - j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); - } - } else { - // E = C + D - e = c.redAdd(d); - // H = (c * Z1)^2 - h = this.curve._mulC(this.z).redSqr(); - // J = E - 2 * H - j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; - -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M - - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; - -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S - - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; - - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; - -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); -}; - -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; - - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; - -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; - -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; - -Point.prototype.eq = function eq(other) { - return this === other || - this.getX().cmp(other.getX()) === 0 && - this.getY().cmp(other.getY()) === 0; -}; - -Point.prototype.eqXToP = function eqXToP(x) { - var rx = x.toRed(this.curve.red).redMul(this.z); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(this.z); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; - -},{"../utils":241,"./base":228,"bn.js":223,"inherits":242}],230:[function(require,module,exports){ -'use strict'; - -var curve = exports; - -curve.base = require('./base'); -curve.short = require('./short'); -curve.mont = require('./mont'); -curve.edwards = require('./edwards'); - -},{"./base":228,"./edwards":229,"./mont":231,"./short":232}],231:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var utils = require('../utils'); - -function MontCurve(conf) { - Base.call(this, 'mont', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.i4 = new BN(4).toRed(this.red).redInvm(); - this.two = new BN(2).toRed(this.red); - this.a24 = this.i4.redMul(this.a.redAdd(this.two)); -} -inherits(MontCurve, Base); -module.exports = MontCurve; - -MontCurve.prototype.validate = function validate(point) { - var x = point.normalize().x; - var x2 = x.redSqr(); - var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); - var y = rhs.redSqrt(); - - return y.redSqr().cmp(rhs) === 0; -}; - -function Point(curve, x, z) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && z === null) { - this.x = this.curve.one; - this.z = this.curve.zero; - } else { - this.x = new BN(x, 16); - this.z = new BN(z, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - } -} -inherits(Point, Base.BasePoint); - -MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - return this.point(utils.toArray(bytes, enc), 1); -}; - -MontCurve.prototype.point = function point(x, z) { - return new Point(this, x, z); -}; - -MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; - -Point.prototype.precompute = function precompute() { - // No-op -}; - -Point.prototype._encode = function _encode() { - return this.getX().toArray('be', this.curve.p.byteLength()); -}; - -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1] || curve.one); -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -Point.prototype.dbl = function dbl() { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 - // 2M + 2S + 4A - - // A = X1 + Z1 - var a = this.x.redAdd(this.z); - // AA = A^2 - var aa = a.redSqr(); - // B = X1 - Z1 - var b = this.x.redSub(this.z); - // BB = B^2 - var bb = b.redSqr(); - // C = AA - BB - var c = aa.redSub(bb); - // X3 = AA * BB - var nx = aa.redMul(bb); - // Z3 = C * (BB + A24 * C) - var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); - return this.curve.point(nx, nz); -}; - -Point.prototype.add = function add() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.diffAdd = function diffAdd(p, diff) { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 - // 4M + 2S + 6A - - // A = X2 + Z2 - var a = this.x.redAdd(this.z); - // B = X2 - Z2 - var b = this.x.redSub(this.z); - // C = X3 + Z3 - var c = p.x.redAdd(p.z); - // D = X3 - Z3 - var d = p.x.redSub(p.z); - // DA = D * A - var da = d.redMul(a); - // CB = C * B - var cb = c.redMul(b); - // X5 = Z1 * (DA + CB)^2 - var nx = diff.z.redMul(da.redAdd(cb).redSqr()); - // Z5 = X1 * (DA - CB)^2 - var nz = diff.x.redMul(da.redISub(cb).redSqr()); - return this.curve.point(nx, nz); -}; - -Point.prototype.mul = function mul(k) { - var t = k.clone(); - var a = this; // (N / 2) * Q + Q - var b = this.curve.point(null, null); // (N / 2) * Q - var c = this; // Q - - for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) - bits.push(t.andln(1)); - - for (var i = bits.length - 1; i >= 0; i--) { - if (bits[i] === 0) { - // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q - a = a.diffAdd(b, c); - // N * Q = 2 * ((N / 2) * Q + Q)) - b = b.dbl(); - } else { - // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) - b = a.diffAdd(b, c); - // N * Q + Q = 2 * ((N / 2) * Q + Q) - a = a.dbl(); - } - } - return b; -}; - -Point.prototype.mulAdd = function mulAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.jumlAdd = function jumlAdd() { - throw new Error('Not supported on Montgomery curve'); -}; - -Point.prototype.eq = function eq(other) { - return this.getX().cmp(other.getX()) === 0; -}; - -Point.prototype.normalize = function normalize() { - this.x = this.x.redMul(this.z.redInvm()); - this.z = this.curve.one; - return this; -}; - -Point.prototype.getX = function getX() { - // Normalize coordinates - this.normalize(); - - return this.x.fromRed(); -}; - -},{"../utils":241,"./base":228,"bn.js":223,"inherits":242}],232:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = require('./base'); - -var assert = utils.assert; - -function ShortCurve(conf) { - Base.call(this, 'short', conf); - - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); - - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; - -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; - - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); - } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } - } - - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16), - }; - }); - } else { - basis = this._getEndoBasis(lambda); - } - - return { - beta: beta, - lambda: lambda, - basis: basis, - }; -}; - -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); - - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); - - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; - -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); - - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); - - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; - - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); - - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; - - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; - - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } - - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } - - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 }, - ]; -}; - -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); - - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); - - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; - -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); - - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); - - return this.point(x, y); -}; - -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; - - var x = point.x; - var y = point.y; - - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; - -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs, jacobianResult) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); - - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); - } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); - } - - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); - - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; - }; - -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); - -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; - -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; - -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; - - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; - - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul), - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul), - }, - }; - } - return beta; -}; - -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1), - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1), - }, - } ]; -}; - -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; - - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } - - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)), - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)), - }, - }; - return res; -}; - -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; - -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; - - // P + O = P - if (p.inf) - return this; - - // P + P = 2P - if (this.eq(p)) - return this.dbl(); - - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); - - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); - - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; - - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); - - var a = this.curve.a; - - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; - -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; - -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; - -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); - if (this.isInfinity()) - return this; - else if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; - -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; - -Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs, true); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2, true); -}; - -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; - -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; - - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate), - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate), - }, - }; - } - return res; -}; - -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; - -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - - this.zOne = this.z === this.curve.one; -} -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; - -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); - - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); - - return this.curve.point(ax, ay); -}; - -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; - -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; - - // P + O = P - if (p.isInfinity()) - return this; - - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); - - // P + O = P - if (p.isInfinity()) - return this; - - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); - - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } - - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); - - var i; - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (i = 0; i < pow; i++) - r = r.dbl(); - return r; - } - - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - // Reuse results - var jyd = jy.redAdd(jy); - for (i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); - - jx = nx; - jz = nz; - jyd = dny; - } - - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; - -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; - - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; - -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A - - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); - - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); - - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S - - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; - - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); - - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); - - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); - - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... - - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; - -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); - - if (this === p) - return true; - - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; - - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; -}; - -JPoint.prototype.eqXToP = function eqXToP(x) { - var zs = this.z.redSqr(); - var rx = x.toRed(this.curve.red).redMul(zs); - if (this.x.cmp(rx) === 0) - return true; - - var xc = x.clone(); - var t = this.curve.redN.redMul(zs); - for (;;) { - xc.iadd(this.curve.n); - if (xc.cmp(this.curve.p) >= 0) - return false; - - rx.redIAdd(t); - if (this.x.cmp(rx) === 0) - return true; - } -}; - -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; - -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; - -},{"../utils":241,"./base":228,"bn.js":223,"inherits":242}],233:[function(require,module,exports){ -'use strict'; - -var curves = exports; - -var hash = require('hash.js'); -var curve = require('./curve'); -var utils = require('./utils'); - -var assert = utils.assert; - -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new curve.short(options); - else if (options.type === 'edwards') - this.curve = new curve.edwards(options); - else - this.curve = new curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; - - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; - -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve, - }); - return curve; - }, - }); -} - -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811', - ], -}); - -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34', - ], -}); - -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5', - ], -}); - -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f', - ], -}); - -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650', - ], -}); - -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '1', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9', - ], -}); - -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', - - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658', - ], -}); - -var pre; -try { - pre = require('./precomputed/secp256k1'); -} catch (e) { - pre = undefined; -} - -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, - - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3', - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15', - }, - ], - - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre, - ], -}); - -},{"./curve":230,"./precomputed/secp256k1":240,"./utils":241,"hash.js":249}],234:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var HmacDRBG = require('hmac-drbg'); -var utils = require('../utils'); -var curves = require('../curves'); -var rand = require('brorand'); -var assert = utils.assert; - -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); - - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(Object.prototype.hasOwnProperty.call(curves, options), - 'Unknown curve ' + options); - - options = curves[options]; - } - - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof curves.PresetCurve) - options = { curve: options }; - - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; - - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); - - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; - -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; - -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; - -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; - -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - entropy: options.entropy || rand(this.hash.hmacStrength), - entropyEnc: options.entropy && options.entropyEnc || 'utf8', - nonce: this.n.toArray(), - }); - - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - for (;;) { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; - - priv.iaddn(1); - return this.keyFromPrivate(priv); - } -}; - -EC.prototype._truncateToN = function _truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; - -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); - - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); - - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); - - // Instantiate Hmac_DRBG - var drbg = new HmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc || 'utf8', - }); - - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); - - for (var iter = 0; ; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; - - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; - - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; - - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; - - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); - - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } - - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } -}; - -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; - - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); - var p; - - if (!this.curve._maxwellTrick) { - p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - return p.getX().umod(this.n).cmp(r) === 0; - } - - // NOTE: Greg Maxwell's trick, inspired by: - // https://git.io/vad3K - - p = this.g.jmulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; - - // Compare `p.x` of Jacobian point with `r`, - // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the - // inverse of `p.z^2` - return p.eqXToP(r); -}; - -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); - - var rInv = signature.r.invm(n); - var s1 = n.sub(e).mul(rInv).umod(n); - var s2 = s.mul(rInv).umod(n); - - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - return this.g.mulAdd(s1, r, s2); -}; - -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; - - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } - - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); -}; - -},{"../curves":233,"../utils":241,"./key":235,"./signature":236,"bn.js":223,"brorand":224,"hmac-drbg":261}],235:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var assert = utils.assert; - -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; - - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; - -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; - - return new KeyPair(ec, { - pub: pub, - pubEnc: enc, - }); -}; - -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; - - return new KeyPair(ec, { - priv: priv, - privEnc: enc, - }); -}; - -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; - - return { result: true, reason: null }; -}; - -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } - - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); - - if (!enc) - return this.pub; - - return this.pub.encode(enc, compact); -}; - -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); - else - return this.priv; -}; - -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); - - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); -}; - -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - // Montgomery points only have an `x` coordinate. - // Weierstrass/Edwards points on the other hand have both `x` and - // `y` coordinates. - if (this.ec.curve.type === 'mont') { - assert(key.x, 'Need x coordinate'); - } else if (this.ec.curve.type === 'short' || - this.ec.curve.type === 'edwards') { - assert(key.x && key.y, 'Need both x and y coordinate'); - } - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); -}; - -// ECDH -KeyPair.prototype.derive = function derive(pub) { - if(!pub.validate()) { - assert(pub.validate(), 'public point not validated'); - } - return pub.mul(this.priv).getX(); -}; - -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); -}; - -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); -}; - -KeyPair.prototype.inspect = function inspect() { - return ''; -}; - -},{"../utils":241,"bn.js":223}],236:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); - -var utils = require('../utils'); -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} - -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - - // Indefinite length or overflow - if (octetLen === 0 || octetLen > 4) { - return false; - } - - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - val >>>= 0; - } - - // Leading zeroes - if (val <= 0x7f) { - return false; - } - - p.place = off; - return val; -} - -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); -} - -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if (len === false) { - return false; - } - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - if (rlen === false) { - return false; - } - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (slen === false) { - return false; - } - if (data.length !== slen + p.place) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0) { - if (r[1] & 0x80) { - r = r.slice(1); - } else { - // Leading zeroes - return false; - } - } - if (s[0] === 0) { - if (s[1] & 0x80) { - s = s.slice(1); - } else { - // Leading zeroes - return false; - } - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; - - return true; -}; - -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); - } - arr.push(len); -} - -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); -}; - -},{"../utils":241,"bn.js":223}],237:[function(require,module,exports){ -'use strict'; - -var hash = require('hash.js'); -var curves = require('../curves'); -var utils = require('../utils'); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EDDSA(curve) { - assert(curve === 'ed25519', 'only tested with ed25519 so far'); - - if (!(this instanceof EDDSA)) - return new EDDSA(curve); - - curve = curves[curve].curve; - this.curve = curve; - this.g = curve.g; - this.g.precompute(curve.n.bitLength() + 1); - - this.pointClass = curve.point().constructor; - this.encodingLength = Math.ceil(curve.n.bitLength() / 8); - this.hash = hash.sha512; -} - -module.exports = EDDSA; - -/** -* @param {Array|String} message - message bytes -* @param {Array|String|KeyPair} secret - secret bytes or a keypair -* @returns {Signature} - signature -*/ -EDDSA.prototype.sign = function sign(message, secret) { - message = parseBytes(message); - var key = this.keyFromSecret(secret); - var r = this.hashInt(key.messagePrefix(), message); - var R = this.g.mul(r); - var Rencoded = this.encodePoint(R); - var s_ = this.hashInt(Rencoded, key.pubBytes(), message) - .mul(key.priv()); - var S = r.add(s_).umod(this.curve.n); - return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); -}; - -/** -* @param {Array} message - message bytes -* @param {Array|String|Signature} sig - sig bytes -* @param {Array|String|Point|KeyPair} pub - public key -* @returns {Boolean} - true if public key matches sig of message -*/ -EDDSA.prototype.verify = function verify(message, sig, pub) { - message = parseBytes(message); - sig = this.makeSignature(sig); - var key = this.keyFromPublic(pub); - var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); - var SG = this.g.mul(sig.S()); - var RplusAh = sig.R().add(key.pub().mul(h)); - return RplusAh.eq(SG); -}; - -EDDSA.prototype.hashInt = function hashInt() { - var hash = this.hash(); - for (var i = 0; i < arguments.length; i++) - hash.update(arguments[i]); - return utils.intFromLE(hash.digest()).umod(this.curve.n); -}; - -EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { - return KeyPair.fromPublic(this, pub); -}; - -EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { - return KeyPair.fromSecret(this, secret); -}; - -EDDSA.prototype.makeSignature = function makeSignature(sig) { - if (sig instanceof Signature) - return sig; - return new Signature(this, sig); -}; - -/** -* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 -* -* EDDSA defines methods for encoding and decoding points and integers. These are -* helper convenience methods, that pass along to utility functions implied -* parameters. -* -*/ -EDDSA.prototype.encodePoint = function encodePoint(point) { - var enc = point.getY().toArray('le', this.encodingLength); - enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; - return enc; -}; - -EDDSA.prototype.decodePoint = function decodePoint(bytes) { - bytes = utils.parseBytes(bytes); - - var lastIx = bytes.length - 1; - var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); - var xIsOdd = (bytes[lastIx] & 0x80) !== 0; - - var y = utils.intFromLE(normed); - return this.curve.pointFromY(y, xIsOdd); -}; - -EDDSA.prototype.encodeInt = function encodeInt(num) { - return num.toArray('le', this.encodingLength); -}; - -EDDSA.prototype.decodeInt = function decodeInt(bytes) { - return utils.intFromLE(bytes); -}; - -EDDSA.prototype.isPoint = function isPoint(val) { - return val instanceof this.pointClass; -}; - -},{"../curves":233,"../utils":241,"./key":238,"./signature":239,"hash.js":249}],238:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var cachedProperty = utils.cachedProperty; - -/** -* @param {EDDSA} eddsa - instance -* @param {Object} params - public/private key parameters -* -* @param {Array} [params.secret] - secret seed bytes -* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) -* @param {Array} [params.pub] - public key point encoded as bytes -* -*/ -function KeyPair(eddsa, params) { - this.eddsa = eddsa; - this._secret = parseBytes(params.secret); - if (eddsa.isPoint(params.pub)) - this._pub = params.pub; - else - this._pubBytes = parseBytes(params.pub); -} - -KeyPair.fromPublic = function fromPublic(eddsa, pub) { - if (pub instanceof KeyPair) - return pub; - return new KeyPair(eddsa, { pub: pub }); -}; - -KeyPair.fromSecret = function fromSecret(eddsa, secret) { - if (secret instanceof KeyPair) - return secret; - return new KeyPair(eddsa, { secret: secret }); -}; - -KeyPair.prototype.secret = function secret() { - return this._secret; -}; - -cachedProperty(KeyPair, 'pubBytes', function pubBytes() { - return this.eddsa.encodePoint(this.pub()); -}); - -cachedProperty(KeyPair, 'pub', function pub() { - if (this._pubBytes) - return this.eddsa.decodePoint(this._pubBytes); - return this.eddsa.g.mul(this.priv()); -}); - -cachedProperty(KeyPair, 'privBytes', function privBytes() { - var eddsa = this.eddsa; - var hash = this.hash(); - var lastIx = eddsa.encodingLength - 1; - - var a = hash.slice(0, eddsa.encodingLength); - a[0] &= 248; - a[lastIx] &= 127; - a[lastIx] |= 64; - - return a; -}); - -cachedProperty(KeyPair, 'priv', function priv() { - return this.eddsa.decodeInt(this.privBytes()); -}); - -cachedProperty(KeyPair, 'hash', function hash() { - return this.eddsa.hash().update(this.secret()).digest(); -}); - -cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { - return this.hash().slice(this.eddsa.encodingLength); -}); - -KeyPair.prototype.sign = function sign(message) { - assert(this._secret, 'KeyPair can only verify'); - return this.eddsa.sign(message, this); -}; - -KeyPair.prototype.verify = function verify(message, sig) { - return this.eddsa.verify(message, sig, this); -}; - -KeyPair.prototype.getSecret = function getSecret(enc) { - assert(this._secret, 'KeyPair is public only'); - return utils.encode(this.secret(), enc); -}; - -KeyPair.prototype.getPublic = function getPublic(enc) { - return utils.encode(this.pubBytes(), enc); -}; - -module.exports = KeyPair; - -},{"../utils":241}],239:[function(require,module,exports){ -'use strict'; - -var BN = require('bn.js'); -var utils = require('../utils'); -var assert = utils.assert; -var cachedProperty = utils.cachedProperty; -var parseBytes = utils.parseBytes; - -/** -* @param {EDDSA} eddsa - eddsa instance -* @param {Array|Object} sig - -* @param {Array|Point} [sig.R] - R point as Point or bytes -* @param {Array|bn} [sig.S] - S scalar as bn or bytes -* @param {Array} [sig.Rencoded] - R point encoded -* @param {Array} [sig.Sencoded] - S scalar encoded -*/ -function Signature(eddsa, sig) { - this.eddsa = eddsa; - - if (typeof sig !== 'object') - sig = parseBytes(sig); - - if (Array.isArray(sig)) { - sig = { - R: sig.slice(0, eddsa.encodingLength), - S: sig.slice(eddsa.encodingLength), - }; - } - - assert(sig.R && sig.S, 'Signature without R or S'); - - if (eddsa.isPoint(sig.R)) - this._R = sig.R; - if (sig.S instanceof BN) - this._S = sig.S; - - this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; - this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; -} - -cachedProperty(Signature, 'S', function S() { - return this.eddsa.decodeInt(this.Sencoded()); -}); - -cachedProperty(Signature, 'R', function R() { - return this.eddsa.decodePoint(this.Rencoded()); -}); - -cachedProperty(Signature, 'Rencoded', function Rencoded() { - return this.eddsa.encodePoint(this.R()); -}); - -cachedProperty(Signature, 'Sencoded', function Sencoded() { - return this.eddsa.encodeInt(this.S()); -}); - -Signature.prototype.toBytes = function toBytes() { - return this.Rencoded().concat(this.Sencoded()); -}; - -Signature.prototype.toHex = function toHex() { - return utils.encode(this.toBytes(), 'hex').toUpperCase(); -}; - -module.exports = Signature; - -},{"../utils":241,"bn.js":223}],240:[function(require,module,exports){ -module.exports = { - doubles: { - step: 4, - points: [ - [ - 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', - 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821', - ], - [ - '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', - '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf', - ], - [ - '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', - 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695', - ], - [ - '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', - '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9', - ], - [ - '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', - '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36', - ], - [ - '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', - '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f', - ], - [ - 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', - '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999', - ], - [ - '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', - 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09', - ], - [ - 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', - '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d', - ], - [ - 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', - 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088', - ], - [ - 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', - '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d', - ], - [ - '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', - '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8', - ], - [ - '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', - '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a', - ], - [ - '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', - '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453', - ], - [ - '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', - '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160', - ], - [ - '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', - '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0', - ], - [ - '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', - '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6', - ], - [ - '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', - '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589', - ], - [ - '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', - 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17', - ], - [ - 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', - '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda', - ], - [ - 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', - '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd', - ], - [ - '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', - '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2', - ], - [ - '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', - '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6', - ], - [ - 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', - '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f', - ], - [ - '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', - 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01', - ], - [ - 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', - '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3', - ], - [ - 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', - 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f', - ], - [ - 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', - '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7', - ], - [ - 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', - 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78', - ], - [ - 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', - '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1', - ], - [ - '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', - 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150', - ], - [ - '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', - '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82', - ], - [ - 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', - '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc', - ], - [ - '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', - 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b', - ], - [ - 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', - '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51', - ], - [ - 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', - '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45', - ], - [ - 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', - 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120', - ], - [ - '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', - '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84', - ], - [ - '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', - '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d', - ], - [ - '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', - 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d', - ], - [ - '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', - '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8', - ], - [ - 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', - '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8', - ], - [ - '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', - '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac', - ], - [ - '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', - 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f', - ], - [ - '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', - '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962', - ], - [ - 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', - '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907', - ], - [ - '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', - 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec', - ], - [ - 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', - 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d', - ], - [ - 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', - '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414', - ], - [ - '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', - 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd', - ], - [ - '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', - 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0', - ], - [ - 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', - '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811', - ], - [ - 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', - '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1', - ], - [ - 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', - '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c', - ], - [ - '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', - 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73', - ], - [ - '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', - '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd', - ], - [ - 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', - 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405', - ], - [ - '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', - 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589', - ], - [ - '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', - '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e', - ], - [ - '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', - '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27', - ], - [ - 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', - 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1', - ], - [ - '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', - '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482', - ], - [ - '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', - '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945', - ], - [ - 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', - '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573', - ], - [ - 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', - 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82', - ], - ], - }, - naf: { - wnd: 7, - points: [ - [ - 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', - '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672', - ], - [ - '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', - 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6', - ], - [ - '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', - '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da', - ], - [ - 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', - 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37', - ], - [ - '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', - 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b', - ], - [ - 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', - 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81', - ], - [ - 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', - '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58', - ], - [ - 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', - '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77', - ], - [ - '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', - '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a', - ], - [ - '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', - '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c', - ], - [ - '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', - '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67', - ], - [ - '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', - '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402', - ], - [ - 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', - 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55', - ], - [ - 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', - '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482', - ], - [ - '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', - 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82', - ], - [ - '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', - 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396', - ], - [ - '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', - '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49', - ], - [ - '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', - '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf', - ], - [ - '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', - '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a', - ], - [ - '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', - 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7', - ], - [ - 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', - 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933', - ], - [ - '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', - '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a', - ], - [ - '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', - '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6', - ], - [ - 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', - 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37', - ], - [ - '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', - '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e', - ], - [ - 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', - 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6', - ], - [ - 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', - 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476', - ], - [ - '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', - '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40', - ], - [ - '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', - '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61', - ], - [ - '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', - '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683', - ], - [ - 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', - '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5', - ], - [ - '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', - '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b', - ], - [ - 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', - '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417', - ], - [ - '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', - 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868', - ], - [ - '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', - 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a', - ], - [ - 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', - 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6', - ], - [ - '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', - '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996', - ], - [ - '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', - 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e', - ], - [ - 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', - 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d', - ], - [ - '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', - '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2', - ], - [ - '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', - 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e', - ], - [ - '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', - '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437', - ], - [ - '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', - 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311', - ], - [ - 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', - '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4', - ], - [ - '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', - '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575', - ], - [ - '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', - 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d', - ], - [ - '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', - 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d', - ], - [ - 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', - 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629', - ], - [ - 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', - 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06', - ], - [ - '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', - '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374', - ], - [ - '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', - '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee', - ], - [ - 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', - '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1', - ], - [ - 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', - 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b', - ], - [ - '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', - '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661', - ], - [ - '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', - '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6', - ], - [ - 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', - '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e', - ], - [ - '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', - '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d', - ], - [ - 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', - 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc', - ], - [ - '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', - 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4', - ], - [ - '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', - '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c', - ], - [ - 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', - '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b', - ], - [ - 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', - '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913', - ], - [ - '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', - '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154', - ], - [ - '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', - '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865', - ], - [ - '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', - 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc', - ], - [ - '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', - 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224', - ], - [ - '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', - '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e', - ], - [ - '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', - '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6', - ], - [ - '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', - '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511', - ], - [ - '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', - 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b', - ], - [ - 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', - 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2', - ], - [ - '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', - 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c', - ], - [ - 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', - '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3', - ], - [ - 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', - '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d', - ], - [ - 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', - '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700', - ], - [ - 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', - '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4', - ], - [ - '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', - 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196', - ], - [ - '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', - '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4', - ], - [ - '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', - 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257', - ], - [ - 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', - 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13', - ], - [ - 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', - '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096', - ], - [ - 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', - 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38', - ], - [ - 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', - '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f', - ], - [ - '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', - '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448', - ], - [ - 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', - '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a', - ], - [ - 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', - '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4', - ], - [ - '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', - '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437', - ], - [ - '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', - 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7', - ], - [ - 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', - '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d', - ], - [ - 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', - '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a', - ], - [ - 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', - '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54', - ], - [ - '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', - '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77', - ], - [ - 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', - 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517', - ], - [ - '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', - 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10', - ], - [ - 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', - 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125', - ], - [ - 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', - '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e', - ], - [ - '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', - 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1', - ], - [ - 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', - '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2', - ], - [ - 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', - '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423', - ], - [ - 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', - '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8', - ], - [ - '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', - 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758', - ], - [ - '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', - 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375', - ], - [ - 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', - '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d', - ], - [ - '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', - 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec', - ], - [ - '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', - '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0', - ], - [ - '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', - 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c', - ], - [ - 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', - 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4', - ], - [ - '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', - 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f', - ], - [ - '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', - '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649', - ], - [ - '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', - 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826', - ], - [ - '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', - '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5', - ], - [ - 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', - 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87', - ], - [ - '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', - '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b', - ], - [ - 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', - '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc', - ], - [ - '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', - '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c', - ], - [ - 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', - 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f', - ], - [ - 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', - '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a', - ], - [ - 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', - 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46', - ], - [ - '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', - 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f', - ], - [ - '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', - '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03', - ], - [ - '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', - 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08', - ], - [ - '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', - '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8', - ], - [ - '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', - '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373', - ], - [ - '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', - 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3', - ], - [ - '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', - '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8', - ], - [ - '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', - '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1', - ], - [ - '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', - '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9', - ], - ], - }, -}; - -},{}],241:[function(require,module,exports){ -'use strict'; - -var utils = exports; -var BN = require('bn.js'); -var minAssert = require('minimalistic-assert'); -var minUtils = require('minimalistic-crypto-utils'); - -utils.assert = minAssert; -utils.toArray = minUtils.toArray; -utils.zero2 = minUtils.zero2; -utils.toHex = minUtils.toHex; -utils.encode = minUtils.encode; - -// Represent num in a w-NAF form -function getNAF(num, w, bits) { - var naf = new Array(Math.max(num.bitLength(), bits) + 1); - naf.fill(0); - - var ws = 1 << (w + 1); - var k = num.clone(); - - for (var i = 0; i < naf.length; i++) { - var z; - var mod = k.andln(ws - 1); - if (k.isOdd()) { - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; - } - - naf[i] = z; - k.iushrn(1); - } - - return naf; -} -utils.getNAF = getNAF; - -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [], - ]; - - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - var m8; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); - - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); - - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); - } - - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, name, computer) { - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; - -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; - -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; - - -},{"bn.js":223,"minimalistic-assert":266,"minimalistic-crypto-utils":267}],242:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } - } -} - -},{}],243:[function(require,module,exports){ -module.exports={ - "name": "elliptic", - "version": "6.5.4", - "description": "EC cryptography", - "main": "lib/elliptic.js", - "files": [ - "lib" - ], - "scripts": { - "lint": "eslint lib test", - "lint:fix": "npm run lint -- --fix", - "unit": "istanbul test _mocha --reporter=spec test/index.js", - "test": "npm run lint && npm run unit", - "version": "grunt dist && git add dist/" - }, - "repository": { - "type": "git", - "url": "git@github.com:indutny/elliptic" - }, - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "author": "Fedor Indutny ", - "license": "MIT", - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "homepage": "https://github.com/indutny/elliptic", - "devDependencies": { - "brfs": "^2.0.2", - "coveralls": "^3.1.0", - "eslint": "^7.6.0", - "grunt": "^1.2.1", - "grunt-browserify": "^5.3.0", - "grunt-cli": "^1.3.2", - "grunt-contrib-connect": "^3.0.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-uglify": "^5.0.0", - "grunt-mocha-istanbul": "^5.0.2", - "grunt-saucelabs": "^9.0.1", - "istanbul": "^0.4.5", - "mocha": "^8.0.1" - }, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } -} - -},{}],244:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = void 0; -exports.version = "ethers/5.5.1"; - -},{}],245:[function(require,module,exports){ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Wordlist = exports.version = exports.wordlists = exports.utils = exports.logger = exports.errors = exports.constants = exports.FixedNumber = exports.BigNumber = exports.ContractFactory = exports.Contract = exports.BaseContract = exports.providers = exports.getDefaultProvider = exports.VoidSigner = exports.Wallet = exports.Signer = void 0; -var contracts_1 = require("@ethersproject/contracts"); -Object.defineProperty(exports, "BaseContract", { enumerable: true, get: function () { return contracts_1.BaseContract; } }); -Object.defineProperty(exports, "Contract", { enumerable: true, get: function () { return contracts_1.Contract; } }); -Object.defineProperty(exports, "ContractFactory", { enumerable: true, get: function () { return contracts_1.ContractFactory; } }); -var bignumber_1 = require("@ethersproject/bignumber"); -Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return bignumber_1.BigNumber; } }); -Object.defineProperty(exports, "FixedNumber", { enumerable: true, get: function () { return bignumber_1.FixedNumber; } }); -var abstract_signer_1 = require("@ethersproject/abstract-signer"); -Object.defineProperty(exports, "Signer", { enumerable: true, get: function () { return abstract_signer_1.Signer; } }); -Object.defineProperty(exports, "VoidSigner", { enumerable: true, get: function () { return abstract_signer_1.VoidSigner; } }); -var wallet_1 = require("@ethersproject/wallet"); -Object.defineProperty(exports, "Wallet", { enumerable: true, get: function () { return wallet_1.Wallet; } }); -var constants = __importStar(require("@ethersproject/constants")); -exports.constants = constants; -var providers = __importStar(require("@ethersproject/providers")); -exports.providers = providers; -var providers_1 = require("@ethersproject/providers"); -Object.defineProperty(exports, "getDefaultProvider", { enumerable: true, get: function () { return providers_1.getDefaultProvider; } }); -var wordlists_1 = require("@ethersproject/wordlists"); -Object.defineProperty(exports, "Wordlist", { enumerable: true, get: function () { return wordlists_1.Wordlist; } }); -Object.defineProperty(exports, "wordlists", { enumerable: true, get: function () { return wordlists_1.wordlists; } }); -var utils = __importStar(require("./utils")); -exports.utils = utils; -var logger_1 = require("@ethersproject/logger"); -Object.defineProperty(exports, "errors", { enumerable: true, get: function () { return logger_1.ErrorCode; } }); -//////////////////////// -// Compile-Time Constants -// This is generated by "npm run dist" -var _version_1 = require("./_version"); -Object.defineProperty(exports, "version", { enumerable: true, get: function () { return _version_1.version; } }); -var logger = new logger_1.Logger(_version_1.version); -exports.logger = logger; - -},{"./_version":244,"./utils":247,"@ethersproject/abstract-signer":22,"@ethersproject/bignumber":31,"@ethersproject/constants":37,"@ethersproject/contracts":40,"@ethersproject/logger":57,"@ethersproject/providers":73,"@ethersproject/wallet":107,"@ethersproject/wordlists":112}],246:[function(require,module,exports){ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Wordlist = exports.version = exports.wordlists = exports.utils = exports.logger = exports.errors = exports.constants = exports.FixedNumber = exports.BigNumber = exports.ContractFactory = exports.Contract = exports.BaseContract = exports.providers = exports.getDefaultProvider = exports.VoidSigner = exports.Wallet = exports.Signer = exports.ethers = void 0; -// To modify this file, you must update ./misc/admin/lib/cmds/update-exports.js -var ethers = __importStar(require("./ethers")); -exports.ethers = ethers; -try { - var anyGlobal = window; - if (anyGlobal._ethers == null) { - anyGlobal._ethers = ethers; - } -} -catch (error) { } -var ethers_1 = require("./ethers"); -Object.defineProperty(exports, "Signer", { enumerable: true, get: function () { return ethers_1.Signer; } }); -Object.defineProperty(exports, "Wallet", { enumerable: true, get: function () { return ethers_1.Wallet; } }); -Object.defineProperty(exports, "VoidSigner", { enumerable: true, get: function () { return ethers_1.VoidSigner; } }); -Object.defineProperty(exports, "getDefaultProvider", { enumerable: true, get: function () { return ethers_1.getDefaultProvider; } }); -Object.defineProperty(exports, "providers", { enumerable: true, get: function () { return ethers_1.providers; } }); -Object.defineProperty(exports, "BaseContract", { enumerable: true, get: function () { return ethers_1.BaseContract; } }); -Object.defineProperty(exports, "Contract", { enumerable: true, get: function () { return ethers_1.Contract; } }); -Object.defineProperty(exports, "ContractFactory", { enumerable: true, get: function () { return ethers_1.ContractFactory; } }); -Object.defineProperty(exports, "BigNumber", { enumerable: true, get: function () { return ethers_1.BigNumber; } }); -Object.defineProperty(exports, "FixedNumber", { enumerable: true, get: function () { return ethers_1.FixedNumber; } }); -Object.defineProperty(exports, "constants", { enumerable: true, get: function () { return ethers_1.constants; } }); -Object.defineProperty(exports, "errors", { enumerable: true, get: function () { return ethers_1.errors; } }); -Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return ethers_1.logger; } }); -Object.defineProperty(exports, "utils", { enumerable: true, get: function () { return ethers_1.utils; } }); -Object.defineProperty(exports, "wordlists", { enumerable: true, get: function () { return ethers_1.wordlists; } }); -//////////////////////// -// Compile-Time Constants -Object.defineProperty(exports, "version", { enumerable: true, get: function () { return ethers_1.version; } }); -Object.defineProperty(exports, "Wordlist", { enumerable: true, get: function () { return ethers_1.Wordlist; } }); - -},{"./ethers":245}],247:[function(require,module,exports){ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); - __setModuleDefault(result, mod); - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.formatBytes32String = exports.Utf8ErrorFuncs = exports.toUtf8String = exports.toUtf8CodePoints = exports.toUtf8Bytes = exports._toEscapedUtf8String = exports.nameprep = exports.hexDataSlice = exports.hexDataLength = exports.hexZeroPad = exports.hexValue = exports.hexStripZeros = exports.hexConcat = exports.isHexString = exports.hexlify = exports.base64 = exports.base58 = exports.TransactionDescription = exports.LogDescription = exports.Interface = exports.SigningKey = exports.HDNode = exports.defaultPath = exports.isBytesLike = exports.isBytes = exports.zeroPad = exports.stripZeros = exports.concat = exports.arrayify = exports.shallowCopy = exports.resolveProperties = exports.getStatic = exports.defineReadOnly = exports.deepCopy = exports.checkProperties = exports.poll = exports.fetchJson = exports._fetchData = exports.RLP = exports.Logger = exports.checkResultErrors = exports.FormatTypes = exports.ParamType = exports.FunctionFragment = exports.EventFragment = exports.ErrorFragment = exports.ConstructorFragment = exports.Fragment = exports.defaultAbiCoder = exports.AbiCoder = void 0; -exports.Indexed = exports.Utf8ErrorReason = exports.UnicodeNormalizationForm = exports.SupportedAlgorithm = exports.mnemonicToSeed = exports.isValidMnemonic = exports.entropyToMnemonic = exports.mnemonicToEntropy = exports.getAccountPath = exports.verifyTypedData = exports.verifyMessage = exports.recoverPublicKey = exports.computePublicKey = exports.recoverAddress = exports.computeAddress = exports.getJsonWalletAddress = exports.TransactionTypes = exports.serializeTransaction = exports.parseTransaction = exports.accessListify = exports.joinSignature = exports.splitSignature = exports.soliditySha256 = exports.solidityKeccak256 = exports.solidityPack = exports.shuffled = exports.randomBytes = exports.sha512 = exports.sha256 = exports.ripemd160 = exports.keccak256 = exports.computeHmac = exports.commify = exports.parseUnits = exports.formatUnits = exports.parseEther = exports.formatEther = exports.isAddress = exports.getCreate2Address = exports.getContractAddress = exports.getIcapAddress = exports.getAddress = exports._TypedDataEncoder = exports.id = exports.isValidName = exports.namehash = exports.hashMessage = exports.parseBytes32String = void 0; -var abi_1 = require("@ethersproject/abi"); -Object.defineProperty(exports, "AbiCoder", { enumerable: true, get: function () { return abi_1.AbiCoder; } }); -Object.defineProperty(exports, "checkResultErrors", { enumerable: true, get: function () { return abi_1.checkResultErrors; } }); -Object.defineProperty(exports, "ConstructorFragment", { enumerable: true, get: function () { return abi_1.ConstructorFragment; } }); -Object.defineProperty(exports, "defaultAbiCoder", { enumerable: true, get: function () { return abi_1.defaultAbiCoder; } }); -Object.defineProperty(exports, "ErrorFragment", { enumerable: true, get: function () { return abi_1.ErrorFragment; } }); -Object.defineProperty(exports, "EventFragment", { enumerable: true, get: function () { return abi_1.EventFragment; } }); -Object.defineProperty(exports, "FormatTypes", { enumerable: true, get: function () { return abi_1.FormatTypes; } }); -Object.defineProperty(exports, "Fragment", { enumerable: true, get: function () { return abi_1.Fragment; } }); -Object.defineProperty(exports, "FunctionFragment", { enumerable: true, get: function () { return abi_1.FunctionFragment; } }); -Object.defineProperty(exports, "Indexed", { enumerable: true, get: function () { return abi_1.Indexed; } }); -Object.defineProperty(exports, "Interface", { enumerable: true, get: function () { return abi_1.Interface; } }); -Object.defineProperty(exports, "LogDescription", { enumerable: true, get: function () { return abi_1.LogDescription; } }); -Object.defineProperty(exports, "ParamType", { enumerable: true, get: function () { return abi_1.ParamType; } }); -Object.defineProperty(exports, "TransactionDescription", { enumerable: true, get: function () { return abi_1.TransactionDescription; } }); -var address_1 = require("@ethersproject/address"); -Object.defineProperty(exports, "getAddress", { enumerable: true, get: function () { return address_1.getAddress; } }); -Object.defineProperty(exports, "getCreate2Address", { enumerable: true, get: function () { return address_1.getCreate2Address; } }); -Object.defineProperty(exports, "getContractAddress", { enumerable: true, get: function () { return address_1.getContractAddress; } }); -Object.defineProperty(exports, "getIcapAddress", { enumerable: true, get: function () { return address_1.getIcapAddress; } }); -Object.defineProperty(exports, "isAddress", { enumerable: true, get: function () { return address_1.isAddress; } }); -var base64 = __importStar(require("@ethersproject/base64")); -exports.base64 = base64; -var basex_1 = require("@ethersproject/basex"); -Object.defineProperty(exports, "base58", { enumerable: true, get: function () { return basex_1.Base58; } }); -var bytes_1 = require("@ethersproject/bytes"); -Object.defineProperty(exports, "arrayify", { enumerable: true, get: function () { return bytes_1.arrayify; } }); -Object.defineProperty(exports, "concat", { enumerable: true, get: function () { return bytes_1.concat; } }); -Object.defineProperty(exports, "hexConcat", { enumerable: true, get: function () { return bytes_1.hexConcat; } }); -Object.defineProperty(exports, "hexDataSlice", { enumerable: true, get: function () { return bytes_1.hexDataSlice; } }); -Object.defineProperty(exports, "hexDataLength", { enumerable: true, get: function () { return bytes_1.hexDataLength; } }); -Object.defineProperty(exports, "hexlify", { enumerable: true, get: function () { return bytes_1.hexlify; } }); -Object.defineProperty(exports, "hexStripZeros", { enumerable: true, get: function () { return bytes_1.hexStripZeros; } }); -Object.defineProperty(exports, "hexValue", { enumerable: true, get: function () { return bytes_1.hexValue; } }); -Object.defineProperty(exports, "hexZeroPad", { enumerable: true, get: function () { return bytes_1.hexZeroPad; } }); -Object.defineProperty(exports, "isBytes", { enumerable: true, get: function () { return bytes_1.isBytes; } }); -Object.defineProperty(exports, "isBytesLike", { enumerable: true, get: function () { return bytes_1.isBytesLike; } }); -Object.defineProperty(exports, "isHexString", { enumerable: true, get: function () { return bytes_1.isHexString; } }); -Object.defineProperty(exports, "joinSignature", { enumerable: true, get: function () { return bytes_1.joinSignature; } }); -Object.defineProperty(exports, "zeroPad", { enumerable: true, get: function () { return bytes_1.zeroPad; } }); -Object.defineProperty(exports, "splitSignature", { enumerable: true, get: function () { return bytes_1.splitSignature; } }); -Object.defineProperty(exports, "stripZeros", { enumerable: true, get: function () { return bytes_1.stripZeros; } }); -var hash_1 = require("@ethersproject/hash"); -Object.defineProperty(exports, "_TypedDataEncoder", { enumerable: true, get: function () { return hash_1._TypedDataEncoder; } }); -Object.defineProperty(exports, "hashMessage", { enumerable: true, get: function () { return hash_1.hashMessage; } }); -Object.defineProperty(exports, "id", { enumerable: true, get: function () { return hash_1.id; } }); -Object.defineProperty(exports, "isValidName", { enumerable: true, get: function () { return hash_1.isValidName; } }); -Object.defineProperty(exports, "namehash", { enumerable: true, get: function () { return hash_1.namehash; } }); -var hdnode_1 = require("@ethersproject/hdnode"); -Object.defineProperty(exports, "defaultPath", { enumerable: true, get: function () { return hdnode_1.defaultPath; } }); -Object.defineProperty(exports, "entropyToMnemonic", { enumerable: true, get: function () { return hdnode_1.entropyToMnemonic; } }); -Object.defineProperty(exports, "getAccountPath", { enumerable: true, get: function () { return hdnode_1.getAccountPath; } }); -Object.defineProperty(exports, "HDNode", { enumerable: true, get: function () { return hdnode_1.HDNode; } }); -Object.defineProperty(exports, "isValidMnemonic", { enumerable: true, get: function () { return hdnode_1.isValidMnemonic; } }); -Object.defineProperty(exports, "mnemonicToEntropy", { enumerable: true, get: function () { return hdnode_1.mnemonicToEntropy; } }); -Object.defineProperty(exports, "mnemonicToSeed", { enumerable: true, get: function () { return hdnode_1.mnemonicToSeed; } }); -var json_wallets_1 = require("@ethersproject/json-wallets"); -Object.defineProperty(exports, "getJsonWalletAddress", { enumerable: true, get: function () { return json_wallets_1.getJsonWalletAddress; } }); -var keccak256_1 = require("@ethersproject/keccak256"); -Object.defineProperty(exports, "keccak256", { enumerable: true, get: function () { return keccak256_1.keccak256; } }); -var logger_1 = require("@ethersproject/logger"); -Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } }); -var sha2_1 = require("@ethersproject/sha2"); -Object.defineProperty(exports, "computeHmac", { enumerable: true, get: function () { return sha2_1.computeHmac; } }); -Object.defineProperty(exports, "ripemd160", { enumerable: true, get: function () { return sha2_1.ripemd160; } }); -Object.defineProperty(exports, "sha256", { enumerable: true, get: function () { return sha2_1.sha256; } }); -Object.defineProperty(exports, "sha512", { enumerable: true, get: function () { return sha2_1.sha512; } }); -var solidity_1 = require("@ethersproject/solidity"); -Object.defineProperty(exports, "solidityKeccak256", { enumerable: true, get: function () { return solidity_1.keccak256; } }); -Object.defineProperty(exports, "solidityPack", { enumerable: true, get: function () { return solidity_1.pack; } }); -Object.defineProperty(exports, "soliditySha256", { enumerable: true, get: function () { return solidity_1.sha256; } }); -var random_1 = require("@ethersproject/random"); -Object.defineProperty(exports, "randomBytes", { enumerable: true, get: function () { return random_1.randomBytes; } }); -Object.defineProperty(exports, "shuffled", { enumerable: true, get: function () { return random_1.shuffled; } }); -var properties_1 = require("@ethersproject/properties"); -Object.defineProperty(exports, "checkProperties", { enumerable: true, get: function () { return properties_1.checkProperties; } }); -Object.defineProperty(exports, "deepCopy", { enumerable: true, get: function () { return properties_1.deepCopy; } }); -Object.defineProperty(exports, "defineReadOnly", { enumerable: true, get: function () { return properties_1.defineReadOnly; } }); -Object.defineProperty(exports, "getStatic", { enumerable: true, get: function () { return properties_1.getStatic; } }); -Object.defineProperty(exports, "resolveProperties", { enumerable: true, get: function () { return properties_1.resolveProperties; } }); -Object.defineProperty(exports, "shallowCopy", { enumerable: true, get: function () { return properties_1.shallowCopy; } }); -var RLP = __importStar(require("@ethersproject/rlp")); -exports.RLP = RLP; -var signing_key_1 = require("@ethersproject/signing-key"); -Object.defineProperty(exports, "computePublicKey", { enumerable: true, get: function () { return signing_key_1.computePublicKey; } }); -Object.defineProperty(exports, "recoverPublicKey", { enumerable: true, get: function () { return signing_key_1.recoverPublicKey; } }); -Object.defineProperty(exports, "SigningKey", { enumerable: true, get: function () { return signing_key_1.SigningKey; } }); -var strings_1 = require("@ethersproject/strings"); -Object.defineProperty(exports, "formatBytes32String", { enumerable: true, get: function () { return strings_1.formatBytes32String; } }); -Object.defineProperty(exports, "nameprep", { enumerable: true, get: function () { return strings_1.nameprep; } }); -Object.defineProperty(exports, "parseBytes32String", { enumerable: true, get: function () { return strings_1.parseBytes32String; } }); -Object.defineProperty(exports, "_toEscapedUtf8String", { enumerable: true, get: function () { return strings_1._toEscapedUtf8String; } }); -Object.defineProperty(exports, "toUtf8Bytes", { enumerable: true, get: function () { return strings_1.toUtf8Bytes; } }); -Object.defineProperty(exports, "toUtf8CodePoints", { enumerable: true, get: function () { return strings_1.toUtf8CodePoints; } }); -Object.defineProperty(exports, "toUtf8String", { enumerable: true, get: function () { return strings_1.toUtf8String; } }); -Object.defineProperty(exports, "Utf8ErrorFuncs", { enumerable: true, get: function () { return strings_1.Utf8ErrorFuncs; } }); -var transactions_1 = require("@ethersproject/transactions"); -Object.defineProperty(exports, "accessListify", { enumerable: true, get: function () { return transactions_1.accessListify; } }); -Object.defineProperty(exports, "computeAddress", { enumerable: true, get: function () { return transactions_1.computeAddress; } }); -Object.defineProperty(exports, "parseTransaction", { enumerable: true, get: function () { return transactions_1.parse; } }); -Object.defineProperty(exports, "recoverAddress", { enumerable: true, get: function () { return transactions_1.recoverAddress; } }); -Object.defineProperty(exports, "serializeTransaction", { enumerable: true, get: function () { return transactions_1.serialize; } }); -Object.defineProperty(exports, "TransactionTypes", { enumerable: true, get: function () { return transactions_1.TransactionTypes; } }); -var units_1 = require("@ethersproject/units"); -Object.defineProperty(exports, "commify", { enumerable: true, get: function () { return units_1.commify; } }); -Object.defineProperty(exports, "formatEther", { enumerable: true, get: function () { return units_1.formatEther; } }); -Object.defineProperty(exports, "parseEther", { enumerable: true, get: function () { return units_1.parseEther; } }); -Object.defineProperty(exports, "formatUnits", { enumerable: true, get: function () { return units_1.formatUnits; } }); -Object.defineProperty(exports, "parseUnits", { enumerable: true, get: function () { return units_1.parseUnits; } }); -var wallet_1 = require("@ethersproject/wallet"); -Object.defineProperty(exports, "verifyMessage", { enumerable: true, get: function () { return wallet_1.verifyMessage; } }); -Object.defineProperty(exports, "verifyTypedData", { enumerable: true, get: function () { return wallet_1.verifyTypedData; } }); -var web_1 = require("@ethersproject/web"); -Object.defineProperty(exports, "_fetchData", { enumerable: true, get: function () { return web_1._fetchData; } }); -Object.defineProperty(exports, "fetchJson", { enumerable: true, get: function () { return web_1.fetchJson; } }); -Object.defineProperty(exports, "poll", { enumerable: true, get: function () { return web_1.poll; } }); -//////////////////////// -// Enums -var sha2_2 = require("@ethersproject/sha2"); -Object.defineProperty(exports, "SupportedAlgorithm", { enumerable: true, get: function () { return sha2_2.SupportedAlgorithm; } }); -var strings_2 = require("@ethersproject/strings"); -Object.defineProperty(exports, "UnicodeNormalizationForm", { enumerable: true, get: function () { return strings_2.UnicodeNormalizationForm; } }); -Object.defineProperty(exports, "Utf8ErrorReason", { enumerable: true, get: function () { return strings_2.Utf8ErrorReason; } }); - -},{"@ethersproject/abi":17,"@ethersproject/address":24,"@ethersproject/base64":26,"@ethersproject/basex":27,"@ethersproject/bytes":33,"@ethersproject/hash":43,"@ethersproject/hdnode":48,"@ethersproject/json-wallets":51,"@ethersproject/keccak256":55,"@ethersproject/logger":57,"@ethersproject/properties":63,"@ethersproject/random":84,"@ethersproject/rlp":87,"@ethersproject/sha2":90,"@ethersproject/signing-key":94,"@ethersproject/solidity":96,"@ethersproject/strings":100,"@ethersproject/transactions":103,"@ethersproject/units":105,"@ethersproject/wallet":107,"@ethersproject/web":110}],248:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var objectCreate = Object.create || objectCreatePolyfill -var objectKeys = Object.keys || objectKeysPolyfill -var bind = Function.prototype.bind || functionBindPolyfill - -function EventEmitter() { - if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { - this._events = objectCreate(null); - this._eventsCount = 0; - } - - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; - -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; - -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -var defaultMaxListeners = 10; - -var hasDefineProperty; -try { - var o = {}; - if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 }); - hasDefineProperty = o.x === 0; -} catch (err) { hasDefineProperty = false } -if (hasDefineProperty) { - Object.defineProperty(EventEmitter, 'defaultMaxListeners', { - enumerable: true, - get: function() { - return defaultMaxListeners; - }, - set: function(arg) { - // check whether the input is a positive number (whose value is zero or - // greater and not a NaN). - if (typeof arg !== 'number' || arg < 0 || arg !== arg) - throw new TypeError('"defaultMaxListeners" must be a positive number'); - defaultMaxListeners = arg; - } - }); -} else { - EventEmitter.defaultMaxListeners = defaultMaxListeners; -} - -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { - if (typeof n !== 'number' || n < 0 || isNaN(n)) - throw new TypeError('"n" argument must be a positive number'); - this._maxListeners = n; - return this; -}; - -function $getMaxListeners(that) { - if (that._maxListeners === undefined) - return EventEmitter.defaultMaxListeners; - return that._maxListeners; -} - -EventEmitter.prototype.getMaxListeners = function getMaxListeners() { - return $getMaxListeners(this); -}; - -// These standalone emit* functions are used to optimize calling of event -// handlers for fast cases because emit() itself often has a variable number of -// arguments and can be deoptimized because of that. These functions always have -// the same number of arguments and thus do not get deoptimized, so the code -// inside them can execute faster. -function emitNone(handler, isFn, self) { - if (isFn) - handler.call(self); - else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - listeners[i].call(self); - } -} -function emitOne(handler, isFn, self, arg1) { - if (isFn) - handler.call(self, arg1); - else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - listeners[i].call(self, arg1); - } -} -function emitTwo(handler, isFn, self, arg1, arg2) { - if (isFn) - handler.call(self, arg1, arg2); - else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - listeners[i].call(self, arg1, arg2); - } -} -function emitThree(handler, isFn, self, arg1, arg2, arg3) { - if (isFn) - handler.call(self, arg1, arg2, arg3); - else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - listeners[i].call(self, arg1, arg2, arg3); - } -} - -function emitMany(handler, isFn, self, args) { - if (isFn) - handler.apply(self, args); - else { - var len = handler.length; - var listeners = arrayClone(handler, len); - for (var i = 0; i < len; ++i) - listeners[i].apply(self, args); - } -} - -EventEmitter.prototype.emit = function emit(type) { - var er, handler, len, args, i, events; - var doError = (type === 'error'); - - events = this._events; - if (events) - doError = (doError && events.error == null); - else if (!doError) - return false; - - // If there is no 'error' event listener then throw. - if (doError) { - if (arguments.length > 1) - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - // At least give some kind of context to the user - var err = new Error('Unhandled "error" event. (' + er + ')'); - err.context = er; - throw err; - } - return false; - } - - handler = events[type]; - - if (!handler) - return false; - - var isFn = typeof handler === 'function'; - len = arguments.length; - switch (len) { - // fast cases - case 1: - emitNone(handler, isFn, this); - break; - case 2: - emitOne(handler, isFn, this, arguments[1]); - break; - case 3: - emitTwo(handler, isFn, this, arguments[1], arguments[2]); - break; - case 4: - emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); - break; - // slower - default: - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - emitMany(handler, isFn, this, args); - } - - return true; -}; - -function _addListener(target, type, listener, prepend) { - var m; - var events; - var existing; - - if (typeof listener !== 'function') - throw new TypeError('"listener" argument must be a function'); - - events = target._events; - if (!events) { - events = target._events = objectCreate(null); - target._eventsCount = 0; - } else { - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (events.newListener) { - target.emit('newListener', type, - listener.listener ? listener.listener : listener); - - // Re-assign `events` because a newListener handler could have caused the - // this._events to be assigned to a new object - events = target._events; - } - existing = events[type]; - } - - if (!existing) { - // Optimize the case of one listener. Don't need the extra array object. - existing = events[type] = listener; - ++target._eventsCount; - } else { - if (typeof existing === 'function') { - // Adding the second element, need to change to array. - existing = events[type] = - prepend ? [listener, existing] : [existing, listener]; - } else { - // If we've already got an array, just append. - if (prepend) { - existing.unshift(listener); - } else { - existing.push(listener); - } - } - - // Check for listener leak - if (!existing.warned) { - m = $getMaxListeners(target); - if (m && m > 0 && existing.length > m) { - existing.warned = true; - var w = new Error('Possible EventEmitter memory leak detected. ' + - existing.length + ' "' + String(type) + '" listeners ' + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit.'); - w.name = 'MaxListenersExceededWarning'; - w.emitter = target; - w.type = type; - w.count = existing.length; - if (typeof console === 'object' && console.warn) { - console.warn('%s: %s', w.name, w.message); - } - } - } - } - - return target; -} - -EventEmitter.prototype.addListener = function addListener(type, listener) { - return _addListener(this, type, listener, false); -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.prependListener = - function prependListener(type, listener) { - return _addListener(this, type, listener, true); - }; - -function onceWrapper() { - if (!this.fired) { - this.target.removeListener(this.type, this.wrapFn); - this.fired = true; - switch (arguments.length) { - case 0: - return this.listener.call(this.target); - case 1: - return this.listener.call(this.target, arguments[0]); - case 2: - return this.listener.call(this.target, arguments[0], arguments[1]); - case 3: - return this.listener.call(this.target, arguments[0], arguments[1], - arguments[2]); - default: - var args = new Array(arguments.length); - for (var i = 0; i < args.length; ++i) - args[i] = arguments[i]; - this.listener.apply(this.target, args); - } - } -} - -function _onceWrap(target, type, listener) { - var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; - var wrapped = bind.call(onceWrapper, state); - wrapped.listener = listener; - state.wrapFn = wrapped; - return wrapped; -} - -EventEmitter.prototype.once = function once(type, listener) { - if (typeof listener !== 'function') - throw new TypeError('"listener" argument must be a function'); - this.on(type, _onceWrap(this, type, listener)); - return this; -}; - -EventEmitter.prototype.prependOnceListener = - function prependOnceListener(type, listener) { - if (typeof listener !== 'function') - throw new TypeError('"listener" argument must be a function'); - this.prependListener(type, _onceWrap(this, type, listener)); - return this; - }; - -// Emits a 'removeListener' event if and only if the listener was removed. -EventEmitter.prototype.removeListener = - function removeListener(type, listener) { - var list, events, position, i, originalListener; - - if (typeof listener !== 'function') - throw new TypeError('"listener" argument must be a function'); - - events = this._events; - if (!events) - return this; - - list = events[type]; - if (!list) - return this; - - if (list === listener || list.listener === listener) { - if (--this._eventsCount === 0) - this._events = objectCreate(null); - else { - delete events[type]; - if (events.removeListener) - this.emit('removeListener', type, list.listener || listener); - } - } else if (typeof list !== 'function') { - position = -1; - - for (i = list.length - 1; i >= 0; i--) { - if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; - position = i; - break; - } - } - - if (position < 0) - return this; - - if (position === 0) - list.shift(); - else - spliceOne(list, position); - - if (list.length === 1) - events[type] = list[0]; - - if (events.removeListener) - this.emit('removeListener', type, originalListener || listener); - } - - return this; - }; - -EventEmitter.prototype.removeAllListeners = - function removeAllListeners(type) { - var listeners, events, i; - - events = this._events; - if (!events) - return this; - - // not listening for removeListener, no need to emit - if (!events.removeListener) { - if (arguments.length === 0) { - this._events = objectCreate(null); - this._eventsCount = 0; - } else if (events[type]) { - if (--this._eventsCount === 0) - this._events = objectCreate(null); - else - delete events[type]; - } - return this; - } - - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - var keys = objectKeys(events); - var key; - for (i = 0; i < keys.length; ++i) { - key = keys[i]; - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = objectCreate(null); - this._eventsCount = 0; - return this; - } - - listeners = events[type]; - - if (typeof listeners === 'function') { - this.removeListener(type, listeners); - } else if (listeners) { - // LIFO order - for (i = listeners.length - 1; i >= 0; i--) { - this.removeListener(type, listeners[i]); - } - } - - return this; - }; - -function _listeners(target, type, unwrap) { - var events = target._events; - - if (!events) - return []; - - var evlistener = events[type]; - if (!evlistener) - return []; - - if (typeof evlistener === 'function') - return unwrap ? [evlistener.listener || evlistener] : [evlistener]; - - return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); -} - -EventEmitter.prototype.listeners = function listeners(type) { - return _listeners(this, type, true); -}; - -EventEmitter.prototype.rawListeners = function rawListeners(type) { - return _listeners(this, type, false); -}; - -EventEmitter.listenerCount = function(emitter, type) { - if (typeof emitter.listenerCount === 'function') { - return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); - } -}; - -EventEmitter.prototype.listenerCount = listenerCount; -function listenerCount(type) { - var events = this._events; - - if (events) { - var evlistener = events[type]; - - if (typeof evlistener === 'function') { - return 1; - } else if (evlistener) { - return evlistener.length; - } - } - - return 0; -} - -EventEmitter.prototype.eventNames = function eventNames() { - return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; -}; - -// About 1.5x faster than the two-arg version of Array#splice(). -function spliceOne(list, index) { - for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) - list[i] = list[k]; - list.pop(); -} - -function arrayClone(arr, n) { - var copy = new Array(n); - for (var i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; -} - -function unwrapListeners(arr) { - var ret = new Array(arr.length); - for (var i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; - } - return ret; -} - -function objectCreatePolyfill(proto) { - var F = function() {}; - F.prototype = proto; - return new F; -} -function objectKeysPolyfill(obj) { - var keys = []; - for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { - keys.push(k); - } - return k; -} -function functionBindPolyfill(context) { - var fn = this; - return function () { - return fn.apply(context, arguments); - }; -} - -},{}],249:[function(require,module,exports){ -var hash = exports; - -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); - -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; - -},{"./hash/common":250,"./hash/hmac":251,"./hash/ripemd":252,"./hash/sha":253,"./hash/utils":260}],250:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; - - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; - -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; - - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; - - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; - - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); - } - - return this; -}; - -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); - - return this._digest(enc); -}; - -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; - - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; - - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } - - return res; -}; - -},{"./utils":260,"minimalistic-assert":266}],251:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var assert = require('minimalistic-assert'); - -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; - - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; - -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); - - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); - - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); - - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; - -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; -}; - -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; - -},{"./utils":260,"minimalistic-assert":266}],252:[function(require,module,exports){ -'use strict'; - -var utils = require('./utils'); -var common = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; - -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); - - BlockHash.call(this); - - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; -} -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; - -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; - -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; - -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; - -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} - -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} - -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; -} - -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; - -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; - -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; - -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; - -},{"./common":250,"./utils":260}],253:[function(require,module,exports){ -'use strict'; - -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); - -},{"./sha/1":254,"./sha/224":255,"./sha/256":256,"./sha/384":257,"./sha/512":258}],254:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); - -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; - -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; - -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); - - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); -} - -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; - -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; - -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; - -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../common":250,"../utils":260,"./common":259}],255:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var SHA256 = require('./256'); - -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); - - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; -} -utils.inherits(SHA224, SHA256); -module.exports = SHA224; - -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; - -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; - - -},{"../utils":260,"./256":256}],256:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); - -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; - -var BlockHash = common.BlockHash; - -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; - -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; - -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; - - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; - - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); - } - - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; - -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -},{"../common":250,"../utils":260,"./common":259,"minimalistic-assert":266}],257:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); - -var SHA512 = require('./512'); - -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); - - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; -} -utils.inherits(SHA384, SHA512); -module.exports = SHA384; - -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; - -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; - -},{"../utils":260,"./512":258}],258:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); - -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; - -var BlockHash = common.BlockHash; - -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; - -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); - - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; - -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; - -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; - - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; - - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - } -}; - -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); - - var W = this.W; - - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; - - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - - hh = gh; - hl = gl; - - gh = fh; - gl = fl; - - fh = eh; - fl = el; - - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); - - dh = ch; - dl = cl; - - ch = bh; - cl = bl; - - bh = ah; - bl = al; - - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); - } - - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; - -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; - -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} - -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); - - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} - -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); - - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} - -},{"../common":250,"../utils":260,"minimalistic-assert":266}],259:[function(require,module,exports){ -'use strict'; - -var utils = require('../utils'); -var rotr32 = utils.rotr32; - -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); -} -exports.ft_1 = ft_1; - -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; - -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; - -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; - -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; - -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; - -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); -} -exports.g0_256 = g0_256; - -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; - -},{"../utils":260}],260:[function(require,module,exports){ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -exports.inherits = inherits; - -function isSurrogatePair(msg, i) { - if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { - return false; - } - if (i < 0 || i + 1 >= msg.length) { - return false; - } - return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; -} - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - // Inspired by stringToUtf8ByteArray() in closure-library by Google - // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 - // Apache License 2.0 - // https://github.com/google/closure-library/blob/master/LICENSE - var p = 0; - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - if (c < 128) { - res[p++] = c; - } else if (c < 2048) { - res[p++] = (c >> 6) | 192; - res[p++] = (c & 63) | 128; - } else if (isSurrogatePair(msg, i)) { - c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); - res[p++] = (c >> 18) | 240; - res[p++] = ((c >> 12) & 63) | 128; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } else { - res[p++] = (c >> 12) | 224; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } - } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - } - return res; -} -exports.toArray = toArray; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; - -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; - -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; - -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; - -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; - } - return res; -} -exports.join32 = join32; - -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; - } - } - return res; -} -exports.split32 = split32; - -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; - -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; - -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; - -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; - -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; - -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; - -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; - - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; - -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; - -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; - -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; - -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; - -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; - - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; -} -exports.sum64_5_hi = sum64_5_hi; - -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; - - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; - -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; - -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; - -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; - -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; - -},{"inherits":263,"minimalistic-assert":266}],261:[function(require,module,exports){ -'use strict'; - -var hash = require('hash.js'); -var utils = require('minimalistic-crypto-utils'); -var assert = require('minimalistic-assert'); - -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; - - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; - - this._reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; - - var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); - var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); - var pers = utils.toArray(options.pers, options.persEnc || 'hex'); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; - -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); - - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } - - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; - -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); -}; - -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; - - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; - -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; - } - - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); - - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - - this._update(entropy.concat(add || [])); - this._reseed = 1; -}; - -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); - - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; - } - - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); - } - - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); - } - - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); -}; - -},{"hash.js":249,"minimalistic-assert":266,"minimalistic-crypto-utils":267}],262:[function(require,module,exports){ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] - - i += d - - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} - - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) - } else { - m = m + Math.pow(2, mLen) - e = e - eBias - } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) -} - -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) - - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } - - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } - - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - - buffer[offset + i - d] |= s * 128 -} - -},{}],263:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} - -},{}],264:[function(require,module,exports){ -(function (process,global){ -/** - * [js-sha3]{@link https://github.com/emn178/js-sha3} - * - * @version 0.8.0 - * @author Chen, Yi-Cyuan [emn178@gmail.com] - * @copyright Chen, Yi-Cyuan 2015-2018 - * @license MIT - */ -/*jslint bitwise: true */ -(function () { - 'use strict'; - - var INPUT_ERROR = 'input is invalid type'; - var FINALIZE_ERROR = 'finalize already called'; - var WINDOW = typeof window === 'object'; - var root = WINDOW ? window : {}; - if (root.JS_SHA3_NO_WINDOW) { - WINDOW = false; - } - var WEB_WORKER = !WINDOW && typeof self === 'object'; - var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; - if (NODE_JS) { - root = global; - } else if (WEB_WORKER) { - root = self; - } - var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports; - var AMD = typeof define === 'function' && define.amd; - var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined'; - var HEX_CHARS = '0123456789abcdef'.split(''); - var SHAKE_PADDING = [31, 7936, 2031616, 520093696]; - var CSHAKE_PADDING = [4, 1024, 262144, 67108864]; - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, - 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, - 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, - 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, - 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; - var BITS = [224, 256, 384, 512]; - var SHAKE_BITS = [128, 256]; - var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest']; - var CSHAKE_BYTEPAD = { - '128': 168, - '256': 136 - }; - - if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) { - Array.isArray = function (obj) { - return Object.prototype.toString.call(obj) === '[object Array]'; - }; - } - - if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) { - ArrayBuffer.isView = function (obj) { - return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer; - }; - } - - var createOutputMethod = function (bits, padding, outputType) { - return function (message) { - return new Keccak(bits, padding, bits).update(message)[outputType](); - }; - }; - - var createShakeOutputMethod = function (bits, padding, outputType) { - return function (message, outputBits) { - return new Keccak(bits, padding, outputBits).update(message)[outputType](); - }; - }; - - var createCshakeOutputMethod = function (bits, padding, outputType) { - return function (message, outputBits, n, s) { - return methods['cshake' + bits].update(message, outputBits, n, s)[outputType](); - }; - }; - - var createKmacOutputMethod = function (bits, padding, outputType) { - return function (key, message, outputBits, s) { - return methods['kmac' + bits].update(key, message, outputBits, s)[outputType](); - }; - }; - - var createOutputMethods = function (method, createMethod, bits, padding) { - for (var i = 0; i < OUTPUT_TYPES.length; ++i) { - var type = OUTPUT_TYPES[i]; - method[type] = createMethod(bits, padding, type); - } - return method; - }; - - var createMethod = function (bits, padding) { - var method = createOutputMethod(bits, padding, 'hex'); - method.create = function () { - return new Keccak(bits, padding, bits); - }; - method.update = function (message) { - return method.create().update(message); - }; - return createOutputMethods(method, createOutputMethod, bits, padding); - }; - - var createShakeMethod = function (bits, padding) { - var method = createShakeOutputMethod(bits, padding, 'hex'); - method.create = function (outputBits) { - return new Keccak(bits, padding, outputBits); - }; - method.update = function (message, outputBits) { - return method.create(outputBits).update(message); - }; - return createOutputMethods(method, createShakeOutputMethod, bits, padding); - }; - - var createCshakeMethod = function (bits, padding) { - var w = CSHAKE_BYTEPAD[bits]; - var method = createCshakeOutputMethod(bits, padding, 'hex'); - method.create = function (outputBits, n, s) { - if (!n && !s) { - return methods['shake' + bits].create(outputBits); - } else { - return new Keccak(bits, padding, outputBits).bytepad([n, s], w); - } - }; - method.update = function (message, outputBits, n, s) { - return method.create(outputBits, n, s).update(message); - }; - return createOutputMethods(method, createCshakeOutputMethod, bits, padding); - }; - - var createKmacMethod = function (bits, padding) { - var w = CSHAKE_BYTEPAD[bits]; - var method = createKmacOutputMethod(bits, padding, 'hex'); - method.create = function (key, outputBits, s) { - return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w); - }; - method.update = function (key, message, outputBits, s) { - return method.create(key, outputBits, s).update(message); - }; - return createOutputMethods(method, createKmacOutputMethod, bits, padding); - }; - - var algorithms = [ - { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod }, - { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod }, - { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod }, - { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod }, - { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod } - ]; - - var methods = {}, methodNames = []; - - for (var i = 0; i < algorithms.length; ++i) { - var algorithm = algorithms[i]; - var bits = algorithm.bits; - for (var j = 0; j < bits.length; ++j) { - var methodName = algorithm.name + '_' + bits[j]; - methodNames.push(methodName); - methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding); - if (algorithm.name !== 'sha3') { - var newMethodName = algorithm.name + bits[j]; - methodNames.push(newMethodName); - methods[newMethodName] = methods[methodName]; - } - } - } - - function Keccak(bits, padding, outputBits) { - this.blocks = []; - this.s = []; - this.padding = padding; - this.outputBits = outputBits; - this.reset = true; - this.finalized = false; - this.block = 0; - this.start = 0; - this.blockCount = (1600 - (bits << 1)) >> 5; - this.byteCount = this.blockCount << 2; - this.outputBlocks = outputBits >> 5; - this.extraBytes = (outputBits & 31) >> 3; - - for (var i = 0; i < 50; ++i) { - this.s[i] = 0; - } - } - - Keccak.prototype.update = function (message) { - if (this.finalized) { - throw new Error(FINALIZE_ERROR); - } - var notString, type = typeof message; - if (type !== 'string') { - if (type === 'object') { - if (message === null) { - throw new Error(INPUT_ERROR); - } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { - message = new Uint8Array(message); - } else if (!Array.isArray(message)) { - if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) { - throw new Error(INPUT_ERROR); - } - } - } else { - throw new Error(INPUT_ERROR); - } - notString = true; - } - var blocks = this.blocks, byteCount = this.byteCount, length = message.length, - blockCount = this.blockCount, index = 0, s = this.s, i, code; - - while (index < length) { - if (this.reset) { - this.reset = false; - blocks[0] = this.block; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - if (notString) { - for (i = this.start; index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = this.start; index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - this.lastByteIndex = i; - if (i >= byteCount) { - this.start = i - byteCount; - this.block = blocks[blockCount]; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - this.reset = true; - } else { - this.start = i; - } - } - return this; - }; - - Keccak.prototype.encode = function (x, right) { - var o = x & 255, n = 1; - var bytes = [o]; - x = x >> 8; - o = x & 255; - while (o > 0) { - bytes.unshift(o); - x = x >> 8; - o = x & 255; - ++n; - } - if (right) { - bytes.push(n); - } else { - bytes.unshift(n); - } - this.update(bytes); - return bytes.length; - }; - - Keccak.prototype.encodeString = function (str) { - var notString, type = typeof str; - if (type !== 'string') { - if (type === 'object') { - if (str === null) { - throw new Error(INPUT_ERROR); - } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) { - str = new Uint8Array(str); - } else if (!Array.isArray(str)) { - if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) { - throw new Error(INPUT_ERROR); - } - } - } else { - throw new Error(INPUT_ERROR); - } - notString = true; - } - var bytes = 0, length = str.length; - if (notString) { - bytes = length; - } else { - for (var i = 0; i < str.length; ++i) { - var code = str.charCodeAt(i); - if (code < 0x80) { - bytes += 1; - } else if (code < 0x800) { - bytes += 2; - } else if (code < 0xd800 || code >= 0xe000) { - bytes += 3; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff)); - bytes += 4; - } - } - } - bytes += this.encode(bytes * 8); - this.update(str); - return bytes; - }; - - Keccak.prototype.bytepad = function (strs, w) { - var bytes = this.encode(w); - for (var i = 0; i < strs.length; ++i) { - bytes += this.encodeString(strs[i]); - } - var paddingBytes = w - bytes % w; - var zeros = []; - zeros.length = paddingBytes; - this.update(zeros); - return this; - }; - - Keccak.prototype.finalize = function () { - if (this.finalized) { - return; - } - this.finalized = true; - var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s; - blocks[i >> 2] |= this.padding[i & 3]; - if (this.lastByteIndex === this.byteCount) { - blocks[0] = blocks[blockCount]; - for (i = 1; i < blockCount + 1; ++i) { - blocks[i] = 0; - } - } - blocks[blockCount - 1] |= 0x80000000; - for (i = 0; i < blockCount; ++i) { - s[i] ^= blocks[i]; - } - f(s); - }; - - Keccak.prototype.toString = Keccak.prototype.hex = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var hex = '', block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + - HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + - HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + - HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; - } - if (j % blockCount === 0) { - f(s); - i = 0; - } - } - if (extraBytes) { - block = s[i]; - hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]; - if (extraBytes > 1) { - hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]; - } - if (extraBytes > 2) { - hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]; - } - } - return hex; - }; - - Keccak.prototype.arrayBuffer = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var bytes = this.outputBits >> 3; - var buffer; - if (extraBytes) { - buffer = new ArrayBuffer((outputBlocks + 1) << 2); - } else { - buffer = new ArrayBuffer(bytes); - } - var array = new Uint32Array(buffer); - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - array[j] = s[i]; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - array[i] = s[i]; - buffer = buffer.slice(0, bytes); - } - return buffer; - }; - - Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; - - Keccak.prototype.digest = Keccak.prototype.array = function () { - this.finalize(); - - var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, - extraBytes = this.extraBytes, i = 0, j = 0; - var array = [], offset, block; - while (j < outputBlocks) { - for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { - offset = j << 2; - block = s[i]; - array[offset] = block & 0xFF; - array[offset + 1] = (block >> 8) & 0xFF; - array[offset + 2] = (block >> 16) & 0xFF; - array[offset + 3] = (block >> 24) & 0xFF; - } - if (j % blockCount === 0) { - f(s); - } - } - if (extraBytes) { - offset = j << 2; - block = s[i]; - array[offset] = block & 0xFF; - if (extraBytes > 1) { - array[offset + 1] = (block >> 8) & 0xFF; - } - if (extraBytes > 2) { - array[offset + 2] = (block >> 16) & 0xFF; - } - } - return array; - }; - - function Kmac(bits, padding, outputBits) { - Keccak.call(this, bits, padding, outputBits); - } - - Kmac.prototype = new Keccak(); - - Kmac.prototype.finalize = function () { - this.encode(this.outputBits, true); - return Keccak.prototype.finalize.call(this); - }; - - var f = function (s) { - var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - for (n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; - - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); - - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); - - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - }; - - if (COMMON_JS) { - module.exports = methods; - } else { - for (i = 0; i < methodNames.length; ++i) { - root[methodNames[i]] = methods[methodNames[i]]; - } - if (AMD) { - define(function () { - return methods; - }); - } - } -})(); - -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"_process":268}],265:[function(require,module,exports){ -'use strict' - -// A linked list to keep track of recently-used-ness -const Yallist = require('yallist') - -const MAX = Symbol('max') -const LENGTH = Symbol('length') -const LENGTH_CALCULATOR = Symbol('lengthCalculator') -const ALLOW_STALE = Symbol('allowStale') -const MAX_AGE = Symbol('maxAge') -const DISPOSE = Symbol('dispose') -const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet') -const LRU_LIST = Symbol('lruList') -const CACHE = Symbol('cache') -const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet') - -const naiveLength = () => 1 - -// lruList is a yallist where the head is the youngest -// item, and the tail is the oldest. the list contains the Hit -// objects as the entries. -// Each Hit object has a reference to its Yallist.Node. This -// never changes. -// -// cache is a Map (or PseudoMap) that matches the keys to -// the Yallist.Node object. -class LRUCache { - constructor (options) { - if (typeof options === 'number') - options = { max: options } - - if (!options) - options = {} - - if (options.max && (typeof options.max !== 'number' || options.max < 0)) - throw new TypeError('max must be a non-negative number') - // Kind of weird to have a default max of Infinity, but oh well. - const max = this[MAX] = options.max || Infinity - - const lc = options.length || naiveLength - this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc - this[ALLOW_STALE] = options.stale || false - if (options.maxAge && typeof options.maxAge !== 'number') - throw new TypeError('maxAge must be a number') - this[MAX_AGE] = options.maxAge || 0 - this[DISPOSE] = options.dispose - this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false - this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false - this.reset() - } - - // resize the cache when the max changes. - set max (mL) { - if (typeof mL !== 'number' || mL < 0) - throw new TypeError('max must be a non-negative number') - - this[MAX] = mL || Infinity - trim(this) - } - get max () { - return this[MAX] - } - - set allowStale (allowStale) { - this[ALLOW_STALE] = !!allowStale - } - get allowStale () { - return this[ALLOW_STALE] - } - - set maxAge (mA) { - if (typeof mA !== 'number') - throw new TypeError('maxAge must be a non-negative number') - - this[MAX_AGE] = mA - trim(this) - } - get maxAge () { - return this[MAX_AGE] - } - - // resize the cache when the lengthCalculator changes. - set lengthCalculator (lC) { - if (typeof lC !== 'function') - lC = naiveLength - - if (lC !== this[LENGTH_CALCULATOR]) { - this[LENGTH_CALCULATOR] = lC - this[LENGTH] = 0 - this[LRU_LIST].forEach(hit => { - hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key) - this[LENGTH] += hit.length - }) - } - trim(this) - } - get lengthCalculator () { return this[LENGTH_CALCULATOR] } - - get length () { return this[LENGTH] } - get itemCount () { return this[LRU_LIST].length } - - rforEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].tail; walker !== null;) { - const prev = walker.prev - forEachStep(this, fn, walker, thisp) - walker = prev - } - } - - forEach (fn, thisp) { - thisp = thisp || this - for (let walker = this[LRU_LIST].head; walker !== null;) { - const next = walker.next - forEachStep(this, fn, walker, thisp) - walker = next - } - } - - keys () { - return this[LRU_LIST].toArray().map(k => k.key) - } - - values () { - return this[LRU_LIST].toArray().map(k => k.value) - } - - reset () { - if (this[DISPOSE] && - this[LRU_LIST] && - this[LRU_LIST].length) { - this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value)) - } - - this[CACHE] = new Map() // hash of items by key - this[LRU_LIST] = new Yallist() // list of items in order of use recency - this[LENGTH] = 0 // length of items in the list - } - - dump () { - return this[LRU_LIST].map(hit => - isStale(this, hit) ? false : { - k: hit.key, - v: hit.value, - e: hit.now + (hit.maxAge || 0) - }).toArray().filter(h => h) - } - - dumpLru () { - return this[LRU_LIST] - } - - set (key, value, maxAge) { - maxAge = maxAge || this[MAX_AGE] - - if (maxAge && typeof maxAge !== 'number') - throw new TypeError('maxAge must be a number') - - const now = maxAge ? Date.now() : 0 - const len = this[LENGTH_CALCULATOR](value, key) - - if (this[CACHE].has(key)) { - if (len > this[MAX]) { - del(this, this[CACHE].get(key)) - return false - } - - const node = this[CACHE].get(key) - const item = node.value - - // dispose of the old one before overwriting - // split out into 2 ifs for better coverage tracking - if (this[DISPOSE]) { - if (!this[NO_DISPOSE_ON_SET]) - this[DISPOSE](key, item.value) - } - - item.now = now - item.maxAge = maxAge - item.value = value - this[LENGTH] += len - item.length - item.length = len - this.get(key) - trim(this) - return true - } - - const hit = new Entry(key, value, len, now, maxAge) - - // oversized objects fall out of cache automatically. - if (hit.length > this[MAX]) { - if (this[DISPOSE]) - this[DISPOSE](key, value) - - return false - } - - this[LENGTH] += hit.length - this[LRU_LIST].unshift(hit) - this[CACHE].set(key, this[LRU_LIST].head) - trim(this) - return true - } - - has (key) { - if (!this[CACHE].has(key)) return false - const hit = this[CACHE].get(key).value - return !isStale(this, hit) - } - - get (key) { - return get(this, key, true) - } - - peek (key) { - return get(this, key, false) - } - - pop () { - const node = this[LRU_LIST].tail - if (!node) - return null - - del(this, node) - return node.value - } - - del (key) { - del(this, this[CACHE].get(key)) - } - - load (arr) { - // reset the cache - this.reset() - - const now = Date.now() - // A previous serialized cache has the most recent items first - for (let l = arr.length - 1; l >= 0; l--) { - const hit = arr[l] - const expiresAt = hit.e || 0 - if (expiresAt === 0) - // the item was created without expiration in a non aged cache - this.set(hit.k, hit.v) - else { - const maxAge = expiresAt - now - // dont add already expired items - if (maxAge > 0) { - this.set(hit.k, hit.v, maxAge) - } - } - } - } - - prune () { - this[CACHE].forEach((value, key) => get(this, key, false)) - } -} - -const get = (self, key, doUse) => { - const node = self[CACHE].get(key) - if (node) { - const hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - return undefined - } else { - if (doUse) { - if (self[UPDATE_AGE_ON_GET]) - node.value.now = Date.now() - self[LRU_LIST].unshiftNode(node) - } - } - return hit.value - } -} - -const isStale = (self, hit) => { - if (!hit || (!hit.maxAge && !self[MAX_AGE])) - return false - - const diff = Date.now() - hit.now - return hit.maxAge ? diff > hit.maxAge - : self[MAX_AGE] && (diff > self[MAX_AGE]) -} - -const trim = self => { - if (self[LENGTH] > self[MAX]) { - for (let walker = self[LRU_LIST].tail; - self[LENGTH] > self[MAX] && walker !== null;) { - // We know that we're about to delete this one, and also - // what the next least recently used key will be, so just - // go ahead and set it now. - const prev = walker.prev - del(self, walker) - walker = prev - } - } -} - -const del = (self, node) => { - if (node) { - const hit = node.value - if (self[DISPOSE]) - self[DISPOSE](hit.key, hit.value) - - self[LENGTH] -= hit.length - self[CACHE].delete(hit.key) - self[LRU_LIST].removeNode(node) - } -} - -class Entry { - constructor (key, value, length, now, maxAge) { - this.key = key - this.value = value - this.length = length - this.now = now - this.maxAge = maxAge || 0 - } -} - -const forEachStep = (self, fn, node, thisp) => { - let hit = node.value - if (isStale(self, hit)) { - del(self, node) - if (!self[ALLOW_STALE]) - hit = undefined - } - if (hit) - fn.call(thisp, hit.value, hit.key, self) -} - -module.exports = LRUCache - -},{"yallist":276}],266:[function(require,module,exports){ -module.exports = assert; - -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} - -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; - -},{}],267:[function(require,module,exports){ -'use strict'; - -var utils = exports; - -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } else { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); - } - } - return res; -} -utils.toArray = toArray; - -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; - -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; -}; - -},{}],268:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -var cachedSetTimeout; -var cachedClearTimeout; - -function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); -} -function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); -} -(function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } -} ()) -function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - -} -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; - -function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} - -function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],269:[function(require,module,exports){ -(function (setImmediate){ -"use strict"; - -(function(root) { - const MAX_VALUE = 0x7fffffff; - - // The SHA256 and PBKDF2 implementation are from scrypt-async-js: - // See: https://github.com/dchest/scrypt-async-js - function SHA256(m) { - const K = new Uint32Array([ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, - 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, - 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, - 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, - 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, - 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, - 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, - 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, - 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, - 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - ]); - - let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a; - let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; - const w = new Uint32Array(64); - - function blocks(p) { - let off = 0, len = p.length; - while (len >= 64) { - let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2; - - for (i = 0; i < 16; i++) { - j = off + i*4; - w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) | - ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff); - } - - for (i = 16; i < 64; i++) { - u = w[i-2]; - t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10); - - u = w[i-15]; - t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3); - - w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0; - } - - for (i = 0; i < 64; i++) { - t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^ - ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) + - ((h + ((K[i] + w[i]) | 0)) | 0)) | 0; - - t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^ - ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0; - - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } - - h0 = (h0 + a) | 0; - h1 = (h1 + b) | 0; - h2 = (h2 + c) | 0; - h3 = (h3 + d) | 0; - h4 = (h4 + e) | 0; - h5 = (h5 + f) | 0; - h6 = (h6 + g) | 0; - h7 = (h7 + h) | 0; - - off += 64; - len -= 64; - } - } - - blocks(m); - - let i, bytesLeft = m.length % 64, - bitLenHi = (m.length / 0x20000000) | 0, - bitLenLo = m.length << 3, - numZeros = (bytesLeft < 56) ? 56 : 120, - p = m.slice(m.length - bytesLeft, m.length); - - p.push(0x80); - for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); } - p.push((bitLenHi >>> 24) & 0xff); - p.push((bitLenHi >>> 16) & 0xff); - p.push((bitLenHi >>> 8) & 0xff); - p.push((bitLenHi >>> 0) & 0xff); - p.push((bitLenLo >>> 24) & 0xff); - p.push((bitLenLo >>> 16) & 0xff); - p.push((bitLenLo >>> 8) & 0xff); - p.push((bitLenLo >>> 0) & 0xff); - - blocks(p); - - return [ - (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff, - (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff, - (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff, - (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff, - (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff, - (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff, - (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff, - (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff - ]; - } - - function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) { - // compress password if it's longer than hash block length - password = (password.length <= 64) ? password : SHA256(password); - - const innerLen = 64 + salt.length + 4; - const inner = new Array(innerLen); - const outerKey = new Array(64); - - let i; - let dk = []; - - // inner = (password ^ ipad) || salt || counter - for (i = 0; i < 64; i++) { inner[i] = 0x36; } - for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; } - for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; } - for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; } - - // outerKey = password ^ opad - for (i = 0; i < 64; i++) outerKey[i] = 0x5c; - for (i = 0; i < password.length; i++) outerKey[i] ^= password[i]; - - // increments counter inside inner - function incrementCounter() { - for (let i = innerLen - 1; i >= innerLen - 4; i--) { - inner[i]++; - if (inner[i] <= 0xff) return; - inner[i] = 0; - } - } - - // output blocks = SHA256(outerKey || SHA256(inner)) ... - while (dkLen >= 32) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner)))); - dkLen -= 32; - } - if (dkLen > 0) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen)); - } - - return dk; - } - - // The following is an adaptation of scryptsy - // See: https://www.npmjs.com/package/scryptsy - function blockmix_salsa8(BY, Yi, r, x, _X) { - let i; - - arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16); - for (i = 0; i < 2 * r; i++) { - blockxor(BY, i * 16, _X, 16); - salsa20_8(_X, x); - arraycopy(_X, 0, BY, Yi + (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16); - } - - for (i = 0; i < r; i++) { - arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16); - } - } - - function R(a, b) { - return (a << b) | (a >>> (32 - b)); - } - - function salsa20_8(B, x) { - arraycopy(B, 0, x, 0, 16); - - for (let i = 8; i > 0; i -= 2) { - x[ 4] ^= R(x[ 0] + x[12], 7); - x[ 8] ^= R(x[ 4] + x[ 0], 9); - x[12] ^= R(x[ 8] + x[ 4], 13); - x[ 0] ^= R(x[12] + x[ 8], 18); - x[ 9] ^= R(x[ 5] + x[ 1], 7); - x[13] ^= R(x[ 9] + x[ 5], 9); - x[ 1] ^= R(x[13] + x[ 9], 13); - x[ 5] ^= R(x[ 1] + x[13], 18); - x[14] ^= R(x[10] + x[ 6], 7); - x[ 2] ^= R(x[14] + x[10], 9); - x[ 6] ^= R(x[ 2] + x[14], 13); - x[10] ^= R(x[ 6] + x[ 2], 18); - x[ 3] ^= R(x[15] + x[11], 7); - x[ 7] ^= R(x[ 3] + x[15], 9); - x[11] ^= R(x[ 7] + x[ 3], 13); - x[15] ^= R(x[11] + x[ 7], 18); - x[ 1] ^= R(x[ 0] + x[ 3], 7); - x[ 2] ^= R(x[ 1] + x[ 0], 9); - x[ 3] ^= R(x[ 2] + x[ 1], 13); - x[ 0] ^= R(x[ 3] + x[ 2], 18); - x[ 6] ^= R(x[ 5] + x[ 4], 7); - x[ 7] ^= R(x[ 6] + x[ 5], 9); - x[ 4] ^= R(x[ 7] + x[ 6], 13); - x[ 5] ^= R(x[ 4] + x[ 7], 18); - x[11] ^= R(x[10] + x[ 9], 7); - x[ 8] ^= R(x[11] + x[10], 9); - x[ 9] ^= R(x[ 8] + x[11], 13); - x[10] ^= R(x[ 9] + x[ 8], 18); - x[12] ^= R(x[15] + x[14], 7); - x[13] ^= R(x[12] + x[15], 9); - x[14] ^= R(x[13] + x[12], 13); - x[15] ^= R(x[14] + x[13], 18); - } - - for (let i = 0; i < 16; ++i) { - B[i] += x[i]; - } - } - - // naive approach... going back to loop unrolling may yield additional performance - function blockxor(S, Si, D, len) { - for (let i = 0; i < len; i++) { - D[i] ^= S[Si + i] - } - } - - function arraycopy(src, srcPos, dest, destPos, length) { - while (length--) { - dest[destPos++] = src[srcPos++]; - } - } - - function checkBufferish(o) { - if (!o || typeof(o.length) !== 'number') { return false; } - - for (let i = 0; i < o.length; i++) { - const v = o[i]; - if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) { - return false; - } - } - - return true; - } - - function ensureInteger(value, name) { - if (typeof(value) !== "number" || (value % 1)) { throw new Error('invalid ' + name); } - return value; - } - - // N = Cpu cost, r = Memory cost, p = parallelization cost - // callback(error, progress, key) - function _scrypt(password, salt, N, r, p, dkLen, callback) { - - N = ensureInteger(N, 'N'); - r = ensureInteger(r, 'r'); - p = ensureInteger(p, 'p'); - - dkLen = ensureInteger(dkLen, 'dkLen'); - - if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); } - - if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); } - if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); } - - if (!checkBufferish(password)) { - throw new Error('password must be an array or buffer'); - } - password = Array.prototype.slice.call(password); - - if (!checkBufferish(salt)) { - throw new Error('salt must be an array or buffer'); - } - salt = Array.prototype.slice.call(salt); - - let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r); - const B = new Uint32Array(p * 32 * r) - for (let i = 0; i < B.length; i++) { - const j = i * 4; - B[i] = ((b[j + 3] & 0xff) << 24) | - ((b[j + 2] & 0xff) << 16) | - ((b[j + 1] & 0xff) << 8) | - ((b[j + 0] & 0xff) << 0); - } - - const XY = new Uint32Array(64 * r); - const V = new Uint32Array(32 * r * N); - - const Yi = 32 * r; - - // scratch space - const x = new Uint32Array(16); // salsa20_8 - const _X = new Uint32Array(16); // blockmix_salsa8 - - const totalOps = p * N * 2; - let currentOp = 0; - let lastPercent10 = null; - - // Set this to true to abandon the scrypt on the next step - let stop = false; - - // State information - let state = 0; - let i0 = 0, i1; - let Bi; - - // How many blockmix_salsa8 can we do per step? - const limit = callback ? parseInt(1000 / r): 0xffffffff; - - // Trick from scrypt-async; if there is a setImmediate shim in place, use it - const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout; - - // This is really all I changed; making scryptsy a state machine so we occasionally - // stop and give other evnts on the evnt loop a chance to run. ~RicMoo - const incrementalSMix = function() { - if (stop) { - return callback(new Error('cancelled'), currentOp / totalOps); - } - - let steps; - - switch (state) { - case 0: - // for (var i = 0; i < p; i++)... - Bi = i0 * 32 * r; - - arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1 - - state = 1; // Move to ROMix 2 - i1 = 0; - - // Fall through - - case 1: - - // Run up to 1000 steps of the first inner smix loop - steps = N - i1; - if (steps > limit) { steps = limit; } - for (let i = 0; i < steps; i++) { // ROMix - 2 - arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3 - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4 - } - - // for (var i = 0; i < N; i++) - i1 += steps; - currentOp += steps; - - if (callback) { - // Call the callback with the progress (optionally stopping us) - const percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - } - - if (i1 < N) { break; } - - i1 = 0; // Move to ROMix 6 - state = 2; - - // Fall through - - case 2: - - // Run up to 1000 steps of the second inner smix loop - steps = N - i1; - if (steps > limit) { steps = limit; } - for (let i = 0; i < steps; i++) { // ROMix - 6 - const offset = (2 * r - 1) * 16; // ROMix - 7 - const j = XY[offset] & (N - 1); - blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner) - blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer) - } - - // for (var i = 0; i < N; i++)... - i1 += steps; - currentOp += steps; - - // Call the callback with the progress (optionally stopping us) - if (callback) { - const percent10 = parseInt(1000 * currentOp / totalOps); - if (percent10 !== lastPercent10) { - stop = callback(null, currentOp / totalOps); - if (stop) { break; } - lastPercent10 = percent10; - } - } - - if (i1 < N) { break; } - - arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10 - - // for (var i = 0; i < p; i++)... - i0++; - if (i0 < p) { - state = 0; - break; - } - - b = []; - for (let i = 0; i < B.length; i++) { - b.push((B[i] >> 0) & 0xff); - b.push((B[i] >> 8) & 0xff); - b.push((B[i] >> 16) & 0xff); - b.push((B[i] >> 24) & 0xff); - } - - const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen); - - // Send the result to the callback - if (callback) { callback(null, 1.0, derivedKey); } - - // Done; don't break (which would reschedule) - return derivedKey; - } - - // Schedule the next steps - if (callback) { nextTick(incrementalSMix); } - } - - // Run the smix state machine until completion - if (!callback) { - while (true) { - const derivedKey = incrementalSMix(); - if (derivedKey != undefined) { return derivedKey; } - } - } - - // Bootstrap the async incremental smix - incrementalSMix(); - } - - const lib = { - scrypt: function(password, salt, N, r, p, dkLen, progressCallback) { - return new Promise(function(resolve, reject) { - let lastProgress = 0; - if (progressCallback) { progressCallback(0); } - _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) { - if (error) { - reject(error); - } else if (key) { - if (progressCallback && lastProgress !== 1) { - progressCallback(1); - } - resolve(new Uint8Array(key)); - } else if (progressCallback && progress !== lastProgress) { - lastProgress = progress; - return progressCallback(progress); - } - }); - }); - }, - syncScrypt: function(password, salt, N, r, p, dkLen) { - return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen)); - } - }; - - // node.js - if (typeof(exports) !== 'undefined') { - module.exports = lib; - - // RequireJS/AMD - // http://www.requirejs.org/docs/api.html - // https://github.com/amdjs/amdjs-api/wiki/AMD - } else if (typeof(define) === 'function' && define.amd) { - define(lib); - - // Web Browsers - } else if (root) { - - // If there was an existing library "scrypt", make sure it is still available - if (root.scrypt) { - root._scrypt = root.scrypt; - } - - root.scrypt = lib; - } - -})(this); - -}).call(this,require("timers").setImmediate) -},{"timers":270}],270:[function(require,module,exports){ -(function (setImmediate,clearImmediate){ -var nextTick = require('process/browser.js').nextTick; -var apply = Function.prototype.apply; -var slice = Array.prototype.slice; -var immediateIds = {}; -var nextImmediateId = 0; - -// DOM APIs, for completeness - -exports.setTimeout = function() { - return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); -}; -exports.setInterval = function() { - return new Timeout(apply.call(setInterval, window, arguments), clearInterval); -}; -exports.clearTimeout = -exports.clearInterval = function(timeout) { timeout.close(); }; - -function Timeout(id, clearFn) { - this._id = id; - this._clearFn = clearFn; -} -Timeout.prototype.unref = Timeout.prototype.ref = function() {}; -Timeout.prototype.close = function() { - this._clearFn.call(window, this._id); -}; - -// Does not start the time, just sets up the members needed. -exports.enroll = function(item, msecs) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = msecs; -}; - -exports.unenroll = function(item) { - clearTimeout(item._idleTimeoutId); - item._idleTimeout = -1; -}; - -exports._unrefActive = exports.active = function(item) { - clearTimeout(item._idleTimeoutId); - - var msecs = item._idleTimeout; - if (msecs >= 0) { - item._idleTimeoutId = setTimeout(function onTimeout() { - if (item._onTimeout) - item._onTimeout(); - }, msecs); - } -}; - -// That's not how node.js implements it but the exposed api is the same. -exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { - var id = nextImmediateId++; - var args = arguments.length < 2 ? false : slice.call(arguments, 1); - - immediateIds[id] = true; - - nextTick(function onNextTick() { - if (immediateIds[id]) { - // fn.call() is faster so we optimize for the common use-case - // @see http://jsperf.com/call-apply-segu - if (args) { - fn.apply(null, args); - } else { - fn.call(null); - } - // Prevent ids from leaking - exports.clearImmediate(id); - } - }); - - return id; -}; - -exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { - delete immediateIds[id]; -}; -}).call(this,require("timers").setImmediate,require("timers").clearImmediate) -},{"process/browser.js":268,"timers":270}],271:[function(require,module,exports){ -'use strict'; -module.exports = require( './lib/u2f-api' ); -},{"./lib/u2f-api":273}],272:[function(require,module,exports){ -// Copyright 2014 Google Inc. All rights reserved -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file or at -// https://developers.google.com/open-source/licenses/bsd - -/** - * @fileoverview The U2F api. - */ - -'use strict'; - -/** Namespace for the U2F api. - * @type {Object} - */ -var u2f = u2f || {}; - -module.exports = u2f; // Adaptation for u2f-api package - -/** - * The U2F extension id - * @type {string} - * @const - */ -u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd'; - -/** - * Message types for messsages to/from the extension - * @const - * @enum {string} - */ -u2f.MessageTypes = { - 'U2F_REGISTER_REQUEST': 'u2f_register_request', - 'U2F_SIGN_REQUEST': 'u2f_sign_request', - 'U2F_REGISTER_RESPONSE': 'u2f_register_response', - 'U2F_SIGN_RESPONSE': 'u2f_sign_response' -}; - -/** - * Response status codes - * @const - * @enum {number} - */ -u2f.ErrorCodes = { - 'OK': 0, - 'OTHER_ERROR': 1, - 'BAD_REQUEST': 2, - 'CONFIGURATION_UNSUPPORTED': 3, - 'DEVICE_INELIGIBLE': 4, - 'TIMEOUT': 5 -}; - -/** - * A message type for registration requests - * @typedef {{ - * type: u2f.MessageTypes, - * signRequests: Array., - * registerRequests: ?Array., - * timeoutSeconds: ?number, - * requestId: ?number - * }} - */ -u2f.Request; - -/** - * A message for registration responses - * @typedef {{ - * type: u2f.MessageTypes, - * responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse), - * requestId: ?number - * }} - */ -u2f.Response; - -/** - * An error object for responses - * @typedef {{ - * errorCode: u2f.ErrorCodes, - * errorMessage: ?string - * }} - */ -u2f.Error; - -/** - * Data object for a single sign request. - * @typedef {{ - * version: string, - * challenge: string, - * keyHandle: string, - * appId: string - * }} - */ -u2f.SignRequest; - -/** - * Data object for a sign response. - * @typedef {{ - * keyHandle: string, - * signatureData: string, - * clientData: string - * }} - */ -u2f.SignResponse; - -/** - * Data object for a registration request. - * @typedef {{ - * version: string, - * challenge: string, - * appId: string - * }} - */ -u2f.RegisterRequest; - -/** - * Data object for a registration response. - * @typedef {{ - * registrationData: string, - * clientData: string - * }} - */ -u2f.RegisterResponse; - - -// Low level MessagePort API support - -/** - * Call MessagePort disconnect - */ -u2f.disconnect = function() { - if (u2f.port_ && u2f.port_.port_) { - u2f.port_.port_.disconnect(); - u2f.port_ = null; - } -}; - -/** - * Sets up a MessagePort to the U2F extension using the - * available mechanisms. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - */ -u2f.getMessagePort = function(callback) { - if (typeof chrome != 'undefined' && chrome.runtime) { - // The actual message here does not matter, but we need to get a reply - // for the callback to run. Thus, send an empty signature request - // in order to get a failure response. - var msg = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: [] - }; - chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() { - if (!chrome.runtime.lastError) { - // We are on a whitelisted origin and can talk directly - // with the extension. - u2f.getChromeRuntimePort_(callback); - } else { - // chrome.runtime was available, but we couldn't message - // the extension directly, use iframe - u2f.getIframePort_(callback); - } - }); - } else { - // chrome.runtime was not available at all, which is normal - // when this origin doesn't have access to any extensions. - u2f.getIframePort_(callback); - } -}; - -/** - * Connects directly to the extension via chrome.runtime.connect - * @param {function(u2f.WrappedChromeRuntimePort_)} callback - * @private - */ -u2f.getChromeRuntimePort_ = function(callback) { - var port = chrome.runtime.connect(u2f.EXTENSION_ID, - {'includeTlsChannelId': true}); - setTimeout(function() { - callback(null, new u2f.WrappedChromeRuntimePort_(port)); - }, 0); -}; - -/** - * A wrapper for chrome.runtime.Port that is compatible with MessagePort. - * @param {Port} port - * @constructor - * @private - */ -u2f.WrappedChromeRuntimePort_ = function(port) { - this.port_ = port; -}; - -/** - * Posts a message on the underlying channel. - * @param {Object} message - */ -u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) { - this.port_.postMessage(message); -}; - -/** - * Emulates the HTML 5 addEventListener interface. Works only for the - * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage. - * @param {string} eventName - * @param {function({data: Object})} handler - */ -u2f.WrappedChromeRuntimePort_.prototype.addEventListener = - function(eventName, handler) { - var name = eventName.toLowerCase(); - if (name == 'message' || name == 'onmessage') { - this.port_.onMessage.addListener(function(message) { - // Emulate a minimal MessageEvent object - handler({'data': message}); - }); - } else { - console.error('WrappedChromeRuntimePort only supports onMessage'); - } -}; - -/** - * Sets up an embedded trampoline iframe, sourced from the extension. - * @param {function(MessagePort)} callback - * @private - */ -u2f.getIframePort_ = function(callback) { - // Create the iframe - var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID; - var iframe = document.createElement('iframe'); - iframe.src = iframeOrigin + '/u2f-comms.html'; - iframe.setAttribute('style', 'display:none'); - document.body.appendChild(iframe); - - var hasCalledBack = false; - - var channel = new MessageChannel(); - var ready = function(message) { - if (message.data == 'ready') { - channel.port1.removeEventListener('message', ready); - if (!hasCalledBack) - { - hasCalledBack = true; - callback(null, channel.port1); - } - } else { - console.error('First event on iframe port was not "ready"'); - } - }; - channel.port1.addEventListener('message', ready); - channel.port1.start(); - - iframe.addEventListener('load', function() { - // Deliver the port to the iframe and initialize - iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]); - }); - - // Give this 200ms to initialize, after that, we treat this method as failed - setTimeout(function() { - if (!hasCalledBack) - { - hasCalledBack = true; - callback(new Error("IFrame extension not supported")); - } - }, 200); -}; - - -// High-level JS API - -/** - * Default extension response timeout in seconds. - * @const - */ -u2f.EXTENSION_TIMEOUT_SEC = 30; - -/** - * A singleton instance for a MessagePort to the extension. - * @type {MessagePort|u2f.WrappedChromeRuntimePort_} - * @private - */ -u2f.port_ = null; - -/** - * Callbacks waiting for a port - * @type {Array.} - * @private - */ -u2f.waitingForPort_ = []; - -/** - * A counter for requestIds. - * @type {number} - * @private - */ -u2f.reqCounter_ = 0; - -/** - * A map from requestIds to client callbacks - * @type {Object.} - * @private - */ -u2f.callbackMap_ = {}; - -/** - * Creates or retrieves the MessagePort singleton to use. - * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback - * @private - */ -u2f.getPortSingleton_ = function(callback) { - if (u2f.port_) { - callback(null, u2f.port_); - } else { - if (u2f.waitingForPort_.length == 0) { - u2f.getMessagePort(function(err, port) { - if (!err) { - u2f.port_ = port; - u2f.port_.addEventListener('message', - /** @type {function(Event)} */ (u2f.responseHandler_)); - } - - // Careful, here be async callbacks. Maybe. - while (u2f.waitingForPort_.length) - u2f.waitingForPort_.shift()(err, port); - }); - } - u2f.waitingForPort_.push(callback); - } -}; - -/** - * Handles response messages from the extension. - * @param {MessageEvent.} message - * @private - */ -u2f.responseHandler_ = function(message) { - var response = message.data; - var reqId = response['requestId']; - if (!reqId || !u2f.callbackMap_[reqId]) { - console.error('Unknown or missing requestId in response.'); - return; - } - var cb = u2f.callbackMap_[reqId]; - delete u2f.callbackMap_[reqId]; - cb(null, response['responseData']); -}; - -/** - * Calls the callback with true or false as first and only argument - * @param {Function} callback - */ -u2f.isSupported = function(callback) { - u2f.getPortSingleton_(function(err, port) { - callback(!err); - }); -} - -/** - * Dispatches an array of sign requests to available U2F tokens. - * @param {Array.} signRequests - * @param {function((u2f.Error|u2f.SignResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.sign = function(signRequests, callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(err, port) { - if (err) - return callback(err); - - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_SIGN_REQUEST, - signRequests: signRequests, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - -/** - * Dispatches register requests to available U2F tokens. An array of sign - * requests identifies already registered tokens. - * @param {Array.} registerRequests - * @param {Array.} signRequests - * @param {function((u2f.Error|u2f.RegisterResponse))} callback - * @param {number=} opt_timeoutSeconds - */ -u2f.register = function(registerRequests, signRequests, - callback, opt_timeoutSeconds) { - u2f.getPortSingleton_(function(err, port) { - if (err) - return callback(err); - - var reqId = ++u2f.reqCounter_; - u2f.callbackMap_[reqId] = callback; - var req = { - type: u2f.MessageTypes.U2F_REGISTER_REQUEST, - signRequests: signRequests, - registerRequests: registerRequests, - timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ? - opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC), - requestId: reqId - }; - port.postMessage(req); - }); -}; - -},{}],273:[function(require,module,exports){ -(function (global){ -'use strict'; - -module.exports = API; - -var chromeApi = require( './google-u2f-api' ); - -// Feature detection (yes really) -var isBrowser = ( typeof navigator !== 'undefined' ) && !!navigator.userAgent; -var isSafari = isBrowser && navigator.userAgent.match( /Safari\// ) - && !navigator.userAgent.match( /Chrome\// ); -var isEDGE = isBrowser && navigator.userAgent.match( /Edge\/1[2345]/ ); - -var _backend = null; -function getBackend( Promise ) -{ - if ( !_backend ) - _backend = new Promise( function( resolve, reject ) - { - function notSupported( ) - { - // Note; {native: true} means *not* using Google's hack - resolve( { u2f: null, native: true } ); - } - - if ( !isBrowser ) - return notSupported( ); - - if ( isSafari ) - // Safari doesn't support U2F, and the Safari-FIDO-U2F - // extension lacks full support (Multi-facet apps), so we - // block it until proper support. - return notSupported( ); - - var hasNativeSupport = - ( typeof window.u2f !== 'undefined' ) && - ( typeof window.u2f.sign === 'function' ); - - if ( hasNativeSupport ) - resolve( { u2f: window.u2f, native: true } ); - - if ( isEDGE ) - // We don't want to check for Google's extension hack on EDGE - // as it'll cause trouble (popups, etc) - return notSupported( ); - - if ( location.protocol === 'http:' ) - // U2F isn't supported over http, only https - return notSupported( ); - - if ( typeof MessageChannel === 'undefined' ) - // Unsupported browser, the chrome hack would throw - return notSupported( ); - - // Test for google extension support - chromeApi.isSupported( function( ok ) - { - if ( ok ) - resolve( { u2f: chromeApi, native: false } ); - else - notSupported( ); - } ); - } ); - - return _backend; -} - -function API( Promise ) -{ - return { - isSupported : isSupported.bind( Promise ), - ensureSupport : ensureSupport.bind( Promise ), - register : register.bind( Promise ), - sign : sign.bind( Promise ), - ErrorCodes : API.ErrorCodes, - ErrorNames : API.ErrorNames - }; -} - -API.ErrorCodes = { - CANCELLED: -1, - OK: 0, - OTHER_ERROR: 1, - BAD_REQUEST: 2, - CONFIGURATION_UNSUPPORTED: 3, - DEVICE_INELIGIBLE: 4, - TIMEOUT: 5 -}; -API.ErrorNames = { - "-1": "CANCELLED", - "0": "OK", - "1": "OTHER_ERROR", - "2": "BAD_REQUEST", - "3": "CONFIGURATION_UNSUPPORTED", - "4": "DEVICE_INELIGIBLE", - "5": "TIMEOUT" -}; - -function makeError( msg, err ) -{ - var code = err != null ? err.errorCode : 1; // Default to OTHER_ERROR - var type = API.ErrorNames[ '' + code ]; - var error = new Error( msg ); - error.metaData = { - type: type, - code: code - } - return error; -} - -function deferPromise( Promise, promise ) -{ - var ret = { }; - ret.promise = new Promise( function( resolve, reject ) { - ret.resolve = resolve; - ret.reject = reject; - promise.then( resolve, reject ); - } ); - /** - * Reject request promise and disconnect port if 'disconnect' flag is true - * @param {string} msg - * @param {boolean} disconnect - */ - ret.promise.cancel = function( msg, disconnect ) - { - getBackend( Promise ) - .then( function( backend ) - { - if ( disconnect && !backend.native ) - backend.u2f.disconnect( ); - - ret.reject( makeError( msg, { errorCode: -1 } ) ); - } ); - }; - return ret; -} - -function defer( Promise, fun ) -{ - return deferPromise( Promise, new Promise( function( resolve, reject ) - { - try - { - fun && fun( resolve, reject ); - } - catch ( err ) - { - reject( err ); - } - } ) ); -} - -function isSupported( ) -{ - var Promise = this; - - return getBackend( Promise ) - .then( function( backend ) - { - return !!backend.u2f; - } ); -} - -function _ensureSupport( backend ) -{ - if ( !backend.u2f ) - { - if ( location.protocol === 'http:' ) - throw new Error( "U2F isn't supported over http, only https" ); - throw new Error( "U2F not supported" ); - } -} - -function ensureSupport( ) -{ - var Promise = this; - - return getBackend( Promise ) - .then( _ensureSupport ); -} - -function register( registerRequests, signRequests /* = null */, timeout ) -{ - var Promise = this; - - if ( !Array.isArray( registerRequests ) ) - registerRequests = [ registerRequests ]; - - if ( typeof signRequests === 'number' && typeof timeout === 'undefined' ) - { - timeout = signRequests; - signRequests = null; - } - - if ( !signRequests ) - signRequests = [ ]; - - return deferPromise( Promise, getBackend( Promise ) - .then( function( backend ) - { - _ensureSupport( backend ); - - var native = backend.native; - var u2f = backend.u2f; - - return new Promise( function( resolve, reject ) - { - function cbNative( response ) - { - if ( response.errorCode ) - reject( makeError( "Registration failed", response ) ); - else - { - delete response.errorCode; - resolve( response ); - } - } - - function cbChrome( err, response ) - { - if ( err ) - reject( err ); - else if ( response.errorCode ) - reject( makeError( "Registration failed", response ) ); - else - resolve( response ); - } - - if ( native ) - { - var appId = registerRequests[ 0 ].appId; - - u2f.register( - appId, registerRequests, signRequests, cbNative, timeout ); - } - else - { - u2f.register( - registerRequests, signRequests, cbChrome, timeout ); - } - } ); - } ) ).promise; -} - -function sign( signRequests, timeout ) -{ - var Promise = this; - - if ( !Array.isArray( signRequests ) ) - signRequests = [ signRequests ]; - - return deferPromise( Promise, getBackend( Promise ) - .then( function( backend ) - { - _ensureSupport( backend ); - - var native = backend.native; - var u2f = backend.u2f; - - return new Promise( function( resolve, reject ) - { - function cbNative( response ) - { - if ( response.errorCode ) - reject( makeError( "Sign failed", response ) ); - else - { - delete response.errorCode; - resolve( response ); - } - } - - function cbChrome( err, response ) - { - if ( err ) - reject( err ); - else if ( response.errorCode ) - reject( makeError( "Sign failed", response ) ); - else - resolve( response ); - } - - if ( native ) - { - var appId = signRequests[ 0 ].appId; - var challenge = signRequests[ 0 ].challenge; - - u2f.sign( appId, challenge, signRequests, cbNative, timeout ); - } - else - { - u2f.sign( signRequests, cbChrome, timeout ); - } - } ); - } ) ).promise; -} - -function makeDefault( func ) -{ - API[ func ] = function( ) - { - if ( !global.Promise ) - // This is very unlikely to ever happen, since browsers - // supporting U2F will most likely support Promises. - throw new Error( "The platform doesn't natively support promises" ); - - var args = [ ].slice.call( arguments ); - return API( global.Promise )[ func ].apply( null, args ); - }; -} - -// Provide default functions using the built-in Promise if available. -makeDefault( 'isSupported' ); -makeDefault( 'ensureSupport' ); -makeDefault( 'register' ); -makeDefault( 'sign' ); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./google-u2f-api":272}],274:[function(require,module,exports){ -'use strict'; - -module.exports = function() { - throw new Error( - 'ws does not work in the browser. Browser clients must use the native ' + - 'WebSocket object' - ); -}; - -},{}],275:[function(require,module,exports){ -'use strict' -module.exports = function (Yallist) { - Yallist.prototype[Symbol.iterator] = function* () { - for (let walker = this.head; walker; walker = walker.next) { - yield walker.value - } - } -} - -},{}],276:[function(require,module,exports){ -'use strict' -module.exports = Yallist - -Yallist.Node = Node -Yallist.create = Yallist - -function Yallist (list) { - var self = this - if (!(self instanceof Yallist)) { - self = new Yallist() - } - - self.tail = null - self.head = null - self.length = 0 - - if (list && typeof list.forEach === 'function') { - list.forEach(function (item) { - self.push(item) - }) - } else if (arguments.length > 0) { - for (var i = 0, l = arguments.length; i < l; i++) { - self.push(arguments[i]) - } - } - - return self -} - -Yallist.prototype.removeNode = function (node) { - if (node.list !== this) { - throw new Error('removing node which does not belong to this list') - } - - var next = node.next - var prev = node.prev - - if (next) { - next.prev = prev - } - - if (prev) { - prev.next = next - } - - if (node === this.head) { - this.head = next - } - if (node === this.tail) { - this.tail = prev - } - - node.list.length-- - node.next = null - node.prev = null - node.list = null - - return next -} - -Yallist.prototype.unshiftNode = function (node) { - if (node === this.head) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var head = this.head - node.list = this - node.next = head - if (head) { - head.prev = node - } - - this.head = node - if (!this.tail) { - this.tail = node - } - this.length++ -} - -Yallist.prototype.pushNode = function (node) { - if (node === this.tail) { - return - } - - if (node.list) { - node.list.removeNode(node) - } - - var tail = this.tail - node.list = this - node.prev = tail - if (tail) { - tail.next = node - } - - this.tail = node - if (!this.head) { - this.head = node - } - this.length++ -} - -Yallist.prototype.push = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - push(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.unshift = function () { - for (var i = 0, l = arguments.length; i < l; i++) { - unshift(this, arguments[i]) - } - return this.length -} - -Yallist.prototype.pop = function () { - if (!this.tail) { - return undefined - } - - var res = this.tail.value - this.tail = this.tail.prev - if (this.tail) { - this.tail.next = null - } else { - this.head = null - } - this.length-- - return res -} - -Yallist.prototype.shift = function () { - if (!this.head) { - return undefined - } - - var res = this.head.value - this.head = this.head.next - if (this.head) { - this.head.prev = null - } else { - this.tail = null - } - this.length-- - return res -} - -Yallist.prototype.forEach = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.head, i = 0; walker !== null; i++) { - fn.call(thisp, walker.value, i, this) - walker = walker.next - } -} - -Yallist.prototype.forEachReverse = function (fn, thisp) { - thisp = thisp || this - for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { - fn.call(thisp, walker.value, i, this) - walker = walker.prev - } -} - -Yallist.prototype.get = function (n) { - for (var i = 0, walker = this.head; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.next - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.getReverse = function (n) { - for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { - // abort out of the list early if we hit a cycle - walker = walker.prev - } - if (i === n && walker !== null) { - return walker.value - } -} - -Yallist.prototype.map = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.head; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.next - } - return res -} - -Yallist.prototype.mapReverse = function (fn, thisp) { - thisp = thisp || this - var res = new Yallist() - for (var walker = this.tail; walker !== null;) { - res.push(fn.call(thisp, walker.value, this)) - walker = walker.prev - } - return res -} - -Yallist.prototype.reduce = function (fn, initial) { - var acc - var walker = this.head - if (arguments.length > 1) { - acc = initial - } else if (this.head) { - walker = this.head.next - acc = this.head.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = 0; walker !== null; i++) { - acc = fn(acc, walker.value, i) - walker = walker.next - } - - return acc -} - -Yallist.prototype.reduceReverse = function (fn, initial) { - var acc - var walker = this.tail - if (arguments.length > 1) { - acc = initial - } else if (this.tail) { - walker = this.tail.prev - acc = this.tail.value - } else { - throw new TypeError('Reduce of empty list with no initial value') - } - - for (var i = this.length - 1; walker !== null; i--) { - acc = fn(acc, walker.value, i) - walker = walker.prev - } - - return acc -} - -Yallist.prototype.toArray = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.head; walker !== null; i++) { - arr[i] = walker.value - walker = walker.next - } - return arr -} - -Yallist.prototype.toArrayReverse = function () { - var arr = new Array(this.length) - for (var i = 0, walker = this.tail; walker !== null; i++) { - arr[i] = walker.value - walker = walker.prev - } - return arr -} - -Yallist.prototype.slice = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = 0, walker = this.head; walker !== null && i < from; i++) { - walker = walker.next - } - for (; walker !== null && i < to; i++, walker = walker.next) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.sliceReverse = function (from, to) { - to = to || this.length - if (to < 0) { - to += this.length - } - from = from || 0 - if (from < 0) { - from += this.length - } - var ret = new Yallist() - if (to < from || to < 0) { - return ret - } - if (from < 0) { - from = 0 - } - if (to > this.length) { - to = this.length - } - for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { - walker = walker.prev - } - for (; walker !== null && i > from; i--, walker = walker.prev) { - ret.push(walker.value) - } - return ret -} - -Yallist.prototype.splice = function (start, deleteCount, ...nodes) { - if (start > this.length) { - start = this.length - 1 - } - if (start < 0) { - start = this.length + start; - } - - for (var i = 0, walker = this.head; walker !== null && i < start; i++) { - walker = walker.next - } - - var ret = [] - for (var i = 0; walker && i < deleteCount; i++) { - ret.push(walker.value) - walker = this.removeNode(walker) - } - if (walker === null) { - walker = this.tail - } - - if (walker !== this.head && walker !== this.tail) { - walker = walker.prev - } - - for (var i = 0; i < nodes.length; i++) { - walker = insert(this, walker, nodes[i]) - } - return ret; -} - -Yallist.prototype.reverse = function () { - var head = this.head - var tail = this.tail - for (var walker = head; walker !== null; walker = walker.prev) { - var p = walker.prev - walker.prev = walker.next - walker.next = p - } - this.head = tail - this.tail = head - return this -} - -function insert (self, node, value) { - var inserted = node === self.head ? - new Node(value, null, node, self) : - new Node(value, node, node.next, self) - - if (inserted.next === null) { - self.tail = inserted - } - if (inserted.prev === null) { - self.head = inserted - } - - self.length++ - - return inserted -} - -function push (self, item) { - self.tail = new Node(item, self.tail, null, self) - if (!self.head) { - self.head = self.tail - } - self.length++ -} - -function unshift (self, item) { - self.head = new Node(item, null, self.head, self) - if (!self.tail) { - self.tail = self.head - } - self.length++ -} - -function Node (value, prev, next, list) { - if (!(this instanceof Node)) { - return new Node(value, prev, next, list) - } - - this.list = list - this.value = value - - if (prev) { - prev.next = this - this.prev = prev - } else { - this.prev = null - } - - if (next) { - next.prev = this - this.next = next - } else { - this.next = null - } -} - -try { - // add if support for Symbol.iterator is present - require('./iterator.js')(Yallist) -} catch (er) {} - -},{"./iterator.js":275}]},{},[2]); diff --git a/gulpfile.babel.js b/gulpfile.babel.js deleted file mode 100644 index fbae4d7b..00000000 --- a/gulpfile.babel.js +++ /dev/null @@ -1,44 +0,0 @@ -const browserify = require('browserify'); -const gulp = require('gulp'); -const babelify = require('babelify'); -const source = require('vinyl-source-stream'); -const browserSync = require('browser-sync').create(); - -const paths = { - scripts: { - source: './main.js', - destination: './', - filename: 'bundle.js', - watch: ['./main.js', 'ledger-bridge.js'] - } -} - -gulp.task('scripts', function() { - - const bundle = browserify({ - entries: [paths.scripts.source], - debug: false, - transform: [babelify], - }); - - return bundle.bundle() - .pipe(source(paths.scripts.filename)) - .pipe(gulp.dest(paths.scripts.destination)) -}); - -gulp.task('watch', function() { - gulp.watch(paths.scripts.watch, gulp.series('scripts')); -}); - - -gulp.task('browser-sync', function() { - browserSync.init({ - server: { - baseDir: "./", - port: 9000, - https: true - } - }); -}); - -gulp.task('default', gulp.parallel('scripts', 'watch', 'browser-sync')); \ No newline at end of file diff --git a/index.html b/index.html index 863bffb4..aacf88f6 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,8 @@ MetaMask < = > Ledger Bridge + - diff --git a/ledger-bridge.js b/ledger-bridge.js index 3818e7c0..75cb157d 100644 --- a/ledger-bridge.js +++ b/ledger-bridge.js @@ -1,7 +1,4 @@ -'use strict' -require('buffer') - -import TransportU2F from '@ledgerhq/hw-transport-u2f' +import TransportWebUSB from '@ledgerhq/hw-transport-webusb' import TransportWebHID from '@ledgerhq/hw-transport-webhid' import LedgerEth from '@ledgerhq/hw-app-eth' import WebSocketTransport from '@ledgerhq/hw-transport-http/lib/WebSocketTransport' @@ -125,7 +122,7 @@ export default class LedgerBridge { : await TransportWebHID.create() this.app = new LedgerEth(this.transport) } else { - this.transport = await TransportU2F.create() + this.transport = await TransportWebUSB.create() this.app = new LedgerEth(this.transport) } } catch (e) { diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index ca3020d2..00000000 --- a/package-lock.json +++ /dev/null @@ -1,16141 +0,0 @@ -{ - "name": "gupltest", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "gupltest", - "version": "0.0.0", - "license": "BSD-2-Clause", - "dependencies": { - "@ledgerhq/hw-app-eth": "^6.12.2", - "@ledgerhq/hw-transport-http": "^5.45.0", - "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated", - "@ledgerhq/hw-transport-webhid": "^6.7.0", - "babel-runtime": "^6.26.0", - "babelify": "^8.0.0", - "browserify": "^16.2.2", - "buffer": "^5.2.0" - }, - "devDependencies": { - "babel-core": "^6.26.3", - "babel-preset-es2015": "^6.24.1", - "babel-register": "^6.26.0", - "browser-sync": "^2.26.3", - "gulp": "^4.0.2", - "source": "0.0.3", - "vinyl-source-stream": "^2.0.0" - }, - "engines": { - "npm": "^7.6.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", - "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", - "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", - "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", - "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/rlp": "^5.5.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", - "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", - "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", - "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "bn.js": "^4.11.9" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", - "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", - "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.5.0", - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", - "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", - "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", - "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", - "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", - "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz", - "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", - "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/sha2": "^5.5.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", - "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz", - "integrity": "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", - "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", - "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", - "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", - "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", - "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", - "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", - "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", - "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", - "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/json-wallets": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz", - "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", - "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/@ledgerhq/cryptoassets": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-6.12.2.tgz", - "integrity": "sha512-Q8ZYe74lWoCqagB1QXt8jBFDqhbKc1IP0/ZYtil2W0PNM+Kv563//LnupmcfkR0uN0czvZrDS/runSx0ASO+JQ==", - "dependencies": { - "invariant": "2" - } - }, - "node_modules/@ledgerhq/devices": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.43.0.tgz", - "integrity": "sha512-/M5ZLUBdBK7Vl2T4yNJbES3Z4w55LbPdxD9rcOBAKH/5V3V0obQv6MUasP9b7DSkwGSSLCOGZLohoT2NxK2D2A==", - "dependencies": { - "@ledgerhq/errors": "^5.43.0", - "@ledgerhq/logs": "^5.43.0", - "rxjs": "^6.6.3", - "semver": "^7.3.4" - } - }, - "node_modules/@ledgerhq/devices/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ledgerhq/errors": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.43.0.tgz", - "integrity": "sha512-ZjKlUQbIn/DHXAefW3Y1VyDrlVhVqqGnXzrqbOXuDbZ2OAIfSe/A1mrlCbWt98jP/8EJQBuCzBOtnmpXIL/nYg==" - }, - "node_modules/@ledgerhq/hw-app-eth": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-6.12.2.tgz", - "integrity": "sha512-FDF661Jeo1bR1B9UjKhxjGUDSiA/qQt88j/1edbxQKTHKbvPTLH4m68andeneetS6l+6jc8fX/2IwDpCEQ4mTA==", - "dependencies": { - "@ledgerhq/cryptoassets": "^6.12.2", - "@ledgerhq/errors": "^6.10.0", - "@ledgerhq/hw-transport": "^6.11.2", - "@ledgerhq/logs": "^6.10.0", - "axios": "^0.23.0", - "bignumber.js": "^9.0.1", - "ethers": "^5.5.1" - } - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/@ledgerhq/devices": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.11.2.tgz", - "integrity": "sha512-j2SoG0Ifm7khsPKC2UFhJIoi1oCDCvJemmO+pz7Oc9jx8JRhIGtCfqEIUhL+ZIl0TrIYuApPLaSqJjiFi7VGCQ==", - "dependencies": { - "@ledgerhq/errors": "^6.10.0", - "@ledgerhq/logs": "^6.10.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/@ledgerhq/errors": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.10.0.tgz", - "integrity": "sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==" - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/@ledgerhq/hw-transport": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.11.2.tgz", - "integrity": "sha512-VZbGfyQ8iFl2W6TUkVmQ3rz8kyOXMbOdFiht3VNlglMe3KBGJWOjW9s/5LhOR348NJs797B1gl4V0Zqmn11kUg==", - "dependencies": { - "@ledgerhq/devices": "^6.11.2", - "@ledgerhq/errors": "^6.10.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/@ledgerhq/logs": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.0.tgz", - "integrity": "sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==" - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/axios": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", - "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", - "dependencies": { - "follow-redirects": "^1.14.4" - } - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/@ledgerhq/hw-app-eth/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ledgerhq/hw-transport": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.43.0.tgz", - "integrity": "sha512-0S+TGmiEJOqgM2MWnolZQPVKU3oRtoDj4yUFUZts9Owbgby+hmo4dIKTvv0vs8mwknQbOZByUgh3MQOQiK70MQ==", - "dependencies": { - "@ledgerhq/devices": "^5.43.0", - "@ledgerhq/errors": "^5.43.0", - "events": "^3.2.0" - } - }, - "node_modules/@ledgerhq/hw-transport-http": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-http/-/hw-transport-http-5.49.0.tgz", - "integrity": "sha512-f3vUD6LMg2hmZwG/81TqvoMp9yI2/qFrd4f5JmLMniLRztkA4Rlt4C+E+1N7WXU8Iuaj9jXyK6NY7uTuprEbvg==", - "dependencies": { - "@ledgerhq/errors": "^5.49.0", - "@ledgerhq/hw-transport": "^5.49.0", - "@ledgerhq/logs": "^5.49.0", - "axios": "^0.21.1", - "ws": "6" - } - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/@ledgerhq/devices": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.49.0.tgz", - "integrity": "sha512-14VSO+NeR/O8VSXXnlBsA0DAluzanJVEjHLDJubU5NZjEttXVF9gdQh1j10+MKW0f8H23IkdqwswVQIB9ZPomQ==", - "dependencies": { - "@ledgerhq/errors": "^5.49.0", - "@ledgerhq/logs": "^5.49.0", - "rxjs": "^6.6.7", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/@ledgerhq/errors": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.49.0.tgz", - "integrity": "sha512-+uhoSsAnzZiZ2CUk/dv4Uo8lrl0jn2izYJATSbC5aZFd0Yl7PWZ1SMHMkvPVEgQvWZcu4iQZ67rlKOtj5tUFWA==" - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/@ledgerhq/hw-transport": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.49.0.tgz", - "integrity": "sha512-mfQNSxZ3cTXo+l6SEM+D92YaW46GkP1IiWo9OkHPnsq8y8IxSD6QJOEiAAZtvpGvV1eRqqrVyanoFRTuHcZjZA==", - "dependencies": { - "@ledgerhq/devices": "^5.49.0", - "@ledgerhq/errors": "^5.49.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/@ledgerhq/logs": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.49.0.tgz", - "integrity": "sha512-Ynl2JzRwh8l9PoXrDNihXEicpVo6Ra2lYZoqSYfVH/v/2/TSa/JB9Qll8P85XFYkS3ouDTTbp1S5KViaTkqD5g==" - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@ledgerhq/hw-transport-http/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ledgerhq/hw-transport-u2f": { - "version": "5.36.0-deprecated", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz", - "integrity": "sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg==", - "dependencies": { - "@ledgerhq/errors": "^5.34.0", - "@ledgerhq/hw-transport": "^5.34.0", - "@ledgerhq/logs": "^5.30.0", - "u2f-api": "0.2.7" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.7.0.tgz", - "integrity": "sha512-FmTQUKENVEIwEM2XT6PIBDbXvdyFjmz3g+Oq5Gn8c4m3knT3h0ehb+Mx5dKlYEg/6Y7vESGUiNZdEQGGieUI/Q==", - "dependencies": { - "@ledgerhq/devices": "^6.7.0", - "@ledgerhq/errors": "^6.2.0", - "@ledgerhq/hw-transport": "^6.7.0", - "@ledgerhq/logs": "^6.2.0" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/@ledgerhq/devices": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.7.0.tgz", - "integrity": "sha512-FWJfmdl8V300++OXLgBLpIi+IJoR/srWvxpXrWkc9hd3cNMxgeCl9opm84Y0oJDLBQL9AaERMrb+Cb1nZZR9Tw==", - "dependencies": { - "@ledgerhq/errors": "^6.2.0", - "@ledgerhq/logs": "^6.2.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/@ledgerhq/errors": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.2.0.tgz", - "integrity": "sha512-eO03x8HJmG60WtlrMuahigW/rwywFdcGzCnihta/MjkM8BD9A660cKVkyIuheCcpaB7UV/r+QsRl9abHbjjaag==" - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/@ledgerhq/hw-transport": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.7.0.tgz", - "integrity": "sha512-w+PhW6Y4KXYdoCykkE1zt0VL6Ryf72RP8sZP8OH1O90hX/R/q9BMYKl8VNqTbqlrOrORgATlKkbmIJBjbngZew==", - "dependencies": { - "@ledgerhq/devices": "^6.7.0", - "@ledgerhq/errors": "^6.2.0", - "events": "^3.3.0" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/@ledgerhq/logs": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.2.0.tgz", - "integrity": "sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A==" - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/@ledgerhq/hw-transport-webhid/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@ledgerhq/hw-transport/node_modules/events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/@ledgerhq/logs": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.43.0.tgz", - "integrity": "sha512-QWfQjea3ekh9ZU+JeL2tJC9cTKLZ/JrcS0JGatLejpRYxQajvnHvHfh0dbHOKXEaXfCskEPTZ3f1kzuts742GA==" - }, - "node_modules/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "dependencies": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" - }, - "node_modules/acorn-node": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", - "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", - "dependencies": { - "acorn": "^6.0.2", - "acorn-dynamic-import": "^4.0.0", - "acorn-walk": "^6.1.0", - "xtend": "^4.0.1" - } - }, - "node_modules/acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "node_modules/array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dependencies": { - "util": "0.10.3" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "dependencies": { - "async-done": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-core/node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/babel-core/node_modules/convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/babel-core/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.10.0" - } - }, - "node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "node_modules/babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-template/node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse/node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/babel-traverse/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babelify": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", - "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==" - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "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, - "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": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "node_modules/bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "node_modules/browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dependencies": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - }, - "bin": { - "browser-pack": "bin/cmd.js" - } - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - }, - "node_modules/browser-sync": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.5.tgz", - "integrity": "sha512-0GMEPDqccbTxwYOUGCk5AZloDj9I/1eDZCLXUKXu7iBJPznGGOnMHs88mrhaFL0fTA0R23EmsXX9nLZP+k5YzA==", - "dev": true, - "dependencies": { - "browser-sync-client": "^2.27.5", - "browser-sync-ui": "^2.27.5", - "bs-recipes": "1.3.4", - "bs-snippet-injector": "^2.0.1", - "chokidar": "^3.5.1", - "connect": "3.6.6", - "connect-history-api-fallback": "^1", - "dev-ip": "^1.0.1", - "easy-extender": "^2.3.4", - "eazy-logger": "3.1.0", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "^1.18.1", - "immutable": "^3", - "localtunnel": "^2.0.1", - "micromatch": "^4.0.2", - "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "2.4.0", - "ua-parser-js": "^0.7.28", - "yargs": "^15.4.1" - }, - "bin": { - "browser-sync": "dist/bin.js" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/browser-sync-client": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.5.tgz", - "integrity": "sha512-l2jtf60/exv0fQiZkhi3z8RgexYYLGS7DVDnyepkrp+oFAPlKW69daL6NrVSgrwu6lzSTCCTAiPXnUSrQ57e/Q==", - "dev": true, - "dependencies": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/browser-sync-client/node_modules/rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "dependencies": { - "symbol-observable": "1.0.1" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/browser-sync-ui": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.5.tgz", - "integrity": "sha512-KxBJhQ6XNbQ8w8UlkPa9/J5R0nBHgHuJUtDpEXQx1jBapDy32WGzD0NENDozP4zGNvJUgZk3N80hqB7YCieC3g==", - "dev": true, - "dependencies": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "^1", - "immutable": "^3", - "server-destroy": "1.0.1", - "socket.io-client": "^2.4.0", - "stream-throttle": "^0.1.3" - } - }, - "node_modules/browser-sync/node_modules/fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/browser-sync/node_modules/jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", - "dependencies": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "browserify": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dependencies": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dependencies": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserify/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", - "dev": true - }, - "node_modules/bs-snippet-injector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", - "dev": true - }, - "node_modules/buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "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" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/chokidar/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, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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 - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dependencies": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "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 - }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "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, - "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": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dependencies": { - "date-now": "^0.1.4" - } - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "node_modules/convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "dependencies": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "node_modules/core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" - }, - "node_modules/date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dependencies": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - }, - "bin": { - "deps-sort": "bin/cmd.js" - } - }, - "node_modules/des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", - "dev": true, - "bin": { - "dev-ip": "lib/dev-ip.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "node_modules/each-props/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, - "dependencies": { - "lodash": "^4.17.10" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/eazy-logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", - "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", - "dev": true, - "dependencies": { - "tfunk": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "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 - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "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": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ethers": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz", - "integrity": "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.5.0", - "@ethersproject/abstract-provider": "5.5.1", - "@ethersproject/abstract-signer": "5.5.0", - "@ethersproject/address": "5.5.0", - "@ethersproject/base64": "5.5.0", - "@ethersproject/basex": "5.5.0", - "@ethersproject/bignumber": "5.5.0", - "@ethersproject/bytes": "5.5.0", - "@ethersproject/constants": "5.5.0", - "@ethersproject/contracts": "5.5.0", - "@ethersproject/hash": "5.5.0", - "@ethersproject/hdnode": "5.5.0", - "@ethersproject/json-wallets": "5.5.0", - "@ethersproject/keccak256": "5.5.0", - "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.0", - "@ethersproject/pbkdf2": "5.5.0", - "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.0", - "@ethersproject/random": "5.5.0", - "@ethersproject/rlp": "5.5.0", - "@ethersproject/sha2": "5.5.0", - "@ethersproject/signing-key": "5.5.0", - "@ethersproject/solidity": "5.5.0", - "@ethersproject/strings": "5.5.0", - "@ethersproject/transactions": "5.5.0", - "@ethersproject/units": "5.5.0", - "@ethersproject/wallet": "5.5.0", - "@ethersproject/web": "5.5.0", - "@ethersproject/wordlists": "5.5.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - }, - "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 - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fill-range/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fill-range/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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "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, - "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": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", - "dev": true - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" - }, - "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, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-parent": { - "version": "^6.0.2", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "^6.0.2", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "^6.0.2", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/micromatch/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli/node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "node_modules/ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "node_modules/immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dependencies": { - "source-map": "~0.5.3" - } - }, - "node_modules/insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "dependencies": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - }, - "bin": { - "insert-module-globals": "bin/cmd.js" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, - "dependencies": { - "lodash.isfinite": "^3.3.2" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/labeled-stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", - "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", - "dependencies": { - "inherits": "^2.0.1", - "isarray": "^2.0.4", - "stream-splicer": "^2.0.0" - } - }, - "node_modules/labeled-stream-splicer/node_modules/isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==" - }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/liftoff/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/localtunnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", - "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", - "dev": true, - "dependencies": { - "axios": "0.21.4", - "debug": "4.3.2", - "openurl": "1.1.1", - "yargs": "17.1.1" - }, - "bin": { - "lt": "bin/lt.js" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/localtunnel/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, - "engines": { - "node": ">=10" - } - }, - "node_modules/localtunnel/node_modules/yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "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": ">=12" - } - }, - "node_modules/localtunnel/node_modules/yargs-parser": { - "version": "^20.2.9", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/make-iterator/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true, - "bin": { - "mime": "cli.js" - } - }, - "node_modules/mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "dev": true, - "dependencies": { - "mime-db": "~1.38.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mitt": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", - "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/module-deps": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz", - "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", - "dependencies": { - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - }, - "bin": { - "module-deps": "bin/cmd.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true - }, - "node_modules/opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.9.tgz", - "integrity": "sha512-tPjtE6dq+dOSg8NMkqRmFjUYH9fect1zmYgB0g6ztQMaVNI7N1CEvLZud2bPHhg7PRgfKEeTshSPiqXb1F7A+A==" - }, - "node_modules/parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dependencies": { - "path-platform": "~0.11.15" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "dependencies": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "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==" - }, - "node_modules/path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", - "dev": true, - "dependencies": { - "async": "1.5.2", - "is-number-like": "^1.0.3" - }, - "engines": { - "node": ">=0.4", - "npm": ">=1.0.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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/readable-stream/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/readdirp/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "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": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resp-modifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", - "dev": true, - "dependencies": { - "debug": "^2.2.0", - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/resp-modifier/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/resp-modifier/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "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==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "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 - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", - "dev": true - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.0.1.tgz", - "integrity": "sha512-ayATicCYPVnlNpFmjq2/VmVwhoCQA9+13j8qWp044fmFE3IFphosPtRM+0CJ5xoIx5Uy52fCcwg3XeH2pHbbPQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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 - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dependencies": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "node_modules/shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dependencies": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "node_modules/simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", - "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", - "dev": true, - "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "node_modules/socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dev": true, - "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io-parser/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/source": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/source/-/source-0.0.3.tgz", - "integrity": "sha1-BA8AoKPiY4FHwB0/KLf+sSbS6uk=", - "dev": true, - "dependencies": { - "findit": ">=0.0.2" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "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, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dependencies": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-throttle": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", - "dev": true, - "dependencies": { - "commander": "^2.2.0", - "limiter": "^1.0.5" - }, - "bin": { - "throttleproxy": "bin/throttleproxy.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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, - "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/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dependencies": { - "minimist": "^1.1.0" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dependencies": { - "acorn-node": "^1.2.0" - } - }, - "node_modules/tfunk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", - "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "dlv": "^1.1.3" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dependencies": { - "process": "~0.11.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/u2f-api": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", - "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" - }, - "node_modules/ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "bin": { - "umd": "bin/cli.js" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "dependencies": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - }, - "bin": { - "undeclared-identifiers": "bin.js" - } - }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.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, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "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, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-source-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz", - "integrity": "sha1-84pa+53R6Ttl1VBGmsYYKsT1S44=", - "dev": true, - "dependencies": { - "through2": "^2.0.3", - "vinyl": "^2.1.0" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/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, - "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, - "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/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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "^20.2.9", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", - "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "requires": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", - "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", - "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", - "requires": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "@ethersproject/address": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", - "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/rlp": "^5.5.0" - } - }, - "@ethersproject/base64": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", - "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", - "requires": { - "@ethersproject/bytes": "^5.5.0" - } - }, - "@ethersproject/basex": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", - "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", - "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "bn.js": "^4.11.9" - } - }, - "@ethersproject/bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", - "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", - "requires": { - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/constants": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", - "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", - "requires": { - "@ethersproject/bignumber": "^5.5.0" - } - }, - "@ethersproject/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "requires": { - "@ethersproject/abi": "^5.5.0", - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0" - } - }, - "@ethersproject/hash": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", - "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", - "requires": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", - "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "requires": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", - "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "requires": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", - "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", - "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" - }, - "@ethersproject/networks": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz", - "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==", - "requires": { - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", - "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/sha2": "^5.5.0" - } - }, - "@ethersproject/properties": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", - "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", - "requires": { - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/providers": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz", - "integrity": "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==", - "requires": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0", - "bech32": "1.1.4", - "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - } - } - }, - "@ethersproject/random": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz", - "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/rlp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", - "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/sha2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", - "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", - "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", - "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "@ethersproject/strings": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", - "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/transactions": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", - "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", - "requires": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0" - } - }, - "@ethersproject/units": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", - "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "requires": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "@ethersproject/wallet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", - "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "requires": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/json-wallets": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "@ethersproject/web": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz", - "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==", - "requires": { - "@ethersproject/base64": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", - "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "requires": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "@ledgerhq/cryptoassets": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-6.12.2.tgz", - "integrity": "sha512-Q8ZYe74lWoCqagB1QXt8jBFDqhbKc1IP0/ZYtil2W0PNM+Kv563//LnupmcfkR0uN0czvZrDS/runSx0ASO+JQ==", - "requires": { - "invariant": "2" - } - }, - "@ledgerhq/devices": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.43.0.tgz", - "integrity": "sha512-/M5ZLUBdBK7Vl2T4yNJbES3Z4w55LbPdxD9rcOBAKH/5V3V0obQv6MUasP9b7DSkwGSSLCOGZLohoT2NxK2D2A==", - "requires": { - "@ledgerhq/errors": "^5.43.0", - "@ledgerhq/logs": "^5.43.0", - "rxjs": "^6.6.3", - "semver": "^7.3.4" - }, - "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@ledgerhq/errors": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.43.0.tgz", - "integrity": "sha512-ZjKlUQbIn/DHXAefW3Y1VyDrlVhVqqGnXzrqbOXuDbZ2OAIfSe/A1mrlCbWt98jP/8EJQBuCzBOtnmpXIL/nYg==" - }, - "@ledgerhq/hw-app-eth": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-app-eth/-/hw-app-eth-6.12.2.tgz", - "integrity": "sha512-FDF661Jeo1bR1B9UjKhxjGUDSiA/qQt88j/1edbxQKTHKbvPTLH4m68andeneetS6l+6jc8fX/2IwDpCEQ4mTA==", - "requires": { - "@ledgerhq/cryptoassets": "^6.12.2", - "@ledgerhq/errors": "^6.10.0", - "@ledgerhq/hw-transport": "^6.11.2", - "@ledgerhq/logs": "^6.10.0", - "axios": "^0.23.0", - "bignumber.js": "^9.0.1", - "ethers": "^5.5.1" - }, - "dependencies": { - "@ledgerhq/devices": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.11.2.tgz", - "integrity": "sha512-j2SoG0Ifm7khsPKC2UFhJIoi1oCDCvJemmO+pz7Oc9jx8JRhIGtCfqEIUhL+ZIl0TrIYuApPLaSqJjiFi7VGCQ==", - "requires": { - "@ledgerhq/errors": "^6.10.0", - "@ledgerhq/logs": "^6.10.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "@ledgerhq/errors": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.10.0.tgz", - "integrity": "sha512-fQFnl2VIXh9Yd41lGjReCeK+Q2hwxQJvLZfqHnKqWapTz68NHOv5QcI0OHuZVNEbv0xhgdLhi5b65kgYeQSUVg==" - }, - "@ledgerhq/hw-transport": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.11.2.tgz", - "integrity": "sha512-VZbGfyQ8iFl2W6TUkVmQ3rz8kyOXMbOdFiht3VNlglMe3KBGJWOjW9s/5LhOR348NJs797B1gl4V0Zqmn11kUg==", - "requires": { - "@ledgerhq/devices": "^6.11.2", - "@ledgerhq/errors": "^6.10.0", - "events": "^3.3.0" - } - }, - "@ledgerhq/logs": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.10.0.tgz", - "integrity": "sha512-lLseUPEhSFUXYTKj6q7s2O3s2vW2ebgA11vMAlKodXGf5AFw4zUoEbTz9CoFOC9jS6xY4Qr8BmRnxP/odT4Uuw==" - }, - "axios": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", - "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@ledgerhq/hw-transport": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.43.0.tgz", - "integrity": "sha512-0S+TGmiEJOqgM2MWnolZQPVKU3oRtoDj4yUFUZts9Owbgby+hmo4dIKTvv0vs8mwknQbOZByUgh3MQOQiK70MQ==", - "requires": { - "@ledgerhq/devices": "^5.43.0", - "@ledgerhq/errors": "^5.43.0", - "events": "^3.2.0" - }, - "dependencies": { - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" - } - } - }, - "@ledgerhq/hw-transport-http": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-http/-/hw-transport-http-5.49.0.tgz", - "integrity": "sha512-f3vUD6LMg2hmZwG/81TqvoMp9yI2/qFrd4f5JmLMniLRztkA4Rlt4C+E+1N7WXU8Iuaj9jXyK6NY7uTuprEbvg==", - "requires": { - "@ledgerhq/errors": "^5.49.0", - "@ledgerhq/hw-transport": "^5.49.0", - "@ledgerhq/logs": "^5.49.0", - "axios": "^0.21.1", - "ws": "6" - }, - "dependencies": { - "@ledgerhq/devices": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-5.49.0.tgz", - "integrity": "sha512-14VSO+NeR/O8VSXXnlBsA0DAluzanJVEjHLDJubU5NZjEttXVF9gdQh1j10+MKW0f8H23IkdqwswVQIB9ZPomQ==", - "requires": { - "@ledgerhq/errors": "^5.49.0", - "@ledgerhq/logs": "^5.49.0", - "rxjs": "^6.6.7", - "semver": "^7.3.5" - } - }, - "@ledgerhq/errors": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-5.49.0.tgz", - "integrity": "sha512-+uhoSsAnzZiZ2CUk/dv4Uo8lrl0jn2izYJATSbC5aZFd0Yl7PWZ1SMHMkvPVEgQvWZcu4iQZ67rlKOtj5tUFWA==" - }, - "@ledgerhq/hw-transport": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-5.49.0.tgz", - "integrity": "sha512-mfQNSxZ3cTXo+l6SEM+D92YaW46GkP1IiWo9OkHPnsq8y8IxSD6QJOEiAAZtvpGvV1eRqqrVyanoFRTuHcZjZA==", - "requires": { - "@ledgerhq/devices": "^5.49.0", - "@ledgerhq/errors": "^5.49.0", - "events": "^3.3.0" - } - }, - "@ledgerhq/logs": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.49.0.tgz", - "integrity": "sha512-Ynl2JzRwh8l9PoXrDNihXEicpVo6Ra2lYZoqSYfVH/v/2/TSa/JB9Qll8P85XFYkS3ouDTTbp1S5KViaTkqD5g==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@ledgerhq/hw-transport-u2f": { - "version": "5.36.0-deprecated", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-u2f/-/hw-transport-u2f-5.36.0-deprecated.tgz", - "integrity": "sha512-T/+mGHIiUK/ZQATad6DMDmobCMZ1mVST952009jKzhaE1Et2Uy2secU+QhRkx3BfEAkvwa0zSRSYCL9d20Iqjg==", - "requires": { - "@ledgerhq/errors": "^5.34.0", - "@ledgerhq/hw-transport": "^5.34.0", - "@ledgerhq/logs": "^5.30.0", - "u2f-api": "0.2.7" - } - }, - "@ledgerhq/hw-transport-webhid": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport-webhid/-/hw-transport-webhid-6.7.0.tgz", - "integrity": "sha512-FmTQUKENVEIwEM2XT6PIBDbXvdyFjmz3g+Oq5Gn8c4m3knT3h0ehb+Mx5dKlYEg/6Y7vESGUiNZdEQGGieUI/Q==", - "requires": { - "@ledgerhq/devices": "^6.7.0", - "@ledgerhq/errors": "^6.2.0", - "@ledgerhq/hw-transport": "^6.7.0", - "@ledgerhq/logs": "^6.2.0" - }, - "dependencies": { - "@ledgerhq/devices": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/devices/-/devices-6.7.0.tgz", - "integrity": "sha512-FWJfmdl8V300++OXLgBLpIi+IJoR/srWvxpXrWkc9hd3cNMxgeCl9opm84Y0oJDLBQL9AaERMrb+Cb1nZZR9Tw==", - "requires": { - "@ledgerhq/errors": "^6.2.0", - "@ledgerhq/logs": "^6.2.0", - "rxjs": "6", - "semver": "^7.3.5" - } - }, - "@ledgerhq/errors": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/errors/-/errors-6.2.0.tgz", - "integrity": "sha512-eO03x8HJmG60WtlrMuahigW/rwywFdcGzCnihta/MjkM8BD9A660cKVkyIuheCcpaB7UV/r+QsRl9abHbjjaag==" - }, - "@ledgerhq/hw-transport": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/hw-transport/-/hw-transport-6.7.0.tgz", - "integrity": "sha512-w+PhW6Y4KXYdoCykkE1zt0VL6Ryf72RP8sZP8OH1O90hX/R/q9BMYKl8VNqTbqlrOrORgATlKkbmIJBjbngZew==", - "requires": { - "@ledgerhq/devices": "^6.7.0", - "@ledgerhq/errors": "^6.2.0", - "events": "^3.3.0" - } - }, - "@ledgerhq/logs": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.2.0.tgz", - "integrity": "sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@ledgerhq/logs": { - "version": "5.43.0", - "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.43.0.tgz", - "integrity": "sha512-QWfQjea3ekh9ZU+JeL2tJC9cTKLZ/JrcS0JGatLejpRYxQajvnHvHfh0dbHOKXEaXfCskEPTZ3f1kzuts742GA==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" - }, - "acorn-node": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", - "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", - "requires": { - "acorn": "^6.0.2", - "acorn-dynamic-import": "^4.0.0", - "acorn-walk": "^6.1.0", - "xtend": "^4.0.1" - } - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==" - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - } - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - } - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-each-series": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", - "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - } - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.24.1", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.22.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.22.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - } - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } - } - }, - "babelify": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", - "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==" - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "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 - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "bignumber.js": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", - "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "requires": { - "combine-source-map": "~0.8.0", - "defined": "^1.0.0", - "JSONStream": "^1.0.3", - "safe-buffer": "^5.1.1", - "through2": "^2.0.0", - "umd": "^3.0.0" - } - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } - } - }, - "browser-sync": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.27.5.tgz", - "integrity": "sha512-0GMEPDqccbTxwYOUGCk5AZloDj9I/1eDZCLXUKXu7iBJPznGGOnMHs88mrhaFL0fTA0R23EmsXX9nLZP+k5YzA==", - "dev": true, - "requires": { - "browser-sync-client": "^2.27.5", - "browser-sync-ui": "^2.27.5", - "bs-recipes": "1.3.4", - "bs-snippet-injector": "^2.0.1", - "chokidar": "^3.5.1", - "connect": "3.6.6", - "connect-history-api-fallback": "^1", - "dev-ip": "^1.0.1", - "easy-extender": "^2.3.4", - "eazy-logger": "3.1.0", - "etag": "^1.8.1", - "fresh": "^0.5.2", - "fs-extra": "3.0.1", - "http-proxy": "^1.18.1", - "immutable": "^3", - "localtunnel": "^2.0.1", - "micromatch": "^4.0.2", - "opn": "5.3.0", - "portscanner": "2.1.1", - "qs": "6.2.3", - "raw-body": "^2.3.2", - "resp-modifier": "6.0.2", - "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", - "server-destroy": "1.0.1", - "socket.io": "2.4.0", - "ua-parser-js": "^0.7.28", - "yargs": "^15.4.1" - }, - "dependencies": { - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", - "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - } - } - }, - "browser-sync-client": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.27.5.tgz", - "integrity": "sha512-l2jtf60/exv0fQiZkhi3z8RgexYYLGS7DVDnyepkrp+oFAPlKW69daL6NrVSgrwu6lzSTCCTAiPXnUSrQ57e/Q==", - "dev": true, - "requires": { - "etag": "1.8.1", - "fresh": "0.5.2", - "mitt": "^1.1.3", - "rxjs": "^5.5.6" - }, - "dependencies": { - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - } - } - }, - "browser-sync-ui": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.27.5.tgz", - "integrity": "sha512-KxBJhQ6XNbQ8w8UlkPa9/J5R0nBHgHuJUtDpEXQx1jBapDy32WGzD0NENDozP4zGNvJUgZk3N80hqB7YCieC3g==", - "dev": true, - "requires": { - "async-each-series": "0.1.1", - "connect-history-api-fallback": "^1", - "immutable": "^3", - "server-destroy": "1.0.1", - "socket.io-client": "^2.4.0", - "stream-throttle": "^0.1.3" - } - }, - "browserify": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.3.tgz", - "integrity": "sha512-zQt/Gd1+W+IY+h/xX2NYMW4orQWhqSwyV+xsblycTtpOuB27h1fZhhNQuipJ4t79ohw4P4mMem0jp/ZkISQtjQ==", - "requires": { - "assert": "^1.4.0", - "browser-pack": "^6.0.1", - "browser-resolve": "^1.11.0", - "browserify-zlib": "~0.2.0", - "buffer": "^5.0.2", - "cached-path-relative": "^1.0.0", - "concat-stream": "^1.6.0", - "console-browserify": "^1.1.0", - "constants-browserify": "~1.0.0", - "crypto-browserify": "^3.0.0", - "defined": "^1.0.0", - "deps-sort": "^2.0.0", - "domain-browser": "^1.2.0", - "duplexer2": "~0.1.2", - "events": "^2.0.0", - "glob": "^7.1.0", - "has": "^1.0.0", - "htmlescape": "^1.1.0", - "https-browserify": "^1.0.0", - "inherits": "~2.0.1", - "insert-module-globals": "^7.0.0", - "JSONStream": "^1.0.3", - "labeled-stream-splicer": "^2.0.0", - "mkdirp": "^0.5.0", - "module-deps": "^6.0.0", - "os-browserify": "~0.3.0", - "parents": "^1.0.1", - "path-browserify": "~0.0.0", - "process": "~0.11.0", - "punycode": "^1.3.2", - "querystring-es3": "~0.2.0", - "read-only-stream": "^2.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.1.4", - "shasum": "^1.0.0", - "shell-quote": "^1.6.1", - "stream-browserify": "^2.0.0", - "stream-http": "^2.0.0", - "string_decoder": "^1.1.1", - "subarg": "^1.0.0", - "syntax-error": "^1.1.1", - "through2": "^2.0.0", - "timers-browserify": "^1.0.1", - "tty-browserify": "0.0.1", - "url": "~0.11.0", - "util": "~0.10.1", - "vm-browserify": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "bs-recipes": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", - "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", - "dev": true - }, - "bs-snippet-injector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs-snippet-injector/-/bs-snippet-injector-2.0.1.tgz", - "integrity": "sha1-YbU5PxH1JVntEgaTEANDtu2wTdU=", - "dev": true - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - }, - "dependencies": { - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "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, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "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 - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "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, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "requires": { - "convert-source-map": "~1.1.0", - "inline-source-map": "~0.6.0", - "lodash.memoize": "~3.0.3", - "source-map": "~0.5.3" - } - }, - "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 - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "requires": { - "date-now": "^0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=" - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dash-ast": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", - "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==" - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "requires": { - "JSONStream": "^1.0.3", - "shasum": "^1.0.0", - "subarg": "^1.0.0", - "through2": "^2.0.0" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "dev-ip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", - "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "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, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "easy-extender": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", - "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "eazy-logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.1.0.tgz", - "integrity": "sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ==", - "dev": true, - "requires": { - "tfunk": "^4.0.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - } - }, - "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 - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "requires": {} - } - } - }, - "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "requires": {} - } - } - }, - "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "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, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "ethers": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz", - "integrity": "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==", - "requires": { - "@ethersproject/abi": "5.5.0", - "@ethersproject/abstract-provider": "5.5.1", - "@ethersproject/abstract-signer": "5.5.0", - "@ethersproject/address": "5.5.0", - "@ethersproject/base64": "5.5.0", - "@ethersproject/basex": "5.5.0", - "@ethersproject/bignumber": "5.5.0", - "@ethersproject/bytes": "5.5.0", - "@ethersproject/constants": "5.5.0", - "@ethersproject/contracts": "5.5.0", - "@ethersproject/hash": "5.5.0", - "@ethersproject/hdnode": "5.5.0", - "@ethersproject/json-wallets": "5.5.0", - "@ethersproject/keccak256": "5.5.0", - "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.0", - "@ethersproject/pbkdf2": "5.5.0", - "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.0", - "@ethersproject/random": "5.5.0", - "@ethersproject/rlp": "5.5.0", - "@ethersproject/sha2": "5.5.0", - "@ethersproject/signing-key": "5.5.0", - "@ethersproject/solidity": "5.5.0", - "@ethersproject/strings": "5.5.0", - "@ethersproject/transactions": "5.5.0", - "@ethersproject/units": "5.5.0", - "@ethersproject/wallet": "5.5.0", - "@ethersproject/web": "5.5.0", - "@ethersproject/wordlists": "5.5.0" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", - "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - }, - "dependencies": { - "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 - }, - "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, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findit/-/findit-2.0.0.tgz", - "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", - "dev": true - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "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 - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "dependencies": { - "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, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" - }, - "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 - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "^6.0.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob-parent": { - "version": "^6.0.2", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "^6.0.2", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "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 - } - } - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "dependencies": { - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "dependencies": { - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } - } - }, - "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, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "requires": { - "source-map": "~0.5.3" - } - }, - "insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "requires": { - "acorn-node": "^1.5.2", - "combine-source-map": "^0.8.0", - "concat-stream": "^1.6.1", - "is-buffer": "^1.1.0", - "JSONStream": "^1.0.3", - "path-is-absolute": "^1.0.1", - "process": "~0.11.0", - "through2": "^2.0.0", - "undeclared-identifiers": "^1.1.2", - "xtend": "^4.0.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "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 - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "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 - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "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 - } - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - }, - "dependencies": { - "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, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "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 - }, - "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, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "is-number-like": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", - "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", - "dev": true, - "requires": { - "lodash.isfinite": "^3.3.2" - } - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "labeled-stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", - "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", - "requires": { - "inherits": "^2.0.1", - "isarray": "^2.0.4", - "stream-splicer": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==" - } - } - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "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, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "limiter": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", - "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "localtunnel": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", - "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", - "dev": true, - "requires": { - "axios": "0.21.4", - "debug": "4.3.2", - "openurl": "1.1.1", - "yargs": "17.1.1" - }, - "dependencies": { - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", - "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", - "dev": true, - "requires": { - "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" - } - }, - "yargs-parser": { - "version": "^20.2.9", - "dev": true - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.isfinite": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", - "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "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 - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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 - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "dev": true, - "requires": { - "mime-db": "~1.38.0" - } - }, - "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==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mitt": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", - "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "module-deps": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.0.tgz", - "integrity": "sha512-hKPmO06so6bL/ZvqVNVqdTVO8UAYsi3tQWlCa+z9KuWhoN4KDQtb5hcqQQv58qYiDE21wIvnttZEPiDgEbpwbA==", - "requires": { - "browser-resolve": "^1.7.0", - "cached-path-relative": "^1.0.0", - "concat-stream": "~1.6.0", - "defined": "^1.0.0", - "detective": "^5.0.2", - "duplexer2": "^0.1.2", - "inherits": "^2.0.1", - "JSONStream": "^1.0.3", - "parents": "^1.0.0", - "readable-stream": "^2.0.2", - "resolve": "^1.4.0", - "stream-combiner2": "^1.1.1", - "subarg": "^1.0.0", - "through2": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "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 - } - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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 - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "openurl": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", - "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", - "dev": true - }, - "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.9.tgz", - "integrity": "sha512-tPjtE6dq+dOSg8NMkqRmFjUYH9fect1zmYgB0g6ztQMaVNI7N1CEvLZud2bPHhg7PRgfKEeTshSPiqXb1F7A+A==" - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "requires": { - "path-platform": "~0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "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 - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", - "dev": true - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", - "dev": true - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "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==" - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "portscanner": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", - "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", - "dev": true, - "requires": { - "async": "1.5.2", - "is-number-like": "^1.0.3" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "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" - }, - "dependencies": { - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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 - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "resp-modifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", - "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", - "dev": true, - "requires": { - "debug": "^2.2.0", - "minimatch": "^3.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "https://registry.npmjs.org/set-value/-/set-value-4.0.1.tgz", - "integrity": "sha512-ayATicCYPVnlNpFmjq2/VmVwhoCQA9+13j8qWp044fmFE3IFphosPtRM+0CJ5xoIx5Uy52fCcwg3XeH2pHbbPQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "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, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "requires": { - "json-stable-stringify": "~0.0.0", - "sha.js": "~2.4.4" - } - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "socket.io": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.0.tgz", - "integrity": "sha512-9UPJ1UTvKayuQfVv2IQ3k7tCQC/fboDyIK62i99dAQIyHKaBsNdTpwHLgKJ6guRWxRtC9H+138UwpaGuQO9uWQ==", - "dev": true, - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dev": true, - "requires": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - } - } - }, - "socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "source": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/source/-/source-0.0.3.tgz", - "integrity": "sha1-BA8AoKPiY4FHwB0/KLf+sSbS6uk=", - "dev": true, - "requires": { - "findit": ">=0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "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, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "requires": { - "duplexer2": "~0.1.0", - "readable-stream": "^2.0.2" - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-throttle": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", - "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", - "dev": true, - "requires": { - "commander": "^2.2.0", - "limiter": "^1.0.5" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "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, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "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 - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "requires": { - "minimist": "^1.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "requires": { - "acorn-node": "^1.2.0" - } - }, - "tfunk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-4.0.0.tgz", - "integrity": "sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "dlv": "^1.1.3" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "requires": { - "process": "~0.11.0" - } - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "u2f-api": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz", - "integrity": "sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg==" - }, - "ua-parser-js": { - "version": "0.7.28", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", - "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", - "dev": true - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==" - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undeclared-identifiers": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", - "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", - "requires": { - "acorn-node": "^1.3.0", - "dash-ast": "^1.0.0", - "get-assigned-identifiers": "^1.2.0", - "simple-concat": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "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 - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "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, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-source-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz", - "integrity": "sha1-84pa+53R6Ttl1VBGmsYYKsT1S44=", - "dev": true, - "requires": { - "through2": "^2.0.3", - "vinyl": "^2.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "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, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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 - }, - "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, - "requires": { - "color-convert": "^2.0.1" - } - }, - "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, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "^20.2.9", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } -} diff --git a/package.json b/package.json index 28769f28..a775cc48 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,29 @@ { - "name": "gupltest", + "name": "ledger-bridge", "version": "0.0.0", "description": "", - "main": "gulpfile.js", + "source": "index.html", + "packageManager": "yarn@4.3.1", "scripts": { - "start": "gulp", - "build": "gulp scripts", - "test": "echo \"Error: no test specified\" && exit 1" + "clear": "rm -rf .yarn/cache dist", + "start": "vite", + "build": "vite build", + "preview": "vite preview" }, + "type": "module", "author": "", "license": "BSD-2-Clause", - "devDependencies": { - "babel-core": "^6.26.3", - "babel-preset-es2015": "^6.24.1", - "babel-register": "^6.26.0", - "browser-sync": "^2.26.3", - "gulp": "^4.0.2", - "source": "0.0.3", - "vinyl-source-stream": "^2.0.0" - }, "dependencies": { - "@ledgerhq/hw-app-eth": "^6.12.2", - "@ledgerhq/hw-transport-http": "^5.45.0", - "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated", - "@ledgerhq/hw-transport-webhid": "^6.7.0", - "babel-runtime": "^6.26.0", - "babelify": "^8.0.0", - "browserify": "^16.2.2", - "buffer": "^5.2.0" + "@ledgerhq/hw-app-eth": "6.37.3", + "@ledgerhq/hw-transport-http": "^6.30.2", + "@ledgerhq/hw-transport-webhid": "^6.29.2", + "@ledgerhq/hw-transport-webusb": "^6.29.2", + "buffer": "^6.0.3" }, - "engines": { - "npm": "^7.6.0" + "devDependencies": { + "@vitejs/plugin-legacy": "^5.4.1", + "eslint": "^9.8.0", + "terser": "^5.31.3", + "vite": "^5.3.4" } } diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000..304222d8 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,34 @@ +import {defineConfig} from 'vite'; +import legacy from '@vitejs/plugin-legacy' + +export default defineConfig({ + plugins: [ + [legacy({ + // This will generate both modern and legacy builds, with the legacy build targeting not IE 11 + // and the modern build targeting the last 2 versions of all browsers and not dead browsers + targets: ['last 2 versions, not dead, > 0.2%', 'not IE 11'], + }),] + ], + build: { + chunkSizeWarningLimit: 1000, + rollupOptions:{ + output: { + manualChunks, + }, + }, + target: 'es2015', + outDir: 'dist', + sourcemap: true, + }, +}); + +function manualChunks(id) { + if (id.includes('node_modules')) { + //@ledgerhq library is big, so we want to separate it into its own chunk + if(id.includes('node_modules/@ledgerhq')) { + return id.split('node_modules/@ledgerhq/')[1].split('/')[0].toString(); + } + return "vendor"; + } +} + diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..b2f70560 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5027 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/code-frame@npm:7.24.7" + dependencies: + "@babel/highlight": "npm:^7.24.7" + picocolors: "npm:^1.0.0" + checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/compat-data@npm:7.25.2" + checksum: 10c0/5bf1f14d6e5f0d37c19543e99209ff4a94bb97915e1ce01e5334a144aa08cd56b6e62ece8135dac77e126723d63d4d4b96fc603a12c43b88c28f4b5e070270c5 + languageName: node + linkType: hard + +"@babel/core@npm:^7.24.6": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.24.7" + "@babel/generator": "npm:^7.25.0" + "@babel/helper-compilation-targets": "npm:^7.25.2" + "@babel/helper-module-transforms": "npm:^7.25.2" + "@babel/helpers": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.0" + "@babel/template": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.2" + "@babel/types": "npm:^7.25.2" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/generator@npm:7.25.0" + dependencies: + "@babel/types": "npm:^7.25.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^2.5.1" + checksum: 10c0/d0e2dfcdc8bdbb5dded34b705ceebf2e0bc1b06795a1530e64fb6a3ccf313c189db7f60c1616effae48114e1a25adc75855bc4496f3779a396b3377bae718ce7 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + languageName: node + linkType: hard + +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/0ed84abf848c79fb1cd4c1ddac12c771d32c1904d87fc3087f33cfdeb0c2e0db4e7892b74b407d9d8d0c000044f3645a7391a781f788da8410c290bb123a1f13 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" + dependencies: + "@babel/compat-data": "npm:^7.25.2" + "@babel/helper-validator-option": "npm:^7.24.8" + browserslist: "npm:^4.23.1" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.24.7": + version: 7.25.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-member-expression-to-functions": "npm:^7.24.8" + "@babel/helper-optimise-call-expression": "npm:^7.24.7" + "@babel/helper-replace-supers": "npm:^7.25.0" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/traverse": "npm:^7.25.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2f8ac36cfeb45d462432acea64c78312cc9180dda7aa9337b77017961e373c323065362d2452f3d6f8bffeb254ff3f7346ac1b25c8ad7b81db813a95924f4053 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0": + version: 7.25.2 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + regexpu-core: "npm:^5.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/85a7e3639c118856fb1113f54fb7e3bf7698171ddfd0cd6fccccd5426b3727bc1434fe7f69090441dcde327feef9de917e00d35e47ab820047057518dd675317 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.1, @babel/helper-define-polyfill-provider@npm:^0.6.2": + version: 0.6.2 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.2" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.22.5" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/f777fe0ee1e467fdaaac059c39ed203bdc94ef2465fb873316e9e1acfc511a276263724b061e3b0af2f6d7ad3ff174f2bb368fde236a860e0f650fda43d7e022 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" + dependencies: + "@babel/traverse": "npm:^7.24.8" + "@babel/types": "npm:^7.24.8" + checksum: 10c0/7e14a5acc91f6cd26305a4441b82eb6f616bd70b096a4d2099a968f16b26d50207eec0b9ebfc466fefd62bd91587ac3be878117cdfec819b7151911183cb0e5a + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-module-imports@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" + dependencies: + "@babel/helper-module-imports": "npm:^7.24.7" + "@babel/helper-simple-access": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/traverse": "npm:^7.25.2" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" + dependencies: + "@babel/types": "npm:^7.24.7" + checksum: 10c0/ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-wrap-function": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/0d17b5f7bb6a607edc9cc62fff8056dd9f341bf2f919884f97b99170d143022a5e7ae57922c4891e4fc360ad291e708d2f8cd8989f1d3cd7a17600159984f5a6 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-replace-supers@npm:7.25.0" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.24.8" + "@babel/helper-optimise-call-expression": "npm:^7.24.7" + "@babel/traverse": "npm:^7.25.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/b4b6650ab3d56c39a259367cd97f8df2f21c9cebb3716fea7bca40a150f8847bfb82f481e98927c7c6579b48a977b5a8f77318a1c6aeb497f41ecd6dbc3fdfef + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-simple-access@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" + dependencies: + "@babel/traverse": "npm:^7.24.7" + "@babel/types": "npm:^7.24.7" + checksum: 10c0/e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/helper-validator-identifier@npm:7.24.7" + checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-wrap-function@npm:7.25.0" + dependencies: + "@babel/template": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: 10c0/d54601a98384c191cbc1ff07b03a19e288ef8d5c6bfafe270b2a303d96e7304eb296002921ed464cc1b105a547d1db146eb86b0be617924dee1ba1b379cdc216 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helpers@npm:7.25.0" + dependencies: + "@babel/template": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: 10c0/b7fe007fc4194268abf70aa3810365085e290e6528dcb9fbbf7a765d43c74b6369ce0f99c5ccd2d44c413853099daa449c9a0123f0b212ac8d18643f2e8174b8 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.24.7" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a + languageName: node + linkType: hard + +"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/parser@npm:7.25.3" + dependencies: + "@babel/types": "npm:^7.25.2" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/874b01349aedb805d6694f867a752fdc7469778fad76aca4548d2cc6ce96087c3ba5fb917a6f8d05d2d1a74aae309b5f50f1a4dba035f5a2c9fcfe6e106d2c4e + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/traverse": "npm:^7.25.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/814b4d3f102e7556a5053d1acf57ef601cfcff39a2c81b8cdc6a5c842e3cb9838f5925d1466a5f1e6416e74c9c83586a3c07fbd7fb8610a396c2becdf9ae5790 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9645a1f47b3750acadb1353c02e71cc712d072aafe5ce115ed3a886bc14c5d9200cfb0b5b5e60e813baa549b800cf798f8714019fd246c699053cf68c428e426 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ed1ce1c90cac46c01825339fd0f2a96fa071b016fb819d8dfaf8e96300eae30e74870cb47e4dc80d4ce2fb287869f102878b4f3b35bc927fec8b1d0d76bcf612 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/aeb6e7aa363a47f815cf956ea1053c5dd8b786a17799f065c9688ba4b0051fe7565d258bbe9400bfcbfb3114cb9fda66983e10afe4d750bc70ff75403e15dd36 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/traverse": "npm:^7.25.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/45988025537a9d4a27b610fd696a18fd9ba9336621a69b4fb40560eeb10c79657f85c92a37f30c7c8fb29c22970eea0b373315795a891f1a05549a6cfe5a6bfe + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4464bf9115f4a2d02ce1454411baf9cfb665af1da53709c5c56953e5e2913745b0fcce82982a00463d6facbdd93445c691024e310b91431a1e2f024b158f6371 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5100d658ba563829700cd8d001ddc09f4c0187b1a13de300d729c5b3e87503f75a6d6c99c1794182f7f1a9f546ee009df4f15a0ce36376e206ed0012fa7cdc24 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b82c53e095274ee71c248551352d73441cf65b3b3fc0107258ba4e9aef7090772a425442b3ed1c396fa207d0efafde8929c87a17d3c885b3ca2021316e87e246 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eccc54d0f03c96d0eec7a6e2fa124dadbc7298345b62ffc4238f173308c4325b5598f139695ff05a95cf78412ef6903599e4b814496612bf39aad4715a16375b + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/69822772561706c87f0a65bc92d0772cea74d6bc0911537904a676d5ff496a6d3ac4e05a166d8125fce4a16605bace141afc3611074e170a994e66e5397787f3 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6ac05a54e5582f34ac6d5dc26499e227227ec1c7fa6fc8de1f3d40c275f140d3907f79bbbd49304da2d7008a5ecafb219d0b71d78ee3290ca22020d878041245 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-remap-async-to-generator": "npm:^7.25.0" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/traverse": "npm:^7.25.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5348c3a33d16e0d62f13482c6fa432185ba096d58880b08d42450f7db662d6b03e6149d495c8620897dcd3da35061068cbd6c09da7d0ec95743e55a788809e4e + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" + dependencies: + "@babel/helper-module-imports": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-remap-async-to-generator": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/83c82e243898875af8457972a26ab29baf8a2078768ee9f35141eb3edff0f84b165582a2ff73e90a9e08f5922bf813dbf15a85c1213654385198f4591c0dc45d + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/113e86de4612ae91773ff5cb6b980f01e1da7e26ae6f6012127415d7ae144e74987bc23feb97f63ba4bc699331490ddea36eac004d76a20d5369e4cc6a7f61cd + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/382931c75a5d0ea560387e76cb57b03461300527e4784efcb2fb62f36c1eb0ab331327b6034def256baa0cad9050925a61f9c0d56261b6afd6a29c3065fb0bd4 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/75018a466c7ede3d2397e158891c224ba7fca72864506ce067ddbc02fc65191d44da4d6379c996d0c7f09019e26b5c3f5f1d3a639cd98366519723886f0689d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/b0ade39a3d09dce886f79dbd5907c3d99b48167eddb6b9bbde24a0598129654d7017e611c20494cdbea48b07ac14397cd97ea34e3754bbb2abae4e698128eccb + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-classes@npm:7.25.0" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-replace-supers": "npm:^7.25.0" + "@babel/traverse": "npm:^7.25.0" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4451dccf8a7979427ae042afe381233f30764a8072faf0de1337a4fc297c6d7cb40df9e28931ac096e5b56392d0cd97d3ce10aee68288150a8701624d362a791 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/template": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/25636dbc1f605c0b8bc60aa58628a916b689473d11551c9864a855142e36742fe62d4a70400ba3b74902338e77fb3d940376c0a0ba154b6b7ec5367175233b49 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/804968c1d5f5072c717505296c1e5d5ec33e90550423de66de82bbcb78157156e8470bbe77a04ab8c710a88a06360a30103cf223ac7eff4829adedd6150de5ce + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/793f14c9494972d294b7e7b97b747f47874b6d57d7804d3443c701becf5db192c9311be6a1835c07664486df1f5c60d33196c36fb7e11a53015e476b4c145b33 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/75ff7ec1117ac500e77bf20a144411d39c0fdd038f108eec061724123ce6d1bb8d5bd27968e466573ee70014f8be0043361cdb0ef388f8a182d1d97ad67e51b9 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/1c9b57ddd9b33696e88911d0e7975e1573ebc46219c4b30eb1dc746cbb71aedfac6f6dab7fdfdec54dd58f31468bf6ab56b157661ea4ffe58f906d71f89544c8 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eeda48372efd0a5103cb22dadb13563c975bce18ae85daafbb47d57bb9665d187da9d4fe8d07ac0a6e1288afcfcb73e4e5618bf75ff63fddf9736bfbf225203b + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ace3e11c94041b88848552ba8feb39ae4d6cad3696d439ff51445bd2882d8b8775d85a26c2c0edb9b5e38c9e6013cc11b0dea89ec8f93c7d9d7ee95e3645078c + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4e144d7f1c57bc63b4899dbbbdfed0880f2daa75ea9c7251c7997f106e4b390dc362175ab7830f11358cb21f6b972ca10a43a2e56cd789065f7606b082674c0c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-for-of@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/77629b1173e55d07416f05ba7353caa09d2c2149da2ca26721ab812209b63689d1be45116b68eadc011c49ced59daf5320835b15245eb7ae93ae0c5e8277cfc0 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.25.1": + version: 7.25.1 + resolution: "@babel/plugin-transform-function-name@npm:7.25.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/traverse": "npm:^7.25.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e74912174d5e33d1418b840443c2e226a7b76cc017c1ed20ee30a566e4f1794d4a123be03180da046241576e8b692731807ba1f52608922acf1cb2cb6957593f + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/17c72cd5bf3e90e722aabd333559275f3309e3fa0b9cea8c2944ab83ae01502c71a2be05da5101edc02b3fc8df15a8dbb9b861cbfcc8a52bf5e797cf01d3a40a + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/plugin-transform-literals@npm:7.25.2" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0796883217b0885d37e7f6d350773be349e469a812b6bf11ccf862a6edf65103d3e7c849529d65381b441685c12e756751d8c2489a0fd3f8139bb5ef93185f58 + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dbe882eb9053931f2ab332c50fc7c2a10ef507d6421bd9831adbb4cb7c9f8e1e5fbac4fbd2e007f6a1bf1df1843547559434012f118084dc0bf42cda3b106272 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e789ae359bdf2d20e90bedef18dfdbd965c9ebae1cee398474a0c349590fda7c8b874e1a2ceee62e47e5e6ec1730e76b0f24e502164357571854271fc12cc684 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6df7de7fce34117ca4b2fa07949b12274c03668cbfe21481c4037b6300796d50ae40f4f170527b61b70a67f26db906747797e30dbd0d9809a441b6e220b5728f + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-simple-access": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" + dependencies: + "@babel/helper-module-transforms": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/traverse": "npm:^7.25.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fca6198da71237e4bb1274b3b67a0c81d56013c9535361242b6bfa87d70a9597854aadb45d4d8203369be4a655e158be2a5d20af0040b1f8d1bfc47db3ad7b68 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" + dependencies: + "@babel/helper-module-transforms": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7791d290121db210e4338b94b4a069a1a79e4c7a8d7638d8159a97b281851bbed3048dac87a4ae718ad963005e6c14a5d28e6db2eeb2b04e031cee92fb312f85 + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/41a0b0f2d0886318237440aa3b489f6d0305361d8671121777d9ff89f9f6de9d0c02ce93625049061426c8994064ef64deae8b819d1b14c00374a6a2336fb5d9 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-new-target@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2540808a35e1a978e537334c43dab439cf24c93e7beb213a2e71902f6710e60e0184316643790c0a6644e7a8021e52f7ab8165e6b3e2d6651be07bdf517b67df + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7243c8ff734ed5ef759dd8768773c4b443c12e792727e759a1aec2c7fa2bfdd24f1ecb42e292a7b3d8bd3d7f7b861cf256a8eb4ba144fc9cc463892c303083d9 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e18e09ca5a6342645d00ede477731aa6e8714ff357efc9d7cda5934f1703b3b6fb7d3298dce3ce3ba53e9ff1158eab8f1aadc68874cc21a6099d33a1ca457789 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9ad64bc003f583030f9da50614b485852f8edac93f8faf5d1cd855201a4852f37c5255ae4daf70dd4375bdd4874e16e39b91f680d4668ec219ba05441ce286eb + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-object-super@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-replace-supers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/770cebb4b4e1872c216b17069db9a13b87dfee747d359dc56d9fcdd66e7544f92dc6ab1861a4e7e0528196aaff2444e4f17dc84efd8eaf162d542b4ba0943869 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1e2f10a018f7d03b3bde6c0b70d063df8d5dd5209861d4467726cf834f5e3d354e2276079dc226aa8e6ece35f5c9b264d64b8229a8bb232829c01e561bcfb07a + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4ffbe1aad7dec7c9aa2bf6ceb4b2f91f96815b2784f2879bde80e46934f59d64a12cb2c6262e40897c4754d77d2c35d8a5cfed63044fdebf94978b1ed3d14b17 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-parameters@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/53bf190d6926771545d5184f1f5f3f5144d0f04f170799ad46a43f683a01fab8d5fe4d2196cf246774530990c31fe1f2b9f0def39f0a5ddbb2340b924f5edf01 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b7bf923b738fbe3ad6c33b260e0a7451be288edfe4ef516303fa787a1870cd87533bfbf61abb779c22ed003c2fc484dec2436fe75a48756f686c0241173d364 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c6fa7defb90b1b0ed46f24ff94ff2e77f44c1f478d1090e81712f33cf992dda5ba347016f030082a2f770138bac6f4a9c2c1565e9f767a125901c77dd9c239ba + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/52564b58f3d111dc02d241d5892a4b01512e98dfdf6ef11b0ed62f8b11b0acacccef0fc229b44114fe8d1a57a8b70780b11bdd18b807d3754a781a07d8f57433 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + regenerator-transform: "npm:^0.15.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d2dc2c788fdae9d97217e70d46ba8ca9db0035c398dc3e161552b0c437113719a75c04f201f9c91ddc8d28a1da60d0b0853f616dead98a396abb9c845c44892b + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2229de2768615e7f5dc0bbc55bc121b5678fd6d2febd46c74a58e42bb894d74cd5955c805880f4e02d0e1cf94f6886270eda7fafc1be9305a1ec3b9fd1d063f5 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/41b155bdbb3be66618358488bf7731b3b2e8fff2de3dbfd541847720a9debfcec14db06a117abedd03c9cd786db20a79e2a86509a4f19513f6e1b610520905cf + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-spread@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/facba1553035f76b0d2930d4ada89a8cd0f45b79579afd35baefbfaf12e3b86096995f4b0c402cf9ee23b3f2ea0a4460c3b1ec0c192d340962c948bb223d4e66 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5a74ed2ed0a3ab51c3d15fcaf09d9e2fe915823535c7a4d7b019813177d559b69677090e189ec3d5d08b619483eb5ad371fbcfbbff5ace2a76ba33ee566a1109 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3630f966257bcace122f04d3157416a09d40768c44c3a800855da81146b009187daa21859d1c3b7d13f4e19e8888e60613964b175b2275d451200fb6d8d6cfe6 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.8" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2f570a4fbbdc5fd85f48165a97452826560051e3b8efb48c3bb0a0a33ee8485633439e7b71bfe3ef705583a1df43f854f49125bd759abdedc195b2cf7e60012a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8b18e2e66af33471a6971289492beff5c240e56727331db1d34c4338a6a368a82a7ed6d57ec911001b6d65643aed76531e1e7cac93265fb3fb2717f54d845e69 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc57656eb94584d1b74a385d378818ac2b3fca642e3f649fead8da5fb3f9de22f8461185936915dfb33d5a9104e62e7a47828331248b09d28bb2d59e9276de3e + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/83f72a345b751566b601dc4d07e9f2c8f1bc0e0c6f7abb56ceb3095b3c9d304de73f85f2f477a09f8cc7edd5e65afd0ff9e376cdbcbea33bc0c28f3705b38fd9 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.24.7" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7457c0ee8e80a80cb6fdc1fe54ab115b52815627616ce9151be8ef292fc99d04a910ec24f11382b4f124b89374264396892b086886bd2a9c2317904d87c9b21b + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.24.6": + version: 7.25.3 + resolution: "@babel/preset-env@npm:7.25.3" + dependencies: + "@babel/compat-data": "npm:^7.25.2" + "@babel/helper-compilation-targets": "npm:^7.25.2" + "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-validator-option": "npm:^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.3" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.0" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.0" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-class-properties": "npm:^7.12.13" + "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" + "@babel/plugin-syntax-import-assertions": "npm:^7.24.7" + "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-meta": "npm:^7.10.4" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" + "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.0" + "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.0" + "@babel/plugin-transform-class-properties": "npm:^7.24.7" + "@babel/plugin-transform-class-static-block": "npm:^7.24.7" + "@babel/plugin-transform-classes": "npm:^7.25.0" + "@babel/plugin-transform-computed-properties": "npm:^7.24.7" + "@babel/plugin-transform-destructuring": "npm:^7.24.8" + "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" + "@babel/plugin-transform-duplicate-keys": "npm:^7.24.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.0" + "@babel/plugin-transform-dynamic-import": "npm:^7.24.7" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.24.7" + "@babel/plugin-transform-for-of": "npm:^7.24.7" + "@babel/plugin-transform-function-name": "npm:^7.25.1" + "@babel/plugin-transform-json-strings": "npm:^7.24.7" + "@babel/plugin-transform-literals": "npm:^7.25.2" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" + "@babel/plugin-transform-member-expression-literals": "npm:^7.24.7" + "@babel/plugin-transform-modules-amd": "npm:^7.24.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.0" + "@babel/plugin-transform-modules-umd": "npm:^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" + "@babel/plugin-transform-new-target": "npm:^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" + "@babel/plugin-transform-object-super": "npm:^7.24.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" + "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-private-methods": "npm:^7.24.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" + "@babel/plugin-transform-property-literals": "npm:^7.24.7" + "@babel/plugin-transform-regenerator": "npm:^7.24.7" + "@babel/plugin-transform-reserved-words": "npm:^7.24.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" + "@babel/plugin-transform-spread": "npm:^7.24.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" + "@babel/plugin-transform-template-literals": "npm:^7.24.7" + "@babel/plugin-transform-typeof-symbol": "npm:^7.24.8" + "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.24.7" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.10.4" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" + core-js-compat: "npm:^3.37.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9287dc2e296fe2aa3367d84c2a799db17c9d1e48bba86525f47c6f51f5ba2e2cce454f45f4ae2ef928f9077c0640b04556b55b94835675ceeca94a0c5133205e + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + languageName: node + linkType: hard + +"@babel/regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "@babel/regjsgen@npm:0.8.0" + checksum: 10c0/4f3ddd8c7c96d447e05c8304c1d5ba3a83fcabd8a716bc1091c2f31595cdd43a3a055fff7cb5d3042b8cb7d402d78820fcb4e05d896c605a7d8bcf30f2424c4a + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.8.4": + version: 7.25.0 + resolution: "@babel/runtime@npm:7.25.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/bd3faf246170826cef2071a94d7b47b49d532351360ecd17722d03f6713fd93a3eb3dbd9518faa778d5e8ccad7392a7a604e56bd37aaad3f3aa68d619ccd983d + languageName: node + linkType: hard + +"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/parser": "npm:^7.25.0" + "@babel/types": "npm:^7.25.0" + checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/traverse@npm:7.25.3" + dependencies: + "@babel/code-frame": "npm:^7.24.7" + "@babel/generator": "npm:^7.25.0" + "@babel/parser": "npm:^7.25.3" + "@babel/template": "npm:^7.25.0" + "@babel/types": "npm:^7.25.2" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/4c8a1966fa90b53a783a4afd2fcdaa6ab1a912e6621dca9fcc6633e80ccb9491620e88caf73b537da4e16cefd537b548c87d7087868d5b0066414dea375c0e9b + languageName: node + linkType: hard + +"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.4.4": + version: 7.25.2 + resolution: "@babel/types@npm:7.25.2" + dependencies: + "@babel/helper-string-parser": "npm:^7.24.8" + "@babel/helper-validator-identifier": "npm:^7.24.7" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/e489435856be239f8cc1120c90a197e4c2865385121908e5edb7223cfdff3768cba18f489adfe0c26955d9e7bbb1fb10625bc2517505908ceb0af848989bd864 + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: "npm:^3.3.0" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.17.1": + version: 0.17.1 + resolution: "@eslint/config-array@npm:0.17.1" + dependencies: + "@eslint/object-schema": "npm:^2.1.4" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/b986a0a96f2b42467578968ce3d4ae3b9284e587f8490f2dcdc44ff1b8d30580c62b221da6e58d07b09e156c3050e2dc38267f9370521d9cafc099c4e30154ef + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.1.0": + version: 3.1.0 + resolution: "@eslint/eslintrc@npm:3.1.0" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/5b7332ed781edcfc98caa8dedbbb843abfb9bda2e86538529c843473f580e40c69eb894410eddc6702f487e9ee8f8cfa8df83213d43a8fdb549f23ce06699167 + languageName: node + linkType: hard + +"@eslint/js@npm:9.8.0": + version: 9.8.0 + resolution: "@eslint/js@npm:9.8.0" + checksum: 10c0/42edaae6b020436410454579509dcb6a8cd5b260e9f18e037fd803ae28d35eb13663d4019f0ab8ba686a19d3c4a43b0e11394c148e23345377ab694da0e83262 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 10c0/e9885532ea70e483fb007bf1275968b05bb15ebaa506d98560c41a41220d33d342e19023d5f2939fed6eb59676c1bda5c847c284b4b55fce521d282004da4dda + languageName: node + linkType: hard + +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" + dependencies: + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10c0/7de51bf52ff03df2526546dacea6e74f15d4c5ef762d931552082b9600dcefd8e333599f02d7906ba89f7b7f48c45ab72cee76f397212b4f17fa9d9ff5615916 + languageName: node + linkType: hard + +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/networks": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/web": "npm:^5.7.0" + checksum: 10c0/a5708e2811b90ddc53d9318ce152511a32dd4771aa2fb59dbe9e90468bb75ca6e695d958bf44d13da684dc3b6aab03f63d425ff7591332cb5d7ddaf68dff7224 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + checksum: 10c0/e174966b3be17269a5974a3ae5eef6d15ac62ee8c300ceace26767f218f6bbf3de66f29d9a9c9ca300fa8551aab4c92e28d2cc772f5475fdeaa78d9b5be0e745 + languageName: node + linkType: hard + +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + checksum: 10c0/db5da50abeaae8f6cf17678323e8d01cad697f9a184b0593c62b71b0faa8d7e5c2ba14da78a998d691773ed6a8eb06701f65757218e0eaaeb134e5c5f3e5a908 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + checksum: 10c0/4f748cd82af60ff1866db699fbf2bf057feff774ea0a30d1f03ea26426f53293ea10cc8265cda1695301da61093bedb8cc0d38887f43ed9dad96b78f19d7337e + languageName: node + linkType: hard + +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + checksum: 10c0/02304de77477506ad798eb5c68077efd2531624380d770ef4a823e631a288fb680107a0f9dc4a6339b2a0b0f5b06ee77f53429afdad8f950cde0f3e40d30167d + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + checksum: 10c0/14263cdc91a7884b141d9300f018f76f69839c47e95718ef7161b11d2c7563163096fee69724c5fa8ef6f536d3e60f1c605819edbc478383a2b98abcde3d37b2 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/07dd1f0341b3de584ef26c8696674ff2bb032f4e99073856fc9cd7b4c54d1d846cabe149e864be267934658c3ce799e5ea26babe01f83af0e1f06c51e5ac791f + languageName: node + linkType: hard + +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + checksum: 10c0/6df63ab753e152726b84595250ea722165a5744c046e317df40a6401f38556385a37c84dadf5b11ca651c4fb60f967046125369c57ac84829f6b30e69a096273 + languageName: node + linkType: hard + +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" + dependencies: + "@ethersproject/abi": "npm:^5.7.0" + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + checksum: 10c0/97a10361dddaccfb3e9e20e24d071cfa570050adcb964d3452c5f7c9eaaddb4e145ec9cf928e14417948701b89e81d4907800e799a6083123e4d13a576842f41 + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10c0/1a631dae34c4cf340dde21d6940dd1715fc7ae483d576f7b8ef9e8cb1d0e30bd7e8d30d4a7d8dc531c14164602323af2c3d51eb2204af18b2e15167e70c9a5ef + languageName: node + linkType: hard + +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/basex": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/pbkdf2": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/wordlists": "npm:^5.7.0" + checksum: 10c0/36d5c13fe69b1e0a18ea98537bc560d8ba166e012d63faac92522a0b5f405eb67d8848c5aca69e2470f62743aaef2ac36638d9e27fd8c68f51506eb61479d51d + languageName: node + linkType: hard + +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hdnode": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/pbkdf2": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + aes-js: "npm:3.0.0" + scrypt-js: "npm:3.0.1" + checksum: 10c0/f1a84d19ff38d3506f453abc4702107cbc96a43c000efcd273a056371363767a06a8d746f84263b1300266eb0c329fe3b49a9b39a37aadd016433faf9e15a4bb + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + js-sha3: "npm:0.8.0" + checksum: 10c0/3b1a91706ff11f5ab5496840b9c36cedca27db443186d28b94847149fd16baecdc13f6fc5efb8359506392f2aba559d07e7f9c1e17a63f9d5de9f8053cfcb033 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 10c0/d03d460fb2d4a5e71c627b7986fb9e50e1b59a6f55e8b42a545b8b92398b961e7fd294bd9c3d8f92b35d0f6ff9d15aa14c95eab378f8ea194e943c8ace343501 + languageName: node + linkType: hard + +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/9efcdce27f150459e85d74af3f72d5c32898823a99f5410e26bf26cca2d21fb14e403377314a93aea248e57fb2964e19cee2c3f7bfc586ceba4c803a8f1b75c0 + languageName: node + linkType: hard + +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + checksum: 10c0/e5a29cf28b4f4ca1def94d37cfb6a9c05c896106ed64881707813de01c1e7ded613f1e95febcccda4de96aae929068831d72b9d06beef1377b5a1a13a0eb3ff5 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/4fe5d36e5550b8e23a305aa236a93e8f04d891d8198eecdc8273914c761b0e198fd6f757877406ee3eb05033ec271132a3e5998c7bd7b9a187964fb4f67b1373 + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/basex": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/networks": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/web": "npm:^5.7.0" + bech32: "npm:1.1.4" + ws: "npm:7.4.6" + checksum: 10c0/4c8d19e6b31f769c24042fb2d02e483a4ee60dcbfca9e3291f0a029b24337c47d1ea719a390be856f8fd02997125819e834415e77da4fb2023369712348dae4c + languageName: node + linkType: hard + +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/23e572fc55372653c22062f6a153a68c2e2d3200db734cd0d39621fbfd0ca999585bed2d5682e3ac65d87a2893048375682e49d1473d9965631ff56d2808580b + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.5.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/bc863d21dcf7adf6a99ae75c41c4a3fb99698cfdcfc6d5d82021530f3d3551c6305bc7b6f0475ad6de6f69e91802b7e872bee48c0596d98969aefcf121c2a044 + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + hash.js: "npm:1.1.7" + checksum: 10c0/0e7f9ce6b1640817b921b9c6dd9dab8d5bf5a0ce7634d6a7d129b7366a576c2f90dcf4bcb15a0aa9310dde67028f3a44e4fcc2f26b565abcd2a0f465116ff3b1 + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + bn.js: "npm:^5.2.1" + elliptic: "npm:6.5.4" + hash.js: "npm:1.1.7" + checksum: 10c0/fe2ca55bcdb6e370d81372191d4e04671234a2da872af20b03c34e6e26b97dc07c1ee67e91b673680fb13344c9d5d7eae52f1fa6117733a3d68652b778843e09 + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/sha2": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10c0/bedf9918911144b0ec352b8aa7fa44abf63f0b131629c625672794ee196ba7d3992b0e0d3741935ca176813da25b9bcbc81aec454652c63113bdc3a1706beac6 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/570d87040ccc7d94de9861f76fc2fba6c0b84c5d6104a99a5c60b8a2401df2e4f24bf9c30afa536163b10a564a109a96f02e6290b80e8f0c610426f56ad704d1 + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/rlp": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + checksum: 10c0/aa4d51379caab35b9c468ed1692a23ae47ce0de121890b4f7093c982ee57e30bd2df0c743faed0f44936d7e59c55fffd80479f2c28ec6777b8de06bfb638c239 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/constants": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + checksum: 10c0/4da2fdefe2a506cc9f8b408b2c8638ab35b843ec413d52713143f08501a55ff67a808897f9a91874774fb526423a0821090ba294f93e8bf4933a57af9677ac5e + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": "npm:^5.7.0" + "@ethersproject/abstract-signer": "npm:^5.7.0" + "@ethersproject/address": "npm:^5.7.0" + "@ethersproject/bignumber": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/hdnode": "npm:^5.7.0" + "@ethersproject/json-wallets": "npm:^5.7.0" + "@ethersproject/keccak256": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/random": "npm:^5.7.0" + "@ethersproject/signing-key": "npm:^5.7.0" + "@ethersproject/transactions": "npm:^5.7.0" + "@ethersproject/wordlists": "npm:^5.7.0" + checksum: 10c0/f872b957db46f9de247d39a398538622b6c7a12f93d69bec5f47f9abf0701ef1edc10497924dd1c14a68109284c39a1686fa85586d89b3ee65df49002c40ba4c + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": "npm:^5.7.0" + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10c0/c82d6745c7f133980e8dab203955260e07da22fa544ccafdd0f21c79fae127bd6ef30957319e37b1cc80cddeb04d6bfb60f291bb14a97c9093d81ce50672f453 + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": "npm:^5.7.0" + "@ethersproject/hash": "npm:^5.7.0" + "@ethersproject/logger": "npm:^5.7.0" + "@ethersproject/properties": "npm:^5.7.0" + "@ethersproject/strings": "npm:^5.7.0" + checksum: 10c0/da4f3eca6d691ebf4f578e6b2ec3a76dedba791be558f6cf7e10cd0bfbaeab5a6753164201bb72ced745fb02b6ef7ef34edcb7e6065ce2b624c6556a461c3f70 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.0 + resolution: "@humanwhocodes/retry@npm:0.3.0" + checksum: 10c0/7111ec4e098b1a428459b4e3be5a5d2a13b02905f805a2468f4fa628d072f0de2da26a27d04f65ea2846f73ba51f4204661709f05bfccff645e3cedef8781bb6 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/6a4ecc713ed246ff8e5bdcc1ef7c49aaa93f7463d948ba5054dda18b02dcc6a055e2828c577bcceee058f302ce1fc95595713d44f5c45e43d459f88d267f2f04 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@ledgerhq/cryptoassets@npm:^13.2.0": + version: 13.2.0 + resolution: "@ledgerhq/cryptoassets@npm:13.2.0" + dependencies: + axios: "npm:^1.6.0" + bs58check: "npm:^2.1.2" + invariant: "npm:2" + checksum: 10c0/3fec53780f4b5e20ff855ebf471b3deddf979b26d95194e001127f35419b4ac5d97d7360f4baeb0f1c07db0d463971a2e9bbde8b41ac4e670ba596a8e5dd273c + languageName: node + linkType: hard + +"@ledgerhq/devices@npm:^8.4.2": + version: 8.4.2 + resolution: "@ledgerhq/devices@npm:8.4.2" + dependencies: + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/logs": "npm:^6.12.0" + rxjs: "npm:^7.8.1" + semver: "npm:^7.3.5" + checksum: 10c0/b7149c6302d23928fd2d3622d9018af10a56f6960732de0d72e881d19b75b0036f6248ca0845cfe9dfeda32ecb52c352423e79e109c7decf8437948fed7843cd + languageName: node + linkType: hard + +"@ledgerhq/domain-service@npm:^1.2.2": + version: 1.2.2 + resolution: "@ledgerhq/domain-service@npm:1.2.2" + dependencies: + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/logs": "npm:^6.12.0" + "@ledgerhq/types-live": "npm:^6.49.0" + axios: "npm:^1.3.4" + eip55: "npm:^2.1.1" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + checksum: 10c0/c04ce07429cd70fc326d3db0d1e4c32309d0e6d2910dc1cee9bd781b53e61ba58005159b17fcd5037138de8494c9d4de57c2b36e6f9df29223034c4c413271ee + languageName: node + linkType: hard + +"@ledgerhq/errors@npm:^6.18.0": + version: 6.18.0 + resolution: "@ledgerhq/errors@npm:6.18.0" + checksum: 10c0/0dad36bd049c1eb346b83d2b99c1dde0445c53ae3a2f73d4f9a7f5e278ef61d1e589cc0b30bb81dd3082ad9a751f7d82b662214088e19b09769bded45447fb54 + languageName: node + linkType: hard + +"@ledgerhq/evm-tools@npm:^1.1.2": + version: 1.1.2 + resolution: "@ledgerhq/evm-tools@npm:1.1.2" + dependencies: + "@ledgerhq/cryptoassets": "npm:^13.2.0" + "@ledgerhq/live-env": "npm:^2.1.0" + axios: "npm:^1.6.5" + crypto-js: "npm:4.2.0" + ethers: "npm:5.7.2" + checksum: 10c0/e529a1bc56448e19fbf7b7211e332ceb0e31188da04a13e36e9a7f704062ad74b80533b23a2211a06ebc566a706c390796dbeef34bf0cc99550d1045a5103f79 + languageName: node + linkType: hard + +"@ledgerhq/hw-app-eth@npm:6.37.3": + version: 6.37.3 + resolution: "@ledgerhq/hw-app-eth@npm:6.37.3" + dependencies: + "@ethersproject/abi": "npm:^5.5.0" + "@ethersproject/rlp": "npm:^5.5.0" + "@ledgerhq/cryptoassets": "npm:^13.2.0" + "@ledgerhq/domain-service": "npm:^1.2.2" + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/evm-tools": "npm:^1.1.2" + "@ledgerhq/hw-transport": "npm:^6.31.2" + "@ledgerhq/hw-transport-mocker": "npm:^6.29.2" + "@ledgerhq/logs": "npm:^6.12.0" + "@ledgerhq/types-live": "npm:^6.49.0" + axios: "npm:^1.3.4" + bignumber.js: "npm:^9.1.2" + checksum: 10c0/7d7e48525d6650762e4fc2e6919776c30df2f0b5c1b1465ad42176000f0a686103ea0246e237345ae7e27b5506eecdea82d66dc5eccd119119ed9ea258ddf757 + languageName: node + linkType: hard + +"@ledgerhq/hw-transport-http@npm:^6.30.2": + version: 6.30.2 + resolution: "@ledgerhq/hw-transport-http@npm:6.30.2" + dependencies: + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/hw-transport": "npm:^6.31.2" + "@ledgerhq/logs": "npm:^6.12.0" + axios: "npm:^0.26.1" + ws: "npm:^7.5.2" + checksum: 10c0/20be214b1ded88a98e4b9c8938dee9998bb0464e458926259e3dbd3e18ceb14fa90a5ebaed062dd578a9d6d5146944b9e1d277282256c29a68ff09038c76e192 + languageName: node + linkType: hard + +"@ledgerhq/hw-transport-mocker@npm:^6.29.2": + version: 6.29.2 + resolution: "@ledgerhq/hw-transport-mocker@npm:6.29.2" + dependencies: + "@ledgerhq/hw-transport": "npm:^6.31.2" + "@ledgerhq/logs": "npm:^6.12.0" + rxjs: "npm:^7.8.1" + checksum: 10c0/a5417417e426d09e861871cb7f6d5e2d5dba8fee6aaae38565a897a581c3525cc8bd08d7ca61e3fcff4bb791d2bbf1b29d41bc301337efe1aa42d7cddc2f4141 + languageName: node + linkType: hard + +"@ledgerhq/hw-transport-webhid@npm:^6.29.2": + version: 6.29.2 + resolution: "@ledgerhq/hw-transport-webhid@npm:6.29.2" + dependencies: + "@ledgerhq/devices": "npm:^8.4.2" + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/hw-transport": "npm:^6.31.2" + "@ledgerhq/logs": "npm:^6.12.0" + checksum: 10c0/86a610bf99eb44fbd93a7d0afc621f13a5f43e63fc86c64f686f88cc528d0ea62a51f674b8a6148aaa4330cc8ef2c2b2e461bbea5a71ae39305f82124a83377b + languageName: node + linkType: hard + +"@ledgerhq/hw-transport-webusb@npm:^6.29.2": + version: 6.29.2 + resolution: "@ledgerhq/hw-transport-webusb@npm:6.29.2" + dependencies: + "@ledgerhq/devices": "npm:^8.4.2" + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/hw-transport": "npm:^6.31.2" + "@ledgerhq/logs": "npm:^6.12.0" + checksum: 10c0/6499398c90ccd1210d9a6b91846df49001b0de7b74a97a8df0020fc35f22b90f3b886499c5237cdf198e914a616f310ccd22238f5136df46699561f6dd2412ed + languageName: node + linkType: hard + +"@ledgerhq/hw-transport@npm:^6.31.2": + version: 6.31.2 + resolution: "@ledgerhq/hw-transport@npm:6.31.2" + dependencies: + "@ledgerhq/devices": "npm:^8.4.2" + "@ledgerhq/errors": "npm:^6.18.0" + "@ledgerhq/logs": "npm:^6.12.0" + events: "npm:^3.3.0" + checksum: 10c0/3fc61c2e844639b7ec73e5eaec2f34235a414ec802df2491ea3d32d854f5f53c592b35b874a9ce899a6087a74a5a750b20c91aae19aaa44eea2faa390edf593f + languageName: node + linkType: hard + +"@ledgerhq/live-env@npm:^2.1.0": + version: 2.1.0 + resolution: "@ledgerhq/live-env@npm:2.1.0" + dependencies: + rxjs: "npm:^7.8.1" + utility-types: "npm:^3.10.0" + checksum: 10c0/9262f4e27e128c0552241dabedf092c5d210013b22317d9d985dc565d3cfa4045f33d53ac262d4bae10f7d073d8413329574c626d5a25b790fcf7092efe86f52 + languageName: node + linkType: hard + +"@ledgerhq/logs@npm:^6.12.0": + version: 6.12.0 + resolution: "@ledgerhq/logs@npm:6.12.0" + checksum: 10c0/573122867ae807a60c3218234019ba7c4b35c14551b90c291fd589d7c2e7f002c2e84151868e67801c9f89a33d8a5569da77aef83b5f5e03b5faa2811cab6a86 + languageName: node + linkType: hard + +"@ledgerhq/types-live@npm:^6.49.0": + version: 6.49.0 + resolution: "@ledgerhq/types-live@npm:6.49.0" + dependencies: + bignumber.js: "npm:^9.1.2" + rxjs: "npm:^7.8.1" + checksum: 10c0/171e0b09e8fbae14a1712c8c53b3309f199e6a8c4c75dfbabc861039cf9de51a0b1f0ecd667bbb16810f8130d9bf35c05d67b95f269dc67125faa55705d65cf2 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.19.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-android-arm64@npm:4.19.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.19.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.19.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.19.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.19.2" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.19.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.19.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.19.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.19.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.19.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.19.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.19.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.19.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.19.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.19.2": + version: 4.19.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.19.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@types/estree@npm:1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d + languageName: node + linkType: hard + +"@vitejs/plugin-legacy@npm:^5.4.1": + version: 5.4.1 + resolution: "@vitejs/plugin-legacy@npm:5.4.1" + dependencies: + "@babel/core": "npm:^7.24.6" + "@babel/preset-env": "npm:^7.24.6" + browserslist: "npm:^4.23.0" + browserslist-to-esbuild: "npm:^2.1.1" + core-js: "npm:^3.37.1" + magic-string: "npm:^0.30.10" + regenerator-runtime: "npm:^0.14.1" + systemjs: "npm:^6.15.1" + peerDependencies: + terser: ^5.4.0 + vite: ^5.0.0 + checksum: 10c0/899f675f456cafbcdd2bfdb824f075ea5ffd4aa78dd7316d87e3f4d8519c90e2f3d1e92ab6337153ec895da7cd237a99655cf97fffe34ca78b8834bc6ee46d57 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.12.0, acorn@npm:^8.8.2": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 10c0/51fb26cd678f914e13287e886da2d7021f8c2bc0ccc95e03d3e0447ee278dd3b40b9c57dc222acd5881adcf26f3edc40901a4953403232129e3876793cd17386 + languageName: node + linkType: hard + +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 10c0/87dd5b2363534b867db7cef8bc85a90c355460783744877b2db7c8be09740aac5750714f9e00902822f692662bda74cdf40e03fbb5214ffec75c2666666288b8 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"axios@npm:^0.26.1": + version: 0.26.1 + resolution: "axios@npm:0.26.1" + dependencies: + follow-redirects: "npm:^1.14.8" + checksum: 10c0/77ad7f1e6ca04fcd3fa8af1795b09d8b7c005b71a31f28d99ba40cda0bdcc12a4627801d7fac5efa62b9f667a8402bd54c669039694373bc8d44f6be611f785c + languageName: node + linkType: hard + +"axios@npm:^1.3.4, axios@npm:^1.6.0, axios@npm:^1.6.5": + version: 1.7.3 + resolution: "axios@npm:1.7.3" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/a18cbe559203efa05fb1fec2d1898e23bf6329bd2575784ee32aa11b5bbe1d54b9f472c49a261294125519cf62aa4fe5ef6e647bb7482eafc15bffe15ab314ce + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.11 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.11" + dependencies: + "@babel/compat-data": "npm:^7.22.6" + "@babel/helper-define-polyfill-provider": "npm:^0.6.2" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/b2217bc8d5976cf8142453ed44daabf0b2e0e75518f24eac83b54a8892e87a88f1bd9089daa92fd25df979ecd0acfd29b6bc28c4182c1c46344cee15ef9bce84 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.10.4": + version: 0.10.4 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.1" + core-js-compat: "npm:^3.36.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/31b92cd3dfb5b417da8dfcf0deaa4b8b032b476d7bb31ca51c66127cf25d41e89260e89d17bc004b2520faa38aa9515fafabf81d89f9d4976e9dc1163e4a7c41 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.2 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.2" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/bc541037cf7620bc84ddb75a1c0ce3288f90e7d2799c070a53f8a495c8c8ae0316447becb06f958dd25dcce2a2fce855d318ecfa48036a1ddb218d55aa38a744 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.10 + resolution: "base-x@npm:3.0.10" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/a13a34b71439ee5381667efa630b3bf640cf17f632c5ba01990483367592e72f247d7fb4f8c6d0e3ff8c0fb7224b3ac682ff5be09b87063a45b3968f0457e563 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 10c0/5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"bignumber.js@npm:^9.1.2": + version: 9.1.2 + resolution: "bignumber.js@npm:9.1.2" + checksum: 10c0/e17786545433f3110b868725c449fa9625366a6e675cd70eb39b60938d6adbd0158cb4b3ad4f306ce817165d37e63f4aa3098ba4110db1d9a3b9f66abfbaf10d + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 10c0/9736aaa317421b6b3ed038ff3d4491935a01419ac2d83ddcfebc5717385295fcfcf0c57311d90fe49926d0abbd7a9dbefdd8861e6129939177f7e67ebc645b21 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"browserslist-to-esbuild@npm:^2.1.1": + version: 2.1.1 + resolution: "browserslist-to-esbuild@npm:2.1.1" + dependencies: + meow: "npm:^13.0.0" + peerDependencies: + browserslist: "*" + bin: + browserslist-to-esbuild: cli/index.js + checksum: 10c0/4d1968efd72850949d5dfa355f4663c695a8fd7b259b19cc81ecd0ed33dd37bbd327475c644de3f2beb53e737c6e511c6e84ed3e97a2ff49f117505a7707c72d + languageName: node + linkType: hard + +"browserslist@npm:^4.23.0, browserslist@npm:^4.23.1": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" + dependencies: + caniuse-lite: "npm:^1.0.30001646" + electron-to-chromium: "npm:^1.5.4" + node-releases: "npm:^2.0.18" + update-browserslist-db: "npm:^1.1.0" + bin: + browserslist: cli.js + checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + languageName: node + linkType: hard + +"bs58@npm:^4.0.0": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: "npm:^3.0.2" + checksum: 10c0/613a1b1441e754279a0e3f44d1faeb8c8e838feef81e550efe174ff021dd2e08a4c9ae5805b52dfdde79f97b5c0918c78dd24a0eb726c4a94365f0984a0ffc65 + languageName: node + linkType: hard + +"bs58check@npm:^2.1.2": + version: 2.1.2 + resolution: "bs58check@npm:2.1.2" + dependencies: + bs58: "npm:^4.0.0" + create-hash: "npm:^1.1.0" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/5d33f319f0d7abbe1db786f13f4256c62a076bc8d184965444cb62ca4206b2c92bee58c93bce57150ffbbbe00c48838ac02e6f384e0da8215cac219c0556baa9 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.2.1" + checksum: 10c0/2a905fbbcde73cc5d8bd18d1caa23715d5f83a5935867c2329f0ac06104204ba7947be098fe1317fbd8830e26090ff8e764f08cd14fefc977bb248c3487bcbd0 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001646 + resolution: "caniuse-lite@npm:1.0.30001646" + checksum: 10c0/ecdd87c08cd63fa32e11311dfa3543a52613b0b99498b6fe6f2c66af65cc27e2f7436fa5b2bc2bcf72174448a7670715b284d420de838bcf3e811864371a2465 + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"cipher-base@npm:^1.0.1": + version: 1.0.4 + resolution: "cipher-base@npm:1.0.4" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + checksum: 10c0/d8d005f8b64d8a77b3d3ce531301ae7b45902c9cab4ec8b66bdbd2bf2a1d9fceb9a2133c293eb3c060b2d964da0f14c47fb740366081338aa3795dd1faa8984b + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"core-js-compat@npm:^3.36.1, core-js-compat@npm:^3.37.1": + version: 3.37.1 + resolution: "core-js-compat@npm:3.37.1" + dependencies: + browserslist: "npm:^4.23.0" + checksum: 10c0/4e2da9c900f2951a57947af7aeef4d16f2c75d7f7e966c0d0b62953f65225003ade5e84d3ae98847f65b24c109c606821d9dc925db8ca418fb761e7c81963c2a + languageName: node + linkType: hard + +"core-js@npm:^3.37.1": + version: 3.37.1 + resolution: "core-js@npm:3.37.1" + checksum: 10c0/440eb51a7a39128a320225fe349f870a3641b96c9ecd26470227db730ef8c161ea298eaea621db66ec0ff622a85299efb4e23afebf889c0a1748616102307675 + languageName: node + linkType: hard + +"create-hash@npm:^1.1.0": + version: 1.2.0 + resolution: "create-hash@npm:1.2.0" + dependencies: + cipher-base: "npm:^1.0.1" + inherits: "npm:^2.0.1" + md5.js: "npm:^1.3.4" + ripemd160: "npm:^2.0.1" + sha.js: "npm:^2.4.0" + checksum: 10c0/d402e60e65e70e5083cb57af96d89567954d0669e90550d7cec58b56d49c4b193d35c43cec8338bc72358198b8cbf2f0cac14775b651e99238e1cf411490f915 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"crypto-js@npm:4.2.0": + version: 4.2.0 + resolution: "crypto-js@npm:4.2.0" + checksum: 10c0/8fbdf9d56f47aea0794ab87b0eb9833baf80b01a7c5c1b0edc7faf25f662fb69ab18dc2199e2afcac54670ff0cd9607a9045a3f7a80336cccd18d77a55b9fdf0 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": + version: 4.3.6 + resolution: "debug@npm:4.3.6" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/3293416bff072389c101697d4611c402a6bacd1900ac20c0492f61a9cdd6b3b29750fc7f5e299f8058469ef60ff8fb79b86395a30374fbd2490113c1c7112285 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"eip55@npm:^2.1.1": + version: 2.1.1 + resolution: "eip55@npm:2.1.1" + dependencies: + keccak: "npm:^3.0.3" + checksum: 10c0/a04787e484737f38c894b064b02257e2138382ec5eda5e8eb74bc16220bc30ee2dafc909ee1e18669374e37e76cfbc50c0664a723f34b36ef7490043e682c698 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.4": + version: 1.5.4 + resolution: "electron-to-chromium@npm:1.5.4" + checksum: 10c0/139abf1b7281c2f3288819fb9b114f09d541ac38c9f0373f194ce2d483d82d118b8751f1b2a59b04ed0d8f414071b58508a40050fc0f23b5aa7e38d11d0cf30c + languageName: node + linkType: hard + +"elliptic@npm:6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/5f361270292c3b27cf0843e84526d11dec31652f03c2763c6c2b8178548175ff5eba95341dd62baff92b2265d1af076526915d8af6cc9cb7559c44a62f8ca6e2 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + +"escalade@npm:^3.1.2": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-scope@npm:^8.0.2": + version: 8.0.2 + resolution: "eslint-scope@npm:8.0.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/477f820647c8755229da913025b4567347fd1f0bf7cbdf3a256efff26a7e2e130433df052bd9e3d014025423dc00489bea47eb341002b15553673379c1a7dc36 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-visitor-keys@npm:4.0.0" + checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5 + languageName: node + linkType: hard + +"eslint@npm:^9.8.0": + version: 9.8.0 + resolution: "eslint@npm:9.8.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.11.0" + "@eslint/config-array": "npm:^0.17.1" + "@eslint/eslintrc": "npm:^3.1.0" + "@eslint/js": "npm:9.8.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.3.0" + "@nodelib/fs.walk": "npm:^1.2.8" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.0.2" + eslint-visitor-keys: "npm:^4.0.0" + espree: "npm:^10.1.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/a2ee0cce1147565d011fe185733af482f34d5466f5df5f390d0ea2ecf78097883cf568ed6c771d687138609c63cd55cd1e3ff12de7393c03f54fcffcdd0f225d + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.1.0": + version: 10.1.0 + resolution: "espree@npm:10.1.0" + dependencies: + acorn: "npm:^8.12.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.0.0" + checksum: 10c0/52e6feaa77a31a6038f0c0e3fce93010a4625701925b0715cd54a2ae190b3275053a0717db698697b32653788ac04845e489d6773b508d6c2e8752f3c57470a0 + languageName: node + linkType: hard + +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"ethers@npm:5.7.2": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": "npm:5.7.0" + "@ethersproject/abstract-provider": "npm:5.7.0" + "@ethersproject/abstract-signer": "npm:5.7.0" + "@ethersproject/address": "npm:5.7.0" + "@ethersproject/base64": "npm:5.7.0" + "@ethersproject/basex": "npm:5.7.0" + "@ethersproject/bignumber": "npm:5.7.0" + "@ethersproject/bytes": "npm:5.7.0" + "@ethersproject/constants": "npm:5.7.0" + "@ethersproject/contracts": "npm:5.7.0" + "@ethersproject/hash": "npm:5.7.0" + "@ethersproject/hdnode": "npm:5.7.0" + "@ethersproject/json-wallets": "npm:5.7.0" + "@ethersproject/keccak256": "npm:5.7.0" + "@ethersproject/logger": "npm:5.7.0" + "@ethersproject/networks": "npm:5.7.1" + "@ethersproject/pbkdf2": "npm:5.7.0" + "@ethersproject/properties": "npm:5.7.0" + "@ethersproject/providers": "npm:5.7.2" + "@ethersproject/random": "npm:5.7.0" + "@ethersproject/rlp": "npm:5.7.0" + "@ethersproject/sha2": "npm:5.7.0" + "@ethersproject/signing-key": "npm:5.7.0" + "@ethersproject/solidity": "npm:5.7.0" + "@ethersproject/strings": "npm:5.7.0" + "@ethersproject/transactions": "npm:5.7.0" + "@ethersproject/units": "npm:5.7.0" + "@ethersproject/wallet": "npm:5.7.0" + "@ethersproject/web": "npm:5.7.1" + "@ethersproject/wordlists": "npm:5.7.0" + checksum: 10c0/90629a4cdb88cde7a7694f5610a83eb00d7fbbaea687446b15631397988f591c554dd68dfa752ddf00aabefd6285e5b298be44187e960f5e4962684e10b39962 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + languageName: node + linkType: hard + +"follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.15.6": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/9ff767f0d7be6aa6870c82ac79cf0368cd73e01bbc00e9eb1c2a16fbb198ec105e3c9b6628bb98e9f3ac66fe29a957b9645bcb9a490bb7aa0d35f908b6b85071 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.2.1 + resolution: "foreground-child@npm:3.2.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/9a53a33dbd87090e9576bef65fb4a71de60f6863a8062a7b11bc1cbe3cc86d428677d7c0b9ef61cdac11007ac580006f78bd5638618d564cfd5e6fd713d6878f + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"hash-base@npm:^3.0.0": + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" + dependencies: + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.6.0" + safe-buffer: "npm:^5.2.0" + checksum: 10c0/663eabcf4173326fbb65a1918a509045590a26cc7e0964b754eef248d281305c6ec9f6b31cb508d02ffca383ab50028180ce5aefe013e942b44a903ac8dc80d0 + languageName: node + linkType: hard + +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"invariant@npm:2": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.15.0 + resolution: "is-core-module@npm:2.15.0" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/da161f3d9906f459486da65609b2f1a2dfdc60887c689c234d04e88a062cb7920fa5be5fb7ab08dc43b732929653c4135ef05bf77888ae2a9040ce76815eb7b1 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 10c0/43a21dc7967c871bd2c46cb1c2ae97441a97169f324e509f382d43330d8f75cf2c96dba7c806ab08a425765a9c847efdd4bffbac2d99c3a4f3de6c0218f40533 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"keccak@npm:^3.0.3": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: "npm:^2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + readable-stream: "npm:^3.6.0" + checksum: 10c0/153525c1c1f770beadb8f8897dec2f1d2dcbee11d063fe5f61957a5b236bfd3d2a111ae2727e443aa6a848df5edb98b9ef237c78d56df49087b0ca8a232ca9cd + languageName: node + linkType: hard + +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"ledger-bridge@workspace:.": + version: 0.0.0-use.local + resolution: "ledger-bridge@workspace:." + dependencies: + "@ledgerhq/hw-app-eth": "npm:6.37.3" + "@ledgerhq/hw-transport-http": "npm:^6.30.2" + "@ledgerhq/hw-transport-webhid": "npm:^6.29.2" + "@ledgerhq/hw-transport-webusb": "npm:^6.29.2" + "@vitejs/plugin-legacy": "npm:^5.4.1" + buffer: "npm:^6.0.3" + eslint: "npm:^9.8.0" + terser: "npm:^5.31.3" + vite: "npm:^5.3.4" + languageName: unknown + linkType: soft + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"magic-string@npm:^0.30.10": + version: 0.30.11 + resolution: "magic-string@npm:0.30.11" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/b9eb370773d0bd90ca11a848753409d8e5309b1ad56d2a1aa49d6649da710a6d2fe7237ad1a643c5a5d3800de2b9946ed9690acdfc00e6cc1aeafff3ab1752c4 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"md5.js@npm:^1.3.4": + version: 1.3.5 + resolution: "md5.js@npm:1.3.5" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.1.2" + checksum: 10c0/b7bd75077f419c8e013fc4d4dada48be71882e37d69a44af65a2f2804b91e253441eb43a0614423a1c91bb830b8140b0dc906bc797245e2e275759584f4efcc5 + languageName: node + linkType: hard + +"meow@npm:^13.0.0": + version: 13.2.0 + resolution: "meow@npm:13.2.0" + checksum: 10c0/d5b339ae314715bcd0b619dd2f8a266891928e21526b4800d49b4fba1cc3fff7e2c1ff5edd3344149fac841bc2306157f858e8c4d5eaee4d52ce52ad925664ce + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/e3fb661aa083454f40500473bb69eedb85dc160e763150b9a2c567c7e9ff560ce028a9f833123b618a6ea742e311138b591910e795614a629029e86e180660f3 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/ade6c097ba829fa4aee1ca340117bb7f8f29fdae7b777e343a9d5cbd548481d1f0894b7b907d23ce615c70d932e8f96154caed95c3fa935cfe8cf87546510f64 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0": + version: 4.8.1 + resolution: "node-gyp-build@npm:4.8.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/e36ca3d2adf2b9cca316695d7687207c19ac6ed326d6d7c68d7112cebe0de4f82d6733dff139132539fcc01cf5761f6c9082a21864ab9172edf84282bc849ce7 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: 10c0/786ac9db9d7226339e1dc84bbb42007cb054a346bd9257e6aa154d294f01bc6a6cddb1348fa099f079be6580acbb470e3c048effd5f719325abd0179e566fd27 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.0 + resolution: "package-json-from-dist@npm:1.0.0" + checksum: 10c0/e3ffaf6ac1040ab6082a658230c041ad14e72fabe99076a2081bb1d5d41210f11872403fc09082daf4387fc0baa6577f96c9c0e94c90c394fd57794b66aa4033 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": + version: 1.0.1 + resolution: "picocolors@npm:1.0.1" + checksum: 10c0/c63cdad2bf812ef0d66c8db29583802355d4ca67b9285d846f390cc15c2f6ccb94e8cb7eb6a6e97fc5990a6d3ad4ae42d86c84d3146e667c739a4234ed50d400 + languageName: node + linkType: hard + +"postcss@npm:^8.4.39": + version: 8.4.40 + resolution: "postcss@npm:8.4.40" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.0.1" + source-map-js: "npm:^1.2.0" + checksum: 10c0/65ed67573e5443beaeb582282ff27a6be7c7fe3b4d9fa15761157616f2b97510cb1c335023c26220b005909f007337026d6e3ff092f25010b484ad484e80ea7f + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 + languageName: node + linkType: hard + +"readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.1 + resolution: "regenerate-unicode-properties@npm:10.1.1" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0, regenerator-runtime@npm:^0.14.1": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": "npm:^7.8.4" + checksum: 10c0/7cfe6931ec793269701994a93bab89c0cc95379191fad866270a7fea2adfec67ea62bb5b374db77058b60ba4509319d9b608664d0d288bd9989ca8dbd08fae90 + languageName: node + linkType: hard + +"regexpu-core@npm:^5.3.1": + version: 5.3.2 + resolution: "regexpu-core@npm:5.3.2" + dependencies: + "@babel/regjsgen": "npm:^0.8.0" + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.1.0" + regjsparser: "npm:^0.9.1" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/7945d5ab10c8bbed3ca383d4274687ea825aee4ab93a9c51c6e31e1365edd5ea807f6908f800ba017b66c462944ba68011164e7055207747ab651f8111ef3770 + languageName: node + linkType: hard + +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" + dependencies: + jsesc: "npm:~0.5.0" + bin: + regjsparser: bin/parser + checksum: 10c0/fe44fcf19a99fe4f92809b0b6179530e5ef313ff7f87df143b08ce9a2eb3c4b6189b43735d645be6e8f4033bfb015ed1ca54f0583bc7561bed53fd379feb8225 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve@npm:^1.14.2": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"ripemd160@npm:^2.0.1": + version: 2.0.2 + resolution: "ripemd160@npm:2.0.2" + dependencies: + hash-base: "npm:^3.0.0" + inherits: "npm:^2.0.1" + checksum: 10c0/f6f0df78817e78287c766687aed4d5accbebc308a8e7e673fb085b9977473c1f139f0c5335d353f172a915bb288098430755d2ad3c4f30612f4dd0c901cd2c3a + languageName: node + linkType: hard + +"rollup@npm:^4.13.0": + version: 4.19.2 + resolution: "rollup@npm:4.19.2" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.19.2" + "@rollup/rollup-android-arm64": "npm:4.19.2" + "@rollup/rollup-darwin-arm64": "npm:4.19.2" + "@rollup/rollup-darwin-x64": "npm:4.19.2" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.19.2" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.19.2" + "@rollup/rollup-linux-arm64-gnu": "npm:4.19.2" + "@rollup/rollup-linux-arm64-musl": "npm:4.19.2" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.19.2" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.19.2" + "@rollup/rollup-linux-s390x-gnu": "npm:4.19.2" + "@rollup/rollup-linux-x64-gnu": "npm:4.19.2" + "@rollup/rollup-linux-x64-musl": "npm:4.19.2" + "@rollup/rollup-win32-arm64-msvc": "npm:4.19.2" + "@rollup/rollup-win32-ia32-msvc": "npm:4.19.2" + "@rollup/rollup-win32-x64-msvc": "npm:4.19.2" + "@types/estree": "npm:1.0.5" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/ff5c1d071c873f25016263568177f5406d76f242a04d25a191a37f4b859a1662a1acc9f76bf680968ffcebb467ac4952521462375698468c80506ff91a0b9f2d + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.8.1": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 + languageName: node + linkType: hard + +"scrypt-js@npm:3.0.1": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: 10c0/e2941e1c8b5c84c7f3732b0153fee624f5329fc4e772a06270ee337d4d2df4174b8abb5e6ad53804a29f53890ecbc78f3775a319323568c0313040c0e55f5b10 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.5": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"sha.js@npm:^2.4.0": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10c0/b7a371bca8821c9cc98a0aeff67444a03d48d745cb103f17228b96793f455f0eb0a691941b89ea1e60f6359207e36081d9be193252b0f128e0daf9cfea2815a5 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 10c0/7e5f896ac10a3a50fe2898e5009c58ff0dc102dcb056ed27a354623a0ece8954d4b2649e1a1b2b52ef2e161d26f8859c7710350930751640e71e374fe2d321a4 + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"systemjs@npm:^6.15.1": + version: 6.15.1 + resolution: "systemjs@npm:6.15.1" + checksum: 10c0/106e5751a49dbe4acb17fa1474a43b27fd26efbee1b322c00c04c08f3e95de756adfba828d743af89bef7fa10888da8a5c5ceb55dae5c42e4909b151168ad192 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"terser@npm:^5.31.3": + version: 5.31.3 + resolution: "terser@npm:5.31.3" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/eb2b525dada9febd3db74e94bd295f9cd7abd809e4f9c6bbc795a3048ad50fd327c15eab99db383fa820239680eef6d2dbd7dc05361769c204ddee5cf684d41e + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0": + version: 2.6.3 + resolution: "tslib@npm:2.6.3" + checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" + checksum: 10c0/0fe812641bcfa3ae433025178a64afb5d9afebc21a922dafa7cba971deebb5e4a37350423890750132a85c936c290fb988146d0b1bd86838ad4897f4fc5bd0de + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.1.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" + checksum: 10c0/f5b9499b9e0ffdc6027b744d528f17ec27dd7c15da03254ed06851feec47e0531f20d410910c8a49af4a6a190f4978413794c8d75ce112950b56d583b5d5c7f2 + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" + dependencies: + escalade: "npm:^3.1.2" + picocolors: "npm:^1.0.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/a7452de47785842736fb71547651c5bbe5b4dc1e3722ccf48a704b7b34e4dcf633991eaa8e4a6a517ffb738b3252eede3773bef673ef9021baa26b056d63a5b9 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"vite@npm:^5.3.4": + version: 5.3.5 + resolution: "vite@npm:5.3.5" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.39" + rollup: "npm:^4.13.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/795c7e0dbc94b96c4a0aff0d5d4b349dd28ad8b7b70979c1010f96b4d83f7d6c1700ebd6fed91de2e021b0a3689b9abc2d8017f6dfa8c9a6ca5c7af637d6afc6 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4b44b59bbc0549c852fb2f0cdb48e40e122a1b6078aeed3d65557cbeb7d37dda7a4f0027afba2e6a7a695de17701226d02b23bd15c97b0837808c16345c62f8e + languageName: node + linkType: hard + +"ws@npm:^7.5.2": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard