diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 4f25f52a..e02f1c96 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -23,9 +23,10 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm install - - run: npm run lint + - run: npm install -g npm@7 + - run: npm ci - run: npm run build + - run: npm run lint unit: runs-on: ubuntu-latest @@ -41,7 +42,9 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm install --ignore-engines + - run: npm install -g npm@7 + - run: npm ci + - run: npm run build - run: npm test integration: @@ -65,7 +68,9 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm install --ignore-engines + - run: npm install -g npm@7 + - run: npm ci + - run: npm run build - run: npm run test:integration env: HOST: localhost @@ -92,5 +97,7 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: npm install + - run: npm install -g npm@7 + - run: npm ci + - run: npm run build - run: npm run test:browser diff --git a/.gitignore b/.gitignore index 618cc69e..6a73da03 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,6 @@ scripts/cache # browser tests testCompiledForWeb + +# lerna debug +lerna-debug.log diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8640e3d6..00000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - 10 - - 12 - - 13 -script: - - npm test - - npm build - - npm lint diff --git a/.vscode/settings.json b/.vscode/settings.json index 55c00dc4..0131dd87 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,8 @@ { "editor.tabSize": 2, + "cSpell.words": [ + "secp256k1" + ], "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 40d7aff2..bd70a8dd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,14 +2,29 @@ ## Set up your dev environment -We use Node v14 for development - that is the version that our linters require. +### Requirements + +We use Node v14 for development - that is the version that our linters require. +You must also use `npm` v7. You can check your `npm` version with: + +```bash +npm -v +``` + +If your `npm` version is too old, use this command to update it: + +```bash +npm -g i npm@7 +``` + +### Set up -To set up the repository: 1. Clone the repository 2. `cd` into the repository 3. Install dependencies with `npm install` -To build the library: +### Build + ```bash npm run build ``` @@ -18,17 +33,18 @@ npm run build ```bash npm install +npm run build npm run lint ``` ## Running Tests - For integration and browser tests, we use a `rippled` node in standalone mode to test xrpl.js code against. To set this up, you can either run `rippled` locally, or set up the Docker container `natenichols/rippled-standalone:latest` for this purpose. The latter will require you to [install Docker](https://docs.docker.com/get-docker/). ### Unit Tests ```bash npm install +npm run build npm test ``` @@ -38,6 +54,7 @@ npm test npm install # sets up the rippled standalone Docker container - you can skip this step if you already have it set up docker run -p 6006:6006 -it natenichols/rippled-standalone:latest +npm run build npm run test:integration ``` @@ -50,7 +67,7 @@ One is in the browser - run `npm run build:browserTests` and open `test/localInt The other is in the command line (this is what we use for CI) - ```bash -npm run build:browserTests +npm run build # sets up the rippled standalone Docker container - you can skip this step if you already have it set up docker run -p 6006:6006 -it natenichols/rippled-standalone:latest npm run test:browser @@ -64,6 +81,37 @@ You can see the complete reference documentation at [`xrpl.js` docs](js.xrpl.org npm run docgen ``` +## Adding and removing packages + +`xrpl.js` uses `lerna` and `npm`'s workspaces features to manage a monorepo. +Adding and removing packages requires a slightly different process than normal +as a result. + +### Adding or removing development dependencies + +`xrpl.js` strives to use the same development dependencies in all packages. +You may add and remove dev dependencies like normal: + +```bash +### adding a new dependency +npm install --save-dev abbrev +### removing a dependency +npm uninstall --save-dev abbrev +``` + +### Adding or removing runtime dependencies + +You need to specify which package is changing using the `-w` flag: + +```bash +### adding a new dependency to `xrpl` +npm install abbrev -w xrpl +### adding a new dependency to `ripple-keypairs` +npm install abbrev -w ripple-keypairs +### removing a dependency +npm uninstall abbrev -w xrpl +``` + ## Release process ### Editing the Code @@ -79,7 +127,7 @@ npm run docgen 1. Ensure that all tests passed on the last CI that ran on `develop`. 2. Open a PR to update the docs if docs were modified. -3. Create a branch off `develop` that properly increments the version in `package.json` and ensures that `HISTORY.md` is updated appropriately. We follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +3. Create a branch off `develop` that ensures that `HISTORY.md` is updated appropriately for each package. * Use `shasum -a 256 build/*` to get the SHA-256 checksums. Add these to `HISTORY.md` as well. 4. Merge this branch into `develop`. 5. If this is not a beta release: Merge `develop` into `master` (`--ff-only`) and push to github. This is important because we have docs telling developers to use master to get the latest release. diff --git a/HISTORY.md b/HISTORY.md index f1324ebf..ec1dc55c 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,1618 +1,3 @@ # xrpl.js (ripple-lib) Release History -Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xrpl-announce) for release announcements. We recommend that xrpl.js (ripple-lib) users stay up-to-date with the latest stable release. - -## 2.0.1 (2021-11-01) - -* Fix private interfaces not showing up in the docs (#1769) - -## 2.0.0 (2021-10-20) - -A migration guide is available at https://xrpl.org/xrpljs2-migration-guide.html. - -### Added -* New request and transaction models that exactly mirror rippled -* Wallet object to handle key pairs -* All rippled request methods are now supported by client request methods -* JavaScript method (`validate`) to check the shape of transaction models -* Methods to multisign (`multisign`), authorize a payment channel (`authorizeChannel`) and verify a transaction signature (`verifySignature`) -* `client.autofill` (converts X-Addresses, converts transaction flags from objects to numbers, and fills in `Sequence`, `LastLedgerSequence`, and `Fee`) -* Adds a message to the connection's trace whenever a partial payment is received on a stream -* `getBalanceChanges` added in from `ripple-lib-transactionparser` -* Changed return shape of some methods -* Reliable transaction submission (waits until the transaction has been validated or `LastLedgerSequence` has failed before returning) - -### Changed -* Renamed package from `ripple-lib` to `xrpl.js` -* Main client - * Renamed from `RippleAPI` to `Client` - * Removed all methods that did not require a connection to the ledger (most were moved to the utils) - * Changed the constructor params to take a mandatory server URL and then the rest of the optional params (since there are no longer any functions on the Client that don't require a server connection) - * Added TypeScript typing to subscription handlers - * `client.request` now takes a request object that matches the rippled format, instead of separating out the `command` - * `client.requestAll` is now a public method that anyone can use - * `api.getLedgerVersion` -> `client.getLedgerIndex` - * `client.submit` will now sign a transaction -* Better TypeScript typing everywhere -* Completely revamped library documentation (now available at js.xrpl.org) -* Utils - * Exported all utils at the top level and removed them from the client - * Renamed many of the utils to be more descriptive and more succinct - * Moved `ripple-address-codec` functions from `Client` to `utils` (and exported at the top level) - * Moved `hasNextPage` from `Client` to `utils` -* Renamed `client.generateFaucetWallet` to `client.fundWallet` (and it now returns a `Wallet` and the wallet's balance) -* Better flag organization -* Updated dependencies - * ws, typescript - -### Deprecated -* `api.prepareTransaction` (left in for easier migration, but it is now just an alias of `client.autofill`, which should be used instead) - -### Removed -* Automatic client subscription to incoming ledgers -* Removed `jsonschema` in favor of TypeScript types and `validate` for JS users -* Functions that were replaced by similar functionality elsewhere in the library - * `api.combine` -> `multisign` - * `api.sign` -> `Wallet.sign` - * `generateXAddress` -> `Wallet.generate(...).getXAddress(...)` - * `api.prepare...` -> `client.autofill(tx)` (they have slightly different APIs, but serve a similar purpose) -* Several client abstraction methods that were deemed no longer necessary - * `api.getAccountInfo` -> `client.request({command: 'account_info', ...})` - * `api.getAccountObjects` -> `client.request({command: 'account_objects', ...})` - * `api.getBalanceSheet` -> `client.request({command: 'gateway_balances', ...})` - * `api.getLedger` -> `client.request({command: 'ledger', ...})` - * `api.getOrders` -> `client.request({command: 'account_offers', ...})` - * `api.getPaymentChannel` -> `client.request({command: 'ledger_entry', ...})` - * `api.getSettings` -> `client.request({command: 'account_info', ...})` - * `api.getServerInfo` -> `client.request({command: 'server_info'})` - * `api.getTransaction` -> `client.request({command: 'tx', ...})` - * `api.getTransactions` -> `client.request({command: 'account_tx', ...})` - * `api.getTrustlines` -> `client.request({command: 'account_lines', ...})` - * `api.getPaths` -> `client.request({command: ripple_path_find, ...})` -* Helper methods/utils that are no longer necessary (such as `renameCounterpartyToIssuer` and `formatBidsAndAsks`) - -### Security -* Fixed potential vulnerability in xrp-drops conversion (#1714) - -### Changes for library contributors -* Linted code -* Changed the docs framework to `typedoc` -* Changes to testing structure - * Moved fixtures out of `test/mockRippled` - they are now defined in the test that they are used - * Renamed all files to be camelCase - * Fixtures now use TypeScript - * Use chai instead of assert-diff -* Much more extensive integration testing -* Switched from yarn to npm -* Updated dev dependencies - replaced assert-diff with chai, updated linters, removed jsonschemas, updated types -* Reorganized files - * Anything connection/client-related is in `src/client` - * All models are in `src/models` - * All additional abstraction functions are in `src/sugar` - * All independent methods that don't require a connection are in `src/utils` - * Everything to do with wallets is in `src/wallet` - - -## 1.10.0 (2021-08-12) - -* Add address generation from Devnet/Testnet faucets (#1497) -* Fix bug with `getBalances()` ledgerVersion (#1505) -* Include lodash in webpack build (#1500) -* Documentation Updates: - * Export and document AccountSetFlags (#1525) - * Add links to example keypair derivation (#1523) - -## 1.9.8 (2021-07-30) - -* Export offline methods to top level of package (#1479) -* Remove deprecated ledger fields (#1160) - * These fields have been deprecated for many years: accepted, hash (use ledger_hash instead), seqNum (use ledger_index instead), totalCoins (use total_coins instead) -* Docs improvements (#1251, #1420, #1463) -* Reduce dependencies on lodash (#1467) -* Bug fixes - * Allow lowercase hex for memos (#1475) - * Add type argument to Promise (#1474) - * Fix miscommunication with ripplingDisabled in trustlines (#1481) - * Allow X-address for issuer (#1471) -* Dependencies - * ws, ripple-binary-codec - * deps-dev: typescript, @types/node, ts-node - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -f3a0efb9f8bb618da6b10425a9b55a8492359a331a22d0ab4de7d3551870eb3d build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -fd40457a89a14732ce261148e129cdda5aa963d9a433c57700353083faa1bffe build/ripple-latest.js -``` - -## 1.9.7 (2021-07-14) - -* Bug fixes - * TypeScript: fix TrustlineTransaction type (#1458) (#1460) (thanks @mrosendin) -* Docs - * Update boilerplate (#1459) (thanks @mDuo13) -* Dependencies - * @types/node, @types/ws, @types/lodash, @types/mocha, prettier, mocha, webpack, ripple-binary-codec, ws, webpack-cli, doctoc - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -a994422648c040076251c9a040fd494bc2ee30de23867607985b953022853afc build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -2e22b6187ff5f9300520c29a538013067609b439181f1f2184d6a80fcfa2449c build/ripple-latest.js -``` - -## 1.9.6 (2021-07-01) - -* Bug fixes - * Use 'current' ledger when preparing txs (#1429) (#999) - * Allow multiple settings at once (#1435) -* Dependencies - * ripple-address-codec, prettier, mocha - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -cac7f6f3be93efbd61dc5fd527c40f0d1baec06f2f9faa64e9eeb191cc85a710 build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -5737483e940dca8b73768d8a1de8217c7e921a9cebaadef02d2b16867658f331 build/ripple-latest.js -``` - -## 1.9.5 (2021-06-01) - -* Bug fixes - * Prevent getFee from returning NaN from Reporting Mode (#1401) (#1398) - * Return promise inside catch block of reconnect to propagate promise (#1418) (#1113) (thanks @camposfyi) - * Internal - * Update mocha to use RC file config (#1417) (#1210) (thanks @camposfyi) -* Dependencies - * @types/ws, ws, browserslist, @types/lodash - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -fcdc4aa1e1df7cb788b68f3d036e168aa64f9e818f441b99fef62d4571c0387d build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -dfb7a92c4156fb3ee367254b5ea0935cda741cd3b5c36cdca695e7d89f88605e build/ripple-latest.js -``` - -## 1.9.4 (2021-04-18) - -* Add memos support for all transaction types for getTransactions (#1353, #1397) -* Add Deno and React instructions (#1387) - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -daa2b892a18037e89fea6fcf7de67624a782971956cb8df17cd765a4b0201ee9 build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -b1d0bab54c6dbc76091610ede54a4269e73dea8cc6a9c25738d62bd7671920e4 build/ripple-latest.js -``` - -## 1.9.3 (2021-03-16) - -* Expose ripple-address-codec methods. These are static methods on RippleAPI, so you do not need to create a RippleAPI instance. - * `classicAddressToXAddress` / `xAddressToClassicAddress` - * `isValidXAddress` / `isValidClassicAddress` - * `encodeSeed` / `decodeSeed` - * `encodeAccountID` / `decodeAccountID` - * `encodeNodePublic` / `decodeNodePublic` - * `encodeAccountPublic` / `decodeAccountPublic` - * `encodeXAddress` / `decodeXAddress` - -Example 1. Encode an X-address with tag 4294967295: -```js -const RippleAPI = require('ripple-lib').RippleAPI -const xAddress = RippleAPI.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295) -console.log(xAddress) -``` - -Output for Example 1: -``` -XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi -``` - -Example 2. Encode a test address for use with Testnet or Devnet: -```js -const RippleAPI = require('ripple-lib').RippleAPI -const address = RippleAPI.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true) -console.log(address) -``` - -Output for Example 2: -``` -T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD -``` - -Example 3. Decode an X-address: -```js -const RippleAPI = require('ripple-lib').RippleAPI -const address = RippleAPI.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi') -console.log(address) -``` - -Output for Example 3: -```js -{ - classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', - tag: 4294967295, - test: false -} -``` - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -bcc8db4e5464197151a267d9f240693794bf1eb4d26a4e0b3637f82a1d66e440 build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -99c2825685d249c074abe7b59abaf197afce67ece7ad08ded6db67185e916dd2 build/ripple-latest.js -``` - -## 1.9.2 (2021-03-12) - -* Docs - * Add missing transaction type links (#1378) -* Bug fixes - * Deserialization and verification of payment paths (#1382) (#1347) (#1376) -* Dependencies - * Bump ripple-binary-codec to 1.1.2 - * Fix edge case when constructing a value from "0", which can occur when using rippled v1.7.0 - * Bump lodash, ripple-address-codec - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -a1fd24b65d81ea5dbc36d74da7a6317267a048bba084effff5380d47299c3c63 build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -410f78105c4f23c13671ec94f963ef47179393bfcad65ff610bc838c5a3c6a65 build/ripple-latest.js -``` - -## 1.9.1 (2021-02-25) - -* Docs - * Add transaction specifications: (#1352) - * Ticket Create - * Account Delete - * Deposit Preauth - * Update link to subscribe page (#1354) -* Bug fixes - * Allow connectionTimeout option to be customized (#1355) -* Dependencies - * Bump ripple-keypairs to 1.0.3 - * Bump elliptic to 6.5.4 (this patches a potential security issue, although we do not believe that the issue affects ripple-lib: [details](https://github.com/ripple/ripple-keypairs/security/advisories/GHSA-w6x3-9ph2-7x54)) - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -f59e0221a7218460eea59b0441a0ee2d2a14484dd473ed5373283852798516c7 build/ripple-latest-min.js -fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt -731ed44cbff8db26bcf256e0e3f3ac3fe90a10b6c227701d67918a5d643c5b29 build/ripple-latest.js -``` - -## 1.9.0 (2020-12-07) - -* New features - * Support for tickets (TicketBatch amendment required - not yet activated on live/main network) - * `prepareTicketCreate` - * Types: Add LedgerClosedEvent and export more types -* Docs - * Improve descriptions of get-ledger response time fields - * Applications - * Add Bithomp explorer - * Add example of reliable transaction submission -* Node.js - * Require Node.js version 10.13.0+ -* Internal - * Update webpack, webpack-cli, mocha, nyc, ripple-binary-codec - * Run prettier to format code - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 build/* -2d3ae057ad637df272f98cfe940ea9e1317588e5bbf4fee47c8b16d6e6e71d85 build/ripple-latest-min.js -8cbbc7bb482f68bcc8d411bae2e42effdb14ddfa562fcbc329a373910b85cf8c build/ripple-latest.js -``` - -## 1.8.2 (2020-10-23) - -* Bug fixes - * Browser compatibility: Use ripple-binary-codec 0.2.x to prevent browser issues (#1321) - * Memory leak: Clear awaiting response promises to prevent memory leak (#1302) -* Feature: getSettings() - allow ledgerVersion to be 'validated', 'closed', or 'current' (#1298) -* Docs: Update APPLICATIONS.md - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 * -ba760c36028b8a3ce267386e188a422890dfb1b03bc87c852a4c2034ea9bac2e ripple-latest-min.js -7e5281eb9623602284b9f11564f0f3a36cfde305f2c2f7a32e0d29a04913c817 ripple-latest.js -``` - -## 1.8.1 (2020-09-25) - -* Internal - * Bump elliptic to 6.5.3 (this patches a potential security issue, although we do not believe that the issue affects ripple-lib) - * Bump ripple-binary-codec to 1.0.2 - * Bump lodash to 4.17.19 - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 * -0895f349944fa11bb1976b2c350c0eb143dfd09abbfc7c2be33aed5c2a4b9ee8 ripple-latest-min.js -7c00188a28f9d295d8e66aa08b340294d2fe49f635d154fb0df049ae8572c195 ripple-latest.js -``` - -## 1.8.0 (2020-07-06) - -* [Document `request('submit', ...)` method](https://github.com/ripple/ripple-lib/blob/develop/docs/index.md#submit), which includes additional useful information in the response -* Update [list of applications using ripple-lib](https://github.com/ripple/ripple-lib/blob/1.7.0/APPLICATIONS.md) - -## 1.7.1 (2020-05-26) - -* Fix preparePayment when using source.amount/destination.minAmount (#1295) (Fix #1237) (Thanks to @leobel) -* Docs - * Fix generateXAddress example (#1286) - * Update Transaction Streams link (#1278) -* Dependencies - * Update assert-diff, mocha, webpack-bundle-analyzer, @typescript-eslint/parser, @typescript-eslint/eslint-plugin, @types/ws, @types/node, ws, ts-node, eventemitter2 - -## 1.7.0 (2020-04-28) - -* Export hashing functions (#1275) -* Add failHard (fail_hard) option in `submit` method (#1029) -* Add type for parseAccountFlags (#1258) -* Add api.connection.getReserveBase() (#1259) -* Travis: remove node 8 (#1257) -* Dependencies - * Update ripple-address-codec, @types/ws, @types/lodash, https-proxy-agent - * Update devDependencies: eventemitter2, nyc, ejs, @types/node, webpack, ts-node, prettier, @typescript-eslint/eslint-plugin - -## 1.6.5 (2020-03-23) - -* APPLICATIONS.md: Add xrplorer.com -* Internal: Fix typos -* Dependencies - * Update @types/ws, @types/node, @typescript-eslint/eslint-plugin, @types/mocha, webpack, typescript, mocha, assert-diff - * Remove mocha-junit-reporter - -## 1.6.4 (2020-02-18) - -* Fix generateXAddress() and generateAddress() with no entropy (#1211, #1209) -* Internal - * Improve unit tests -* Dependencies - * Update webpack-cli, @types/node, webpack, @typescript-eslint/eslint-plugin, - typescript, ripple-keypairs - -## 1.6.3 (2020-02-05) - -* Update ripple-keypairs to 1.0.0 -* Bug fix: Assign event listener to socket close event on open before attempting post-open logic (#1186) - * Protects against possible unhandled rejection in disconnect - * Adds the Connection `_ws.close` event listener post `_ws.open` before executing any post `_ws.open` logic, i.e. `Connection._subscribeToLedger` - * This prevents a reconnection error loop that occurs if `Connection._ws` is never cleaned up by the unreachable `_ws.close` event listener - * Also ensures that a possible disconnect() promise rejection is not unhandled if any `_ws.open` logic in `Connection.connect()` throws -* Dependencies - * Update mocha-junit-reporter, @types/node, mocha, @typescript-eslint/eslint-plugin, ripple-address-codec - -## 1.6.2 (2020-01-17) - -* Bug fix: Catch possible error in reconnect() on _heartbeat(), emit reconnect error (#1179) -* Docs: Fix whitespace -* Dependencies - * Update @typescript-eslint/eslint-plugin, ts-node, @types/node, @types/ws, typescript - -## 1.6.1 (2020-01-14) - -> **Update Note:** In this release we refactored the internal connection logic of ripple-lib to improve resiliency across dropped messages and reconnects. The external interface remains the same, with zero changes to public methods/properties. However, If you experience any problems around connections, requests, and request retries, please [file an issue]( https://github.com/ripple/ripple-lib/issues/new) with the repo (and be sure to test against v1.6.0 to confirm that the problem was introduced in this version). - -* Documentation - * Document message type 'path_find' (#1121) (thanks @r0bertz) - * Improve documentation for address generation; functions that can be called offline; generateXAddress() (#1158, #1159, #1169) (thanks @hbergren) - * Add [Security Policy](https://github.com/ripple/ripple-lib/blob/develop/SECURITY.md) -* Bug fixes - * Types: Fix AccountObjectsResponse structure (#1127) (thanks @you21979) - * In some cases, ripple-lib would fail to wait for the connection to be ready (#1119) -* Dependencies - * Update docs dependencies, ejs and doctoc (#1153) - * Update eslint, ripple-lib-transactionparser, typescript, nyc, ws, @types/node, ripple-binary-codec, mocha, mocha-junit-reporter -* Internal - * Add LedgerHistory to Connection (#1119): Moved ledger logic into its own Ledger class - -## 1.6.0 (2020-01-06) - -* Add support for AccountDelete (#1120) -* Improve error type given on rejected message _send to be DisconnectedError (#1098) -* Internal - * Add unit test for unhandled promise rejection warning on message _send (#1098) -* Dependencies - * Update @types/node, @typescript-eslint/parser - -## 1.5.1 (2019-12-28) - -* Fix support for CDNs (#1142) -* Internal - * Clean up connection trace logic (#1114) - * Clean up the connection config (#1115) - * Run prettier format (#1116) - * Update eslint command (#1118) -* Dependencies - * Update webpack-cli, webpack, ts-node, @types/lodash, @types/ws, @types/node, @typescript-eslint/parser, @typescript-eslint/eslint-plugin, https-proxy-agent, mocha, eventemitter2 - -## 1.5.0 (2019-12-14) - -* Add support for `WalletLocator` (#1083) -* Types: Move and de-dupe `TransactionJSON` type (#1096) - * This resolves an error surfaced by [TypeScript 3.7](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#local-and-imported-type-declarations-now-conflict) -* Add a heartbeat to detect hung connections (#1101) -* Dependencies - * Update TypeScript version (#1096) - * Update ripple-lib-transactionparser to 0.8.1 (#1097) - * Update ripple-binary-codec to 0.2.5 - * Update webpack (#1112) - * Require node 8 and yarn (#1107) -* Testing: Refactor and add unit tests - * Fix some errors caught by the improved tests - -## 1.4.2 (2019-11-14) - -* Add support for tick size (#1090) (thanks @RareData) -* Update email hash default to allow proper clearing (#1089) (thanks @RareData) -* Fix Unhandled Promise Rejection Warning on message `_send` - * Add an immediate catch to the `_send` promise passed to `_whenReady` in case there is rejection before async handlers are added (#1092) (thanks @nickewansmith) -* Docs improvements - * Add XRP Toolkit reference (#1088) -* Internal improvements - * Add a prettier config - * Update Node.js Testing Versions (#1085) - * Testing matrix based on: https://nodejs.org/en/about/releases/ - - Node 11 is no longer supported (not LTS) - - Node 12 added (active LTS) - - Node 13 added ("current" release) - -## 1.4.1 (2019-11-06) - -* Compatibility: Change TypeScript compile target back to `es6` (#1071) - * WARNING: This allows for the use of Node v6, which is no longer supported by Node.js, as it was end-of-life'd in April 2019 - * We recommend updating to Node v8/v10 ASAP in order to get security updates and fixes from the Node.js team - * We are not actively running tests against Node v6 (ref #1076) -* Docs: `getAccountObjects` doc fix -* Dependencies: - * Update `bignumber.js` - * Update `ripple-keypairs` - * Update `ws` -* Build process: Update `webpack` flow - -## 1.4.0 (2019-10-28) - -* Unref timer so it does not hang the Node.js process -* Add a 2-second timeout for connect() -* Improve getTransaction() error when tx has not been validated yet -* Add support for the new X-address format -* Fix error in Safari, Chrome 78, Firefox 70 -* Some error messages have changed slightly. For example: - * `-instance.Account is not of a type(s) string,instance.Account does not conform to the "address" format` - * `+instance.Account is not of a type(s) string,instance.Account is not exactly one from ,` - -### Internal improvements - -* Reduce dependency size -* Move tests to TypeScript -* Replace tslint with eslint -* Update https-proxy-agent -* Add tests - -## 1.3.4 (2019-10-18) - -* Update ripple-lib-transactionparser -* Improve error message when signing fails (e.g. due to trailing zeros) -* Integrate ripple-hashes (in TypeScript with improved naming and docs) -* Add multi-signing example to sign() method docs -* Update TypeScript - -## 1.3.3 (2019-09-10) - -* Expand node version compatibility to support Node.js 12 ([ripple-binary-codec#32](https://github.com/ripple/ripple-binary-codec/issues/32)) - -## 1.3.2 (2019-09-03) - -* Export and document `rippleTimeToISO8601()` method -* Add type for isValidAddress (fixes error TS7016, #1032) -* Docs: update recommended Node.js version (#1031) - -When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1) or later. - -## 1.3.1 (2019-08-26) - -* Upgrade to gulp 4 (#1030) -* Remove http server (unused) -* Update dependencies - -There are no changes in the browser version with this release. The npm package for Node.js should be slightly smaller. - -When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1). - -## 1.3.0 (2019-08-16) - -### Bug fixes: - -* Breaking change: Fix `getServerInfo` (#1012) - -Before: -``` -{ - // ... - "load": { - "jobTypes": { - "0": {"jobType": "untrustedValidation", "perSecond": 10}, - "1": {"jobType": "ledgerData", "peakTime": 2, "perSecond": 2}, - "2": {"inProgress": 1, "jobType": "clientCommand", "perSecond": 1}, - "3": {"jobType": "transaction", "perSecond": 1}, - // ... - }, - "threads": 6 - }, - // ... -} -``` - -After: -``` -{ - // ... - "load": { - "jobTypes": [ - { - "jobType": "untrustedValidation", - "perSecond": 8 - }, - { - "avgTime": 2, - "jobType": "ledgerData", - "peakTime": 72, - "perSecond": 2 - }, - { - "inProgress": 1, - "jobType": "clientCommand", - "perSecond": 1 - }, - { - "jobType": "transaction", - "perSecond": 1 - }, - // ... - ], - "threads": 6 - }, - // ... -} -``` - -* Sign method - verify accurate encoding (#1026) - * In previous versions, the following could be encoded incorrectly: - * Amounts of XRP with more than 6 decimal places - * Amounts of XRP drops with any decimal places - * In versions 1.2.5 and 1.3.0, amounts that are invalid in this way will throw an error -* Expand `APIOptions` by extending `ConnectionOptions` (#1018, fixes #1017) -* Fix docs for destination.address (#1011) - -### New features: - -* Support removing a signer list (#1021) -* Export `setCanonicalFlag` method from `src/transaction/utils` - -### Improvements: - -* Clean up phrasing in schema descriptions (#1023) -* Improve docs -* Update dependencies - -Since this release fixes a bug that could cause transactions to be serialized incorrectly during the signing process, it has also been simultaneously released as version 1.2.5 (patch release). - -When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1). - -## 1.2.4 (2019-06-06) - -* Update README.md -* Clarify docs -* Update dependencies -* Fix typos - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -4f09c056ccc51bc6cf17b128b559112e9c5adf19cc96ac8f9a06faee185697a7 ripple-1.2.4-debug.js -5da1c75a02d76b0b105d98355ee4561f5d5036e8d5d0237efd5960812dcaa1fd ripple-1.2.4-min.js -e147f303e880a65db149d2a5b9183b75814bd8145cd00740bcc4679d867192c8 ripple-1.2.4.js -``` - -## 1.2.3 (2019-04-30) - -* Fix browser builds - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -efb0f29cde94534a015d8a2171abb11b9a4345ba01418bf5b6ab6042a6d51dde ripple-1.2.3-debug.js -b86145c0e30099b966ed8d3830ba25988d72877f1f87044d9954d6707be098ac ripple-1.2.3-min.js -e027d91c7321d41ba94bb1bdc77dcff0107a5fd9eb833c6dbd06f1bbedef3900 ripple-1.2.3.js -``` - -## 1.2.2 (2019-04-15) - -* Prevent `prepareTransaction` from overwriting `Fee` and/or `LastLedgerSequence` (#997) -* Add `deliveredAmount` as optional field for type `Outcome` (#996) -* Fix build failure with TS strict checks (#993) - -Minor changes: - -* Use TypeScript project references -* Travis: Drop node 9 and add node 11 for testing -* Bump versions of devDependencies - -Note: There is no browser version of this release. - -## 1.2.1 (2019-03-23) - -* Update `ripple-binary-codec` to 0.2.1 to support `tecKILLED` - -The SHA-256 checksums for the browser version of this release can be found -below. - -``` -% shasum -a 256 * -531c2a8f4bf6d6b5bd4afe6a40b6a68a77179a343902cfa4210d7e35b5697af0 ripple-1.2.1-debug.js -201ee99922b16b7e32afb5317ef4bb9facc23b20c272bb5c4ed7010f5d996cab ripple-1.2.1-min.js -c1b984581299bf00e0e3c8ac4e62eadfc9b190bd78a2458a76e59ceb56046148 ripple-1.2.1.js -``` - -## 1.2.0 (2019-03-19) - -This release: - -* changes the way you handle errors for the `prepare*` methods. -* improves the `message` field of `RippledError`s. -* allows `Sequence` to be set in the transaction JSON provided to - `prepareTransaction`. - -For details, continue reading: - -### [BREAKING CHANGE] `prepare*` methods reject the Promise on error - -The `prepare*` methods now always reject the Promise when an error occurs, instead of throwing. - -Previously, the methods would synchronously throw on validation errors, despite being asynchronous methods that return Promises. - -In other words, to handle errors in the past, you would need to use a try/catch block: - -``` -// OBSOLETE - no need for try/catch anymore -try { - api.preparePayment(address, payment, instructions).then(prepared => { - res.send(prepared.txJSON); - }).catch(error => { - // Handle asynchronous error - }); -} catch (error) { - // Handle synchronous error -} -``` - -Now, you can rely on the Promise's `catch` handler, which is called with the error when the Promise is rejected: - -``` -api.preparePayment(address, payment, instructions).then(prepared => { - res.send(prepared.txJSON); -}).catch(error => { - // Handle error -}); -``` - -This applies to: -* preparePayment -* prepareTrustline -* prepareOrder -* prepareOrderCancellation -* prepareSettings -* prepareEscrowCreation -* prepareEscrowExecution -* prepareCheckCreate -* prepareCheckCash -* prepareCheckCancel -* preparePaymentChannelCreate -* preparePaymentChannelClaim -* preparePaymentChannelFund - -### Improved `RippledError` `message` - -Previously, `RippledErrors` (errors from rippled) used rippled's `error` field as the `message`. - -Now, the `error_message` field is used as the `message`. - -This helps to surface the specific cause of an error. - -For example, before: -``` -[RippledError(invalidParams, { error: 'invalidParams', - error_code: 31, - error_message: 'Missing field \'account\'.', - id: 3, - request: { command: 'account_info', id: 3 }, - status: 'error', - type: 'response' })] -``` - -After: -``` -[RippledError(Missing field 'account'., { error: 'invalidParams', - error_code: 31, - error_message: 'Missing field \'account\'.', - id: 3, - request: { command: 'account_info', id: 3 }, - status: 'error', - type: 'response' })] -``` - -In this case, you can see at a glance that `account` is the missing field. - -The `error` field is still available in `errorObject.data.error`. - -When `error_message` is not set (as with e.g. error 'entryNotFound'), the `error` field is used as the `message`. - -### [BUG FIX] `prepareTransaction` does not overwrite the `Sequence` field - -The `prepareTransaction` method now allows `Sequence` to be set in the Transaction JSON object, instead of overwriting it with the account's expected sequence based on the state of the ledger. - -Previously, you had to use the `sequence` field in the `instructions` object to manually set a transaction's sequence number. - -### New in rippled 1.2.1 - -As this is the first release of ripple-lib following the release of rippled 1.2.1, we would like to highlight the following API improvements: - -1. The [`delivered_amount` field](https://developers.ripple.com/partial-payments.html#the-delivered-amount-field) has been added to the `ledger` method, and to transaction subscriptions. - - api.getLedger({includeTransactions: true, includeAllData: true, ledgerVersion: 17718771}).then(...) - - You can also call `ledger` directly: - - request('ledger', {...}).then(...) - -2. [Support for Ed25519 seeds encoded using ripple-lib](https://github.com/ripple/rippled/pull/2734) - -You have access to these improvements when you use a rippled server running version 1.2.1 or later. At the time of writing, we recommend using rippled version **1.2.2** or later. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -13021fe3efbdd59faf68597b0b18204b39847b285cca82f84c737e3d19922cc2 ripple-1.2.0-debug.js -0070225e731afd8c2c0a0976111ebf326c19a96ee1549368de9f016abdd53d2f ripple-1.2.0-min.js -d440268397c03ad5137a3294e53a07b959ef93cd23b1990d6f82621c4776ba9f ripple-1.2.0.js -``` - -## 1.1.2 (2018-12-12) - -+ Update `submit` response (#978) - + Includes the full object returned by rippled, while keeping the existing - fields for backward compatibility -+ Add `getLedger` option for ledger hash (#980) - + Use the `ledgerHash` option to get a specific ledger by hash - -Thanks to @alexchiriac for the contributions in this release. - -When using `ripple-lib` with `rippled`, we recommend using `rippled` version -1.1.2 or later. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -e6cc52395d0c3e205263777ba2e528e50f4d1f84bb4b16763a3bf7f5fcc290f5 ripple-1.1.2-debug.js -82df879bc2970e0e4fd161975a99448b4859b0cde751d8ea34e9f51d672090b9 ripple-1.1.2-min.js -12f56330dc71bba8ac3004025cbc9698413a0c619df302dda105b31228a67319 ripple-1.1.2.js -``` - -## 1.1.1 (2018-11-27) - -+ Fix `getOrderbook` offer sorting (#970) - + **BREAKING CHANGE:** The ordering of offers returned by `getOrderbook` has - been changed so that offers with the best quality are sorted first -+ Add new helper methods for working with the `rippled` APIs: - + `formatBidsAndAsks`: Takes offers and returns a formatted order book object - with bids and asks - + `renameCounterpartyToIssuer`: Takes an object and renames the `counterparty` - field to `issuer` -+ TypeScript: Add return type for `generateAddress` (#968) - -When using `ripple-lib` with `rippled`, we recommend using `rippled` version 1.1.1 or -later. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -e151900e49bb5482b02bef5b0b1542ea586076363b072ae616f6d4d2f7f5b8a1 ripple-1.1.1-debug.js -6aee3757b29de285f361e20862261090033c07a13fd09f4a3cc4c097b6e84b55 ripple-1.1.1-min.js -bea4a889fb9ee4092324c6667490ea66469bdde869ddc1aaddf5e9d12b0cf091 ripple-1.1.1.js -``` - -## 1.1.0 (2018-10-31) - -+ Add support for Node.js v10 LTS (#964) -+ Add [DepositPreauth](https://developers.ripple.com/depositauth.html) ([#958](https://github.com/ripple/ripple-lib/pull/958)) -+ In `FormattedTransactionType`, the `Outcome`'s `balanceChanges` property had - the wrong type. This is now fixed (#955) -+ Add/fix docs for: xrpToDrops, dropsToXrp, iso8601ToRippleTime, schemaValidator, isValidAddress, isValidSecret, deriveKeypair, deriveAddress - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -e1d742092b3c0fcee97a875e18db4baeab3bbc82f08b96e883ee188c5f0cfb37 ripple-1.1.0-debug.js -f28921f57a133678dcb3cb54c497626bd76b1f953d22d61f3ddca31c8947d552 ripple-1.1.0-min.js -3696871a80c1102635699994adcaf00cdfdfcff5014fc2eba3d8f8d8437c8f91 ripple-1.1.0.js -``` - -## 1.0.2 (2018-10-16) - -+ Fix #954: Exclude SendMax from all XRP to XRP payments (thanks @jefftrudeau) -+ TypeScript - + book_offers returns offers type OfferLedgerEntry (#951) - + Use `object` (#936) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -2556fe17296e127ed44e7066e90a6175e2b164f00ca3c1aa7b1c554f31c688dd ripple-1.0.2-debug.js -e0342ea21eac32a1024c62034fba09c6f26dd3e7371b23ea1e153e03135cd590 ripple-1.0.2-min.js -c7286c517497d018d02d09257e81172b61d36c8b9885a077af68e8133c3b3b9b ripple-1.0.2.js -``` - -## 1.0.1 (2018-09-27) - -+ Add address/secret/key validation and derivation methods ([#932](https://github.com/ripple/ripple-lib/pull/932)) - + `isValidAddress(address: string) : boolean`: Checks if the specified string contains a valid address. - + `isValidSecret(secret: string): boolean`: Checks if the specified string contains a valid secret. - + `deriveKeypair(seed: string): {privateKey: string, publicKey: string}`: Derive a public and private key from a seed. - + `deriveAddress(publicKey: string): string`: Derive an XRP Ledger address from a public key. -+ To derive an address from a secret: - 1. Derive the public key from the secret. - 2. Derive the address from the public key. - + Example: `const address = api.deriveAddress(api.deriveKeypair(secret).publicKey)` -+ Update server regex to accommodate UDS (#944) -+ Include memos when parsing trustlines (#949) -+ Add remaining LedgerEntry types (#943) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -9b6408641ce83659afcd5765c256c35829a4fcb4c3244dc9ca6bf27c871a45c4 ripple-1.0.1-debug.js -7ab2b69fe59c2d4a74638116e2ba3b387155eb2d23e48a01bbf7beb72911f898 ripple-1.0.1-min.js -8bb4dcad9ce25a27003b1d73d71ddf41b8a5af02ece4ebbfeaff4aeb91f3b8c4 ripple-1.0.1.js -``` - -## 1.0.0 (2018-08-30) - -We are pleased to announce the release of `ripple-lib` version 1.0.0. - -This version features a range of changes and improvements that make the library -more capable and flexible. It includes new methods for accessing rippled APIs, -including subscriptions. - -When using this version with `rippled` for online functionality, we recommend -using `rippled` version 1.0.1 or later. - -Here is a summary of the changes since `ripple-lib` version 0.22.0, which was -the last non-beta version. - -### New Features - -+ [Add `request()`, `hasNextPage()`, and `requestNextPage()` for accessing `rippled` - APIs](https://github.com/ripple/ripple-lib/blob/09541dae86bc859bf5928ac65b2645dfaaf7f8b1/docs/index.md#rippled-apis). -+ Add `prepareTransaction()` for preparing raw `txJSON`. -+ XRP amounts can be specified in drops. Also, `xrpToDrops()` and `dropsToXrp()` - are available to make conversions. -+ `getTransaction` responses can include a new `channelChanges` property that - describes the details of a payment channel. - -### Data Validation and Errors - -+ [Amounts in drops and XRP are checked for - validity](https://github.com/ripple/ripple-lib/blob/develop/HISTORY.md#100-beta1-2018-05-24). -+ [A maximum fee is now - imposed](https://github.com/ripple/ripple-lib/blob/develop/HISTORY.md#100-beta2-2018-06-08). Exceeding it causes a `ValidationError` to be - thrown. -+ Errors are improved and more data validation was added. -+ Bug fix: `getPaths` now filters paths correctly and works correctly when the - destination currency is XRP. - -### Breaking Changes - -The following changes were introduced in 1.0.0. - -+ `getTransaction()` and `getTransactions()` - + The `specification.destination.amount` field has been removed from the parsed transaction response. - + To determine the amount that a transaction delivered, use `outcome.deliveredAmount`. - + If you require the provisional requested `Amount` from the original transaction: - + Use `getTransaction`'s `includeRawTransaction` option, or - + Use `getTransactions`'s `includeRawTransactions` option, or - + Use the rippled APIs directly with `request`. For example, call the API methods `tx`, `account_tx`, etc. -+ `getLedger()` response object - + The `rawTransactions` field has been removed (for consistency with `getTransaction()` and `getTransactions()`). - + Instead, within each `transaction`, use the new `rawTransaction` JSON string. - + The `metaData` field has been renamed to `meta` for consistency with rippled's `tx` method. - + `ledger_index` has been added to each raw transaction. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -06e5efcb6846ad45dedfd85cfa2ef4bdeb608b15ccbfb60b872c995d97342426 ripple-1.0.0-debug.js -cdb26b928a89ce228c727d1ff966df266eb46b2f76bd94f81cbeb0a9d75febf0 ripple-1.0.0-min.js -f74ee804e8a945a994e4e3901a0a3eb52292fbdcbff61ed30cefb8ffbcba50c3 ripple-1.0.0.js -``` - -## 1.0.0-beta.5 (2018-08-11) - -+ [Fix a TypeScript error by importing the `Prepare` type](https://github.com/ripple/ripple-lib/commit/7cd517268bda5fe74b91dad02fedf8b51b7eae9b) - -## 1.0.0-beta.4 (2018-08-10) - -+ [Add `prepareTransaction()`](https://github.com/ripple/ripple-lib/pull/898) -+ Internal improvements and cleanup - -## 1.0.0-beta.3 (2018-07-17) - -+ For payment channel transactions, `getTransaction` includes a new - `channelChanges` property that describes the details of the payment channel. - (#920) - -### Bug Fixes - -+ A bug caused calculated fees to use too many decimal places. This was fixed by - rounding fees to 6 decimal places. (#912) -+ When using the Settings transaction to set up a multi-signing list, the - threshold and weights fields are required. (#909) -+ Docs: Fix the MIMETYPE in examples with memos. (#914) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -460dbb521e24c44cb53dabc1a74feeca33d031b44d889dd5b51103ca92d51de6 ripple-1.0.0-beta.3-debug.js -cccfd24973c6b7990d9e933a589175dae26249825737fff4f2f73d8558a3f186 ripple-1.0.0-beta.3-min.js -0dc456a58fb078347d9920310621595905085595d73c2b8fe96bea73bcf35450 ripple-1.0.0-beta.3.js -``` - -## 1.0.0-beta.2 (2018-06-08) - -### Breaking Changes - -+ During transaction preparation, there is now a maximum fee. Also, when a transaction is signed, its fee is checked and an error is thrown if the fee exceeds the maximum. The default `maxFeeXRP` is `'2'` (2 XRP). Override this value in the RippleAPI constructor. -+ Attempting to prepare a transaction with an exact `fee` higher than `maxFeeXRP` causes a `ValidationError` to be thrown. -+ Attempting to sign a transaction with a fee higher than `maxFeeXRP` causes a `ValidationError` to be thrown. -+ The value returned by `getFee()` is capped at `maxFeeXRP`. - -### Other Changes - -+ In Transaction Instructions, the `maxFee` parameter is deprecated. Use the `maxFeeXRP` parameter in the RippleAPI constructor. - -#### Overview of new fee limit - -Most users of ripple-lib do not need to make any code changes to accommodate the new soft limit on fees. The limit is designed to protect against the most severe cases where an unintentionally high fee may be used. - -+ When having ripple-lib provide the fee with a `prepare*` method, a maximum fee of `maxFeeXRP` (default 2 XRP) applies. You can prepare more economical transactions by setting a lower `maxFeeXRP`, or support high-priority transactions by setting a higher `maxFeeXRP` in the RippleAPI constructor. -+ When using `sign` with a Fee higher than `maxFeeXRP`, a `ValidationError` is thrown. - -If you have any questions or concerns, please open an issue on GitHub. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -ef348a2805098e61395b689b410cbf4bfd35e4d72e38c89f4ab74ec5e19793f5 ripple-1.0.0-beta.2-debug.js -ea33fd53df8c7176d5fbf52dae0b64aade7180860f26449062cdbefaf8bd4d9b ripple-1.0.0-beta.2-min.js -fe5cc6e97c9b8a1470dacb34f16a64255cd639a25381abe9db1ba79e102456f2 ripple-1.0.0-beta.2.js -``` - -## 1.0.0-beta.1 (2018-05-24) - -### Breaking Changes - -+ Amounts in drops and XRP are checked for validity. Some - methods may now throw a `BigNumber Error` or `ValidationError` if the amount - is invalid. This may include methods that previously did not throw. -+ Note that 1 drop is equivalent to 0.000001 XRP and 1 XRP is equivalent to 1,000,000 drops. -+ Using drops is recommended. All rippled APIs require XRP amounts to be - expressed in drops. - -### Other Changes - -+ Allow specifying amounts in drops for consistency with the `rippled` - APIs. -+ Export `xrpToDrops()` and `dropsToXrp()` functions. -+ Potentially breaking change: Improve errors. For example, `RippledError` now includes the full response from - the `rippled` server ([#687](https://github.com/ripple/ripple-lib/issues/687)). `NotConnectedError` - may be thrown with a different message than before. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -a80ebb39e186640246306eadb2879147458c8271fd3c6cb32e6ef78d0b4b01a5 ripple-1.0.0-beta.1-debug.js -81bcc4b5fd6fd52220ed151242eaddd63eb29c4078845edc68f65b769557d126 ripple-1.0.0-beta.1-min.js -738b4d65b58cf4e3542fa396f8d319a24cd7d0b7aff5ff629a900e244f735ff4 ripple-1.0.0-beta.1.js -``` - -## 1.0.0-beta.0 (2018-05-10) - -+ [Add `request`, `hasNextPage`, and - `requestNextPage`](https://github.com/ripple/ripple-lib/pull/887). - + This provides support for all rippled APIs, including subscriptions. - -When using rippled APIs, you must: -+ For all XRP amounts, use drops (1 drop = 0.000001 XRP). -+ Instead of `counterparty`, use `issuer`. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -ab2094979a3d6b320c7bc22bc5946c50fa5e29af0976d352e7689b0a4d840c55 ripple-1.0.0-beta.0-debug.js -0e7f7d740606c2866ebf63776b13b41a555848e1a1419e2c8058d2e6c562d7fd ripple-1.0.0-beta.0-min.js -bd05e8806832ca4192aea7ba2d0362baa9f44605f8e8e6676acd25eb0b94b778 ripple-1.0.0-beta.0.js -``` - -## 0.22.0 (2018-05-10) - -+ [`getOrderbook` - return raw order data](https://github.com/ripple/ripple-lib/pull/886). The full `BookOffer` data is now provided under `data`. - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -33f71b55c4adec4452826e44fe7809377364df04222b60f0fce01e7de2daff33 ripple-0.22.0-debug.js -63232888a4ea77065e8e8eb8fdaa8ebfe3a785428fe935e2667c1ea54c837f29 ripple-0.22.0-min.js -ab98026fabe296bd938297c48cb58e01dfdbe90f3c66c9617d6a3e1efd4c6b93 ripple-0.22.0.js -``` - -## 0.21.0 (2018-04-11) - -+ [Upgrade https-proxy-agent](https://github.com/ripple/ripple-lib/pull/883) -+ [Add getAccountObjects](https://github.com/ripple/ripple-lib/pull/881) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -3ab52209ad4a80393c8c08ef3f4aa9cfb47bc76c0ede2ee9fa7f5ca180ba4d67 ripple-0.21.0-debug.js -3b1efccded347bed5f64757098a1ea6a513bb8932d922d00af47cd24e001dc14 ripple-0.21.0-min.js -db08e5a3eab1f659b4c803543374398004d950ba720adc4b9a7658817cb5c94b ripple-0.21.0.js -``` - -## 0.20.0 (2018-04-09) - -+ [Add support for using a keypair with sign()](https://github.com/ripple/ripple-lib/pull/769) -+ [Fix a bug caused by jsonschema v1.2.3 by pinning to v1.2.2](https://github.com/ripple/ripple-lib/pull/882) -+ [Improve Payment Channel documentation](https://github.com/ripple/ripple-lib/pull/877) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -389811a9baa72f77e2a43d0b48045762d29a6f616ed5fd2660ba76fc12a3ecc5 ripple-0.20.0-debug.js -c1746ea0dd55318cb4e1ef3955ef14759d9d70861437c69abafc10169916f068 ripple-0.20.0-min.js -17958b0e46395d2b2a35a003693c0babdfb5382513d3cc58a62f8648ad710b0e ripple-0.20.0.js -``` - -## 0.19.1 (2018-03-22) - -+ [Fix: Include TypeScript declarations in npm package](https://github.com/ripple/ripple-lib/pull/863) -+ [Fix: Documentation link to checkCash](https://github.com/ripple/ripple-lib/pull/871) -+ [Internal: Clean up types and migrate more APIs to new request method](https://github.com/ripple/ripple-lib/pull/857) -+ [Internal: Fix Payment source and destination types](https://github.com/ripple/ripple-lib/pull/870) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -3ed5332aa035c07bae6c1abfdfc8ca77cdbb05cc4b88878f544f1ea4cb793f4d ripple-0.19.1-debug.js -2f5507aa00a40ab6a94de1822af87db5e927edef3885aef5d9b39ccb623ccb54 ripple-0.19.1-min.js -1e439aee1b220242d56ea687a9b55a67b8614212c1ddbd70a4fcf34503fc487a ripple-0.19.1.js -``` - -## 0.19.0 (2018-03-02) - -+ [Add support for Checks](https://github.com/ripple/ripple-lib/pull/853) - + **CheckCreate** adds a check entry to the ledger. The check is a promise from the source of the check that the destination of the check may cash the check and receive up to the SendMax specified on the check. The check may have an (optional) expiration, after which the check may no longer be cashed. - + **CheckCancel** removes the check from the ledger without transferring funds. Either the check's source or destination can cancel the check at any time. After a check has expired, any account can cancel the check. - + **CheckCash** is a request by the destination of the check to transfer a requested amount of funds, up to the check's SendMax, from the source to the destination. The destination may receive less than the SendMax due to transfer fees. -+ [Add support for the Deposit Authorization account root flag](https://github.com/ripple/ripple-lib/pull/852) -+ [Generate .ts.d TypeScript declaration files](https://github.com/ripple/ripple-lib/pull/851) -+ [Improve documentation of getTransactions params](https://github.com/ripple/ripple-lib/pull/856) -+ [Add new request interface](https://github.com/ripple/ripple-lib/pull/843) (private for now) - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -0e7ce4594b7e455fbc57ad81f6fddc391d1e1f349a49c96ad783be50f80fdc14 ripple-0.19.0-debug.js -6d716a0357929e51e476f22136880f7a0e5458fd396ac145ce9308f278ff7cc1 ripple-0.19.0-min.js -6715db1af638f99226ab7f8f244103306aa6e04d1b8c1da47a63431053bacb84 ripple-0.19.0.js -``` - -## 0.18.2 (2018-02-13) - -+ [Fix: Publish updated browser builds to npm so that users can easily use - CDNs](https://github.com/ripple/ripple-lib/pull/849) -+ [Fix: Browserify fails due to dependency on `ws`](https://github.com/ripple/ripple-lib/pull/847) -+ [Fix: `build` script fails when `node_modules` is in path](https://github.com/ripple/ripple-lib/pull/846) -+ [Reduce size of published npm package](https://github.com/ripple/ripple-lib/commit/0c318816ccf25c4c3932934a35ef903cc552edc1) -+ Clean up files from Flow (we migrated to TypeScript) -+ Typos and code cleanup - -The SHA-256 checksums for the browser version of this release can be found -below. -``` -% shasum -a 256 * -f08ab61137255be3639e9d210ded2a182b6e0388f257a70d9b372ce7e7e518a6 ripple-0.18.2-debug.js -0604835b8421391167b4314ce93a76b5994780a08bd7edf36d91eb5e8f2643a2 ripple-0.18.2-min.js -fda56ab5c8256e04355e20064877ef4053f26c87f37cfcf861340f22bf89ee40 ripple-0.18.2.js -``` - -## 0.18.1 (2018-01-27) - -Note: The package published to npm for this version did not include updated -browser builds. If you are using a CDN that pulls from npm, please use 0.18.2 or -later. - -+ [Fix: isSameIssue() should check counterparty](https://github.com/ripple/ripple-lib/pull/836). This bug caused `getOrderbook()` to return incorrect values. - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 * -6871855a2af1dc591ef557d442c11e8c60e01c5932054e13e8cbb84a182f45e0 ripple-0.18.1-debug.js -331f0baff46af44933a8fa31f128132945ff82a147acfff0a7315adb446e3de0 ripple-0.18.1-min.js -26324bb0725d2d484fe3b6086335d49734f45dc647b07c60746e0d8619f1ed3e ripple-0.18.1.js -``` - -## 0.18.0 (2018-01-25) - -+ [Convert from Flow to TypeScript](https://github.com/ripple/ripple-lib/pull/816) -+ [Use ES Module syntax](https://github.com/ripple/ripple-lib/pull/815) (Babel still compiles these to common.js modules for - distribution) -+ Docs: [Improve escrow creation example/test](https://github.com/ripple/ripple-lib/pull/820) -+ [Fix type errors](https://github.com/ripple/ripple-lib/pull/811) -+ [Fix lint errors](https://github.com/ripple/ripple-lib/pull/813) - -## 0.17.9 (2017-11-14) - -+ [Update ws dependency to 3.3.1](https://github.com/ripple/ripple-lib/pull/804) -+ [Remove unnecessary polyfills](https://github.com/ripple/ripple-lib/pull/807) -+ Fix lint errors ([#786](https://github.com/ripple/ripple-lib/pull/786), [#808](https://github.com/ripple/ripple-lib/pull/808)) -+ [Update ripple-keypairs dependency to 0.10.1](https://github.com/ripple/ripple-lib/pull/805) - -The SHA-256 checksums for the browser version of this release can be found below. -``` -% shasum -a 256 * -b52f251eedac2509d72093eab1e8dba0d0f4a9fe6a28ec1cc90853cfb0fd7110 ripple-0.17.9-debug.js -d577a2bbdbdf7535c5365a1c52a2a31989d1b966e30abcba65c87133a536b9dc ripple-0.17.9-min.js -ff4c3002842fac72ec2ebbd081e9594b0de6050d4d051a8fd6c06adb9a351488 ripple-0.17.9.js -``` - -The SHA-1 checksums for the browser version of this release can be found below. -``` -% shasum * -e1995afc34aef6accd269cfccc55a45619618a41 ripple-0.17.9-debug.js -e6ad9a9c111ab696f5637bfa372d80999e5ae362 ripple-0.17.9-min.js -4866494ec5f9095cc34bea142f1e2b8ac5f7fbf8 ripple-0.17.9.js -``` - -## 0.17.8 (2017-11-06) - -+ Fix: Freezing in Safari 10.1 (updated bignumber.js) (closes #762) -+ [Fix: `getSettings` should include signers](https://github.com/ripple/ripple-lib/commit/2a90f9b134e168937dceb7da283d63734eac9e7c) -+ Update for Node 6 -+ Update lodash dependency -+ Migrate to yarn - -## 0.17.7 (2017-05-08) - -+ Replace AJV with jsonschema - -## 0.16.5 (2016-01-21) - -+ [Filter insufficient source funds paths from pathfind results](https://github.com/ripple/ripple-lib/pull/688) - -## 0.16.4 - -+ [Update `ws` to 1.0.1](https://github.com/ripple/ripple-lib/pull/682) - -## 0.16.2 - -+ Bump `ripple-binary-codec` dependency version to 0.1.1 to fix issue with `computeLedgerHash` for transactions with `DeliverMin` - -## 0.16.1 - -+ [FIX: Use assert not assert-diff](https://github.com/ripple/ripple-lib/commit/f6ebe325193e7208c5ee8d8e84a7504714f0009e) - -## 0.16.0 - -__BREAKING CHANGES__ -+ [Fix types of XRP values in `getServerInfo` response](https://github.com/ripple/ripple-lib/commit/99d08065e4bda3dda6ae1f183adbd11abc70a9b7) -+ [Change error event format and fix crash due to error event on websocket](https://github.com/ripple/ripple-lib/commit/9cd72595f0efc062d77b9d625695d6030c524cc6) - -__OTHER CHANGES__ -+ [Fix `generateAddress` docs and add error event listener to boilerplate](https://github.com/ripple/ripple-lib/commit/809d981987a2890fac3a73a40a05c598b9040334) -+ [Allow setting `maxLedgerVersion` to `null` to specify no maximum](https://github.com/ripple/ripple-lib/commit/82613e7e8b360d1ae1552eab4559ab4763c06d7e) -+ [Add support for client certificates](https://github.com/ripple/ripple-lib/commit/5f5e48e4140345d166b8c1a3ee0847b0d9e2d893) -+ [`getFee` returns a string not a float](https://github.com/ripple/ripple-lib/commit/7bf2da6014c87e164542e69356efeaabb575a157) -+ [Fix parsing of quality for `getTrustlines`](https://github.com/ripple/ripple-lib/commit/86ff315ef2a39dfdc2ce97e0e1c4aa73f04e363b) -+ Fix `DeliverMin` value when specifying `minAmount` -+ [http server example](https://github.com/ripple/ripple-lib/commit/76866ab901ea46a2dd73181605e0f7f4220043d4) - -## 0.15.2 - -+ [Fix support for proxy credentials in proxy URL and fix error when there are more than 10 outstanding requests](https://github.com/ripple/ripple-lib/commit/0990ad4a6f1d59ca9d2cb859b4e2d71693f3fc4b) - -## 0.15.1 - -+ [Fix `babel-polyfill` require](https://github.com/ripple/ripple-lib/commit/062148674c3b1293ab82c28e25615ddd530339fa) -+ [Fix samples](https://github.com/ripple/ripple-lib/commit/5d5cf868a2ddb1b1cd40e4a4f0a782d0066c2055) -+ [Add unit tests for `RippleAPIBroadcast`](https://github.com/ripple/ripple-lib/commit/ddf8fe5b1a9c750490dca98fb9ffaaf8017f87e0) - -## 0.15.0 - -__BREAKING CHANGES__ -+ ["servers" parameter changed to single "server"](https://github.com/ripple/ripple-lib/commit/7061e9afe46f0682254d098adeff3dd7157521a1) - -__OTHER CHANGES__ -+ [Fix handling memos in `prepareSettings`](https://github.com/ripple/ripple-lib/commit/c9704137b7b538e8dbf31c483bcdcf2dcfd7cd75) -+ [Docs: SusPay warnings, offline mode, and other tweaks](https://github.com/ripple/ripple-lib/commit/4b4fc36ebd93f1360781a65f2869bd2c4f0a5093) -+ [Fix prepareOrderCancellation documentation](https://github.com/ripple/ripple-lib/commit/5e720891f579fd73d43c64e5ec519d9121023c10) - -## 0.14.0 - -__BREAKING CHANGES__ -+ [`prepareOrderCancellation` now takes orderCancellation specification](https://github.com/ripple/ripple-lib/commit/7f33d8a71e56289e5a5e0ead1c74f75ebcde72bc) -+ [Rename "ledgerClosed" event to "ledger" and change format](https://github.com/ripple/ripple-lib/commit/8a3d4a64db5fbf560ebf87dc62e0212513c5e18a) - -__OTHER CHANGES__ -+ [Fix proxy support and add support for proxy authorization](https://github.com/ripple/ripple-lib/commit/14b840f3feca758e0384b746c94e36d8bf59b8c2) -+ [Fix trace option](https://github.com/ripple/ripple-lib/commit/af620755c53556c55eed12de4b0013ef5a349ce2) -+ [Allow memos on all transaction types](https://github.com/ripple/ripple-lib/commit/b5081344da8e66fbd3a5113cc3313325ef72a494) -+ [Add documentation for RippleAPI options](https://github.com/ripple/ripple-lib/commit/a76b554cadb9f9f918b06f8386bc29355682a1a4) -+ [Docs: more on basic types, tx types](https://github.com/ripple/ripple-lib/commit/fdbac63f466b4fd3be701d4878800d856692e26e) -+ [Docs: revised introductory material](https://github.com/ripple/ripple-lib/commit/ef2515507dbd3c6a426ab5b31332a1bdf72d5b2d) -+ [boost coverage to almost 100%](https://github.com/ripple/ripple-lib/commit/995606b1e6f3643af34d9fd442ccd31f320b03eb) - -## 0.13.2 - -+ [Fix: Specify send_max when pathfinding with a source amount](https://github.com/ripple/ripple-lib/commit/75142139184625c8b9fcc480b1825d9985337813) - -## 0.13.1 - -+ [Add documentation for API events](https://github.com/ripple/ripple-lib/commit/25d1ac0c5f95cad32ea4ceebb) -+ [Fix: Add babel-polyfill](https://github.com/ripple/ripple-lib/commit/8a53abc32f6ec6c7d50cd182492d6fb511b86704) -+ [Fix: Bump version on ripple-hashes](https://github.com/ripple/ripple-lib/commit/12e5765c64aea31b3c2fb65ff989cf01e6368f58) - -## 0.13.0 - -__BREAKING CHANGES__ -+ Add new RippleAPI interface and delete old API - - [RippleAPI README and samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples) - -__OTHER CHANGES__ -+ [Removed timeout method of Request and added default timeout](https://github.com/ripple/ripple-lib/commit/634fe5683a9082e57682ff7d5c4fb9483b4af818) -+ [Add Remote.closeCurrentPathFind function, so current pathfind can be properly closed](https://github.com/ripple/ripple-lib/commit/e99010f363fc7cbe7fd547d3ca5b32ea083c44e6) -+ [Implement Balance Sheet API](https://github.com/ripple/ripple-lib/pull/579) -+ [Fix bugs in orderbook subscription](https://github.com/ripple/ripple-lib/commit/7404795dc64a85216148de7bc3ca7da7b33f4490) -+ [Fix crash due to rippled slowDown error](https://github.com/ripple/ripple-lib/commit/84838b2e9f6969b593b8462a62a6b8f516ada937) -+ [Fix: Emit error events and return error on pathfind](https://github.com/ripple/ripple-lib/commit/1ccbaf677631a1944eb05d90f7afc5f3690a03dd) -+ [Deprecate core and remove snake case method copying](https://github.com/ripple/ripple-lib/commit/fb8dc44ec1d49bb05cd0cdbe6dd4ab211195868a) -+ [Fix RangeSet for validated_ledger as single ledger](https://github.com/ripple/ripple-lib/commit/9f9e76f8b933201651af59307135f67cfa7d60e8) -+ [Fix bug where the paths would be set with an empty array](https://github.com/ripple/ripple-lib/commit/83874ec0962da311b76f2385623e51c68bc39035) -+ [Fix reserve calculation](https://github.com/ripple/ripple-lib/commit/52879febb92d876f01f2e4d70871baa07af631fb) - -## 0.12.9 - -+ [OrderBook performance optimizations](https://github.com/ripple/ripple-lib/commit/3e17d91edf36745f6b6c09b0ad88971b7775f6ab) - -## 0.12.7 and 0.12.8 - -+ [Improve performance of orderbook](https://github.com/ripple/ripple-lib/commit/c745faaaf0956ca98448a754b4fe97fb50574fc7) -+ [Remove Firefox warning about prototype overwrite](https://github.com/ripple/ripple-lib/commit/0c62fa21123b220b066871e1c41a3b4fe6f51885) -+ [Fix compare bug in `Amount` class](https://github.com/ripple/ripple-lib/commit/806547dd154e1b0bf252e8a74ad3ac6aa8a97660) - -## 0.12.6 - -+ [Fix webpack require failure due to "./" notation](https://github.com/ripple/ripple-lib/commit/8d9746d7b10be203ee613df523c2522012ff1baf) - -## 0.12.15 - -+ [Add offer autobridging](https://github.com/ripple/ripple-lib/commit/c7bbce83719c1e8c6a4fae5ca850e7515db1a4a5) -+ [Prevent crash when listening for "model" events on the OrderBook class](https://github.com/ripple/ripple-lib/commit/5824c3cb7cb6bd834d6e037f69943aebf3d83351) -+ [Fix empty order edgecase](https://github.com/ripple/ripple-lib/commit/64809d9ae23dc24f47accd4b4788b48f49880d3e) -+ [Fix AutobridgeCalculator (RT-3445)](https://github.com/ripple/ripple-lib/commit/1fff5ea6dcbcee856536df26f3b9cf1aec3c3b55) -+ [Update sjcl and delete custom ripemd160, montgomery, and jacobi](https://github.com/ripple/ripple-lib/commit/50cda426eb83599c38c0b725e1524a01fc415da2) -+ [Fix transaction summary for transactions that fail with remoteError](https://github.com/ripple/ripple-lib/commit/5e714f6143464d7912f42537acaa553b88eaf6dc) -+ [Fix serializedobject append for excessively large bytes length](https://github.com/ripple/ripple-lib/commit/e93f1ab6f4aaad347450aee75a169af0faa2121c) -+ [Switch to sjcl npm module](https://github.com/ripple/ripple-lib/commit/9a502580fd89ec6a9aa55f4e5847f6a4a2cb5bba) -+ [Add babel transpiler](https://github.com/ripple/ripple-lib/commit/398f8d001f758bf575b959537a17e79e4042d17b) -+ [Remove unused float.js and wallet.js](https://github.com/ripple/ripple-lib/commit/d4a4b5f4fbbf09677a59ce81bace35c6426a2fda) -+ [Remove config singleton to reduce global state](https://github.com/ripple/ripple-lib/commit/c655c2a20ee5d150a4b5a1b6717b9fb81f636025) - -## 0.12.4 - -+ [Improve entropy security](https://github.com/ripple/ripple-lib/commit/c7ba822320880037796f57876d1abb4e525648ed) -+ [Remove unused crypt.js file](https://github.com/ripple/ripple-lib/commit/1f68eba1461bca03a4d22872450d15ae5a185334) - -## 0.12.3 - -+ [Add getLedgerSequence to Remote](https://github.com/ripple/ripple-lib/commit/d09548d04d3238fca653d482ec1d5faa7254559a) -+ [Improve randomness when generating ECDSA signatures](https://github.com/ripple/ripple-lib/commit/fe7e30b737ead6e71adfa466f5835ba546feab31) -+ [Improve SerializedObject.append performance](https://github.com/ripple/ripple-lib/commit/f7c35b118ebba549a64bcaa1a0629385ec6dbf6f) -+ [Add `Amount.scale`. Multiply an amount’s value by a scale factor](https://github.com/ripple/ripple-lib/commit/74dac97b368493056474468520f05671f458a69f) - -## 0.12.2 - -+ [Check that stack trace is available, fixes logging in browser](https://github.com/ripple/ripple-lib/commit/53cae3a66d48e88e8a6bbb96d6489ce7b9e22975) - -## 0.12.1 - -__BREAKING CHANGES__ -+ [Removed support for parsing native amounts in floating point format](https://github.com/ripple/ripple-lib/commit/e80cd1ff55deae9cd5b0ae85be957f86856b887e) - -__OTHER CHANGES__ -+ [Fix taker pays funded calculation](https://github.com/ripple/ripple-lib/commit/5af824f5cf46c7b9caa58ee0a757bf854d26c8dc) -+ [Fix order funded amount calculation](https://github.com/ripple/ripple-lib/commit/b2cdb1a6aed968b1f306e8dadbd4b7ca37e5aa03) -+ [Fix handling of quality in order book](https://github.com/ripple/ripple-lib/commit/2a5a8b498da60df738ba18d5c265f34771e8a1af) -+ [Fix currency parsing of non-alphanumeric and no-currency currencies](https://github.com/ripple/ripple-lib/commit/2166bb2e88eae8d5f1aba77338f69e8a9edf6a6f) -+ [Add Amount.strict_mode for toggling range validation](https://github.com/ripple/ripple-lib/commit/b5ed8f59a7dab1a17491618b8d9193646c314fb4) -+ [Add filename and line number to log, use log.warn() for deprecations](https://github.com/ripple/ripple-lib/commit/90329d3d73f1a76675063655b407513e32dc048b) -+ [Add GlobalFreeze and NoFreeze flags](https://github.com/ripple/ripple-lib/commit/e2ed2bdbf6f01c7d4d690c2cf0b83fba94558dd7) -+ [Fix handling of falsy parameters in requestLedger](https://github.com/ripple/ripple-lib/commit/6023efed41b7812b3bab660a1c0dc9f0a21000b9) -+ [Fix Base:decode](https://github.com/ripple/ripple-lib/commit/719f39c01c6941d9a650aa94f95617793dd53ea0) -+ [Fix Amount: clone in ratio_human, product_human](https://github.com/ripple/ripple-lib/commit/19e17a8431550cf156b1ad669a19dedfe4e28e4a) -+ [Fix Amount.to_human for very small numbers](https://github.com/ripple/ripple-lib/commit/6abfa759aa09d68074ac558d96c4b126a7cd1719) -+ [Refactor base conversion](https://github.com/ripple/ripple-lib/commit/f2b63fa4a80663eb29472bc6bb1aea8159f1f205) -+ [Update binary transaction format](https://github.com/ripple/ripple-lib/commit/8e134918fb4c22983320a3102f955e4568bb1dfb) -+ [Add DefaultRipple account flag](https://github.com/ripple/ripple-lib/commit/3e249902c4cf25b4da5e75048c84ae391be83b10) -+ [Remove `Features` field requirement in `SetFee` transaction format](https://github.com/ripple/ripple-lib/commit/a20a649013646710c078d4ce1e210f87c7fe74fe) -+ [Remove `RegularKey` field requirement in `SetRegularKey` transaction format](https://github.com/ripple/ripple-lib/commit/c275174f27877ba8f389eb4efe969feb514d6e46) - -## 0.12.0 - -__BREAKING CHANGES__ -+ REMOVED Remote storage interface -+ REMOVED Remote `ping` configuration -+ REMOVED Old/deprecated Remote server configuration (websocket_ip, websocket_port) -+ REMOVED browser `online` reconnect listener - - [Cleanup, deprecations - 2833a7b6](https://github.com/ripple/ripple-lib/commit/2833a7b66e696dab427464625077f9b93092d0d5) -+ Remove `jsbn` and use `bignumber.js` instead for big number math -+ The `allow_nan` flag has been removed. Results for invalid amounts will always be `NaN` - - [Refactor to use bignumber.js - d025b4a0](https://github.com/ripple/ripple-lib/commit/d025b4a0c3a98a6de27a1bee9573c85347bcd66b) - - [Handle invalid input in parse_human - c8f18c8c](https://github.com/ripple/ripple-lib/commit/c8f18c8c8590b7b48e370e0325b6677b7720294f) - - [Check for null in isNumber - b86790c8](https://github.com/ripple/ripple-lib/commit/b86790c8543c239a532fd7697d4652829019d385) - - [Cleanup amount.js - d0fb291c](https://github.com/ripple/ripple-lib/commit/d0fb291c4e330193a244902156f1d74730da357d) - -__OTHER CHANGES__ -+ [Add deprecation warnings to request constructors. The first argument to request constructor functions should be an object containing request properties](https://github.com/ripple/ripple-lib/commit/35d76b3520934285f80059c1badd6c522539104c) -+ [Fix taker_gets_funded exceeding offer.TakerGets](https://github.com/ripple/ripple-lib/commit/b19ecb4482b589d575382b7a5d0480b963383bb1) -+ [Fix unsymmetric memo serializing](https://github.com/ripple/ripple-lib/commit/1ed36fabdbd54f4d31078c2b0eaa3becc0fe2821) -+ [Fix IOU value passed to `Amount.from_json()`](https://github.com/ripple/ripple-lib/commit/fd1b64393dffb3d1819cd40b8d43df43a4db042d) -+ [Update transaction binary parsing to account for XRP delivered amounts](https://github.com/ripple/ripple-lib/commit/35a346a674e6ee1e1e495db93700d55984efc7dd) -+ [Bumped dependencies](https://github.com/ripple/ripple-lib/commit/f9bc7cc746b44b24b61bbe260ae2e9d9617286da) - -## 0.11.0 - -+ [Track the funded status of an order based on cumulative account orders](https://github.com/ripple/ripple-lib/commit/67d39737a4d5e0fcd9d9b47b9083ee00e5a9e652) and [67d3973](https://github.com/ripple/ripple-lib/commit/b6b99dde022e1e14c4797e454b1d7fca50e49482) -+ Remove blobvault client from ripple-lib, use the [`ripple-vault-client`](https://github.com/ripple/ripple-vault-client) instead [9b3d62b7](https://github.com/ripple/ripple-lib/commit/9b3d62b765c4c25beae6eb0fa57ef3a07f2581b1) -+ [Add support for `ledger` option in requestBookOffers](https://github.com/ripple/ripple-lib/commit/34c0677c453c409ef0a5b351959abdc176d3bacb) -+ [Add support for `limit` option in requestBookOffers](https://github.com/ripple/ripple-lib/commit/d1d4452217c878d0b377d24830b4cd8b3162f6e0) -+ [Add `ledgerSelect` request constructor in `Remote`](https://github.com/ripple/ripple-lib/commit/98f40abfc3aa74dec5067a2d90002756cc8acd01) -+ [Default to binary data for commands that accept the binary flag](https://github.com/ripple/ripple-lib/commit/7cb113fcbcfc1e3e9830a999148b3e78df3387cc) -+ [Fix metadata account check](https://github.com/ripple/ripple-lib/commit/3f61598d6c87e3cc877af60e2d515f9eff73dfe1) -+ [Double check `tes` code before emitting `success`](https://github.com/ripple/ripple-lib/commit/97a8c874903eb7309d8f755955ac80872f670582) -+ [Decrease redundancy in binary account_tx parsing](https://github.com/ripple/ripple-lib/commit/0aba638e6e7f4f6e22cb6424eed3897ebad90a5a) -+ [Abort server connection on unrecoverable TLS error](https://github.com/ripple/ripple-lib/commit/000a2ea00c57157044aeca0fb3f24b37669b163c) -+ [Fix complete ledgers check on subscription that is not initial](https://github.com/ripple/ripple-lib/commit/89de91301e682a46dc60aaacc7ae152e8fe1b7c7) - -## 0.10.0 - -+ [Transaction changes](https://github.com/ripple/ripple-lib/pull/221) -+ **Important** `tef*` and `tel*` and errors will no longer be presented as -final. Rather than considering these errors final, ripple-lib will wait until -the `LastLedgerSequence` specified in the transaction is exceeded. This makes -failures more definitive, and ensures that no transaction will resubmit -indefinitely. -+ A new, final tej-class error is introduced to account for transactions that -are locally determined to have expired: `tejMaxLedger`. -+ [Allow per transaction fees to be set, `transaction.setFixedFee()`](https://github.com/ripple/ripple-lib/commit/9b22f279bcbe60ee6bcf4b7fa60a48e9c197a828) -+ [Improve memo support](https://github.com/ripple/ripple-lib/commit/1704ac4ae144c0ce54afad86f644c75a632080b1) - - Add `MemoFormat` property for memo - - Enforce `MemoFormat` and `MemoType` to be valid ASCII - - Support `text` and `json` MemoFormat -+ [Update sjcl library](https://github.com/ripple/ripple-lib/commit/3204998fcb6f31d6c90532a737a4adb8a1e420f6) - - Improved entropy by taking advantage of platform crypto - - Use jscl's k256 curve instead of altering the c256 curve with k256 configuration - - **Deprecated:** The c256 curve is linked to the k256 curve to provide backwards compatibility, this link will be removed in the future -+ [Fix empty queue check on reconnect](https://github.com/ripple/ripple-lib/commit/3c21994adcf72d1fbd87d453ceb917f9ad6df4ec) - -## 0.9.4 - -+ [Normalize offers from book_offers and transaction stream](https://github.com/ripple/ripple-lib/commit/86ed24b94cf7c8929c87db3a63e9bbea7f767e9c) -+ [Fix: Amount.to_human() precision rounding](https://github.com/ripple/ripple-lib/commit/e371cc2c3ceccb3c1cfdf18b98d80093147dd8b2) -+ [Fix: fractional drops in funded taker_pays setter](https://github.com/ripple/ripple-lib/commit/0d7fc0a573a144caac15dd13798b23eeb1f95fb4) - -## 0.9.3 - -+ [Change `presubmit` to emit immediately before transaction submit](https://github.com/ripple/ripple-lib/commit/7a1feaa89701bf861ab31ebd8ffdc8d8d1474e29) -+ [Add a "core" browser build of ripple-lib which has a subset of features and smaller file size](https://github.com/ripple/ripple-lib/pull/205) -+ [Update binformat with missing fields from rippled](https://github.com/ripple/ripple-lib/commit/cae980788efb00191bfd0988ed836d60cdf7a9a2) -+ [Wait for transaction validation before returning `tec` error](https://github.com/ripple/ripple-lib/commit/6bdd4b2670906588852fc4dda457607b4aac08e4) -+ [Change default `max_fee` on `Remote` to `1 XRP`](https://github.com/ripple/ripple-lib/commit/d6b1728c23ff85c3cc791bed6982a750641fd95f) -+ [Fix: Request ledger_accept should return the Remote](https://github.com/ripple/ripple-lib/pull/209) - -## 0.9.2 - -__BREAKING CHANGES__ -+ [Change accountRequest method signature](https://github.com/ripple/ripple-lib/commit/6f5d1104aa3eb440c518ec4f39e264fdce15fa15) - -__OTHER CHANGES__ -+ [Add paging behavior for account requests, `account_lines` and `account_offers`](https://github.com/ripple/ripple-lib/commit/722f4e175dbbf378e51b49142d0285f87acb22d7) -+ [Add max_fee setter to transactions to set max fee the submitter is willing to pay](https://github.com/ripple/ripple-lib/commit/24587fab9c8ad3840d7aa345a7037b48839e09d7) -+ [Fix: cap IOU Amounts to their max and min value](https://github.com/ripple/ripple-lib/commit/f05941fbc46fdb7c6fe7ad72927af02d527ffeed) - -Example on how to use paging with `account_offers`: -```js -// A valid `ledger_index` or `ledger_hash` is required to provide a reliable result. -// Results can change between ledger closes, so the provided ledger will be used as base. -var options = { - account: < rippleAccount >, - limit: < Number between 10 and 400 >, - ledger: < valid ledger_index or ledger_hash > -} - -// The `marker` comes back in an account request if there are more results than are returned -// in the current response. The amount of results per response are determined by the `limit`. -if (marker) { - options.marker = < marker >; -} - -var request = remote.requestAccountOffers(options); -``` - -[Full working example](https://github.com/geertweening/ripple-lib-scripts/blob/master/account_offers_paging.js) - -## 0.9.1 - -+ Switch account requests to use ledgerSelect rather than ledgerChoose ([278df90](https://github.com/ripple/ripple-lib/commit/278df9025a20228de22379a53c76ca12d40fa591)) -+ **Deprecated** setting `ident` and `account_index` on account requests ([278df90](https://github.com/ripple/ripple-lib/commit/278df9025a20228de22379a53c76ca12d40fa591)) -+ Change initial account transaction sequence to 1 ([a3c1d06](https://github.com/ripple/ripple-lib/commit/a3c1d06eba883dc84fe2bfe700e4309795c84cac)) -+ Fix: instance transaction without remote ([d3b6b81](https://github.com/ripple/ripple-lib/commit/d3b6b8127c7b01e416b400c25abf1719bdd008ca)) -+ Fix: account root request ledger argument ([bc1f9f8](https://github.com/ripple/ripple-lib/commit/bc1f9f8a286b187d36ebaf552694e31e73742293)) -+ Fix: rsign.js local signing and example ([d3b6b81](https://github.com/ripple/ripple-lib/commit/d3b6b8127c7b01e416b400c25abf1719bdd008ca) and [f1004c6](https://github.com/ripple/ripple-lib/commit/f1004c6db2a0ce59bbabbb8f2b355a9fd9995fd8)) - -## 0.9.0 - -__BREAKING CHANGES__ -+ Make maxLoops in seed.get_key optional. [Example use in tests](https://github.com/ripple/ripple-lib/blob/23e473b6886c457781949c825b3ff48b3984e51f/test/seed-test.js) ([23e473b](https://github.com/ripple/ripple-lib/commit/23e473b6886c457781949c825b3ff48b3984e51f)) - -__OTHER CHANGES__ -+ Add routes to the vault client for KYC attestations ([ed2da574](https://github.com/ripple/ripple-lib/commit/ed2da57475acf5e9d2cf3373858f4274832bd83f)) -+ Currency: add `show_interest` flag to show or hide interest in `Currency.to_human()` and `Currency.to_json()` [Example use in tests](https://github.com/ripple/ripple-lib/blob/947ec3edc2e7c8f1ef097e496bf552c74366e749/test/currency-test.js#L123) -+ Configurable maxAttempts for transaction submission ([d107092](https://github.com/ripple/ripple-lib/commit/d10709254061e9e4416d2cb78b5cac1ec0d7ffa5)) -+ Binformat: added missing TransactionResult options ([6abed8d](https://github.com/ripple/ripple-lib/commit/6abed8dd5311765b2eb70505dadbdf5121439ca8)) -+ Shrinkwrap packages for dependency locking ([2dcd5f9](2dcd5f94fbc71200eb08a5044c76ef94f7971913)) -+ Fix: Amount.to_human() precision bugs ([4be209e](https://github.com/ripple/ripple-lib/commit/4be209e286b5b209bec7bcd1212098985e15ff2f) and [7708c64](https://github.com/ripple/ripple-lib/commit/7708c64576e70ce3ac190442daceb30e4446aab7)) -+ Fix: change handling of requestLedger options ([57b7030](https://github.com/ripple/ripple-lib/commit/57b70300f5f0c7534ede118ddbb5d8762668a4f8)) - -## 0.8.2 - -+ Currency: Allow mixed letters and numbers in currencies -+ Deprecate account_tx map/reduce/filterg -+ Fix: correct requestLedger arguments -+ Fix: missing subscription on error events for some server methods -+ Fix: orderbook reset on reconnect -+ Fix: ripple-lib crashing. Add potential missing error handlers - -## 0.8.1 - -+ Wallet: Add Wallet class that generates wallets -+ Make npm test runnable in Windows. -+ Fix several stability issues, see merged PR's for details -+ Fix bug in Amount.to_human_full() -+ Fix undefined fee states when connecting to a rippled that is syncing - -## 0.8.0 - -+ Orderbook: Added tracking of offer funds for determining when offers are not funded -+ Orderbook: Added tests -+ Orderbook: Update owner funds -+ Transactions: If transaction errs with `tefALREADY`, wait until all possible submissions err with the same before emitting `error`. Fixes a client "Transaction malformed" bug. -+ Transactions: Track submissions, don't bother submitting to unconnected servers -+ Request: `request.request()` now accepts an array of servers as first argument. Servers can be represented with URL, or the server object itself. -+ Request: `request.broadcast()` now returns the number of servers request was sent to -+ Server: Acquire host information from server without additional request -+ Amount: Add a constant for the maximum canonical value that can be expressed as a Ripple value -+ Amount: Make Constants static fields on the class, instead of a separate export - -## 0.7.39 - -+ Improvements to multi-server support. Fixed an issue where a server's score was not reset and connections would keep dropping after being connected for a significant amount of time. -+ Improvements in order book support. Added support for currency pairs with interest bearing currencies. You can request an order book with hex, ISO code or full name for the currency. -+ Fix value parsing for amount/currency order pairs, e.g. `Amount.from_human("XAU 12345.6789")` -+ Improved Amount parsing from human readable string given a hex currency, e.g. `Amount.from_human("10 015841551A748AD2C1F76FF6ECB0CCCD00000000")` -+ Improvements to username normalization in the vault client -+ Add 2-factor authentication support for vault client -+ Removed vestiges of Grunt, switched to Gulp - -## 0.7.37 - -+ **Deprecations** - - 1. Removed humanistic amount detection in `transaction.payment`. Passing `1XRP` as the payment amount no longer works. - 2. `remote.setServer` uses full server URL rather than hostname. Example: `remote.setServer('wss://s`.ripple.com:443')` - 3. Removed constructors for deprecated transaction types from `transaction.js`. - 4. Removed `invoiceID` option from `transaction.payment`. Instead, use the `transaction.invoiceID` method. - 5. Removed `transaction.transactionManager` getter. - -+ Improved multi-server support. Servers are now ranked dynamically, and transactions are broadcasted to all connected servers. -+ Automatically ping connected servers. Client configuration now should contain `ping: ` to specify the ping interval. -+ Added `transaction.lastLedger` to specify `LastLedgerSequence`. Setting it this way also ensures that the sequence is not bumped on subsequent requests. -+ Added optional `remote.accountTx` binary parsing. - ```js - { - binary: true, - parseBinary: false - } - ``` -+ Added full currency name support, e.g. `Currency.from_json('XRP').to_human({full_name:'Ripples'})` will return `XRP - Ripples` -+ Improved interest bearing currency support, e.g. `Currency.from_human('USD - US Dollar (2.5%pa)')` -+ Improve test coverage -+ Added blob vault client. The vault client facilitates interaction with ripple's namespace and blob vault or 3rd party blob vaults using ripple's blob vault software (https://github.com/ripple/ripple-blobvault). A list of the available functions can be found at [docs/VAULTCLIENT.md](docs/VAULTCLIENT.md) - - -## 0.7.35 - -+ `LastLedgerSequence` is set by default on outgoing transactions. This refers to the last valid ledger index (AKA sequence) for a transaction. By default, this index is set to the current index (at submission time) plus 8. In theory, this allows ripple-lib to deterministically fail a transaction whose submission request timed out, but whose associated server continues to emit ledger_closed events. -+ Transactions that err with `telINSUF_FEE_P` will be automatically resubmitted. This error indicates that the `Fee` supplied in the transaction submission request was inadequate. Ideally, the `Fee` is tracked by ripple-lib in real-time, and the resubmitted transaction will most likely succeed. -+ Added Transaction.iff(function(callback) { }). Callback expects first argument to be an Error or null, second argument is a boolean which indicates whether or not to proceed with the transaction submission. If an `iff` function is specified, it will be executed prior to every submission of the transaction (including resubmissions). -+ Transactions will now emit `presubmit` and `postsubmit` events. They will be emitted before and after a transaction is submitted, respectively. -+ Added Transaction.summary(). Returns a summary of a transaction in semi-human-readable form. JSON-stringifiable. -+ Remote.requestAccountTx() with `binary: true` will automatically parse transactions. -+ Added Remote.requestAccountTx filter, map, and reduce. - -```js - remote.requestAccountTx({ - account: 'retc', - ledger_index_min: -1, - ledger_index_max: -1, - limit: 100, - binary: true, - - filter: function(transaction) { - return transaction.tx.TransactionType === 'Payment'; - }, - - map: function(transaction) { - return Number(transaction.tx.Amount); - }, - - reduce: function(a, b) { - return a + b; - }, - - pluck: 'transactions' - }, console.log) -``` - -+ Added persistence hooks. -+ General performance improvements, especially for long-running processes. +Please see the individual HISTORY.md documents in each package for changes. diff --git a/README.md b/README.md index fe0aed6e..d3eb46cf 100644 --- a/README.md +++ b/README.md @@ -26,14 +26,19 @@ What is `xrpl.js` used for? The applications on the list linked above use `xrpl. ### Requirements + **[Node.js v14](https://nodejs.org/)** is recommended. We also support v12 and v16. Other versions may work but are not frequently tested. -+ **[npm](https://www.npmjs.com/)** is recommended. `yarn` may work but we use `package-lock.json`. ## Getting Started In an existing project (with `package.json`), install `xrpl.js`: ``` -$ npm install xrpl +$ npm install --save xrpl +``` + +Or with `yarn`: + +``` +$ yarn add xrpl ``` Example usage: @@ -122,7 +127,7 @@ import xrpl from 'https://dev.jspm.io/npm:xrpl'; + [Get Started in Node.js](https://xrpl.org/get-started-using-node-js.html) + [Full Reference Documentation](https://js.xrpl.org) -+ [Code Samples](https://github.com/XRPLF/xrpl.js/tree/develop/snippets/src) ++ [Code Samples](https://github.com/XRPLF/xrpl.js/tree/develop/packages/xrpl/snippets/src) ### Mailing Lists diff --git a/lerna.json b/lerna.json new file mode 100644 index 00000000..ed313e57 --- /dev/null +++ b/lerna.json @@ -0,0 +1,5 @@ +{ + "version": "independent", + "useWorkspaces": true, + "npmClient": "npm" +} diff --git a/package-lock.json b/package-lock.json index c3d4580e..82fe5abb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,18 @@ { - "name": "xrpl", - "version": "2.0.1", + "name": "xrpl.js", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "xrpl", - "version": "2.0.1", - "license": "ISC", + "name": "xrpl.js", + "workspaces": [ + "packages/*" + ], "dependencies": { - "bignumber.js": "^9.0.0", - "bip32": "^2.0.6", - "bip39": "^3.0.4", - "https-proxy-agent": "^5.0.0", - "lodash": "^4.17.4", - "ripple-address-codec": "^4.1.1", - "ripple-binary-codec": "^1.1.3", - "ripple-keypairs": "^1.0.3", - "ws": "^8.2.2" + "ripple-address-codec": "file:packages/ripple-address-codec", + "ripple-binary-codec": "file:packages/ripple-binary-codec", + "ripple-keypairs": "file:packages/ripple-keypairs", + "xrpl": "file:packages/xrpl" }, "devDependencies": { "@types/chai": "^4.2.21", @@ -28,7 +23,7 @@ "@types/ws": "^8.2.0", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.0.0", - "@xrplf/eslint-config": "^1.5.0", + "@xrplf/eslint-config": "^1.6.0", "@xrplf/prettier-config": "^1.5.0", "assert": "^2.0.0", "buffer": "^6.0.2", @@ -47,6 +42,8 @@ "eslint-plugin-tsdoc": "^0.2.14", "eventemitter2": "^6.0.0", "https-browserify": "^1.0.0", + "jest": "^26.0.1", + "lerna": "^4.0.0", "mocha": "^9", "npm-run-all": "^4.1.5", "nyc": "^15", @@ -54,8 +51,10 @@ "prettier": "^2.3.2", "process": "^0.11.10", "puppeteer": "10.4.0", + "source-map-support": "^0.5.16", "stream-browserify": "^3.0.0", "stream-http": "3.2.0", + "ts-jest": "^26.4.4", "ts-loader": "^9.2.5", "ts-node": "^10.2.1", "typedoc": "^0.22.5", @@ -66,8 +65,8 @@ "webpack-cli": "^4.2.0" }, "engines": { - "node": ">=10.13.0", - "npm": ">=7.14.0 <8.0.0" + "node": ">=10.0.0", + "npm": ">=7.0.0 < 8.0.0" } }, "node_modules/@babel/code-frame": { @@ -80,29 +79,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -119,12 +118,12 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -139,13 +138,22 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "dependencies": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -153,13 +161,22 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" @@ -181,141 +198,150 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "dependencies": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -331,26 +357,26 @@ } }, "node_modules/@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -430,9 +456,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -441,10 +467,157 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", + "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "peer": true, "dependencies": { @@ -455,13 +628,13 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", - "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", + "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", "dev": true, "peer": true, "dependencies": { - "core-js-pure": "^3.16.0", + "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" }, "engines": { @@ -469,44 +642,44 @@ } }, "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -515,12 +688,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -536,18 +709,40 @@ } }, "node_modules/@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -570,9 +765,9 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", "dev": true, "engines": { "node": ">=10.0.0" @@ -592,6 +787,15 @@ "node": "^12 || ^14 || ^16" } }, + "node_modules/@es-joy/jsdoccomment/node_modules/jsdoc-type-pratt-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -612,6 +816,21 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -627,11 +846,20 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -736,6 +964,1581 @@ "node": ">=8" } }, + "node_modules/@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@lerna/add": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", + "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", + "dev": true, + "dependencies": { + "@lerna/bootstrap": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/add/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/bootstrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/has-npm-version": "4.0.0", + "@lerna/npm-install": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "read-package-tree": "^5.3.1", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/bootstrap/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/changed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", + "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", + "dev": true, + "dependencies": { + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/check-working-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", + "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", + "dev": true, + "dependencies": { + "@lerna/collect-uncommitted": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/validation-error": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/child-process": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", + "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/clean": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", + "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/clean/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", + "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", + "dev": true, + "dependencies": { + "@lerna/global-options": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^16.2.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/collect-uncommitted": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", + "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "chalk": "^4.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/collect-updates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", + "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/command": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", + "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/project": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/write-log-file": "4.0.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/conventional-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", + "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", + "dev": true, + "dependencies": { + "@lerna/validation-error": "4.0.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/create": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", + "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^11.2.6", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/create-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", + "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", + "dev": true, + "dependencies": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/create/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/describe-ref": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", + "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", + "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/exec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", + "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/exec/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/filter-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", + "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", + "dev": true, + "dependencies": { + "@lerna/collect-updates": "4.0.0", + "@lerna/filter-packages": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/filter-packages": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", + "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", + "dev": true, + "dependencies": { + "@lerna/validation-error": "4.0.0", + "multimatch": "^5.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/get-npm-exec-opts": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", + "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/get-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", + "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/github-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", + "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/gitlab-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", + "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^4.1.2", + "whatwg-url": "^8.4.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/global-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", + "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", + "dev": true, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/has-npm-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", + "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", + "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", + "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/output": "4.0.0", + "envinfo": "^7.7.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/init": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", + "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/init/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", + "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/link/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/list": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", + "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/listable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", + "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "4.0.0", + "chalk": "^4.1.0", + "columnify": "^1.5.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/log-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", + "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", + "dev": true, + "dependencies": { + "byte-size": "^7.0.0", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", + "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-conf/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/npm-dist-tag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", + "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", + "dev": true, + "dependencies": { + "@lerna/otplease": "4.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-install": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", + "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", + "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", + "dev": true, + "dependencies": { + "@lerna/otplease": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/npm-run-script": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", + "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/otplease": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", + "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", + "dev": true, + "dependencies": { + "@lerna/prompt": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/output": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", + "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/pack-directory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", + "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", + "dev": true, + "dependencies": { + "@lerna/get-packed": "4.0.0", + "@lerna/package": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "npm-packlist": "^2.1.4", + "npmlog": "^4.1.2", + "tar": "^6.1.0", + "temp-write": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/package": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", + "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", + "dev": true, + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/package-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", + "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", + "dev": true, + "dependencies": { + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/package/node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/package/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/package/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prerelease-id-from-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", + "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/profiler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", + "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "upath": "^2.0.1" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/project": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", + "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", + "dev": true, + "dependencies": { + "@lerna/package": "4.0.0", + "@lerna/validation-error": "4.0.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/project/node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/project/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/project/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", + "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", + "dev": true, + "dependencies": { + "inquirer": "^7.3.3", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", + "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/log-packed": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/npm-dist-tag": "4.0.0", + "@lerna/npm-publish": "4.0.0", + "@lerna/otplease": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/pack-directory": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/version": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/publish/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/pulse-till-done": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", + "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/query-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", + "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", + "dev": true, + "dependencies": { + "@lerna/package-graph": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/resolve-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", + "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^2.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/rimraf-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", + "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/rimraf-dir/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/@lerna/run": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", + "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-run-script": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/timer": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run-lifecycle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", + "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", + "dev": true, + "dependencies": { + "@lerna/npm-conf": "4.0.0", + "npm-lifecycle": "^3.1.5", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run-topologically": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", + "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "4.0.0", + "p-queue": "^6.6.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/symlink-binary": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", + "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "4.0.0", + "@lerna/package": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/symlink-dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", + "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "4.0.0", + "@lerna/resolve-symlink": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/timer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", + "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", + "dev": true, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/validation-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", + "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", + "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/conventional-commits": "4.0.0", + "@lerna/github-client": "4.0.0", + "@lerna/gitlab-client": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "temp-write": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/version/node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/version/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/version/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@lerna/version/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/write-log-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", + "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">= 10.18.0" + } + }, "node_modules/@microsoft/tsdoc": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", @@ -802,12 +2605,346 @@ "node": ">= 8" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.20", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", - "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==", + "node_modules/@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", "dev": true }, + "node_modules/@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint/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/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "dev": true + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/request/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/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -832,6 +2969,47 @@ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, "node_modules/@types/chai": { "version": "4.2.22", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", @@ -839,9 +3017,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -864,6 +3042,39 @@ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -877,9 +3088,21 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.175", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", - "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "version": "4.14.176", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.176.tgz", + "integrity": "sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/mocha": { @@ -889,9 +3112,27 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.0.tgz", - "integrity": "sha512-8MLkBIYQMuhRBQzGN9875bYsOhPnf/0rgXGo66S2FemHkhbn9qtsz9ywV1iCG+vbjigE4WUNVvw37Dx+L0qsPg==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "node_modules/@types/puppeteer": { @@ -903,6 +3144,12 @@ "@types/node": "*" } }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", @@ -912,6 +3159,21 @@ "@types/node": "*" } }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, "node_modules/@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", @@ -923,15 +3185,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" @@ -954,15 +3217,15 @@ } }, "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -977,6 +3240,24 @@ "eslint": "*" } }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, "node_modules/@typescript-eslint/parser": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", @@ -1004,7 +3285,7 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/scope-manager": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", @@ -1021,7 +3302,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "node_modules/@typescript-eslint/types": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", @@ -1034,7 +3315,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "node_modules/@typescript-eslint/typescript-estree": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", @@ -1061,7 +3342,7 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/visitor-keys": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", @@ -1078,80 +3359,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.30.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -1341,9 +3548,9 @@ } }, "node_modules/@xrplf/eslint-config": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@xrplf/eslint-config/-/eslint-config-1.5.0.tgz", - "integrity": "sha512-jVxkjC+kxkXXNDhDKGteqJ8Bhvrq2xwg00UTqArZTYK0VPDzEaFOgrOKgruybz7/pzY0n8Gf2HRu2tENRtRB+Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@xrplf/eslint-config/-/eslint-config-1.6.0.tgz", + "integrity": "sha512-igWdZB/X/k6MvRXb+4ZYwJHO7SewnL/zkhNJyVy+8zrcGcgSbJcAh3bPtRaBifse4WaGvyh42u2xGpGFT8E9DQ==", "dev": true, "dependencies": { "confusing-browser-globals": "^1.0.9", @@ -1370,6 +3577,18 @@ "typescript": ">= 3.9.0" } }, + "node_modules/@xrplf/eslint-config/node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/@xrplf/prettier-config": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@xrplf/prettier-config/-/prettier-config-1.5.0.tgz", @@ -1388,6 +3607,18 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -1400,6 +3631,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -1410,14 +3651,20 @@ } }, "node_modules/acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true, "engines": { "node": ">=0.4.0" } }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "dev": true + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1429,6 +3676,20 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -1476,6 +3737,33 @@ "node": ">=6" } }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -1525,12 +3813,58 @@ "node": ">=8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, "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/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -1560,6 +3894,48 @@ "node": ">=6.0" } }, + "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-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-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-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, "node_modules/array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", @@ -1588,6 +3964,15 @@ "node": ">=8" } }, + "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/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -1606,16 +3991,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" @@ -1624,6 +4008,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -1653,6 +4061,15 @@ "util": "^0.12.0" } }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -1662,6 +4079,15 @@ "node": "*" } }, + "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/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -1684,6 +4110,33 @@ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "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/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -1695,10 +4148,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, "node_modules/axe-core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", - "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true, "peer": true, "engines": { @@ -1712,20 +4180,167 @@ "dev": true, "peer": true }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "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-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dependencies": { "safe-buffer": "^5.0.1" } }, + "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-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1745,10 +4360,25 @@ } ] }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==", "engines": { "node": ">=0.6" } @@ -1883,6 +4513,12 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -1954,16 +4590,16 @@ } }, "node_modules/browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" @@ -1976,6 +4612,18 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bs58": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", @@ -1994,6 +4642,15 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -2045,6 +4702,115 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -2090,16 +4856,51 @@ "node": ">=6" } }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==", + "version": "1.0.30001278", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", + "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" } }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, "node_modules/chai": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", @@ -2133,6 +4934,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -2178,6 +4994,12 @@ "node": ">=6.0" } }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2187,6 +5009,110 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/class-utils/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/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2196,6 +5122,27 @@ "node": ">=6" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2207,6 +5154,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2221,6 +5177,56 @@ "node": ">=6" } }, + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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", @@ -2240,11 +5246,54 @@ "dev": true }, "node_modules/colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, + "node_modules/columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "dependencies": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "node_modules/columnify/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/columnify/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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2266,18 +5315,238 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/confusing-browser-globals": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -2293,10 +5562,19 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "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/core-js-pure": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.0.tgz", - "integrity": "sha512-O5RvMRWW+I0hfR227mrIwU+gPLVaa4kPEq+9b8FcjuFed4QckOvYc94c2KSI/X5dlvcsj/V1Sp5F5cecYpNQOQ==", + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", + "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", "dev": true, "hasInstallScript": true, "peer": true, @@ -2305,6 +5583,46 @@ "url": "https://opencollective.com/core-js" } }, + "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=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -2388,6 +5706,30 @@ "node": "*" } }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, "node_modules/damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", @@ -2395,6 +5737,50 @@ "dev": true, "peer": true }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -2411,6 +5797,15 @@ } } }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", @@ -2420,11 +5815,48 @@ "node": ">=0.10.0" } }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, + "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/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "node_modules/deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -2438,11 +5870,20 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-require-extensions": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", @@ -2455,6 +5896,15 @@ "node": ">=8" } }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -2466,6 +5916,49 @@ "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/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "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/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -2476,12 +5969,40 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/devtools-protocol": { "version": "0.0.901419", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", "dev": true }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -2491,6 +6012,15 @@ "node": ">=0.3.1" } }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -2532,12 +6062,58 @@ "node": ">=6.0.0" } }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ejs": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", @@ -2554,9 +6130,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.826", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.826.tgz", - "integrity": "sha512-bpLc4QU4B8PYmdO4MSu2ZBTMD8lAaEXRS43C09lB31BvYwuk9UxgBRXbY5OJBw7VuMGcg2MZG5FyTaP9u4PQnw==", + "version": "1.3.890", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.890.tgz", + "integrity": "sha512-VWlVXSkv0cA/OOehrEyqjUTHwV8YXCPTfPvbtoeU2aHR21vI4Ejh5aC4AxUwOmbLbBgb6Gd3URZahoCxtBqCYQ==", "dev": true }, "node_modules/elliptic": { @@ -2578,6 +6154,48 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2612,6 +6230,15 @@ "node": ">=8.6" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -2624,6 +6251,12 @@ "node": ">=4" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2667,9 +6300,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.2.tgz", - "integrity": "sha512-YkAGWqxZq2B4FxQ5y687UwywDwvLQhIMCZ+SDU7ZW729SDHOEI6wVFXwTRecz+yiwJzCsVwC6V7bxyNbZSB1rg==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "node_modules/es-to-primitive": { @@ -2720,6 +6353,79 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -2816,18 +6522,6 @@ "eslint-plugin-import": "^2.22.1" } }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -2897,49 +6591,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-eslint-comments": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", @@ -2968,15 +6619,6 @@ "node": ">=0.8.0" } }, - "node_modules/eslint-plugin-eslint-comments/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/eslint-plugin-import": { "version": "2.25.2", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz", @@ -3032,9 +6674,9 @@ "dev": true }, "node_modules/eslint-plugin-jsdoc": { - "version": "36.0.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", - "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", + "version": "36.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", + "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", "dev": true, "dependencies": { "@es-joy/jsdoccomment": "0.10.8", @@ -3080,13 +6722,6 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "peer": true - }, "node_modules/eslint-plugin-mocha": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-9.0.0.tgz", @@ -3103,6 +6738,24 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-plugin-mocha/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, "node_modules/eslint-plugin-node": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", @@ -3123,37 +6776,23 @@ "eslint": ">=5.16.0" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-plugin-node/node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.10.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-node/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" + }, + "peerDependencies": { + "eslint": ">=4.19.1" } }, "node_modules/eslint-plugin-node/node_modules/semver": { @@ -3187,9 +6826,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", - "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", + "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", "dev": true, "peer": true, "dependencies": { @@ -3197,14 +6836,15 @@ "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "estraverse": "^5.2.0", - "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", "string.prototype.matchall": "^4.0.5" }, "engines": { @@ -3254,6 +6894,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-tsdoc": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.14.tgz", @@ -3287,33 +6937,6 @@ } }, "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", @@ -3328,7 +6951,7 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", @@ -3337,6 +6960,24 @@ "node": ">=4" } }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", @@ -3398,9 +7039,9 @@ } }, "node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -3421,6 +7062,12 @@ "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", "dev": true }, + "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": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -3440,6 +7087,12 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3475,6 +7128,254 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/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/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/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "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/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -3495,6 +7396,15 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3550,6 +7460,15 @@ "reusify": "^1.0.4" } }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3559,6 +7478,30 @@ "pend": "~1.2.0" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -3597,6 +7540,15 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -3736,6 +7688,15 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": 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/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -3754,6 +7715,41 @@ "node": ">=8.0.0" } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "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/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -3780,6 +7776,33 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3811,6 +7834,75 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/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/gauge/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/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/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3860,6 +7952,88 @@ "node": ">=8.0.0" } }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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/get-pkg-repo/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3890,6 +8064,118 @@ "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/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/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/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "node_modules/git-url-parse": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz", + "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", + "dev": true, + "dependencies": { + "git-up": "^4.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -3929,9 +8215,9 @@ "dev": true }, "node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3963,15 +8249,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -3987,6 +8264,13 @@ "node": ">=4.x" } }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -4002,6 +8286,59 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4055,6 +8392,75 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "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.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -4127,12 +8533,59 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, "node_modules/https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -4160,6 +8613,27 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -4180,14 +8654,23 @@ ] }, "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true, "engines": { "node": ">= 4" } }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -4320,6 +8803,12 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4335,6 +8824,96 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "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/init-package-json": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "dev": true, + "dependencies": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/read-package-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", + "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -4357,6 +8936,24 @@ "node": ">= 0.10" } }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "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-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -4416,6 +9013,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "dev": true + }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -4427,6 +9030,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", @@ -4439,6 +9054,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -4453,6 +9080,48 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4471,6 +9140,15 @@ "node": ">=8" } }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -4497,6 +9175,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "node_modules/is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -4546,6 +9230,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4558,6 +9260,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -4581,6 +9289,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "dependencies": { + "protocols": "^1.1.0" + } + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4621,6 +9338,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", @@ -4677,6 +9406,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4692,10 +9440,16 @@ "node": ">=0.10.0" } }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" @@ -4770,9 +9524,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -4780,22 +9534,13 @@ "source-map": "^0.6.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -4894,33 +9639,994 @@ "node": ">=4" } }, - "node_modules/jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 10.14.2" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/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/jest-cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/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/jest-resolve/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-resolve/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/jest-resolve/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-resolve/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/jju": { @@ -4948,15 +10654,116 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, "node_modules/jsdoc-type-pratt-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", - "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz", + "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==", "dev": true, "engines": { "node": ">=12.0.0" } }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/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/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4975,6 +10782,18 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4987,6 +10806,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -5008,14 +10833,66 @@ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "peer": true, "dependencies": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" }, "engines": { @@ -5031,6 +10908,15 @@ "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", @@ -5048,6 +10934,47 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/lerna": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", + "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", + "dev": true, + "dependencies": { + "@lerna/add": "4.0.0", + "@lerna/bootstrap": "4.0.0", + "@lerna/changed": "4.0.0", + "@lerna/clean": "4.0.0", + "@lerna/cli": "4.0.0", + "@lerna/create": "4.0.0", + "@lerna/diff": "4.0.0", + "@lerna/exec": "4.0.0", + "@lerna/import": "4.0.0", + "@lerna/info": "4.0.0", + "@lerna/init": "4.0.0", + "@lerna/link": "4.0.0", + "@lerna/list": "4.0.0", + "@lerna/publish": "4.0.0", + "@lerna/run": "4.0.0", + "@lerna/version": "4.0.0", + "import-local": "^3.0.2", + "npmlog": "^4.1.2" + }, + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5061,6 +10988,186 @@ "node": ">= 0.8.0" } }, + "node_modules/libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmaccess/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmaccess/node_modules/socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "dependencies": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -5112,24 +11219,30 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -5148,6 +11261,25 @@ "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", "dev": true }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -5237,10 +11369,78 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "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-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/marked": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.4.tgz", - "integrity": "sha512-jBo8AOayNaEcvBhNobg6/BLhdsK3NvnKWJg33MAAPbvTWiG4QBn9gpW1+7RssrKu4K1dKlN+0goVQwV41xEfOA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", "dev": true, "bin": { "marked": "bin/marked" @@ -5268,6 +11468,235 @@ "node": ">= 0.10.0" } }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/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/meow/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/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/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/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/meow/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/meow/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/meow/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/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/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/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/meow/node_modules/read-pkg/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/meow/node_modules/read-pkg/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/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5316,9 +11745,9 @@ "dev": true }, "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "bin": { "mime": "cli.js" @@ -5357,6 +11786,15 @@ "node": ">=6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -5385,6 +11823,133 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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", @@ -5397,6 +11962,41 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mocha": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", @@ -5549,11 +12149,54 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.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==" }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nan": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", @@ -5571,12 +12214,43 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "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/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -5598,6 +12272,156 @@ "node": "4.x || >=6.0.0" } }, + "node_modules/node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/node-gyp/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/node-gyp/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/node-gyp/node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/node-gyp/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/node-gyp/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -5611,11 +12435,24 @@ } }, "node_modules/node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5646,6 +12483,148 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", + "dev": true, + "dependencies": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "node_modules/npm-lifecycle/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/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -5821,6 +12800,33 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "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/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -6007,12 +13013,105 @@ "node": ">=6" } }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, - "peer": 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" } @@ -6048,6 +13147,18 @@ "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", @@ -6066,30 +13177,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -6098,6 +13208,49 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.values": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", @@ -6189,6 +13342,55 @@ "node": ">= 0.8.0" } }, + "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-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/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -6225,6 +13427,64 @@ "node": ">=8" } }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -6234,6 +13494,21 @@ "node": ">=4" } }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", @@ -6249,6 +13524,118 @@ "node": ">=8" } }, + "node_modules/pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6287,6 +13674,45 @@ "node": ">=4" } }, + "node_modules/parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "node_modules/parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "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": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -6365,6 +13791,18 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -6398,6 +13836,18 @@ "node": ">=4" } }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -6410,6 +13860,15 @@ "node": ">=4" } }, + "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/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6443,6 +13902,21 @@ "node": ">=6.0.0" } }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -6452,6 +13926,12 @@ "node": ">= 0.6.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "node_modules/process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -6473,6 +13953,47 @@ "node": ">=0.4.0" } }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "dependencies": { + "read": "1" + } + }, "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -6485,12 +14006,37 @@ "react-is": "^16.8.1" } }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "peer": true + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -6683,6 +14229,49 @@ } } }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -6713,6 +14302,15 @@ } ] }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ramda": { "version": "0.27.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", @@ -6738,11 +14336,106 @@ } }, "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, - "peer": true + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "node_modules/read-package-tree/node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } }, "node_modules/read-pkg": { "version": "3.0.0", @@ -6758,6 +14451,19 @@ "node": ">=4" } }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -6783,6 +14489,18 @@ "node": ">= 6" } }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6807,6 +14525,19 @@ "node": ">= 0.10" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", @@ -6814,6 +14545,19 @@ "dev": true, "peer": true }, + "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/regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -6864,6 +14608,71 @@ "node": ">=4" } }, + "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/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6931,6 +14740,44 @@ "node": ">=4" } }, + "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/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6966,56 +14813,33 @@ } }, "node_modules/ripple-address-codec": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.1.3.tgz", - "integrity": "sha512-9mymOhfCUyLZGwotGPg3I2wMfrwHof0W8ygjhW46UdNgFW6J+OvDB/VS9dbHlgED/41mzECp41IXvTrkc1fTwA==", - "dependencies": { - "base-x": "3.0.8", - "create-hash": "^1.1.2" - }, - "engines": { - "node": ">= 10" - } + "resolved": "packages/ripple-address-codec", + "link": true }, "node_modules/ripple-binary-codec": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-1.1.3.tgz", - "integrity": "sha512-NnFNZZ+225BxdDdHtcEn4GiGzup+V0DGAbtKygZIwbqA5116oZBt6uY3g43gYpdDMISsEbM7NewBij8+7jdlvA==", - "dependencies": { - "assert": "^2.0.0", - "big-integer": "^1.6.48", - "buffer": "5.6.0", - "create-hash": "^1.2.0", - "decimal.js": "^10.2.0", - "ripple-address-codec": "^4.1.1" - }, - "engines": { - "node": ">=10.22.0", - "yarn": "^1.22.4" - } - }, - "node_modules/ripple-binary-codec/node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } + "resolved": "packages/ripple-binary-codec", + "link": true }, "node_modules/ripple-keypairs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.0.3.tgz", - "integrity": "sha512-Na5q8sUdxjd5DXBM88ocJgL2Ig0I1USyO3bvI0SMxJPp7F9DHvqLdPX45PVXs7HUq0Dj691Z9Uz9NeD/K7/eOA==", - "dependencies": { - "bn.js": "^5.1.1", - "brorand": "^1.0.5", - "elliptic": "^6.5.2", - "hash.js": "^1.0.3", - "ripple-address-codec": "^4.0.0" - }, + "resolved": "packages/ripple-keypairs", + "link": true + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, "engines": { - "node": ">= 10" + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" } }, "node_modules/run-parallel": { @@ -7041,6 +14865,18 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -7060,12 +14896,327 @@ } ] }, + "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/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/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/sane/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/sane/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/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/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/sane/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/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/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/sane/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/sane/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/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/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/sane/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/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/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/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/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/sane/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/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -7114,6 +15265,42 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "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/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -7160,15 +15347,22 @@ } }, "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, "node_modules/shiki": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.11.tgz", - "integrity": "sha512-tjruNTLFhU0hruCPoJP0y+B9LKOmcqUhTpxn7pcJB3fa+04gFChuEmxmrUfOJ7ZO6Jd+HwMnDHgY3lv3Tqonuw==", + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.12.tgz", + "integrity": "sha512-VXcROdldv0/Qu0w2XvzU4IrvTeBNs/Kj/FCmtcEXGz7Tic/veQzliJj6tEiAgoKianhQstpYmbPDStHU5Opqcw==", "dev": true, "dependencies": { "jsonc-parser": "^3.0.0", @@ -7196,9 +15390,9 @@ "dev": true }, "node_modules/sirv": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", - "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz", + "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==", "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.20", @@ -7209,6 +15403,12 @@ "node": ">= 10" } }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7235,7 +15435,214 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/source-map": { + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.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/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/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/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", @@ -7244,17 +15651,59 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "node_modules/socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/source-map-support/node_modules/source-map": { + "node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", @@ -7263,6 +15712,35 @@ "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.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -7312,12 +15790,208 @@ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/static-extend/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/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -7340,6 +16014,15 @@ "xtend": "^4.0.2" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7348,15 +16031,28 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "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.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" @@ -7369,15 +16065,15 @@ "dev": true }, "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -7389,14 +16085,14 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -7430,12 +16126,12 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "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.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -7450,6 +16146,15 @@ "node": ">=8" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7459,6 +16164,18 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -7471,6 +16188,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7483,27 +16217,45 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", + "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", "dev": true, "dependencies": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -7531,6 +16283,23 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/tar-fs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", @@ -7559,15 +16328,77 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.2.tgz", - "integrity": "sha512-0Omye+RD4X7X69O0eql3lC4Heh/5iLj3ggxR/B5ketZLOtLiOqukUgjw3q4PDnNQbsrkKr3UMypqStQG3XKRvw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dev": true, "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" @@ -7577,9 +16408,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.0.tgz", - "integrity": "sha512-FpR4Qe0Yt4knSQ5u2bA1wkM0R8VlVsvhyfSHvomXRivS4vPLk0dJV2IhRBIHRABh7AFutdMeElIA5y1dETwMBg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", "dev": true, "dependencies": { "jest-worker": "^27.0.6", @@ -7611,6 +16442,20 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -7626,13 +16471,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/terser/node_modules/source-map": { @@ -7658,18 +16509,42 @@ "node": ">=8" } }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, "node_modules/tiny-secp256k1": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", @@ -7691,6 +16566,24 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -7700,6 +16593,45 @@ "node": ">=4" } }, + "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": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7721,6 +16653,80 @@ "node": ">=6" } }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "jest": ">=26 <27", + "typescript": ">=3.8 <5.0" + } + }, + "node_modules/ts-jest/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/ts-loader": { "version": "9.2.6", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", @@ -7741,9 +16747,9 @@ } }, "node_modules/ts-node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", - "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "0.7.0", @@ -7782,9 +16788,9 @@ } }, "node_modules/ts-node/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -7793,6 +16799,15 @@ "node": ">=0.4.0" } }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -7856,6 +16871,24 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7889,6 +16922,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -7899,16 +16938,16 @@ } }, "node_modules/typedoc": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.5.tgz", - "integrity": "sha512-KFrWGU1iKiTGw0RcyjLNYDmhd7uICU14HgBNPmFKY/sT4Pm/fraaLyWyisst9vGTUAKxqibqoDITR7+ZcAkhHg==", + "version": "0.22.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.8.tgz", + "integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==", "dev": true, "dependencies": { "glob": "^7.2.0", "lunr": "^2.3.9", - "marked": "^3.0.4", + "marked": "^3.0.8", "minimatch": "^3.0.4", - "shiki": "^0.9.11" + "shiki": "^0.9.12" }, "bin": { "typedoc": "bin/typedoc" @@ -7958,6 +16997,34 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", + "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -8006,6 +17073,121 @@ "ieee754": "^1.1.13" } }, + "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-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "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": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -8015,6 +17197,13 @@ "punycode": "^2.1.0" } }, + "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", @@ -8031,6 +17220,15 @@ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, + "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.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", @@ -8049,6 +17247,15 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "node_modules/util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -8065,6 +17272,29 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "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", @@ -8075,12 +17305,65 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "node_modules/vscode-textmate": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", "dev": true }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/watchpack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", @@ -8094,10 +17377,28 @@ "node": ">=10.13.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, "node_modules/webpack": { - "version": "5.58.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", - "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "version": "5.62.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.62.1.tgz", + "integrity": "sha512-jNLtnWChS2CMZ7vqWtztv0G6fYB5hz11Zsadp5tE7e4/66zVDj7/KUeQZOsOl8Hz5KrLJH1h2eIDl6AnlyE12Q==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", @@ -8165,9 +17466,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -8176,6 +17477,15 @@ "node": ">=0.4.0" } }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -8185,31 +17495,10 @@ "node": ">= 10" } }, - "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "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/webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", @@ -8223,7 +17512,6 @@ "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -8250,12 +17538,6 @@ } } }, - "node_modules/webpack-cli/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, "node_modules/webpack-cli/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -8279,18 +17561,18 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", "dev": true, "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -8300,14 +17582,43 @@ } }, "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", - "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, "peerDependencies": { "acorn": "^8" } }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8363,6 +17674,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/wif": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", @@ -8386,6 +17706,12 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "node_modules/workerpool": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", @@ -8427,12 +17753,145 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "node_modules/write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, "engines": { - "node": ">=10.0.0" + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/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/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, + "engines": { + "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -8447,6 +17906,22 @@ } } }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xrpl": { + "resolved": "packages/xrpl", + "link": true + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8471,6 +17946,15 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -8576,6 +18060,97 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "packages/ripple-address-codec": { + "version": "4.1.3", + "license": "ISC", + "dependencies": { + "base-x": "3.0.9", + "create-hash": "^1.1.2" + }, + "engines": { + "node": ">= 10", + "npm": ">=7.0.0" + } + }, + "packages/ripple-binary-codec": { + "version": "1.1.3", + "license": "ISC", + "dependencies": { + "assert": "^2.0.0", + "big-integer": "^1.6.48", + "buffer": "5.6.0", + "create-hash": "^1.2.0", + "decimal.js": "^10.2.0", + "ripple-address-codec": "^4.1.1" + }, + "engines": { + "node": ">=10.22.0", + "npm": ">=7.0.0" + } + }, + "packages/ripple-binary-codec/node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "packages/ripple-keypairs": { + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "bn.js": "^5.1.1", + "brorand": "^1.0.5", + "elliptic": "^6.5.4", + "hash.js": "^1.0.3", + "ripple-address-codec": "^4.0.0" + }, + "engines": { + "node": ">= 10", + "npm": ">=7.0.0" + } + }, + "packages/xrpl": { + "version": "2.0.1", + "license": "ISC", + "dependencies": { + "bignumber.js": "^9.0.0", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "https-proxy-agent": "^5.0.0", + "lodash": "^4.17.4", + "ripple-address-codec": "^4.1.1", + "ripple-binary-codec": "^1.1.3", + "ripple-keypairs": "^1.0.3", + "ws": "^8.2.2" + }, + "engines": { + "node": ">=10.13.0", + "npm": ">=7.14.0 <8.0.0" + } + }, + "packages/xrpl/node_modules/ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } } }, "dependencies": { @@ -8589,26 +18164,26 @@ } }, "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz", + "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==", "dev": true }, "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz", + "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-compilation-targets": "^7.16.0", + "@babel/helper-module-transforms": "^7.16.0", + "@babel/helpers": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -8618,12 +18193,12 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" } }, "semver": { @@ -8631,27 +18206,41 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz", + "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==", "dev": true, "requires": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.16.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz", + "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==", "dev": true, "requires": { - "@babel/compat-data": "^7.15.0", + "@babel/compat-data": "^7.16.0", "@babel/helper-validator-option": "^7.14.5", "browserslist": "^4.16.6", "semver": "^6.3.0" @@ -8666,111 +18255,117 @@ } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz", + "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.16.0", + "@babel/template": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz", + "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz", + "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz", + "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==", "dev": true, "requires": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz", + "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz", + "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-module-imports": "^7.16.0", + "@babel/helper-replace-supers": "^7.16.0", + "@babel/helper-simple-access": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz", + "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz", + "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "^7.16.0", + "@babel/helper-optimise-call-expression": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz", + "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz", + "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/helper-validator-option": { @@ -8780,23 +18375,23 @@ "dev": true }, "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz", + "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.16.0", + "@babel/traverse": "^7.16.0", + "@babel/types": "^7.16.0" } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz", + "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.15.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -8860,15 +18455,123 @@ } }, "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz", + "integrity": "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==", "dev": true }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz", + "integrity": "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==", "dev": true, "peer": true, "requires": { @@ -8876,62 +18579,62 @@ } }, "@babel/runtime-corejs3": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.3.tgz", - "integrity": "sha512-30A3lP+sRL6ml8uhoJSs+8jwpKzbw8CqBvDc1laeptxPm5FahumJxirigcbD2qTs71Sonvj1cyZB0OKGAmxQ+A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.0.tgz", + "integrity": "sha512-Oi2qwQ21X7/d9gn3WiwkDTJmq3TQtYNz89lRnoFy8VeZpWlsyXvzSwiRrRZ8cXluvSwqKxqHJ6dBd9Rv+p0ZGQ==", "dev": true, "peer": true, "requires": { - "core-js-pure": "^3.16.0", + "core-js-pure": "^3.19.0", "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz", + "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" } } } }, "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz", + "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/code-frame": "^7.16.0", + "@babel/generator": "^7.16.0", + "@babel/helper-function-name": "^7.16.0", + "@babel/helper-hoist-variables": "^7.16.0", + "@babel/helper-split-export-declaration": "^7.16.0", + "@babel/parser": "^7.16.0", + "@babel/types": "^7.16.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", + "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.0" } }, "globals": { @@ -8943,15 +18646,31 @@ } }, "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz", + "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.9", + "@babel/helper-validator-identifier": "^7.15.7", "to-fast-properties": "^2.0.0" } }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, "@cspotcode/source-map-consumer": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", @@ -8968,9 +18687,9 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", + "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", "dev": true }, "@es-joy/jsdoccomment": { @@ -8982,6 +18701,14 @@ "comment-parser": "1.2.4", "esquery": "^1.4.0", "jsdoc-type-pratt-parser": "1.1.1" + }, + "dependencies": { + "jsdoc-type-pratt-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "dev": true + } } }, "@eslint/eslintrc": { @@ -8999,8 +18726,22 @@ "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } } }, + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", @@ -9013,9 +18754,15 @@ } }, "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -9094,6 +18841,1261 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@lerna/add": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", + "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", + "dev": true, + "requires": { + "@lerna/bootstrap": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/bootstrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/has-npm-version": "4.0.0", + "@lerna/npm-install": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "read-package-tree": "^5.3.1", + "semver": "^7.3.4" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/changed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", + "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", + "dev": true, + "requires": { + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + } + }, + "@lerna/check-working-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", + "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", + "dev": true, + "requires": { + "@lerna/collect-uncommitted": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/validation-error": "4.0.0" + } + }, + "@lerna/child-process": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", + "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + } + }, + "@lerna/clean": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", + "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/cli": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", + "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", + "dev": true, + "requires": { + "@lerna/global-options": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^16.2.0" + } + }, + "@lerna/collect-uncommitted": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", + "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "chalk": "^4.1.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/collect-updates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", + "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^3.0.0" + } + }, + "@lerna/command": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", + "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/project": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/write-log-file": "4.0.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/conventional-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", + "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", + "dev": true, + "requires": { + "@lerna/validation-error": "4.0.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/create": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", + "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^11.2.6", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/create-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", + "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", + "dev": true, + "requires": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/describe-ref": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", + "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", + "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/exec": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", + "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/filter-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", + "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", + "dev": true, + "requires": { + "@lerna/collect-updates": "4.0.0", + "@lerna/filter-packages": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/filter-packages": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", + "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", + "dev": true, + "requires": { + "@lerna/validation-error": "4.0.0", + "multimatch": "^5.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/get-npm-exec-opts": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", + "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/get-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", + "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + } + }, + "@lerna/github-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", + "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^4.1.2" + } + }, + "@lerna/gitlab-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", + "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "npmlog": "^4.1.2", + "whatwg-url": "^8.4.0" + } + }, + "@lerna/global-options": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", + "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", + "dev": true + }, + "@lerna/has-npm-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", + "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "semver": "^7.3.4" + } + }, + "@lerna/import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", + "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + } + }, + "@lerna/info": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", + "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/output": "4.0.0", + "envinfo": "^7.7.4" + } + }, + "@lerna/init": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", + "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", + "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/list": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", + "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + } + }, + "@lerna/listable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", + "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", + "dev": true, + "requires": { + "@lerna/query-graph": "4.0.0", + "chalk": "^4.1.0", + "columnify": "^1.5.4" + } + }, + "@lerna/log-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", + "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", + "dev": true, + "requires": { + "byte-size": "^7.0.0", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", + "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", + "dev": true, + "requires": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/npm-dist-tag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", + "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", + "dev": true, + "requires": { + "@lerna/otplease": "4.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/npm-install": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", + "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + } + }, + "@lerna/npm-publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", + "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", + "dev": true, + "requires": { + "@lerna/otplease": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } + }, + "@lerna/npm-run-script": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", + "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "npmlog": "^4.1.2" + } + }, + "@lerna/otplease": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", + "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", + "dev": true, + "requires": { + "@lerna/prompt": "4.0.0" + } + }, + "@lerna/output": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", + "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/pack-directory": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", + "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", + "dev": true, + "requires": { + "@lerna/get-packed": "4.0.0", + "@lerna/package": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "npm-packlist": "^2.1.4", + "npmlog": "^4.1.2", + "tar": "^6.1.0", + "temp-write": "^4.0.0" + } + }, + "@lerna/package": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", + "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", + "dev": true, + "requires": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + }, + "dependencies": { + "load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "@lerna/package-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", + "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", + "dev": true, + "requires": { + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "semver": "^7.3.4" + } + }, + "@lerna/prerelease-id-from-version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", + "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", + "dev": true, + "requires": { + "semver": "^7.3.4" + } + }, + "@lerna/profiler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", + "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "upath": "^2.0.1" + } + }, + "@lerna/project": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", + "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", + "dev": true, + "requires": { + "@lerna/package": "4.0.0", + "@lerna/validation-error": "4.0.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "@lerna/prompt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", + "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", + "dev": true, + "requires": { + "inquirer": "^7.3.3", + "npmlog": "^4.1.2" + } + }, + "@lerna/publish": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", + "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/log-packed": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/npm-dist-tag": "4.0.0", + "@lerna/npm-publish": "4.0.0", + "@lerna/otplease": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/pack-directory": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/version": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/pulse-till-done": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", + "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/query-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", + "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", + "dev": true, + "requires": { + "@lerna/package-graph": "4.0.0" + } + }, + "@lerna/resolve-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", + "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^2.0.0" + } + }, + "@lerna/rimraf-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", + "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", + "dev": true, + "requires": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "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 + } + } + }, + "@lerna/run": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", + "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", + "dev": true, + "requires": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-run-script": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/timer": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/run-lifecycle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", + "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", + "dev": true, + "requires": { + "@lerna/npm-conf": "4.0.0", + "npm-lifecycle": "^3.1.5", + "npmlog": "^4.1.2" + } + }, + "@lerna/run-topologically": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", + "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", + "dev": true, + "requires": { + "@lerna/query-graph": "4.0.0", + "p-queue": "^6.6.2" + } + }, + "@lerna/symlink-binary": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", + "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", + "dev": true, + "requires": { + "@lerna/create-symlink": "4.0.0", + "@lerna/package": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/symlink-dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", + "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", + "dev": true, + "requires": { + "@lerna/create-symlink": "4.0.0", + "@lerna/resolve-symlink": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "dependencies": { + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "@lerna/timer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", + "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", + "dev": true + }, + "@lerna/validation-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", + "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@lerna/version": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", + "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/conventional-commits": "4.0.0", + "@lerna/github-client": "4.0.0", + "@lerna/gitlab-client": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "temp-write": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "dependencies": { + "load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "@lerna/write-log-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", + "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", + "dev": true, + "requires": { + "npmlog": "^4.1.2", + "write-file-atomic": "^3.0.3" + } + }, "@microsoft/tsdoc": { "version": "0.13.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.13.2.tgz", @@ -9150,10 +20152,304 @@ "fastq": "^1.6.0" } }, + "@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", + "dev": true + }, + "@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "dev": true + }, + "@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0" + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "requires": {} + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "requires": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, "@polka/url": { - "version": "1.0.0-next.20", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.20.tgz", - "integrity": "sha512-88p7+M0QGxKpmnkfXjS4V26AnoC/eiqZutE8GLdaI5X12NY75bXSdTY9NkmYb2Xyk1O+MmkuO6Frmsj84V6I8Q==", + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@tsconfig/node10": { @@ -9180,6 +20476,47 @@ "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, + "@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, "@types/chai": { "version": "4.2.22", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz", @@ -9187,9 +20524,9 @@ "dev": true }, "@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.2.tgz", + "integrity": "sha512-KubbADPkfoU75KgKeKLsFHXnU4ipH7wYg0TRT33NK3N3yiu7jlFAAoygIWBV+KbuHx/G+AvuGX6DllnK35gfJA==", "dev": true, "requires": { "@types/estree": "*", @@ -9212,6 +20549,39 @@ "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -9225,9 +20595,21 @@ "dev": true }, "@types/lodash": { - "version": "4.14.175", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", - "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "version": "4.14.176", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.176.tgz", + "integrity": "sha512-xZmuPTa3rlZoIbtDUyJKZQimJV3bxCmzMIO2c9Pz9afyDro6kr7R79GwcB6mRhuoPmV2p1Vb66WOJH7F886WKQ==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/mocha": { @@ -9237,9 +20619,27 @@ "dev": true }, "@types/node": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.0.tgz", - "integrity": "sha512-8MLkBIYQMuhRBQzGN9875bYsOhPnf/0rgXGo66S2FemHkhbn9qtsz9ywV1iCG+vbjigE4WUNVvw37Dx+L0qsPg==", + "version": "16.11.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz", + "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, "@types/puppeteer": { @@ -9251,6 +20651,12 @@ "@types/node": "*" } }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, "@types/ws": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", @@ -9260,6 +20666,21 @@ "@types/node": "*" } }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, "@types/yauzl": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", @@ -9271,32 +20692,44 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz", - "integrity": "sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.30.0", - "@typescript-eslint/scope-manager": "4.30.0", + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", "debug": "^4.3.1", "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", "regexpp": "^3.1.0", "semver": "^7.3.5", "tsutils": "^3.21.0" } }, "@typescript-eslint/experimental-utils": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz", - "integrity": "sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "requires": { "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.30.0", - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/typescript-estree": "4.30.0", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } } }, "@typescript-eslint/parser": { @@ -9309,75 +20742,32 @@ "@typescript-eslint/types": "4.33.0", "@typescript-eslint/typescript-estree": "4.33.0", "debug": "^4.3.1" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - } } }, "@typescript-eslint/scope-manager": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz", - "integrity": "sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0" + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" } }, "@typescript-eslint/types": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.30.0.tgz", - "integrity": "sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz", - "integrity": "sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", - "@typescript-eslint/visitor-keys": "4.30.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", "debug": "^4.3.1", "globby": "^11.0.3", "is-glob": "^4.0.1", @@ -9386,12 +20776,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz", - "integrity": "sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw==", + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "requires": { - "@typescript-eslint/types": "4.30.0", + "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -9571,14 +20961,23 @@ "requires": {} }, "@xrplf/eslint-config": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@xrplf/eslint-config/-/eslint-config-1.5.0.tgz", - "integrity": "sha512-jVxkjC+kxkXXNDhDKGteqJ8Bhvrq2xwg00UTqArZTYK0VPDzEaFOgrOKgruybz7/pzY0n8Gf2HRu2tENRtRB+Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@xrplf/eslint-config/-/eslint-config-1.6.0.tgz", + "integrity": "sha512-igWdZB/X/k6MvRXb+4ZYwJHO7SewnL/zkhNJyVy+8zrcGcgSbJcAh3bPtRaBifse4WaGvyh42u2xGpGFT8E9DQ==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.9", "eslint-config-airbnb": "^18.2.1", "eslint-config-prettier": "8.3.0" + }, + "dependencies": { + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + } } }, "@xrplf/prettier-config": { @@ -9599,12 +20998,34 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -9613,9 +21034,15 @@ "requires": {} }, "acorn-walk": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.1.tgz", - "integrity": "sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", "dev": true }, "agent-base": { @@ -9626,6 +21053,17 @@ "debug": "4" } }, + "agentkeepalive": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", + "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -9661,6 +21099,23 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -9695,12 +21150,60 @@ "default-require-extensions": "^3.0.0" } }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, "archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -9727,6 +21230,36 @@ "@babel/runtime-corejs3": "^7.10.2" } }, + "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-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-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-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, "array-includes": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", @@ -9746,6 +21279,12 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "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 + }, "array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -9758,16 +21297,36 @@ } }, "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "peer": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" } }, "asn1.js": { @@ -9801,12 +21360,24 @@ "util": "^0.12.0" } }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "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 + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -9826,15 +21397,45 @@ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "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 + }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, "axe-core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz", - "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", "dev": true, "peer": true }, @@ -9845,16 +21446,134 @@ "dev": true, "peer": true }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", + "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "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" + } + } + } + }, "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "requires": { "safe-buffer": "^5.0.1" } @@ -9864,10 +21583,25 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==" }, "bignumber.js": { "version": "9.0.1", @@ -9979,6 +21713,12 @@ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", @@ -10050,16 +21790,25 @@ } }, "browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz", + "integrity": "sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", + "caniuse-lite": "^1.0.30001274", + "electron-to-chromium": "^1.3.886", "escalade": "^3.1.1", - "node-releases": "^1.1.75" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" } }, "bs58": { @@ -10080,6 +21829,15 @@ "safe-buffer": "^5.1.2" } }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, "buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -10114,6 +21872,90 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "byline": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "dev": true + }, + "byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + } + } + }, + "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" + } + }, "caching-transform": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", @@ -10147,10 +21989,36 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, "caniuse-lite": { - "version": "1.0.30001252", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz", - "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==", + "version": "1.0.30001278", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz", + "integrity": "sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chai": { @@ -10177,6 +22045,18 @@ "supports-color": "^7.1.0" } }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -10211,6 +22091,12 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -10220,12 +22106,113 @@ "safe-buffer": "^5.0.1" } }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "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 + } + } + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -10237,6 +22224,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -10248,6 +22241,43 @@ "shallow-clone": "^3.0.0" } }, + "cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "requires": { + "mkdirp-infer-owner": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "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", @@ -10264,11 +22294,47 @@ "dev": true }, "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + } + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10287,18 +22353,199 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + } + } + }, + "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 + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "confusing-browser-globals": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + } + }, + "conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "requires": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + } + } + }, + "conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true + }, + "conventional-changelog-writer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", + "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", + "dev": true, + "requires": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.6", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "requires": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + } + }, + "conventional-commits-parser": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz", + "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==", + "dev": true, + "requires": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "requires": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + } + }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -10316,13 +22563,52 @@ } } }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, "core-js-pure": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.0.tgz", - "integrity": "sha512-O5RvMRWW+I0hfR227mrIwU+gPLVaa4kPEq+9b8FcjuFed4QckOvYc94c2KSI/X5dlvcsj/V1Sp5F5cecYpNQOQ==", + "version": "3.19.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz", + "integrity": "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==", "dev": true, "peer": true }, + "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=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } + } + }, "create-ecdh": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", @@ -10402,6 +22688,29 @@ "randomfill": "^1.0.3" } }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, "damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", @@ -10409,6 +22718,38 @@ "dev": true, "peer": true }, + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true + }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", @@ -10417,17 +22758,53 @@ "ms": "2.1.2" } }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + } + } + }, "decimal.js": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" }, + "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 + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -10438,9 +22815,15 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, "default-require-extensions": { @@ -10452,6 +22835,15 @@ "strip-bom": "^4.0.0" } }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -10460,6 +22852,40 @@ "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" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -10470,18 +22896,46 @@ "minimalistic-assert": "^1.0.0" } }, + "detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, "devtools-protocol": { "version": "0.0.901419", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -10519,12 +22973,48 @@ "esutils": "^2.0.2" } }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ejs": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", @@ -10535,9 +23025,9 @@ } }, "electron-to-chromium": { - "version": "1.3.826", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.826.tgz", - "integrity": "sha512-bpLc4QU4B8PYmdO4MSu2ZBTMD8lAaEXRS43C09lB31BvYwuk9UxgBRXbY5OJBw7VuMGcg2MZG5FyTaP9u4PQnw==", + "version": "1.3.890", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.890.tgz", + "integrity": "sha512-VWlVXSkv0cA/OOehrEyqjUTHwV8YXCPTfPvbtoeU2aHR21vI4Ejh5aC4AxUwOmbLbBgb6Gd3URZahoCxtBqCYQ==", "dev": true }, "elliptic": { @@ -10561,6 +23051,41 @@ } } }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -10589,12 +23114,24 @@ "ansi-colors": "^4.1.1" } }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -10632,9 +23169,9 @@ } }, "es-module-lexer": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.2.tgz", - "integrity": "sha512-YkAGWqxZq2B4FxQ5y687UwywDwvLQhIMCZ+SDU7ZW729SDHOEI6wVFXwTRecz+yiwJzCsVwC6V7bxyNbZSB1rg==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es-to-primitive": { @@ -10670,6 +23207,60 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "eslint": { "version": "7.32.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", @@ -10718,22 +23309,11 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true } } }, @@ -10759,13 +23339,6 @@ "object.entries": "^1.1.2" } }, - "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", - "dev": true, - "requires": {} - }, "eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -10828,33 +23401,6 @@ "lodash.upperfirst": "^4.3.1" } }, - "eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "requires": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, "eslint-plugin-eslint-comments": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", @@ -10870,12 +23416,6 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true } } }, @@ -10927,9 +23467,9 @@ } }, "eslint-plugin-jsdoc": { - "version": "36.0.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.8.tgz", - "integrity": "sha512-brNjHvRuBy5CaV01mSp6WljrO/T8fHNj0DXG38odOGDnhI7HdcbLKX7DpSvg2Rfcifwh8GlnNFzx13sI05t3bg==", + "version": "36.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.1.1.tgz", + "integrity": "sha512-nuLDvH1EJaKx0PCa9oeQIxH6pACIhZd1gkalTUxZbaxxwokjs7TplqY0Q8Ew3CoZaf5aowm0g/Z3JGHCatt+gQ==", "dev": true, "requires": { "@es-joy/jsdoccomment": "0.10.8", @@ -10961,15 +23501,6 @@ "has": "^1.0.3", "jsx-ast-utils": "^3.1.0", "language-tags": "^1.0.5" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "peer": true - } } }, "eslint-plugin-mocha": { @@ -10980,6 +23511,17 @@ "requires": { "eslint-utils": "^3.0.0", "ramda": "^0.27.1" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + } } }, "eslint-plugin-node": { @@ -10996,27 +23538,16 @@ "semver": "^6.1.0" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -11035,9 +23566,9 @@ } }, "eslint-plugin-react": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", - "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", + "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", "dev": true, "peer": true, "requires": { @@ -11045,14 +23576,15 @@ "array.prototype.flatmap": "^1.2.4", "doctrine": "^2.1.0", "estraverse": "^5.2.0", - "has": "^1.0.3", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", "object.entries": "^1.1.4", "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", "object.values": "^1.1.4", "prop-types": "^15.7.2", "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", "string.prototype.matchall": "^4.0.5" }, "dependencies": { @@ -11076,6 +23608,13 @@ "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true } } }, @@ -11116,12 +23655,20 @@ } }, "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { @@ -11174,9 +23721,9 @@ } }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -11191,6 +23738,12 @@ "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==", "dev": true }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -11207,6 +23760,12 @@ "safe-buffer": "^5.1.1" } }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -11232,6 +23791,208 @@ } } }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "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 + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + } + }, + "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" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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 + } + } + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -11244,6 +24005,12 @@ "yauzl": "^2.10.0" } }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -11296,6 +24063,15 @@ "reusify": "^1.0.4" } }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -11305,6 +24081,23 @@ "pend": "~1.2.0" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "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 + } + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -11337,6 +24130,12 @@ "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -11439,6 +24238,12 @@ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -11454,6 +24259,32 @@ "signal-exit": "^3.0.2" } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "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" + } + }, "fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -11466,6 +24297,27 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -11490,6 +24342,65 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "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" + } + } + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11524,6 +24435,75 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, + "get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "requires": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -11542,6 +24522,98 @@ "get-intrinsic": "^1.1.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 + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "git-raw-commits": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", + "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", + "dev": true, + "requires": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + } + }, + "git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "dev": true, + "requires": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "requires": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "git-url-parse": { + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.6.0.tgz", + "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "dev": true, + "requires": { + "ini": "^1.3.2" + } + }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -11572,9 +24644,9 @@ "dev": true }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -11592,14 +24664,6 @@ "ignore": "^5.1.4", "merge2": "^1.3.0", "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } } }, "graceful-fs": { @@ -11614,6 +24678,13 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, "gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -11623,6 +24694,41 @@ "duplexer": "^0.1.2" } }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -11655,6 +24761,64 @@ "has-symbols": "^1.0.2" } }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "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.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -11714,12 +24878,49 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -11741,17 +24942,44 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", "dev": true }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -11844,6 +25072,12 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -11859,6 +25093,83 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "init-package-json": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "dev": true, + "requires": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "read-package-json": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-4.1.1.tgz", + "integrity": "sha512-P82sbZJ3ldDrWCOSKxJT0r/CXMWR0OR3KRh55SgKo3p91GSIEEC32v3lSHAvO/UcH3/IoL7uqhOFBduAnwdldw==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + } + } + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -11875,6 +25186,21 @@ "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "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" + } + }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -11916,11 +25242,26 @@ "has-tostringtag": "^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==", + "dev": true + }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-core-module": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", @@ -11930,6 +25271,15 @@ "has": "^1.0.3" } }, + "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" + } + }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -11938,6 +25288,33 @@ "has-tostringtag": "^1.0.0" } }, + "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" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": 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" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -11950,6 +25327,12 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -11967,6 +25350,12 @@ "is-extglob": "^2.1.1" } }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "dev": true + }, "is-nan": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", @@ -11995,6 +25384,18 @@ "has-tostringtag": "^1.0.0" } }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -12004,6 +25405,12 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -12018,6 +25425,15 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" }, + "is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -12040,6 +25456,15 @@ "has-symbols": "^1.0.2" } }, + "is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "dev": true, + "requires": { + "text-extensions": "^1.0.0" + } + }, "is-typed-array": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", @@ -12078,6 +25503,22 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -12090,10 +25531,16 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-hook": { @@ -12152,28 +25599,20 @@ } }, "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -12250,26 +25689,779 @@ } } }, + "jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + } + } + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + }, + "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 + }, + "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": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "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 + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + }, + "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 + }, + "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": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + } + }, "jest-worker": { - "version": "27.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.0.tgz", - "integrity": "sha512-mO4PHb2QWLn9yRXGp7rkvXLAYuxwhq1ZYUo0LoDhg8wqvv4QizP1ZWEJOeolgbEgAWZLIEU0wsku8J+lGWfBhg==", + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "supports-color": "^7.0.0" } }, "jju": { @@ -12294,12 +26486,89 @@ "esprima": "^4.0.0" } }, - "jsdoc-type-pratt-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", - "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, + "jsdoc-type-pratt-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.2.0.tgz", + "integrity": "sha512-4STjeF14jp4bqha44nKMY1OUI6d2/g6uclHWUCZ7B4DoLzaB5bmpTkQrpqU+vSVzMD0LsKAOskcnI3I3VfIpmg==", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "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 + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -12312,6 +26581,18 @@ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -12324,6 +26605,12 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -12339,14 +26626,52 @@ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "peer": true, "requires": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" } }, @@ -12356,6 +26681,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, "language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", @@ -12373,6 +26704,38 @@ "language-subtag-registry": "~0.3.2" } }, + "lerna": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", + "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", + "dev": true, + "requires": { + "@lerna/add": "4.0.0", + "@lerna/bootstrap": "4.0.0", + "@lerna/changed": "4.0.0", + "@lerna/clean": "4.0.0", + "@lerna/cli": "4.0.0", + "@lerna/create": "4.0.0", + "@lerna/diff": "4.0.0", + "@lerna/exec": "4.0.0", + "@lerna/import": "4.0.0", + "@lerna/info": "4.0.0", + "@lerna/init": "4.0.0", + "@lerna/link": "4.0.0", + "@lerna/list": "4.0.0", + "@lerna/publish": "4.0.0", + "@lerna/run": "4.0.0", + "@lerna/version": "4.0.0", + "import-local": "^3.0.2", + "npmlog": "^4.1.2" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -12383,6 +26746,160 @@ "type-check": "~0.4.0" } }, + "libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "requires": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "dependencies": { + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + } + } + }, + "libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "requires": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + } + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -12424,24 +26941,30 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, + "lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "dev": true + }, "lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -12460,6 +26983,25 @@ "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", "dev": true }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -12530,10 +27072,63 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + } + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "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-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "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" + } + }, "marked": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.4.tgz", - "integrity": "sha512-jBo8AOayNaEcvBhNobg6/BLhdsK3NvnKWJg33MAAPbvTWiG4QBn9gpW1+7RssrKu4K1dKlN+0goVQwV41xEfOA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", "dev": true }, "md5.js": { @@ -12552,6 +27147,178 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, + "meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "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" + } + }, + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "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 + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "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 + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + } + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -12593,9 +27360,9 @@ } }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { @@ -12619,6 +27386,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -12644,6 +27417,104 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "minipass": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz", + "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "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", @@ -12653,6 +27524,31 @@ "minimist": "^1.2.5" } }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "mocha": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", @@ -12760,11 +27656,44 @@ } } }, + "modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nan": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", @@ -12776,12 +27705,37 @@ "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", "dev": 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" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -12800,6 +27754,136 @@ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true }, + "node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "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" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + } + } + }, "node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -12810,11 +27894,21 @@ } }, "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -12841,6 +27935,125 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", + "dev": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + }, + "dependencies": { + "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" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "requires": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, "npm-run-all": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", @@ -12974,6 +28187,30 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "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 + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, "nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -13123,12 +28360,85 @@ } } }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "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, - "peer": 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-inspect": { "version": "1.11.0", @@ -13149,6 +28459,15 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, + "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", @@ -13161,27 +28480,57 @@ } }, "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "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.values": { @@ -13259,6 +28608,40 @@ "word-wrap": "^1.2.3" } }, + "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-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 + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -13286,12 +28669,58 @@ "aggregate-error": "^3.0.0" } }, + "p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + } + }, + "p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "requires": { + "p-reduce": "^2.0.0" + } + }, "package-hash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", @@ -13304,6 +28733,96 @@ "release-zalgo": "^1.0.0" } }, + "pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.0.tgz", + "integrity": "sha512-57e7lwCN4Tzt3mXz25VxOErJKXlPfXmkMLnk310v/jwW20jWRVcgsOit+xNkN3eIEdB47GwnfAEBLacZ/wVIKg==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + } + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13336,6 +28855,42 @@ "json-parse-better-errors": "^1.0.1" } }, + "parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "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": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -13396,6 +28951,18 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -13414,6 +28981,15 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -13423,6 +28999,12 @@ "find-up": "^2.1.0" } }, + "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 + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13444,12 +29026,30 @@ "fast-diff": "^1.1.2" } }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "process-on-spawn": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", @@ -13465,6 +29065,41 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "dev": true, + "requires": { + "read": "1" + } + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -13475,14 +29110,41 @@ "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "peer": true + } } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -13623,6 +29285,33 @@ } } }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -13635,6 +29324,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, "ramda": { "version": "0.27.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz", @@ -13660,11 +29355,95 @@ } }, "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, - "peer": true + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + } + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + }, + "dependencies": { + "read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + } + } }, "read-pkg": { "version": "3.0.0", @@ -13688,6 +29467,16 @@ } } }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -13698,6 +29487,18 @@ "util-deprecate": "^1.0.1" } }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -13716,6 +29517,16 @@ "resolve": "^1.9.0" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", @@ -13723,6 +29534,16 @@ "dev": true, "peer": true }, + "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" + } + }, "regexp.prototype.flags": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", @@ -13755,6 +29576,60 @@ "es6-error": "^4.0.1" } }, + "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 + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13806,6 +29681,34 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, + "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 + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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 + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13831,18 +29734,14 @@ } }, "ripple-address-codec": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ripple-address-codec/-/ripple-address-codec-4.1.3.tgz", - "integrity": "sha512-9mymOhfCUyLZGwotGPg3I2wMfrwHof0W8ygjhW46UdNgFW6J+OvDB/VS9dbHlgED/41mzECp41IXvTrkc1fTwA==", + "version": "file:packages/ripple-address-codec", "requires": { - "base-x": "3.0.8", + "base-x": "3.0.9", "create-hash": "^1.1.2" } }, "ripple-binary-codec": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-1.1.3.tgz", - "integrity": "sha512-NnFNZZ+225BxdDdHtcEn4GiGzup+V0DGAbtKygZIwbqA5116oZBt6uY3g43gYpdDMISsEbM7NewBij8+7jdlvA==", + "version": "file:packages/ripple-binary-codec", "requires": { "assert": "^2.0.0", "big-integer": "^1.6.48", @@ -13864,17 +29763,27 @@ } }, "ripple-keypairs": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-1.0.3.tgz", - "integrity": "sha512-Na5q8sUdxjd5DXBM88ocJgL2Ig0I1USyO3bvI0SMxJPp7F9DHvqLdPX45PVXs7HUq0Dj691Z9Uz9NeD/K7/eOA==", + "version": "file:packages/ripple-keypairs", "requires": { "bn.js": "^5.1.1", "brorand": "^1.0.5", - "elliptic": "^6.5.2", + "elliptic": "^6.5.4", "hash.js": "^1.0.3", "ripple-address-codec": "^4.0.0" } }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -13884,17 +29793,279 @@ "queue-microtask": "^1.2.2" } }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "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 }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "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" + } + }, + "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" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.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" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.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 + }, + "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" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "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" + } + }, + "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" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "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" + } + }, + "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" + } + } + } + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -13930,6 +30101,35 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "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 + } + } + }, "sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", @@ -13964,15 +30164,22 @@ "dev": true }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, "shiki": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.11.tgz", - "integrity": "sha512-tjruNTLFhU0hruCPoJP0y+B9LKOmcqUhTpxn7pcJB3fa+04gFChuEmxmrUfOJ7ZO6Jd+HwMnDHgY3lv3Tqonuw==", + "version": "0.9.12", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.12.tgz", + "integrity": "sha512-VXcROdldv0/Qu0w2XvzU4IrvTeBNs/Kj/FCmtcEXGz7Tic/veQzliJj6tEiAgoKianhQstpYmbPDStHU5Opqcw==", "dev": true, "requires": { "jsonc-parser": "^3.0.0", @@ -13997,9 +30204,9 @@ "dev": true }, "sirv": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.17.tgz", - "integrity": "sha512-qx9go5yraB7ekT7bCMqUHJ5jEaOC/GXBxUWv+jeWnb7WzHUFdcQPGWk7YmAwFBaQBrogpuSqd/azbC2lZRqqmw==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.18.tgz", + "integrity": "sha512-f2AOPogZmXgJ9Ma2M22ZEhc1dNtRIzcEkiflMFeVTRq+OViOZMvH1IPMVOwrKaxpSaHioBJiDR0SluRqGa7atA==", "dev": true, "requires": { "@polka/url": "^1.0.0-next.20", @@ -14007,6 +30214,12 @@ "totalist": "^1.0.0" } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14024,30 +30237,253 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "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 + }, + "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "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" + } + } + } + }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + } + }, + "sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "requires": { + "is-plain-obj": "^2.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, + "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 + }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -14094,12 +30530,166 @@ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "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" + } + }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "requires": { + "readable-stream": "^3.0.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "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" + } + }, + "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 + } + } + }, "stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", @@ -14122,6 +30712,12 @@ "xtend": "^4.0.2" } }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -14130,15 +30726,25 @@ "safe-buffer": "~5.2.0" } }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "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.0" + "strip-ansi": "^6.0.1" }, "dependencies": { "emoji-regex": { @@ -14150,15 +30756,15 @@ } }, "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "peer": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -14167,14 +30773,14 @@ } }, "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "es-abstract": "^1.19.1" } }, "string.prototype.trimend": { @@ -14196,12 +30802,12 @@ } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "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.0" + "ansi-regex": "^5.0.1" } }, "strip-bom": { @@ -14210,18 +30816,44 @@ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -14231,24 +30863,39 @@ "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.3.tgz", + "integrity": "sha512-5DkIxeA7XERBqMwJq0aHZOdMadBx4e6eDoFRuyT5VR82J0Ycg2DwM6GfA/EQAhJ+toRTaS1lIdSQCqgrmhPnlw==", "dev": true, "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -14271,6 +30918,34 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "tar-fs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", @@ -14296,15 +30971,44 @@ "readable-stream": "^3.1.1" } }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, "terser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.2.tgz", - "integrity": "sha512-0Omye+RD4X7X69O0eql3lC4Heh/5iLj3ggxR/B5ketZLOtLiOqukUgjw3q4PDnNQbsrkKr3UMypqStQG3XKRvw==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dev": true, "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "source-map": { @@ -14316,9 +31020,9 @@ } }, "terser-webpack-plugin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.0.tgz", - "integrity": "sha512-FpR4Qe0Yt4knSQ5u2bA1wkM0R8VlVsvhyfSHvomXRivS4vPLk0dJV2IhRBIHRABh7AFutdMeElIA5y1dETwMBg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", + "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", "dev": true, "requires": { "jest-worker": "^27.0.6", @@ -14329,6 +31033,17 @@ "terser": "^5.7.2" }, "dependencies": { + "jest-worker": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -14338,11 +31053,14 @@ "yocto-queue": "^0.1.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -14357,18 +31075,39 @@ "minimatch": "^3.0.4" } }, + "text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "requires": { + "readable-stream": "3" + } + }, "tiny-secp256k1": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", @@ -14388,12 +31127,59 @@ } } }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, + "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": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -14409,6 +31195,57 @@ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", "dev": true }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, "ts-loader": { "version": "9.2.6", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", @@ -14422,9 +31259,9 @@ } }, "ts-node": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.0.tgz", - "integrity": "sha512-RYIy3i8IgpFH45AX4fQHExrT8BxDeKTdC83QFJkNzkvt8uFB6QJ8XMyhynYiKMLxt9a7yuXaDBZNOYS3XjDcYw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", @@ -14442,9 +31279,15 @@ }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "diff": { @@ -14499,6 +31342,21 @@ "tslib": "^1.8.1" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14520,6 +31378,12 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -14530,16 +31394,16 @@ } }, "typedoc": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.5.tgz", - "integrity": "sha512-KFrWGU1iKiTGw0RcyjLNYDmhd7uICU14HgBNPmFKY/sT4Pm/fraaLyWyisst9vGTUAKxqibqoDITR7+ZcAkhHg==", + "version": "0.22.8", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.8.tgz", + "integrity": "sha512-92S+YzyhospdXN5rnkYUTgirdTYqNWY7NP9vco+IqQQoiSXzVSUsawVro+tMyEEsWUS7EMaJ2YOjB9uE0CBi6A==", "dev": true, "requires": { "glob": "^7.2.0", "lunr": "^2.3.9", - "marked": "^3.0.4", + "marked": "^3.0.8", "minimatch": "^3.0.4", - "shiki": "^0.9.11" + "shiki": "^0.9.12" }, "dependencies": { "glob": { @@ -14569,6 +31433,25 @@ "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, + "uglify-js": { + "version": "3.14.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.3.tgz", + "integrity": "sha512-mic3aOdiq01DuSVx0TseaEzMIVqebMZ0Z3vaeDhFEh9bsc24hV1TFvN74reA2vs08D0ZWfNjAcJ3UbVLaBss+g==", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true + }, + "umask": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", + "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "dev": true + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -14602,6 +31485,102 @@ } } }, + "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-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "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": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -14611,6 +31590,12 @@ "punycode": "^2.1.0" } }, + "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", @@ -14629,6 +31614,12 @@ } } }, + "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.12.4", "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", @@ -14647,6 +31638,15 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", @@ -14659,6 +31659,25 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "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", @@ -14669,12 +31688,59 @@ "spdx-expression-parse": "^3.0.0" } }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, "vscode-textmate": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", "dev": true }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, "watchpack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", @@ -14685,10 +31751,25 @@ "graceful-fs": "^4.1.2" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, "webpack": { - "version": "5.58.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", - "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "version": "5.62.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.62.1.tgz", + "integrity": "sha512-jNLtnWChS2CMZ7vqWtztv0G6fYB5hz11Zsadp5tE7e4/66zVDj7/KUeQZOsOl8Hz5KrLJH1h2eIDl6AnlyE12Q==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -14718,15 +31799,15 @@ }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", "dev": true }, "acorn-import-assertions": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", - "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, "requires": {} } @@ -14750,9 +31831,15 @@ }, "dependencies": { "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "commander": { @@ -14760,20 +31847,13 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true - }, - "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "requires": {} } } }, "webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", @@ -14787,16 +31867,9 @@ "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -14816,11 +31889,37 @@ } }, "webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-fahN08Et7P9trej8xz/Z7eRu8ltyiygEo/hnRi9KqBUs80KeDcnf96ZJo++ewWd84fEf3xSX9bp4ZS9hbw0OBw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", + "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", "dev": true }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -14861,6 +31960,15 @@ "is-typed-array": "^1.1.7" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "wif": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", @@ -14881,6 +31989,12 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "workerpool": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", @@ -14916,12 +32030,150 @@ "typedarray-to-buffer": "^3.1.5" } }, + "write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "requires": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, + "write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "requires": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + } + } + } + }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, "requires": {} }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xrpl": { + "version": "file:packages/xrpl", + "requires": { + "bignumber.js": "^9.0.0", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "https-proxy-agent": "^5.0.0", + "lodash": "^4.17.4", + "ripple-address-codec": "^4.1.1", + "ripple-binary-codec": "^1.1.3", + "ripple-keypairs": "^1.0.3", + "ws": "^8.2.2" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "requires": {} + } + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -14940,6 +32192,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/package.json b/package.json index 58bf0eea..4e676797 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,20 @@ { - "name": "xrpl", - "version": "2.0.1", - "license": "ISC", - "description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser", - "files": [ - "dist/npm/*", - "build/xrpl-latest-min.js", - "build/xrpl-latest.js" - ], - "main": "dist/npm/", - "unpkg": "build/xrpl-latest-min.js", - "jsdelivr": "build/xrpl-latest-min.js", - "types": "dist/npm/index.d.ts", - "directories": { - "test": "test" - }, - "browser": { - "ws": "./dist/npm/client/WSWrapper.js" + "name": "xrpl.js", + "private": true, + "scripts": { + "test": "lerna run test --stream", + "test:browser": "lerna run test:browser --stream", + "test:integration": "lerna run test:integration --stream", + "lint": "lerna run lint --stream", + "clean": "lerna run clean --stream", + "build": "lerna run build --stream", + "docgen": "lerna run docgen --stream" }, "dependencies": { - "bignumber.js": "^9.0.0", - "bip32": "^2.0.6", - "bip39": "^3.0.4", - "https-proxy-agent": "^5.0.0", - "lodash": "^4.17.4", - "ripple-address-codec": "^4.1.1", - "ripple-binary-codec": "^1.1.3", - "ripple-keypairs": "^1.0.3", - "ws": "^8.2.2" - }, - "resolutions": { - "elliptic": "^6.5.4" + "ripple-address-codec": "file:packages/ripple-address-codec", + "ripple-binary-codec": "file:packages/ripple-binary-codec", + "ripple-keypairs": "file:packages/ripple-keypairs", + "xrpl": "file:packages/xrpl" }, "devDependencies": { "@types/chai": "^4.2.21", @@ -41,7 +25,7 @@ "@types/ws": "^8.2.0", "@typescript-eslint/eslint-plugin": "^4.30.0", "@typescript-eslint/parser": "^4.0.0", - "@xrplf/eslint-config": "^1.5.0", + "@xrplf/eslint-config": "^1.6.0", "@xrplf/prettier-config": "^1.5.0", "assert": "^2.0.0", "buffer": "^6.0.2", @@ -60,6 +44,8 @@ "eslint-plugin-tsdoc": "^0.2.14", "eventemitter2": "^6.0.0", "https-browserify": "^1.0.0", + "jest": "^26.0.1", + "lerna": "^4.0.0", "mocha": "^9", "npm-run-all": "^4.1.5", "nyc": "^15", @@ -67,8 +53,10 @@ "prettier": "^2.3.2", "process": "^0.11.10", "puppeteer": "10.4.0", + "source-map-support": "^0.5.16", "stream-browserify": "^3.0.0", "stream-http": "3.2.0", + "ts-jest": "^26.4.4", "ts-loader": "^9.2.5", "ts-node": "^10.2.1", "typedoc": "^0.22.5", @@ -78,36 +66,11 @@ "webpack-bundle-analyzer": "^4.1.0", "webpack-cli": "^4.2.0" }, - "scripts": { - "build": "run-s build:lib build:snippets build:web", - "build:snippets": "tsc --build ./snippets/tsconfig.json", - "build:lib": "tsc --build tsconfig.build.json", - "build:web": "webpack", - "build:browserTests": "webpack --config ./test/webpack.config.js", - "analyze": "run-s build:web --analyze", - "watch": "run-s build:lib --watch", - "clean": "rm -rf dist", - "docgen": "typedoc && echo js.xrpl.org >> ./docs/CNAME", - "prepublish": "run-s clean build", - "test": "nyc mocha --config=test/.mocharc.json --exit", - "test:integration": "TS_NODE_PROJECT=tsconfig.build.json nyc mocha ./test/integration/**/*.ts ./test/integration/*.ts", - "test:browser": "npm run build:browserTests && TS_NODE_PROJECT=tsconfig.build.json nyc mocha ./test/browser/*.ts", - "test:watch": "TS_NODE_PROJECT=src/tsconfig.json mocha --config=test/.mocharc.json --watch --reporter dot", - "format": "prettier --write '{src,test}/**/*.ts'", - "lint": "eslint . --ext .ts --max-warnings 0", - "perf": "./scripts/perf_test.sh", - "compile:snippets": "tsc -p snippets/tsconfig.json", - "start:snippet": "npm run compile:snippets && node", - "inspect:snippet": "npm run compile:snippets && node inspect" - }, - "prettier": "@xrplf/prettier-config", - "repository": { - "type": "git", - "url": "git@github.com:XRPLF/xrpl.js.git" - }, - "readmeFilename": "README.md", + "workspaces": [ + "packages/*" + ], "engines": { - "node": ">=10.13.0", - "npm": ">=7.14.0 <8.0.0" + "node": ">=10.0.0", + "npm": ">=7.0.0 < 8.0.0" } } diff --git a/packages/ripple-address-codec/.eslintignore b/packages/ripple-address-codec/.eslintignore new file mode 100644 index 00000000..0fc07055 --- /dev/null +++ b/packages/ripple-address-codec/.eslintignore @@ -0,0 +1,12 @@ +# Don't ever lint node_modules +node_modules + +# Don't lint build output +dist + +# don't lint nyc coverage output +coverage +.nyc_output + +# Don't lint NYC configuration +nyc.config.js diff --git a/packages/ripple-address-codec/.eslintrc.js b/packages/ripple-address-codec/.eslintrc.js new file mode 100644 index 00000000..c5fa2f64 --- /dev/null +++ b/packages/ripple-address-codec/.eslintrc.js @@ -0,0 +1,86 @@ +module.exports = { + root: true, + + parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + + sourceType: 'module', // Allow the use of imports / ES modules + + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + + // Specify global variables that are predefined + env: { + browser: true, // Enable browser global variables + node: true, // Enable node global variables & Node.js scoping + es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 + }, + + plugins: [], + extends: ['@xrplf/eslint-config/base'], + + rules: { + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-for-in-array': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/no-unnecessary-type-assertion': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/check-param-names': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-param': 'off', + 'jsdoc/no-types': 'off', + 'tsdoc/syntax': 'off', + 'import/no-commonjs': 'off', + 'import/order': 'off', + 'prettier/prettier': 'off', + 'no-restricted-syntax': 'off', + 'guard-for-in': 'off', + 'object-shorthand': 'off', + 'no-negated-condition': 'off', + 'no-loop-func': 'off', + 'id-length': 'off', + 'no-inline-comments': 'off', + 'max-lines-per-function': 'off', + 'max-len': 'off', + 'no-nested-ternary': 'off', + 'no-param-reassign': 'off', + 'no-bitwise': 'off', + 'multiline-comment-style': 'off', + 'id-blacklist': 'off', + 'func-names': 'off', + 'max-params': 'off', + 'prefer-template': 'off', + 'no-else-return': 'off', + }, +} diff --git a/packages/ripple-address-codec/.gitignore b/packages/ripple-address-codec/.gitignore new file mode 100644 index 00000000..be126fe8 --- /dev/null +++ b/packages/ripple-address-codec/.gitignore @@ -0,0 +1,61 @@ +# .gitignore + +# Ignore vim swap files. +*.swp + +# Ignore SCons support files. +.sconsign.dblite + +# Ignore python compiled files. +*.pyc + +# Ignore Macintosh Desktop Services Store files. +.DS_Store + +# Ignore backup/temps +*~ + +# Ignore object files. +*.o +build/ +tags +bin/rippled +Debug/*.* +Release/*.* + +# Ignore locally installed node_modules +node_modules +!test/node_modules + +# Ignore tmp directory. +tmp + +# Ignore database directory. +db/*.db +db/*.db-* + +# Ignore customized configs +rippled.cfg +validators.txt +test/config.js + +# Ignore coverage files +/lib-cov +/src-cov +/coverage.html +/coverage + +# Ignore IntelliJ files +.idea + +# Ignore npm-debug +npm-debug.log + +# Ignore dist folder +dist/ + +# Ignore flow output directory +out/ + +# Ignore perf test cache +scripts/cache diff --git a/packages/ripple-address-codec/HISTORY.md b/packages/ripple-address-codec/HISTORY.md new file mode 100644 index 00000000..cfc14d00 --- /dev/null +++ b/packages/ripple-address-codec/HISTORY.md @@ -0,0 +1,64 @@ +# ripple-address-cod + +## 4.1.3 (2021-05-10) + +* Update dependencies +* Add `build` script as an alias for `compile` +* Update README + +## 4.1.2 (2021-01-11) + +* Internal dependencies + * Update jest, ts-jest, typescript, lodash + * Fix potential moderate severity vulnerabilities + * Update @types/node, @types/jest, base-x +* Docs + * Update example for encoding test address + * Document functions (#73) + * xAddressToClassicAddress when there is no tag (#114) + * Add README badges (#120) + * Add LICENSE (#138) +* Cleanup and polish + * Add GitHub CI (#115) + * Fix linting + +## 4.1.1 (2020-04-03) + +* Require node v10+ +* CI: Drop node 6 & 8 and add node 13 +* Update dependencies + * Bump @types/node to 13.7.7 (#60) + * Bump jest and ts-jest (#40) + * Bump @types/jest to 25.1.2 (#51) + * Bump ts-jest from 25.0.0 to 25.2.0 (#50) + * Bump typescript from 3.7.5 to 3.8.3 (#61) + * Update all dependencies in yarn.lock + +## 4.1.0 (2020-01-22) + +* Throwable 'unexpected_payload_length' error: The message has been expanded with ' Ensure that the bytes are a Buffer.' +* Docs (readme): Correct X-address to classic address example (#15) (thanks @RareData) + +### New Features + +* `encodeAccountPublic` - Encode a public key, as for payment channels +* `decodeAccountPublic` - Decode a public key, as for payment channels + +* Internal + * Update dependencies: ts-jest, @types/jest, @types/node, typescript, tslint, + base-x + +## 4.0.0 (2019-10-08) + +### Breaking Changes + +* `decodeAddress` has been renamed to `decodeAccountID` +* `isValidAddress` has been renamed to `isValidClassicAddress` + +### New Features + +* `classicAddressToXAddress` - Derive X-address from classic address, tag, and network ID +* `encodeXAddress` - Encode account ID, tag, and network ID as an X-address +* `xAddressToClassicAddress` - Decode an X-address to account ID, tag, and network ID +* `decodeXAddress` - Convert X-address to classic address, tag, and network ID +* `isValidXAddress` - Check whether an X-address (X...) is valid diff --git a/packages/ripple-address-codec/LICENSE b/packages/ripple-address-codec/LICENSE new file mode 100644 index 00000000..13e97d50 --- /dev/null +++ b/packages/ripple-address-codec/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 Ripple Labs Inc. + + 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. diff --git a/packages/ripple-address-codec/README.md b/packages/ripple-address-codec/README.md new file mode 100644 index 00000000..16f26a12 --- /dev/null +++ b/packages/ripple-address-codec/README.md @@ -0,0 +1,196 @@ +# ripple-address-codec + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Build Status][travis-image]][travis-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Functions for encoding and decoding XRP Ledger addresses and seeds. + +Also includes support for encoding/decoding [rippled validator (node) public keys](https://xrpl.org/run-rippled-as-a-validator.html). + +[![NPM](https://nodei.co/npm/ripple-address-codec.png)](https://www.npmjs.org/package/ripple-address-codec) + +## X-address Conversion + +All tools and apps in the XRP Ledger ecosystem are encouraged to adopt support for the X-address format. The X-address format is a single Base58 string that encodes an 'Account ID', a (destination) tag, and whether the address is intended for a test network. This prevents users from unintentionally omitting the destination tag when sending and receiving payments and other transactions. + +## API + +### classicAddressToXAddress(classicAddress: string, tag: number | false, test: boolean): string + +Convert a classic address and (optional) tag to an X-address. If `tag` is `false`, the returned X-address explicitly indicates that the recipient does not want a tag to be used. If `test` is `true`, consumers of the address will know that the address is intended for use on test network(s) and the address will start with `T`. + +```js +> const api = require('ripple-address-codec') +> api.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295) +'XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi' +``` + +Encode a test address e.g. for use with [Testnet or Devnet](https://xrpl.org/xrp-testnet-faucet.html): + +```js +> const api = require('ripple-address-codec') +> api.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true) +'T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD' +``` + +### xAddressToClassicAddress(xAddress: string): {classicAddress: string, tag: number | false, test: boolean} + +Convert an X-address to a classic address and tag. If the X-address did not have a tag, the returned object's `tag` will be `false`. (Since `0` is a valid tag, instead of `if (tag)`, use `if (tag !== false)` if you want to check for a tag.) If the X-address is intended for use on test network(s), `test` will be `true`; if it is intended for use on the main network (mainnet), `test` will be `false`. + +```js +> const api = require('ripple-address-codec') +> api.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi') +{ + classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + tag: 4294967295, + test: false +} +``` + +### isValidXAddress(xAddress: string): boolean + +Returns `true` if the provided X-address is valid, or `false` otherwise. + +```js +> const api = require('ripple-address-codec') +> api.isValidXAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi') +true +``` + +Returns `false` for classic addresses (starting with `r`). To validate a classic address, use `isValidClassicAddress`. + +### isValidClassicAddress(address: string): boolean + +Check whether a classic address (starting with `r`...) is valid. + +Returns `false` for X-addresses (extended addresses). To validate an X-address, use `isValidXAddress`. + +### encodeSeed(entropy: Buffer, type: 'ed25519' | 'secp256k1'): string + +Encode the given entropy as an XRP Ledger seed (secret). The entropy must be exactly 16 bytes (128 bits). The encoding includes which elliptic curve digital signature algorithm (ECDSA) the seed is intended to be used with. The seed is used to produce the private key. + +### decodeSeed(seed: string): object + +Decode a seed into an object with its version, type, and bytes. + +Return object type: +``` +{ + version: number[], + bytes: Buffer, + type: string | null +} +``` + +### encodeAccountID(bytes: Buffer): string + +Encode bytes as a classic address (starting with `r`...). + +### decodeAccountID(accountId: string): Buffer + +Decode a classic address (starting with `r`...) to its raw bytes. + +### encodeNodePublic(bytes: Buffer): string + +Encode bytes to the XRP Ledger "node public key" format (base58). + +This is useful for rippled validators. + +### decodeNodePublic(base58string: string): Buffer + +Decode an XRP Ledger "node public key" (in base58 format) into its raw bytes. + +### encodeAccountPublic(bytes: Buffer): string + +Encode a public key, as for payment channels. + +### decodeAccountPublic(base58string: string): Buffer + +Decode a public key, as for payment channels. + +### encodeXAddress(accountId: Buffer, tag: number | false, test: boolean): string + +Encode account ID, tag, and network ID to X-address. + +`accountId` must be 20 bytes because it is a RIPEMD160 hash, which is 160 bits (160 bits = 20 bytes). + +At this time, `tag` must be <= MAX_32_BIT_UNSIGNED_INT (4294967295) as the XRP Ledger only supports 32-bit tags. + +If `test` is `true`, this address is intended for use with a test network such as Testnet or Devnet. + +### decodeXAddress(xAddress: string): {accountId: Buffer, tag: number | false, test: boolean} + +Convert an X-address to its classic address, tag, and network ID. + +### Other functions + +```js +> var api = require('ripple-address-codec'); +> api.decodeSeed('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') +{ version: [ 1, 225, 75 ], + bytes: [ 76, 58, 29, 33, 63, 189, 251, 20, 199, 194, 141, 96, 148, 105, 179, 65 ], + type: 'ed25519' } +> api.decodeSeed('sn259rEFXrQrWyx3Q7XneWcwV6dfL') +{ version: 33, + bytes: [ 207, 45, 227, 120, 251, 221, 126, 46, 232, 125, 72, 109, 251, 90, 123, 255 ], + type: 'secp256k1' } +> api.decodeAccountID('rJrRMgiRgrU6hDF4pgu5DXQdWyPbY35ErN') +[ 186, + 142, + 120, + 98, + 110, + 228, + 44, + 65, + 180, + 109, + 70, + 195, + 4, + 141, + 243, + 161, + 195, + 200, + 112, + 114 ] +``` + +## Tests + +Run unit tests with: + + npm test + +Use `--watch` to run in watch mode, so that when you modify the tests, they are automatically re-run: + + npm test -- --watch + +Use `--coverage` to generate and display code coverage information: + + npm test -- --coverage + +This tells jest to output code coverage info in the `./coverage` directory, in addition to showing it on the command line. + +## Releases + +Use the [ripple-lib release checklist](https://github.com/ripple/ripple-lib/wiki/Release-Checklist), but just use `master` instead of `develop` as this project does not use a develop branch. + +## Acknowledgements + +This library references and adopts code and standards from the following sources: + +- [XLS-5d Standard for Tagged Addresses](https://github.com/xrp-community/standards-drafts/issues/6) by @nbougalis +- [XRPL Tagged Address Codec](https://github.com/xrp-community/xrpl-tagged-address-codec) by @WietseWind +- [X-Address transaction functions](https://github.com/codetsunami/xrpl-tools/tree/master/xaddress-functions) by @codetsunami + +[coveralls-image]: https://badgen.net/coveralls/c/github/ripple/ripple-address-codec/master +[coveralls-url]: https://coveralls.io/r/ripple/ripple-address/codec?branch=master +[npm-downloads-image]: https://badgen.net/npm/dm/ripple-address-codec +[npm-url]: https://npmjs.org/package/ripple-address-codec +[npm-version-image]: https://badgen.net/npm/v/ripple-address-codec +[travis-image]: https://badgen.net/travis/ripple/ripple-address-codec/master +[travis-url]: https://travis-ci.org/github/ripple/ripple-address-codec diff --git a/packages/ripple-address-codec/examples/bitcoin.js b/packages/ripple-address-codec/examples/bitcoin.js new file mode 100644 index 00000000..19f24094 --- /dev/null +++ b/packages/ripple-address-codec/examples/bitcoin.js @@ -0,0 +1,10 @@ +var api = require('../'); +var pubVersion = [0x04, 0x88, 0xB2, 0x1E]; +var options = {version: pubVersion, alphabet: 'bitcoin'}; +var key = 'xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5e4cp9LB'; +var decoded = api.decode(key, options); +var reencoded = api.encode(decoded, options); +console.log(key); +// 'xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5e4cp9LB' +console.log(reencoded); +// 'xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5e4cp9LB' \ No newline at end of file diff --git a/packages/ripple-address-codec/jest.config.js b/packages/ripple-address-codec/jest.config.js new file mode 100644 index 00000000..efa5ba66 --- /dev/null +++ b/packages/ripple-address-codec/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + "roots": [ + "/src" + ], + "transform": { + "^.+\\.tsx?$": "ts-jest" + }, +} \ No newline at end of file diff --git a/packages/ripple-address-codec/package.json b/packages/ripple-address-codec/package.json new file mode 100644 index 00000000..8fbf602d --- /dev/null +++ b/packages/ripple-address-codec/package.json @@ -0,0 +1,33 @@ +{ + "name": "ripple-address-codec", + "version": "4.1.3", + "description": "encodes/decodes base58 encoded XRP Ledger identifiers", + "files": [ + "dist/*", + "build/*" + ], + "main": "dist/index.js", + "types": "dist/index.d.ts", + "license": "ISC", + "dependencies": { + "base-x": "3.0.9", + "create-hash": "^1.1.2" + }, + "repository": { + "type": "git", + "url": "git@github.com:XRPLF/xrpl.js.git" + }, + "prepublish": "tsc -b", + "prepublishOnly": "tslint -b ./ && jest", + "scripts": { + "build": "tsc -b", + "test": "jest", + "lint": "eslint . --ext .ts", + "clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo" + }, + "prettier": "@xrplf/prettier-config", + "engines": { + "node": ">= 10", + "npm": ">=7.0.0" + } +} diff --git a/packages/ripple-address-codec/src/index.test.js b/packages/ripple-address-codec/src/index.test.js new file mode 100644 index 00000000..cfab6eaf --- /dev/null +++ b/packages/ripple-address-codec/src/index.test.js @@ -0,0 +1,259 @@ +const { + classicAddressToXAddress, + xAddressToClassicAddress, + isValidXAddress, + encodeXAddress +} = require('./index') + +const testCases = [ + [ + 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', + false, + 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ', + 'T719a5UwUCnEs54UsxG9CJYYDhwmFCqkr7wxCcNcfZ6p5GZ' + ], + [ + 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', + 1, + 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaGZMhc9YTE92ehJ2Fu', + 'T719a5UwUCnEs54UsxG9CJYYDhwmFCvbJNZbi37gBGkRkbE' + ], + [ + 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', + 14, + 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaGo2K5VpXpmCqbV2gS', + 'T719a5UwUCnEs54UsxG9CJYYDhwmFCvqXVCALUGJGSbNV3x' + ], + [ + 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59', + 11747, + 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaLFuhLRuNXPrDeJd9A', + 'T719a5UwUCnEs54UsxG9CJYYDhwmFCziiNHtUukubF2Mg6t' + ], + [ + 'rLczgQHxPhWtjkaQqn3Q6UM8AbRbbRvs5K', + false, + 'XVZVpQj8YSVpNyiwXYSqvQoQqgBttTxAZwMcuJd4xteQHyt', + 'TVVrSWtmQQssgVcmoMBcFQZKKf56QscyWLKnUyiuZW8ALU4' + ], + [ + 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo', + false, + 'X7YenJqxv3L66CwhBSfd3N8RzGXxYqPopMGMsCcpho79rex', + 'T77wVQzA8ntj9wvCTNiQpNYLT5hmhRsFyXDoMLqYC4BzQtV' + ], + [ + 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo', + 58, + 'X7YenJqxv3L66CwhBSfd3N8RzGXxYqV56ZkTCa9UCzgaao1', + 'T77wVQzA8ntj9wvCTNiQpNYLT5hmhR9kej6uxm4jGcQD7rZ' + ], + [ + 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW', + 23480, + 'X7d3eHCXzwBeWrZec1yT24iZerQjYL8m8zCJ16ACxu1BrBY', + 'T7YChPFWifjCAXLEtg5N74c7fSAYsvSokwcmBPBUZWhxH5P' + ], + [ + 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW', + 11747, + 'X7d3eHCXzwBeWrZec1yT24iZerQjYLo2CJf8oVC5CMWey5m', + 'T7YChPFWifjCAXLEtg5N74c7fSAYsvTcc7nEfwuEEvn5Q4w' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + false, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXb', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQn49b3qD26PK7FcGSKE' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 0, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8AqEL4xcZj5whKbmc', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnSy8RHqGHoGJ59spi2' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 1, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnSz1uDimDdPYXzSpyw' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 2, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8zpDURx7DzBCkrQE7', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnTryP9tG9TW8GeMBmd' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 32, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtVoYiC9UvKfjKar4LJe', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnT2oqaCDzMEuCDAj1j' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 276, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtVoKj3MnFGMXEFMnvJV', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnTMgJJYfAbsiPsc6Zg' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 65591, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtVozpjdhPQVdt3ghaWw', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQn7ryu2W6njw7mT1jmS' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 16781933, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtVqrDUk2vDpkTjPsY73', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnVsw45sDtGHhLi27Qa' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 4294967294, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV1kAsixQTdMjbWi39u', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnX8tDFQ53itLNqs6vU' + ], + [ + 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + 4294967295, + 'XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi', + 'TVE26TYGhfLC7tQDno7G8dGtxSkYQnXoy6kSDh6rZzApc69' + ], + [ + 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY', + false, + 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2gYsjNFQLKYW33DzBm', + 'TVd2rqMkYL2AyS97NdELcpeiprNBjwLZzuUG5rZnaewsahi' + ], + [ + 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY', + 0, + 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2m4Er6SnvjVLpMWPjR', + 'TVd2rqMkYL2AyS97NdELcpeiprNBjwRQUBetPbyrvXSTuxU' + ], + [ + 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY', + 13371337, + 'XV5sbjUmgPpvXv4ixFWZ5ptAYZ6PD2qwGkhgc48zzcx6Gkr', + 'TVd2rqMkYL2AyS97NdELcpeiprNBjwVUDvp3vhpXbNhLwJi' + ] +] + +;[false, true].forEach(isTestAddress => { + const MAX_32_BIT_UNSIGNED_INT = 4294967295 + const network = isTestAddress ? ' (test)' : ' (main)' + + for (const i in testCases) { + const testCase = testCases[i] + const classicAddress = testCase[0] + const tag = testCase[1] !== false ? testCase[1] : false + const xAddress = isTestAddress ? testCase[3] : testCase[2] + test(`Converts ${classicAddress}${tag ? ':' + tag : ''} to ${xAddress}${network}`, () => { + expect(classicAddressToXAddress(classicAddress, tag, isTestAddress)).toBe(xAddress) + const myClassicAddress = xAddressToClassicAddress(xAddress) + expect(myClassicAddress).toEqual({ + classicAddress, + tag, + test: isTestAddress + }) + expect(isValidXAddress(xAddress)).toBe(true) + }) + } + + { + const classicAddress = 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf' + const tag = MAX_32_BIT_UNSIGNED_INT + 1 + + test(`Converting ${classicAddress}:${tag}${network} throws`, () => { + expect(() => { + classicAddressToXAddress(classicAddress, tag, isTestAddress) + }).toThrowError(new Error('Invalid tag')) + }) + } + + { + const classicAddress = 'r' + test(`Invalid classic address: Converting ${classicAddress}${network} throws`, () => { + expect(() => { + classicAddressToXAddress(classicAddress, false, isTestAddress) + }).toThrowError(new Error('invalid_input_size: decoded data must have length >= 5')) + }) + } + + { + const highAndLowAccounts = [ + Buffer.from('00'.repeat(20), 'hex'), + Buffer.from('00'.repeat(19) + '01', 'hex'), + Buffer.from('01'.repeat(20), 'hex'), + Buffer.from('FF'.repeat(20), 'hex') + ] + + highAndLowAccounts.forEach(accountId => { + [false, 0, 1, MAX_32_BIT_UNSIGNED_INT].forEach(t => { + const tag = (t | false) + const xAddress = encodeXAddress(accountId, tag, isTestAddress) + test(`Encoding ${accountId.toString('hex')}${tag ? ':' + tag : ''} to ${xAddress} has expected length`, () => { + expect(xAddress.length).toBe(47) + }) + }) + }) + } +}) + +{ + const xAddress = 'XVLhHMPHU98es4dbozjVtdWzVrDjtV5fdx1mHp98tDMoQXa' + test(`Invalid X-address (bad checksum): Converting ${xAddress} throws`, () => { + expect(() => { + xAddressToClassicAddress(xAddress) + }).toThrowError(new Error('checksum_invalid')) + }) +} + +{ + const xAddress = 'dGzKGt8CVpWoa8aWL1k18tAdy9Won3PxynvbbpkAqp3V47g' + test(`Invalid X-address (bad prefix): Converting ${xAddress} throws`, () => { + expect(() => { + xAddressToClassicAddress(xAddress) + }).toThrowError(new Error('Invalid X-address: bad prefix')) + }) +} + +test(`Invalid X-address (64-bit tag) throws`, () => { + expect(() => { + // Encoded from: + // { + // classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + // tag: MAX_32_BIT_UNSIGNED_INT + 1 + // } + xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8zeUygYrCgrPh') + }).toThrowError('Unsupported X-address') +}) + +test(`Invalid Account ID throws`, () => { + expect(() => { + encodeXAddress(Buffer.from('00'.repeat(19), 'hex'), false, false) + }).toThrowError('Account ID must be 20 bytes') +}) + +test(`isValidXAddress returns false for invalid X-address`, () => { + expect(isValidXAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8zeUygYrCgrPh')).toBe(false) +}) + +test(`Converts X7AcgcsBL6XDcUb... to r9cZA1mLK5R5A... and tag: false`, () => { + const classicAddress = 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59' + const tag = false + const xAddress = 'X7AcgcsBL6XDcUb289X4mJ8djcdyKaB5hJDWMArnXr61cqZ' + const isTestAddress = false + expect(classicAddressToXAddress(classicAddress, tag, isTestAddress)).toBe(xAddress) + const myClassicAddress = xAddressToClassicAddress(xAddress) + expect(myClassicAddress).toEqual({ + classicAddress, + tag, + test: isTestAddress + }) + expect(isValidXAddress(xAddress)).toBe(true) + + // Notice that converting an X-address to a classic address has `result.tag === false` (not undefined) + expect(myClassicAddress.tag).toEqual(false) +}) diff --git a/packages/ripple-address-codec/src/index.ts b/packages/ripple-address-codec/src/index.ts new file mode 100644 index 00000000..4932b170 --- /dev/null +++ b/packages/ripple-address-codec/src/index.ts @@ -0,0 +1,136 @@ +import { + codec, + encodeSeed, + decodeSeed, + encodeAccountID, + decodeAccountID, + encodeNodePublic, + decodeNodePublic, + encodeAccountPublic, + decodeAccountPublic, + isValidClassicAddress +} from './xrp-codec' +import * as assert from 'assert' + +const PREFIX_BYTES = { + MAIN: Buffer.from([0x05, 0x44]), // 5, 68 + TEST: Buffer.from([0x04, 0x93]) // 4, 147 +} + +function classicAddressToXAddress(classicAddress: string, tag: number | false, test: boolean): string { + const accountId = decodeAccountID(classicAddress) + return encodeXAddress(accountId, tag, test) +} + +function encodeXAddress(accountId: Buffer, tag: number | false, test: boolean): string { + if (accountId.length !== 20) { + // RIPEMD160 is 160 bits = 20 bytes + throw new Error('Account ID must be 20 bytes') + } + const MAX_32_BIT_UNSIGNED_INT = 4294967295 + const flag = tag === false ? 0 : tag <= MAX_32_BIT_UNSIGNED_INT ? 1 : 2 + if (flag === 2) { + throw new Error('Invalid tag') + } + if (tag === false) { + tag = 0 + } + const bytes = Buffer.concat( + [ + test ? PREFIX_BYTES.TEST : PREFIX_BYTES.MAIN, + accountId, + Buffer.from( + [ + flag, // 0x00 if no tag, 0x01 if 32-bit tag + tag & 0xff, // first byte + (tag >> 8) & 0xff, // second byte + (tag >> 16) & 0xff, // third byte + (tag >> 24) & 0xff, // fourth byte + 0, 0, 0, 0 // four zero bytes (reserved for 64-bit tags) + ] + ) + ] + ) + const xAddress = codec.encodeChecked(bytes) + return xAddress +} + +function xAddressToClassicAddress(xAddress: string): {classicAddress: string, tag: number | false, test: boolean} { + const { + accountId, + tag, + test + } = decodeXAddress(xAddress) + const classicAddress = encodeAccountID(accountId) + return { + classicAddress, + tag, + test + } +} + +function decodeXAddress(xAddress: string): {accountId: Buffer, tag: number | false, test: boolean} { + const decoded = codec.decodeChecked(xAddress) + const test = isBufferForTestAddress(decoded) + const accountId = decoded.slice(2, 22) + const tag = tagFromBuffer(decoded) + return { + accountId, + tag, + test + } +} + +function isBufferForTestAddress(buf: Buffer): boolean { + const decodedPrefix = buf.slice(0, 2) + if (PREFIX_BYTES.MAIN.equals(decodedPrefix)) { + return false + } else if (PREFIX_BYTES.TEST.equals(decodedPrefix)) { + return true + } else { + throw new Error('Invalid X-address: bad prefix') + } +} + +function tagFromBuffer(buf: Buffer): number | false { + const flag = buf[22] + if (flag >= 2) { + // No support for 64-bit tags at this time + throw new Error('Unsupported X-address') + } + if (flag === 1) { + // Little-endian to big-endian + return buf[23] + buf[24] * 0x100 + buf[25] * 0x10000 + buf[26] * 0x1000000 + } + assert.strictEqual(flag, 0, 'flag must be zero to indicate no tag') + assert.ok(Buffer.from('0000000000000000', 'hex').equals(buf.slice(23, 23 + 8)), + 'remaining bytes must be zero') + return false +} + +function isValidXAddress(xAddress: string): boolean { + try { + decodeXAddress(xAddress) + } catch (e) { + return false + } + return true +} + +export { + codec, // Codec with XRP alphabet + encodeSeed, // Encode entropy as a "seed" + decodeSeed, // Decode a seed into an object with its version, type, and bytes + encodeAccountID, // Encode bytes as a classic address (r...) + decodeAccountID, // Decode a classic address to its raw bytes + encodeNodePublic, // Encode bytes to XRP Ledger node public key format + decodeNodePublic, // Decode an XRP Ledger node public key into its raw bytes + encodeAccountPublic, // Encode a public key, as for payment channels + decodeAccountPublic, // Decode a public key, as for payment channels + isValidClassicAddress, // Check whether a classic address (r...) is valid + classicAddressToXAddress, // Derive X-address from classic address, tag, and network ID + encodeXAddress, // Encode account ID, tag, and network ID to X-address + xAddressToClassicAddress, // Decode X-address to account ID, tag, and network ID + decodeXAddress, // Convert X-address to classic address, tag, and network ID + isValidXAddress // Check whether an X-address (X...) is valid +} diff --git a/packages/ripple-address-codec/src/utils.test.js b/packages/ripple-address-codec/src/utils.test.js new file mode 100644 index 00000000..f14e9084 --- /dev/null +++ b/packages/ripple-address-codec/src/utils.test.js @@ -0,0 +1,40 @@ +const {seqEqual, concatArgs} = require('./utils') + +test('two sequences are equal', () => { + expect(seqEqual([1, 2, 3], [1, 2, 3])).toBe(true) +}) + +test('elements must be in the same order', () => { + expect(seqEqual([3, 2, 1], [1, 2, 3])).toBe(false) +}) + +test('sequences do not need to be the same type', () => { + expect(seqEqual(Buffer.from([1, 2, 3]), [1, 2, 3])).toBe(true) + expect(seqEqual(Buffer.from([1, 2, 3]), new Uint8Array([1, 2, 3]))).toBe(true) +}) + +test('sequences with a single element', () => { + expect(seqEqual(Buffer.from([1]), [1])).toBe(true) + expect(seqEqual(Buffer.from([1]), new Uint8Array([1]))).toBe(true) +}) + +test('empty sequences', () => { + expect(seqEqual(Buffer.from([]), [])).toBe(true) + expect(seqEqual(Buffer.from([]), new Uint8Array([]))).toBe(true) +}) + +test('plain numbers are concatenated', () => { + expect(concatArgs(10, 20, 30, 40)).toStrictEqual([10, 20, 30, 40]) +}) + +test('a variety of values are concatenated', () => { + expect(concatArgs(1, [2, 3], Buffer.from([4,5]), new Uint8Array([6, 7]))).toStrictEqual([1,2,3,4,5,6,7]) +}) + +test('a single value is returned as an array', () => { + expect(concatArgs(Buffer.from([7]))).toStrictEqual([7]) +}) + +test('no arguments returns an empty array', () => { + expect(concatArgs()).toStrictEqual([]) +}) diff --git a/packages/ripple-address-codec/src/utils.ts b/packages/ripple-address-codec/src/utils.ts new file mode 100644 index 00000000..e8f0473b --- /dev/null +++ b/packages/ripple-address-codec/src/utils.ts @@ -0,0 +1,54 @@ +type Sequence = number[] | Buffer | Uint8Array + +/** + * Check whether two sequences (e.g. arrays of numbers) are equal. + * + * @param arr1 One of the arrays to compare. + * @param arr2 The other array to compare. + */ +export function seqEqual(arr1: Sequence, arr2: Sequence): boolean { + if (arr1.length !== arr2.length) { + return false + } + + for (let i = 0; i < arr1.length; i++) { + if (arr1[i] !== arr2[i]) { + return false + } + } + return true +} + +/** + * Check whether a value is a sequence (e.g. array of numbers). + * + * @param val The value to check. + */ +function isSequence(val: Sequence | number): val is Sequence { + return (val as Sequence).length !== undefined +} + +/** +* Concatenate all `arguments` into a single array. Each argument can be either +* a single element or a sequence, which has a `length` property and supports +* element retrieval via sequence[ix]. +* +* > concatArgs(1, [2, 3], Buffer.from([4,5]), new Uint8Array([6, 7])); +* [1,2,3,4,5,6,7] +* +* @returns {number[]} Array of concatenated arguments +*/ +export function concatArgs(...args: (number | Sequence)[]): number[] { + const ret: number[] = [] + + args.forEach(function (arg) { + if (isSequence(arg)) { + for (let j = 0; j < arg.length; j++) { + ret.push(arg[j]) + } + } else { + ret.push(arg) + } + }) + return ret +} diff --git a/packages/ripple-address-codec/src/xrp-codec.test.js b/packages/ripple-address-codec/src/xrp-codec.test.js new file mode 100644 index 00000000..6b226dc4 --- /dev/null +++ b/packages/ripple-address-codec/src/xrp-codec.test.js @@ -0,0 +1,246 @@ +const api = require('./xrp-codec') + +function toHex(bytes) { + return Buffer.from(bytes).toString('hex').toUpperCase() +} + +function toBytes(hex) { + return Buffer.from(hex, 'hex') +} + +/** + * Create a test case for encoding data and a test case for decoding data. + * + * @param encoder Encoder function to test + * @param decoder Decoder function to test + * @param base58 Base58-encoded string to decode + * @param hex Hexadecimal representation of expected decoded data + */ +function makeEncodeDecodeTest(encoder, decoder, base58, hex) { + test(`can translate between ${hex} and ${base58}`, function() { + const actual = encoder(toBytes(hex)) + expect(actual).toBe(base58) + }) + test(`can translate between ${base58} and ${hex})`, function() { + const buf = decoder(base58) + expect(toHex(buf)).toBe(hex) + }) +} + +makeEncodeDecodeTest(api.encodeAccountID, api.decodeAccountID, 'rJrRMgiRgrU6hDF4pgu5DXQdWyPbY35ErN', + 'BA8E78626EE42C41B46D46C3048DF3A1C3C87072') + +makeEncodeDecodeTest(api.encodeNodePublic, api.decodeNodePublic, + 'n9MXXueo837zYH36DvMc13BwHcqtfAWNJY5czWVbp7uYTj7x17TH', + '0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828') + + makeEncodeDecodeTest(api.encodeAccountPublic, api.decodeAccountPublic, + 'aB44YfzW24VDEJQ2UuLPV2PvqcPCSoLnL7y5M1EzhdW4LnK5xMS3', + '023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6') + +test('can decode arbitrary seeds', function() { + const decoded = api.decodeSeed('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + expect(toHex(decoded.bytes)).toBe('4C3A1D213FBDFB14C7C28D609469B341') + expect(decoded.type).toBe('ed25519') + + const decoded2 = api.decodeSeed('sn259rEFXrQrWyx3Q7XneWcwV6dfL') + expect(toHex(decoded2.bytes)).toBe('CF2DE378FBDD7E2EE87D486DFB5A7BFF') + expect(decoded2.type).toBe('secp256k1') +}) + +test('can pass a type as second arg to encodeSeed', function() { + const edSeed = 'sEdTM1uX8pu2do5XvTnutH6HsouMaM2' + const decoded = api.decodeSeed(edSeed) + const type = 'ed25519' + expect(toHex(decoded.bytes)).toBe('4C3A1D213FBDFB14C7C28D609469B341') + expect(decoded.type).toBe(type) + expect(api.encodeSeed(decoded.bytes, type)).toBe(edSeed) +}) + +test('isValidClassicAddress - secp256k1 address valid', function() { + expect(api.isValidClassicAddress('rU6K7V3Po4snVhBBaU29sesqs2qTQJWDw1')).toBe(true) +}) + +test('isValidClassicAddress - ed25519 address valid', function() { + expect(api.isValidClassicAddress('rLUEXYuLiQptky37CqLcm9USQpPiz5rkpD')).toBe(true) +}) + +test('isValidClassicAddress - invalid', function() { + expect(api.isValidClassicAddress('rU6K7V3Po4snVhBBaU29sesqs2qTQJWDw2')).toBe(false) +}) + +test('isValidClassicAddress - empty', function() { + expect(api.isValidClassicAddress('')).toBe(false) +}) + +describe('encodeSeed', function() { + + it('encodes a secp256k1 seed', function() { + const result = api.encodeSeed(Buffer.from('CF2DE378FBDD7E2EE87D486DFB5A7BFF', 'hex'), 'secp256k1') + expect(result).toBe('sn259rEFXrQrWyx3Q7XneWcwV6dfL') + }) + + it('encodes low secp256k1 seed', function() { + const result = api.encodeSeed(Buffer.from('00000000000000000000000000000000', 'hex'), 'secp256k1') + expect(result).toBe('sp6JS7f14BuwFY8Mw6bTtLKWauoUs') + }) + + it('encodes high secp256k1 seed', function() { + const result = api.encodeSeed(Buffer.from('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'hex'), 'secp256k1') + expect(result).toBe('saGwBRReqUNKuWNLpUAq8i8NkXEPN') + }) + + it('encodes an ed25519 seed', function() { + const result = api.encodeSeed(Buffer.from('4C3A1D213FBDFB14C7C28D609469B341', 'hex'), 'ed25519') + expect(result).toBe('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + }) + + it('encodes low ed25519 seed', function() { + const result = api.encodeSeed(Buffer.from('00000000000000000000000000000000', 'hex'), 'ed25519') + expect(result).toBe('sEdSJHS4oiAdz7w2X2ni1gFiqtbJHqE') + }) + + it('encodes high ed25519 seed', function() { + const result = api.encodeSeed(Buffer.from('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF', 'hex'), 'ed25519') + expect(result).toBe('sEdV19BLfeQeKdEXyYA4NhjPJe6XBfG') + }) + + test('attempting to encode a seed with less than 16 bytes of entropy throws', function() { + expect(() => { + api.encodeSeed(Buffer.from('CF2DE378FBDD7E2EE87D486DFB5A7B', 'hex'), 'secp256k1') + }).toThrow('entropy must have length 16') + }) + + test('attempting to encode a seed with more than 16 bytes of entropy throws', function() { + expect(() => { + api.encodeSeed(Buffer.from('CF2DE378FBDD7E2EE87D486DFB5A7BFFFF', 'hex'), 'secp256k1') + }).toThrow('entropy must have length 16') + }) +}) + +describe('decodeSeed', function() { + + it('can decode an Ed25519 seed', function() { + const decoded = api.decodeSeed('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + expect(toHex(decoded.bytes)).toBe('4C3A1D213FBDFB14C7C28D609469B341') + expect(decoded.type).toBe('ed25519') + }) + + it('can decode a secp256k1 seed', function() { + const decoded = api.decodeSeed('sn259rEFXrQrWyx3Q7XneWcwV6dfL') + expect(toHex(decoded.bytes)).toBe('CF2DE378FBDD7E2EE87D486DFB5A7BFF') + expect(decoded.type).toBe('secp256k1') + }) +}) + +describe('encodeAccountID', function() { + + it('can encode an AccountID', function() { + const encoded = api.encodeAccountID(Buffer.from('BA8E78626EE42C41B46D46C3048DF3A1C3C87072', 'hex')) + expect(encoded).toBe('rJrRMgiRgrU6hDF4pgu5DXQdWyPbY35ErN') + }) + + test('unexpected length should throw', function() { + expect(() => { + api.encodeAccountID(Buffer.from('ABCDEF', 'hex')) + }).toThrow( + 'unexpected_payload_length: bytes.length does not match expectedLength' + ) + }) +}) + +describe('decodeNodePublic', function() { + + it('can decode a NodePublic', function() { + const decoded = api.decodeNodePublic('n9MXXueo837zYH36DvMc13BwHcqtfAWNJY5czWVbp7uYTj7x17TH') + expect(toHex(decoded)).toBe('0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828') + }) +}) + +test('encodes 123456789 with version byte of 0', () => { + expect(api.codec.encode(Buffer.from('123456789'), { + versions: [0], + expectedLength: 9 + })).toBe('rnaC7gW34M77Kneb78s') +}) + +test('multiple versions with no expected length should throw', () => { + expect(() => { + api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [0, 1] + }) + }).toThrow('expectedLength is required because there are >= 2 possible versions') +}) + +test('attempting to decode data with length < 5 should throw', () => { + expect(() => { + api.codec.decode('1234', { + versions: [0] + }) + }).toThrow('invalid_input_size: decoded data must have length >= 5') +}) + +test('attempting to decode data with unexpected version should throw', () => { + expect(() => { + api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [2] + }) + }).toThrow('version_invalid: version bytes do not match any of the provided version(s)') +}) + +test('invalid checksum should throw', () => { + expect(() => { + api.codec.decode('123456789', { + versions: [0, 1] + }) + }).toThrow('checksum_invalid') +}) + +test('empty payload should throw', () => { + expect(() => { + api.codec.decode('', { + versions: [0, 1] + }) + }).toThrow('invalid_input_size: decoded data must have length >= 5') +}) + +test('decode data', () => { + expect(api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [0] + })).toStrictEqual({ + version: [0], + bytes: Buffer.from('123456789'), + type: null + }) +}) + +test('decode data with expected length', function() { + expect(api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [0], + expectedLength: 9 + }) + ).toStrictEqual({ + version: [0], + bytes: Buffer.from('123456789'), + type: null + }) +}) + +test('decode data with wrong expected length should throw', function() { + expect(() => { + api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [0], + expectedLength: 8 + }) + }).toThrow( + 'version_invalid: version bytes do not match any of the provided version(s)' + ) + expect(() => { + api.codec.decode('rnaC7gW34M77Kneb78s', { + versions: [0], + expectedLength: 10 + }) + }).toThrow( + 'version_invalid: version bytes do not match any of the provided version(s)' + ) +}) diff --git a/packages/ripple-address-codec/src/xrp-codec.ts b/packages/ripple-address-codec/src/xrp-codec.ts new file mode 100644 index 00000000..0adc4099 --- /dev/null +++ b/packages/ripple-address-codec/src/xrp-codec.ts @@ -0,0 +1,215 @@ +/** + * Codec class + */ + +import * as baseCodec from 'base-x' +import {seqEqual, concatArgs} from './utils' + +class Codec { + sha256: (bytes: Uint8Array) => Buffer + alphabet: string + codec: any + base: number + + constructor(options: { + sha256: (bytes: Uint8Array) => Buffer, + alphabet: string + }) { + this.sha256 = options.sha256 + this.alphabet = options.alphabet + this.codec = baseCodec(this.alphabet) + this.base = this.alphabet.length + } + + /** + * Encoder. + * + * @param bytes Buffer of data to encode. + * @param opts Options object including the version bytes and the expected length of the data to encode. + */ + encode(bytes: Buffer, opts: { + versions: number[], + expectedLength: number + }): string { + const versions = opts.versions + return this.encodeVersioned(bytes, versions, opts.expectedLength) + } + + encodeVersioned(bytes: Buffer, versions: number[], expectedLength: number): string { + if (expectedLength && bytes.length !== expectedLength) { + throw new Error('unexpected_payload_length: bytes.length does not match expectedLength.' + + ' Ensure that the bytes are a Buffer.') + } + return this.encodeChecked(Buffer.from(concatArgs(versions, bytes))) + } + + encodeChecked(buffer: Buffer): string { + const check = this.sha256(this.sha256(buffer)).slice(0, 4) + return this.encodeRaw(Buffer.from(concatArgs(buffer, check))) + } + + encodeRaw(bytes: Buffer): string { + return this.codec.encode(bytes) + } + + /** + * Decoder. + * + * @param base58string Base58Check-encoded string to decode. + * @param opts Options object including the version byte(s) and the expected length of the data after decoding. + */ + decode(base58string: string, opts: { + versions: (number | number[])[], + expectedLength?: number, + versionTypes?: ['ed25519', 'secp256k1'] + }): { + version: number[], + bytes: Buffer, + type: string | null + } { + const versions = opts.versions + const types = opts.versionTypes + + const withoutSum = this.decodeChecked(base58string) + + if (versions.length > 1 && !opts.expectedLength) { + throw new Error('expectedLength is required because there are >= 2 possible versions') + } + const versionLengthGuess = typeof versions[0] === 'number' ? 1 : (versions[0] as number[]).length + const payloadLength = opts.expectedLength || withoutSum.length - versionLengthGuess + const versionBytes = withoutSum.slice(0, -payloadLength) + const payload = withoutSum.slice(-payloadLength) + + for (let i = 0; i < versions.length; i++) { + const version: number[] = Array.isArray(versions[i]) ? versions[i] as number[] : [versions[i] as number] + if (seqEqual(versionBytes, version)) { + return { + version, + bytes: payload, + type: types ? types[i] : null + } + } + } + + throw new Error('version_invalid: version bytes do not match any of the provided version(s)') + } + + decodeChecked(base58string: string): Buffer { + const buffer = this.decodeRaw(base58string) + if (buffer.length < 5) { + throw new Error('invalid_input_size: decoded data must have length >= 5') + } + if (!this.verifyCheckSum(buffer)) { + throw new Error('checksum_invalid') + } + return buffer.slice(0, -4) + } + + decodeRaw(base58string: string): Buffer { + return this.codec.decode(base58string) + } + + verifyCheckSum(bytes: Buffer): boolean { + const computed = this.sha256(this.sha256(bytes.slice(0, -4))).slice(0, 4) + const checksum = bytes.slice(-4) + return seqEqual(computed, checksum) + } +} + +/** + * XRP codec + */ + +// Pure JavaScript hash functions in the browser, native hash functions in Node.js +const createHash = require('create-hash') + +// base58 encodings: https://xrpl.org/base58-encodings.html +const ACCOUNT_ID = 0 // Account address (20 bytes) +const ACCOUNT_PUBLIC_KEY = 0x23 // Account public key (33 bytes) +const FAMILY_SEED = 0x21 // 33; Seed value (for secret keys) (16 bytes) +const NODE_PUBLIC = 0x1C // 28; Validation public key (33 bytes) + +const ED25519_SEED = [0x01, 0xE1, 0x4B] // [1, 225, 75] + +const codecOptions = { + sha256: function(bytes: Uint8Array) { + return createHash('sha256').update(Buffer.from(bytes)).digest() + }, + alphabet: 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz' +} + +const codecWithXrpAlphabet = new Codec(codecOptions) + +export const codec = codecWithXrpAlphabet + +// entropy is a Buffer of size 16 +// type is 'ed25519' or 'secp256k1' +export function encodeSeed(entropy: Buffer, type: 'ed25519' | 'secp256k1'): string { + if (entropy.length !== 16) { + throw new Error('entropy must have length 16') + } + const opts = { + expectedLength: 16, + + // for secp256k1, use `FAMILY_SEED` + versions: type === 'ed25519' ? ED25519_SEED : [FAMILY_SEED] + } + + // prefixes entropy with version bytes + return codecWithXrpAlphabet.encode(entropy, opts) +} + +export function decodeSeed(seed: string, opts: { + versionTypes: ['ed25519', 'secp256k1'], + versions: (number | number[])[] + expectedLength: number +} = { + versionTypes: ['ed25519', 'secp256k1'], + versions: [ED25519_SEED, FAMILY_SEED], + expectedLength: 16 +}) { + return codecWithXrpAlphabet.decode(seed, opts) +} + +export function encodeAccountID(bytes: Buffer): string { + const opts = {versions: [ACCOUNT_ID], expectedLength: 20} + return codecWithXrpAlphabet.encode(bytes, opts) +} + +export const encodeAddress = encodeAccountID + +export function decodeAccountID(accountId: string): Buffer { + const opts = {versions: [ACCOUNT_ID], expectedLength: 20} + return codecWithXrpAlphabet.decode(accountId, opts).bytes +} + +export const decodeAddress = decodeAccountID + +export function decodeNodePublic(base58string: string): Buffer { + const opts = {versions: [NODE_PUBLIC], expectedLength: 33} + return codecWithXrpAlphabet.decode(base58string, opts).bytes +} + +export function encodeNodePublic(bytes: Buffer): string { + const opts = {versions: [NODE_PUBLIC], expectedLength: 33} + return codecWithXrpAlphabet.encode(bytes, opts) +} + +export function encodeAccountPublic(bytes: Buffer): string { + const opts = {versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33} + return codecWithXrpAlphabet.encode(bytes, opts) +} + +export function decodeAccountPublic(base58string: string): Buffer { + const opts = {versions: [ACCOUNT_PUBLIC_KEY], expectedLength: 33} + return codecWithXrpAlphabet.decode(base58string, opts).bytes +} + +export function isValidClassicAddress(address: string): boolean { + try { + decodeAccountID(address) + } catch (e) { + return false + } + return true +} diff --git a/packages/ripple-address-codec/tsconfig.json b/packages/ripple-address-codec/tsconfig.json new file mode 100644 index 00000000..2b229cc3 --- /dev/null +++ b/packages/ripple-address-codec/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "es6", + "lib": [ + "es2017" + ], + "rootDir": "./src", + "outDir": "./dist", + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": false, + "preserveConstEnums": false, + "suppressImplicitAnyIndexErrors": false, + "skipLibCheck": true, + "declaration": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/ripple-binary-codec/.eslintignore b/packages/ripple-binary-codec/.eslintignore new file mode 100644 index 00000000..3cf68f75 --- /dev/null +++ b/packages/ripple-binary-codec/.eslintignore @@ -0,0 +1,4 @@ +node_modules +dist +.github +coverage \ No newline at end of file diff --git a/packages/ripple-binary-codec/.eslintrc.js b/packages/ripple-binary-codec/.eslintrc.js new file mode 100644 index 00000000..19cc1e30 --- /dev/null +++ b/packages/ripple-binary-codec/.eslintrc.js @@ -0,0 +1,125 @@ +module.exports = { + root: true, + + parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.eslint.json'], + + sourceType: 'module', // Allow the use of imports / ES modules + + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + + // Specify global variables that are predefined + env: { + browser: true, // Enable browser global variables + node: true, // Enable node global variables & Node.js scoping + es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 + jest: true, // Add Mocha testing global variables + }, + + plugins: [], + extends: ['@xrplf/eslint-config/base'], + + rules: { + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/prefer-readonly': 'off', + '@typescript-eslint/no-parameter-properties': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/no-useless-constructor': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/require-array-sort-compare': 'off', + '@typescript-eslint/prefer-includes': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-type-alias': 'off', + '@typescript-eslint/member-ordering': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/no-extraneous-class': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + 'import/unambiguous': 'off', + 'import/extensions': 'off', + 'import/prefer-default-export': 'off', + 'import/no-useless-path-segments': 'off', + 'import/no-unused-modules': 'off', + 'import/no-cycle': 'off', + 'import/order': 'off', + 'import/no-commonjs': 'off', + 'import/newline-after-import': 'off', + 'node/global-require': 'off', + 'consistent-default-export-name/default-import-match-filename': 'off', + 'prettier/prettier': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/check-tag-names': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-param': 'off', + 'jsdoc/check-param-names': 'off', + 'jsdoc/newline-after-description': 'off', + 'jsdoc/require-returns-check': 'off', + 'tsdoc/syntax': 'off', + 'eslint-comments/require-description': 'off', + 'eslint-comments/no-unused-disable': 'off', + 'prefer-const': 'off', + 'global-require': 'off', + 'id-length': 'off', + 'no-shadow': 'off', + 'no-bitwise': 'off', + 'spaced-comment': 'off', + 'prefer-template': 'off', + 'prefer-object-spread': 'off', + 'no-inline-comments': 'off', + 'no-plusplus': 'off', + 'new-cap': 'off', + 'id-blacklist': 'off', + 'max-lines-per-function': 'off', + 'require-unicode-regexp': 'off', + 'no-undef-init': 'off', + 'curly': 'off', + 'eqeqeq': 'off', + 'no-console': 'off', + 'max-classes-per-file': 'off', + 'operator-assignment': 'off', + 'class-methods-use-this': 'off', + 'no-else-return': 'off', + 'yoda': 'off', + 'max-depth': 'off', + 'multiline-comment-style': 'off', + 'one-var': 'off', + 'no-negated-condition': 'off', + 'radix': 'off', + 'no-nested-ternary': 'off', + 'no-useless-concat': 'off', + 'object-shorthand': 'off', + 'no-param-reassign': 'off', + }, +} diff --git a/packages/ripple-binary-codec/.gitignore b/packages/ripple-binary-codec/.gitignore new file mode 100644 index 00000000..7c31fa88 --- /dev/null +++ b/packages/ripple-binary-codec/.gitignore @@ -0,0 +1,64 @@ +# .gitignore + +# Ignore vim swap files. +*.swp + +# Ignore SCons support files. +.sconsign.dblite + +# Ignore python compiled files. +*.pyc + +# Ignore Macintosh Desktop Services Store files. +.DS_Store + +# Ignore backup/temps +*~ + +# Ignore object files. +*.o +build/ +distrib/ +tags +bin/rippled +Debug/*.* +Release/*.* + +# Ignore locally installed node_modules +node_modules +!test/node_modules + +# Ignore tmp directory. +tmp + +# Ignore database directory. +db/*.db +db/*.db-* + +# Ignore customized configs +rippled.cfg +validators.txt +test/config.js + +# Ignore coverage files +/lib-cov +/src-cov +/coverage.html +/coverage + +# Ignore IntelliJ files +.idea + +# Ignore npm-debug +npm-debug.log + +# Ignore dist folder, build for bower +dist/ + +# Ignore flow output directory +out/ + +# Ignore perf test cache +scripts/cache + +eslintrc diff --git a/packages/ripple-binary-codec/.nvmrc b/packages/ripple-binary-codec/.nvmrc new file mode 100644 index 00000000..b7604b0c --- /dev/null +++ b/packages/ripple-binary-codec/.nvmrc @@ -0,0 +1 @@ +10.22.0 diff --git a/packages/ripple-binary-codec/HISTORY.md b/packages/ripple-binary-codec/HISTORY.md new file mode 100644 index 00000000..ee450801 --- /dev/null +++ b/packages/ripple-binary-codec/HISTORY.md @@ -0,0 +1,90 @@ +# ripple-binary-codec Release History + +## 1.1.3 (2021-06-11) +- Fix for case UInt64.from string allowing lowercase hex (#135) +- Fix for `ValidatorToReEnable` field code (#130) + +## 1.1.2 (2021-03-10) +- Fix for case UInt64.from string '0' due to changes in rippled 1.7.0 + +## 1.1.1 (2021-02-12) +- PathSet.toJSON() does not return undefined values +- Add support for X-Addresses in Issued Currency Amounts +- Fix STArray error message + +## 1.1.0 (2020-12-03) +- Add support for Tickets (TicketBatch amendment) +- Fix web browser compatibility + +## 1.0.2 (2020-09-11) +- Allow currencies to be encoded from any 3 character ASCII code + +## 1.0.1 (2020-09-08) +- Filter out fields with undefined values + +## 1.0.0 (2020-08-17) + +- Migrate to TypeScript + - Javascript classes used + - Generics for constructing core types +- Reduced dependencies + - Dependent on create-hash, decimal.js, ripple-address-codec +- Migrate testing to Jest and added tests + - Tests for pseudo-transactions +- Added support for NegativeUNL pseudo-transactions + +## 0.2.6 (2019-12-31) + +- Update dependencies + - decimal.js, fs-extra, mocha, handlebars, bn.js, babel-eslint, ripple-address-codec + +## 0.2.5 (2019-12-14) + +- Add support for AccountDelete (#37) + +## 0.2.4 (2019-09-04) + +- Update ripple-address-codec to 3.0.4 + +## 0.2.3 (2019-08-29) + +- Expand node version compatibility (#32, #33) + +## 0.2.2 (2019-07-26) + +- Input validation - Amount and Fee should not allow fractional XRP drops ([#31](https://github.com/ripple/ripple-binary-codec/issues/31)) +- Fix lint errors +- Update dependencies (including lodash and mocha) +- Require node 10 (.nvmrc) +- Remove assert-diff +- Remove codecov.io as it did not appear to work. The `package.json` script was: + - `"codecov": "cat ./coverage/coverage.json | ./node_modules/codecov.io/bin/codecov.io.js"` + +## 0.2.1 + +- Add tecKILLED from amendment fix1578 (PR #27 fixes #25) + +## 0.2.0 + +- Add DepositPreauth fields + - https://developers.ripple.com/depositauth.html + +## 0.1.14 + +- Skip amount validation when deserializing f72c115 + +## 0.1.13 + +- Add Check, CheckCreate, CheckCash, CheckCancel + +## 0.1.11 + +- Add ledger header decode function + +## 0.1.8 + +## 0.1.7 + +## 0.1.6 + +## 0.1.3 diff --git a/packages/ripple-binary-codec/LICENSE b/packages/ripple-binary-codec/LICENSE new file mode 100644 index 00000000..279286cc --- /dev/null +++ b/packages/ripple-binary-codec/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2015 Ripple Labs Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/packages/ripple-binary-codec/README.md b/packages/ripple-binary-codec/README.md new file mode 100644 index 00000000..a201f052 --- /dev/null +++ b/packages/ripple-binary-codec/README.md @@ -0,0 +1,107 @@ +# ripple-binary-codec [![NPM](https://img.shields.io/npm/v/ripple-binary-codec.svg)](https://npmjs.org/package/ripple-binary-codec) + +Functions to encode/decode to/from the ripple [binary serialization format](https://xrpl.org/serialization.html) + +[![NPM](https://nodei.co/npm/ripple-binary-codec.png)](https://www.npmjs.org/package/ripple-binary-codec) + +## API +```js +> const api = require('ripple-binary-codec') +``` + + +### decode(binary: string): object +Decode a hex-string into a transaction object. +```js +> api.decode('1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337') +{ + LedgerEntryType: 'AccountRoot', + Flags: 0, + Sequence: 1, + PreviousTxnLgrSeq: 7, + OwnerCount: 0, + PreviousTxnID: 'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF', + Balance: '10000000000', + Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv' +} +``` + +### encode(json: object): string +Encode a transaction object into a hex-string. Note that encode filters out fields with undefined values. +```js +> api.encode({ + LedgerEntryType: 'AccountRoot', + Flags: 0, + Sequence: 1, + PreviousTxnLgrSeq: 7, + OwnerCount: 0, + PreviousTxnID: 'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF', + Balance: '10000000000', + Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv' +}) +'1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337' +``` + +#### X-Address Compatibility + * ripple-binary-codec handles X-addresses by looking for a few specific files (Account/SourceTag, Destination/DestinationTag). + * If other fields (in the future) must to support X-addresses with tags, this library will need to be updated. + * When decoding rippled binary, the output will always output classic address + tag, with no X-addresses. X-address support only applies when encoding to binary. + +#### Encoding Currency Codes + * The standard format for currency codes is a three-letter string such as `USD`. This is intended for use with ISO 4217 Currency Codes. + * Currency codes must be exactly 3 ASCII characters in length and there are [a few other rules](https://xrpl.org/currency-formats.html#currency-codes). + * ripple-binary-codec allows any 3-character ASCII string to be encoded as a currency code, although rippled may enforce tighter restrictions. + * When _decoding_, if a currency code is three uppercase letters or numbers (`/^[A-Z0-9]{3}$/`), then it will be decoded into that string. For example,`0000000000000000000000004142430000000000` decodes as `ABC`. + * When decoding, if a currency code is does not match the regex, then it is not considered to be an ISO 4217 or pseudo-ISO currency. ripple-binary-codec will return a 160-bit hex-string (40 hex characters). For example, `0000000000000000000000006142430000000000` (`aBC`) decodes as `0000000000000000000000006142430000000000` because it contains a lowercase letter. + +### encodeForSigning(json: object): string + +Encode the transaction object for signing. + +### encodeForSigningClaim(json: object): string + +Encode the transaction object for payment channel claim. + +### encodeForMultisigning(json: object, signer: string): string + +Encode the transaction object for multi-signing. + +### encodeQuality(value: string): string +```js +> api.encodeQuality('195796912.5171664') +'5D06F4C3362FE1D0' +``` + +### decodeQuality(value: string): string +```js +> api.decodeQuality('5D06F4C3362FE1D0') +'195796912.5171664' +``` + +### decodeLedgerData(binary: string): object +```js +> api.decodeLedgerData("01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00") +{ + ledger_index: 32052277, + total_coins: '99994494362043555', + parent_hash: 'EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6', + transaction_hash: 'DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87', + account_hash: '3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5', + parent_close_time: 556231902, + close_time: 556231910, + close_time_resolution: 10, + close_flags: 0 +} +``` + +## Tests + +Run unit tests with: + + npm test + +Use `--coverage` to generate and display code coverage information: + + npm test --coverage + +This tells jest to output code coverage info in the `./coverage` directory, in addition to showing it on the command line. diff --git a/packages/ripple-binary-codec/package.json b/packages/ripple-binary-codec/package.json new file mode 100644 index 00000000..88acc8de --- /dev/null +++ b/packages/ripple-binary-codec/package.json @@ -0,0 +1,44 @@ +{ + "name": "ripple-binary-codec", + "version": "1.1.3", + "description": "XRP Ledger binary codec", + "files": [ + "dist/*", + "bin/*", + "test/*" + ], + "main": "dist/", + "directories": { + "test": "test" + }, + "dependencies": { + "assert": "^2.0.0", + "big-integer": "^1.6.48", + "buffer": "5.6.0", + "create-hash": "^1.2.0", + "decimal.js": "^10.2.0", + "ripple-address-codec": "^4.1.1" + }, + "scripts": { + "build": "tsc -b && cp ./src/enums/definitions.json ./dist/enums", + "clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo", + "prepare": "npm run build && npm test", + "test": "jest", + "lint": "eslint . --ext .ts --ext .test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:XRPLF/xrpl.js.git" + }, + "bugs": { + "url": "https://github.com/XRPLF/xrpl.js/issues" + }, + "homepage": "https://github.com/XRPLF/xrpl.js/packages/ripple-binary-codec#readme", + "license": "ISC", + "readmeFilename": "README.md", + "prettier": "@xrplf/prettier-config", + "engines": { + "node": ">=10.22.0", + "npm": ">=7.0.0" + } +} diff --git a/packages/ripple-binary-codec/src/README.md b/packages/ripple-binary-codec/src/README.md new file mode 100644 index 00000000..5c5e62ad --- /dev/null +++ b/packages/ripple-binary-codec/src/README.md @@ -0,0 +1,3 @@ +# ripple-binary-codec + +Serialize and deserialize transactions according to the XRP Ledger protocol. \ No newline at end of file diff --git a/packages/ripple-binary-codec/src/binary.ts b/packages/ripple-binary-codec/src/binary.ts new file mode 100644 index 00000000..b2a5ec8d --- /dev/null +++ b/packages/ripple-binary-codec/src/binary.ts @@ -0,0 +1,154 @@ +/* eslint-disable func-style */ + +import { coreTypes } from "./types"; +import { BinaryParser } from "./serdes/binary-parser"; +import { AccountID } from "./types/account-id"; +import { HashPrefix } from "./hash-prefixes"; +import { BinarySerializer, BytesList } from "./serdes/binary-serializer"; +import { sha512Half, transactionID } from "./hashes"; +import { FieldInstance } from "./enums"; +import { STObject } from "./types/st-object"; +import { JsonObject } from "./types/serialized-type"; +import { Buffer } from "buffer/"; +import * as bigInt from "big-integer"; + +/** + * Construct a BinaryParser + * + * @param bytes hex-string to construct BinaryParser from + * @returns A BinaryParser + */ +const makeParser = (bytes: string): BinaryParser => new BinaryParser(bytes); + +/** + * Parse BinaryParser into JSON + * + * @param parser BinaryParser object + * @returns JSON for the bytes in the BinaryParser + */ +const readJSON = (parser: BinaryParser): JsonObject => + (parser.readType(coreTypes.STObject) as STObject).toJSON(); + +/** + * Parse a hex-string into its JSON interpretation + * + * @param bytes hex-string to parse into JSON + * @returns JSON + */ +const binaryToJSON = (bytes: string): JsonObject => readJSON(makeParser(bytes)); + +/** + * Interface for passing parameters to SerializeObject + * + * @field set signingFieldOnly to true if you want to serialize only signing fields + */ +interface OptionObject { + prefix?: Buffer; + suffix?: Buffer; + signingFieldsOnly?: boolean; +} + +/** + * Function to serialize JSON object representing a transaction + * + * @param object JSON object to serialize + * @param opts options for serializing, including optional prefix, suffix, and signingFieldOnly + * @returns A Buffer containing the serialized object + */ +function serializeObject(object: JsonObject, opts: OptionObject = {}): Buffer { + const { prefix, suffix, signingFieldsOnly = false } = opts; + const bytesList = new BytesList(); + + if (prefix) { + bytesList.put(prefix); + } + + const filter = signingFieldsOnly + ? (f: FieldInstance): boolean => f.isSigningField + : undefined; + coreTypes.STObject.from(object, filter).toBytesSink(bytesList); + + if (suffix) { + bytesList.put(suffix); + } + + return bytesList.toBytes(); +} + +/** + * Serialize an object for signing + * + * @param transaction Transaction to serialize + * @param prefix Prefix bytes to put before the serialized object + * @returns A Buffer with the serialized object + */ +function signingData( + transaction: JsonObject, + prefix: Buffer = HashPrefix.transactionSig +): Buffer { + return serializeObject(transaction, { prefix, signingFieldsOnly: true }); +} + +/** + * Interface describing fields required for a Claim + */ +interface ClaimObject extends JsonObject { + channel: string; + amount: string | number; +} + +/** + * Serialize a signingClaim + * + * @param claim A claim object to serialize + * @returns the serialized object with appropriate prefix + */ +function signingClaimData(claim: ClaimObject): Buffer { + const num = bigInt(String(claim.amount)); + const prefix = HashPrefix.paymentChannelClaim; + const channel = coreTypes.Hash256.from(claim.channel).toBytes(); + const amount = coreTypes.UInt64.from(num).toBytes(); + + const bytesList = new BytesList(); + + bytesList.put(prefix); + bytesList.put(channel); + bytesList.put(amount); + return bytesList.toBytes(); +} + +/** + * Serialize a transaction object for multiSigning + * + * @param transaction transaction to serialize + * @param signingAccount Account to sign the transaction with + * @returns serialized transaction with appropriate prefix and suffix + */ +function multiSigningData( + transaction: JsonObject, + signingAccount: string | AccountID +): Buffer { + const prefix = HashPrefix.transactionMultiSig; + const suffix = coreTypes.AccountID.from(signingAccount).toBytes(); + return serializeObject(transaction, { + prefix, + suffix, + signingFieldsOnly: true, + }); +} + +export { + BinaryParser, + BinarySerializer, + BytesList, + ClaimObject, + makeParser, + serializeObject, + readJSON, + multiSigningData, + signingData, + signingClaimData, + binaryToJSON, + sha512Half, + transactionID, +}; diff --git a/packages/ripple-binary-codec/src/coretypes.ts b/packages/ripple-binary-codec/src/coretypes.ts new file mode 100644 index 00000000..80c5ce85 --- /dev/null +++ b/packages/ripple-binary-codec/src/coretypes.ts @@ -0,0 +1,29 @@ +import { + Field, + TransactionType, + LedgerEntryType, + Type, + TransactionResult, +} from "./enums"; +import * as types from "./types"; +import * as binary from "./binary"; +import { ShaMap } from "./shamap"; +import * as ledgerHashes from "./ledger-hashes"; +import * as hashes from "./hashes"; +import { quality } from "./quality"; +import { HashPrefix } from "./hash-prefixes"; + +export { + hashes, + binary, + ledgerHashes, + Field, + TransactionType, + LedgerEntryType, + Type, + TransactionResult, + quality, + HashPrefix, + ShaMap, + types, +}; diff --git a/packages/ripple-binary-codec/src/enums/README.md b/packages/ripple-binary-codec/src/enums/README.md new file mode 100644 index 00000000..5f432260 --- /dev/null +++ b/packages/ripple-binary-codec/src/enums/README.md @@ -0,0 +1,60 @@ +# Definitions + +## Types + +These are the [types](https://xrpl.org/serialization.html#type-list) associated with a given Serialization Field. Each type has an arbitrary [type_code](https://xrpl.org/serialization.html#type-codes), with lower codes sorting first. + +## Ledger Entry Types + +Each ledger's state tree contain [ledger objects](https://xrpl.org/ledger-object-types.html), which represent all settings, balances, and relationships in the shared ledger. + +## Fields + +These are Serialization Fields (`sf`) [defined in rippled's SField.cpp](https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/impl/SField.cpp). Fields with undefined values are omitted before encoding. + +### Key + +The key is the string defined in the rippled source code, such as "LedgerEntry", "Transaction", etc. + +### nth + +`nth` is the sort code, meaning "nth of type." It is is combined with the type code in order to construct the Field ID of this field. The Field ID is only used for sorting the fields. Since there are multiple fields with the same data type, the `nth` is used to deterministically order each field among other fields of the same data type. + +Each field has a Field ID, which is used to sort fields that have the same type as one another with lower codes sorting first. + +- [Field definitions](https://github.com/ripple/rippled/blob/72e6005f562a8f0818bc94803d222ac9345e1e40/src/ripple/protocol/impl/SField.cpp#L72-L266) +- [Constructing the `SField` field codes](https://github.com/ripple/rippled/blob/eaff9a0e6aec0ad077f118501791c7684debcfd5/src/ripple/protocol/SField.h#L95-L98) + +For example, the `Account` field has sort code (nth) `1`, so it comes before the `Destination` field which has sort code `3`. + +Sort code numbers are reused for fields of different types, but different fields of the same type never have the same sort code. When you combine the type code with the sort code, you get the field's unique _Field ID_. + +The unique [Field ID](https://xrpl.org/serialization.html#field-ids) is prefixed before the field in the final serialized blob. The size of the Field ID is one to three bytes depending on the type code and the field codes it combines. + +### isVLEncoded + +If true, the field is Variable Length encoded and [length-prefixed](https://xrpl.org/serialization.html#length-prefixing). The variable-length encoded fields are `STI_VL`/`Blob`, `STI_ACCOUNT`/`AccountID`, and `STI_VECTOR256`/`Vector256`. + +### isSerialized + +Fields are serialized if they are not [one of these](https://github.com/ripple/rippled/blob/eaff9a0e6aec0ad077f118501791c7684debcfd5/src/ripple/protocol/impl/SField.cpp#L71-L78) or if they are not an SField. + +- https://github.com/ripple/ripple-binary-codec/blob/14e76e68ead7e4bcd83c942dbdc9064d5a66869b/src/enums/definitions.json#L832 +- https://github.com/ripple/rippled/search?utf8=%E2%9C%93&q=taker_gets_funded&type= + +### isSigningField + +True unless the field is [specified with `SField::notSigning`](https://github.com/ripple/rippled/blob/eaff9a0e6aec0ad077f118501791c7684debcfd5/src/ripple/protocol/impl/SField.cpp#L198). + +## Transaction Results + +See: + +- https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/TER.h +- https://xrpl.org/transaction-results.html + +TODO: Write a script to read rippled's source file and generate the necessary mapping. + +## Transaction Types + +See https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/TxFormats.h diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json new file mode 100644 index 00000000..97d6a92b --- /dev/null +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -0,0 +1,1772 @@ +{ + "TYPES": { + "Validation": 10003, + "Done": -1, + "Hash128": 4, + "Blob": 7, + "AccountID": 8, + "Amount": 6, + "Hash256": 5, + "UInt8": 16, + "Vector256": 19, + "STObject": 14, + "Unknown": -2, + "Transaction": 10001, + "Hash160": 17, + "PathSet": 18, + "LedgerEntry": 10002, + "UInt16": 1, + "NotPresent": 0, + "UInt64": 3, + "UInt32": 2, + "STArray": 15 + }, + "LEDGER_ENTRY_TYPES": { + "Any": -3, + "Child": -2, + "Invalid": -1, + "AccountRoot": 97, + "DirectoryNode": 100, + "RippleState": 114, + "Ticket": 84, + "SignerList": 83, + "Offer": 111, + "LedgerHashes": 104, + "Amendments": 102, + "FeeSettings": 115, + "Escrow": 117, + "PayChannel": 120, + "DepositPreauth": 112, + "Check": 67, + "Nickname": 110, + "Contract": 99, + "GeneratorMap": 103, + "NegativeUNL": 78 + }, + "FIELDS": [ + [ + "Generic", + { + "nth": 0, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Unknown" + } + ], + [ + "Invalid", + { + "nth": -1, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Unknown" + } + ], + [ + "LedgerEntryType", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt16" + } + ], + [ + "TransactionType", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt16" + } + ], + [ + "SignerWeight", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt16" + } + ], + [ + "Flags", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "SourceTag", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "Sequence", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "PreviousTxnLgrSeq", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "LedgerSequence", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "CloseTime", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "ParentCloseTime", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "SigningTime", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "Expiration", + { + "nth": 10, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "TransferRate", + { + "nth": 11, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "WalletSize", + { + "nth": 12, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "OwnerCount", + { + "nth": 13, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "DestinationTag", + { + "nth": 14, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "HighQualityIn", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "HighQualityOut", + { + "nth": 17, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "LowQualityIn", + { + "nth": 18, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "LowQualityOut", + { + "nth": 19, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "QualityIn", + { + "nth": 20, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "QualityOut", + { + "nth": 21, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "StampEscrow", + { + "nth": 22, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "BondAmount", + { + "nth": 23, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "LoadFee", + { + "nth": 24, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "OfferSequence", + { + "nth": 25, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "FirstLedgerSequence", + { + "nth": 26, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "LastLedgerSequence", + { + "nth": 27, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "TransactionIndex", + { + "nth": 28, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "OperationLimit", + { + "nth": 29, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "ReferenceFeeUnits", + { + "nth": 30, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "ReserveBase", + { + "nth": 31, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "ReserveIncrement", + { + "nth": 32, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "SetFlag", + { + "nth": 33, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "ClearFlag", + { + "nth": 34, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "SignerQuorum", + { + "nth": 35, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "CancelAfter", + { + "nth": 36, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "FinishAfter", + { + "nth": 37, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "IndexNext", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "IndexPrevious", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "BookNode", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "OwnerNode", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "BaseFee", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "ExchangeRate", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "LowNode", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "HighNode", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ], + [ + "EmailHash", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash128" + } + ], + [ + "LedgerHash", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "ParentHash", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "TransactionHash", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "AccountHash", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "PreviousTxnID", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "LedgerIndex", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "WalletLocator", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "RootIndex", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "AccountTxnID", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "BookDirectory", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "InvoiceID", + { + "nth": 17, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "Nickname", + { + "nth": 18, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "Amendment", + { + "nth": 19, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "TicketID", + { + "nth": 20, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "Digest", + { + "nth": 21, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "hash", + { + "nth": 257, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Hash256" + } + ], + [ + "index", + { + "nth": 258, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Hash256" + } + ], + [ + "Amount", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "Balance", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "LimitAmount", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "TakerPays", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "TakerGets", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "LowLimit", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "HighLimit", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "Fee", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "SendMax", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "DeliverMin", + { + "nth": 10, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "MinimumOffer", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "RippleEscrow", + { + "nth": 17, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "DeliveredAmount", + { + "nth": 18, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Amount" + } + ], + [ + "taker_gets_funded", + { + "nth": 258, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Amount" + } + ], + [ + "taker_pays_funded", + { + "nth": 259, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Amount" + } + ], + [ + "PublicKey", + { + "nth": 1, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "MessageKey", + { + "nth": 2, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "SigningPubKey", + { + "nth": 3, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "TxnSignature", + { + "nth": 4, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": false, + "type": "Blob" + } + ], + [ + "Generator", + { + "nth": 5, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "Signature", + { + "nth": 6, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": false, + "type": "Blob" + } + ], + [ + "Domain", + { + "nth": 7, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "FundCode", + { + "nth": 8, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "RemoveCode", + { + "nth": 9, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "ExpireCode", + { + "nth": 10, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "CreateCode", + { + "nth": 11, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "MemoType", + { + "nth": 12, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "MemoData", + { + "nth": 13, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "MemoFormat", + { + "nth": 14, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "Fulfillment", + { + "nth": 16, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "Condition", + { + "nth": 17, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "MasterSignature", + { + "nth": 18, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": false, + "type": "Blob" + } + ], + [ + "UNLModifyValidator", + { + "nth": 19, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "ValidatorToDisable", + { + "nth": 20, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "ValidatorToReEnable", + { + "nth": 21, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Blob" + } + ], + [ + "Account", + { + "nth": 1, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Owner", + { + "nth": 2, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Destination", + { + "nth": 3, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Issuer", + { + "nth": 4, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Authorize", + { + "nth": 5, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Unauthorize", + { + "nth": 6, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "Target", + { + "nth": 7, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "RegularKey", + { + "nth": 8, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "AccountID" + } + ], + [ + "ObjectEndMarker", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "TransactionMetaData", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "CreatedNode", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "DeletedNode", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "ModifiedNode", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "PreviousFields", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "FinalFields", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "NewFields", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "TemplateEntry", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "Memo", + { + "nth": 10, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "SignerEntry", + { + "nth": 11, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "Signer", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "Majority", + { + "nth": 18, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "DisabledValidator", + { + "nth": 19, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STObject" + } + ], + [ + "ArrayEndMarker", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Signers", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": false, + "type": "STArray" + } + ], + [ + "SignerEntries", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Template", + { + "nth": 5, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Necessary", + { + "nth": 6, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Sufficient", + { + "nth": 7, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "AffectedNodes", + { + "nth": 8, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Memos", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "Majorities", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "DisabledValidators", + { + "nth": 17, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "STArray" + } + ], + [ + "CloseResolution", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], + [ + "Method", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], + [ + "TransactionResult", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], + [ + "TakerPaysCurrency", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash160" + } + ], + [ + "TakerPaysIssuer", + { + "nth": 2, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash160" + } + ], + [ + "TakerGetsCurrency", + { + "nth": 3, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash160" + } + ], + [ + "TakerGetsIssuer", + { + "nth": 4, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash160" + } + ], + [ + "Paths", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "PathSet" + } + ], + [ + "Indexes", + { + "nth": 1, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Vector256" + } + ], + [ + "Hashes", + { + "nth": 2, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Vector256" + } + ], + [ + "Amendments", + { + "nth": 3, + "isVLEncoded": true, + "isSerialized": true, + "isSigningField": true, + "type": "Vector256" + } + ], + [ + "Transaction", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Transaction" + } + ], + [ + "LedgerEntry", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "LedgerEntry" + } + ], + [ + "Validation", + { + "nth": 1, + "isVLEncoded": false, + "isSerialized": false, + "isSigningField": false, + "type": "Validation" + } + ], + [ + "SignerListID", + { + "nth": 38, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "SettleDelay", + { + "nth": 39, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "TicketCount", + { + "nth": 40, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "TicketSequence", + { + "nth": 41, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt32" + } + ], + [ + "Channel", + { + "nth": 22, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "ConsensusHash", + { + "nth": 23, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "CheckID", + { + "nth": 24, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "Hash256" + } + ], + [ + "TickSize", + { + "nth": 16, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], + [ + "UNLModifyDisabling", + { + "nth": 17, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt8" + } + ], + [ + "DestinationNode", + { + "nth": 9, + "isVLEncoded": false, + "isSerialized": true, + "isSigningField": true, + "type": "UInt64" + } + ] + ], + "TRANSACTION_RESULTS": { + "telLOCAL_ERROR": -399, + "telBAD_DOMAIN": -398, + "telBAD_PATH_COUNT": -397, + "telBAD_PUBLIC_KEY": -396, + "telFAILED_PROCESSING": -395, + "telINSUF_FEE_P": -394, + "telNO_DST_PARTIAL": -393, + "telCAN_NOT_QUEUE": -392, + "telCAN_NOT_QUEUE_BALANCE": -391, + "telCAN_NOT_QUEUE_BLOCKS": -390, + "telCAN_NOT_QUEUE_BLOCKED": -389, + "telCAN_NOT_QUEUE_FEE": -388, + "telCAN_NOT_QUEUE_FULL": -387, + + "temMALFORMED": -299, + "temBAD_AMOUNT": -298, + "temBAD_CURRENCY": -297, + "temBAD_EXPIRATION": -296, + "temBAD_FEE": -295, + "temBAD_ISSUER": -294, + "temBAD_LIMIT": -293, + "temBAD_OFFER": -292, + "temBAD_PATH": -291, + "temBAD_PATH_LOOP": -290, + "temBAD_REGKEY": -289, + "temBAD_SEND_XRP_LIMIT": -288, + "temBAD_SEND_XRP_MAX": -287, + "temBAD_SEND_XRP_NO_DIRECT": -286, + "temBAD_SEND_XRP_PARTIAL": -285, + "temBAD_SEND_XRP_PATHS": -284, + "temBAD_SEQUENCE": -283, + "temBAD_SIGNATURE": -282, + "temBAD_SRC_ACCOUNT": -281, + "temBAD_TRANSFER_RATE": -280, + "temDST_IS_SRC": -279, + "temDST_NEEDED": -278, + "temINVALID": -277, + "temINVALID_FLAG": -276, + "temREDUNDANT": -275, + "temRIPPLE_EMPTY": -274, + "temDISABLED": -273, + "temBAD_SIGNER": -272, + "temBAD_QUORUM": -271, + "temBAD_WEIGHT": -270, + "temBAD_TICK_SIZE": -269, + "temINVALID_ACCOUNT_ID": -268, + "temCANNOT_PREAUTH_SELF": -267, + "temUNCERTAIN": -266, + "temUNKNOWN": -265, + + "tefFAILURE": -199, + "tefALREADY": -198, + "tefBAD_ADD_AUTH": -197, + "tefBAD_AUTH": -196, + "tefBAD_LEDGER": -195, + "tefCREATED": -194, + "tefEXCEPTION": -193, + "tefINTERNAL": -192, + "tefNO_AUTH_REQUIRED": -191, + "tefPAST_SEQ": -190, + "tefWRONG_PRIOR": -189, + "tefMASTER_DISABLED": -188, + "tefMAX_LEDGER": -187, + "tefBAD_SIGNATURE": -186, + "tefBAD_QUORUM": -185, + "tefNOT_MULTI_SIGNING": -184, + "tefBAD_AUTH_MASTER": -183, + "tefINVARIANT_FAILED": -182, + "tefTOO_BIG": -181, + + "terRETRY": -99, + "terFUNDS_SPENT": -98, + "terINSUF_FEE_B": -97, + "terNO_ACCOUNT": -96, + "terNO_AUTH": -95, + "terNO_LINE": -94, + "terOWNERS": -93, + "terPRE_SEQ": -92, + "terLAST": -91, + "terNO_RIPPLE": -90, + "terQUEUED": -89, + + "tesSUCCESS": 0, + + "tecCLAIM": 100, + "tecPATH_PARTIAL": 101, + "tecUNFUNDED_ADD": 102, + "tecUNFUNDED_OFFER": 103, + "tecUNFUNDED_PAYMENT": 104, + "tecFAILED_PROCESSING": 105, + "tecDIR_FULL": 121, + "tecINSUF_RESERVE_LINE": 122, + "tecINSUF_RESERVE_OFFER": 123, + "tecNO_DST": 124, + "tecNO_DST_INSUF_XRP": 125, + "tecNO_LINE_INSUF_RESERVE": 126, + "tecNO_LINE_REDUNDANT": 127, + "tecPATH_DRY": 128, + "tecUNFUNDED": 129, + "tecNO_ALTERNATIVE_KEY": 130, + "tecNO_REGULAR_KEY": 131, + "tecOWNERS": 132, + "tecNO_ISSUER": 133, + "tecNO_AUTH": 134, + "tecNO_LINE": 135, + "tecINSUFF_FEE": 136, + "tecFROZEN": 137, + "tecNO_TARGET": 138, + "tecNO_PERMISSION": 139, + "tecNO_ENTRY": 140, + "tecINSUFFICIENT_RESERVE": 141, + "tecNEED_MASTER_KEY": 142, + "tecDST_TAG_NEEDED": 143, + "tecINTERNAL": 144, + "tecOVERSIZE": 145, + "tecCRYPTOCONDITION_ERROR": 146, + "tecINVARIANT_FAILED": 147, + "tecEXPIRED": 148, + "tecDUPLICATE": 149, + "tecKILLED": 150, + "tecHAS_OBLIGATIONS": 151, + "tecTOO_SOON": 152 + }, + "TRANSACTION_TYPES": { + "Invalid": -1, + + "Payment": 0, + "EscrowCreate": 1, + "EscrowFinish": 2, + "AccountSet": 3, + "EscrowCancel": 4, + "SetRegularKey": 5, + "NickNameSet": 6, + "OfferCreate": 7, + "OfferCancel": 8, + "Contract": 9, + "TicketCreate": 10, + "TicketCancel": 11, + "SignerListSet": 12, + "PaymentChannelCreate": 13, + "PaymentChannelFund": 14, + "PaymentChannelClaim": 15, + "CheckCreate": 16, + "CheckCash": 17, + "CheckCancel": 18, + "DepositPreauth": 19, + "TrustSet": 20, + "AccountDelete": 21, + + "EnableAmendment": 100, + "SetFee": 101, + "UNLModify": 102 + } +} diff --git a/packages/ripple-binary-codec/src/enums/index.ts b/packages/ripple-binary-codec/src/enums/index.ts new file mode 100644 index 00000000..943675c4 --- /dev/null +++ b/packages/ripple-binary-codec/src/enums/index.ts @@ -0,0 +1,156 @@ +import * as enums from "./definitions.json"; +import { SerializedType } from "../types/serialized-type"; +import { Buffer } from "buffer/"; + +const TYPE_WIDTH = 2; +const LEDGER_ENTRY_WIDTH = 2; +const TRANSACTION_TYPE_WIDTH = 2; +const TRANSACTION_RESULT_WIDTH = 1; + +/* + * @brief: Serialize a field based on type_code and Field.nth + */ +function fieldHeader(type: number, nth: number): Buffer { + const header: Array = []; + if (type < 16) { + if (nth < 16) { + header.push((type << 4) | nth); + } else { + header.push(type << 4, nth); + } + } else if (nth < 16) { + header.push(nth, type); + } else { + header.push(0, type, nth); + } + return Buffer.from(header); +} + +/* + * @brief: Bytes, name, and ordinal representing one type, ledger_type, transaction type, or result + */ +class Bytes { + readonly bytes: Uint8Array; + + constructor( + readonly name: string, + readonly ordinal: number, + readonly ordinalWidth: number + ) { + this.bytes = Buffer.alloc(ordinalWidth); + for (let i = 0; i < ordinalWidth; i++) { + this.bytes[ordinalWidth - i - 1] = (ordinal >>> (i * 8)) & 0xff; + } + } + + toJSON(): string { + return this.name; + } + + toBytesSink(sink): void { + sink.put(this.bytes); + } + + toBytes(): Uint8Array { + return this.bytes; + } +} + +/* + * @brief: Collection of Bytes objects, mapping bidirectionally + */ +class BytesLookup { + constructor(types: Record, readonly ordinalWidth: number) { + Object.entries(types).forEach(([k, v]) => { + this[k] = new Bytes(k, v, ordinalWidth); + this[v.toString()] = this[k]; + }); + } + + from(value: Bytes | string): Bytes { + return value instanceof Bytes ? value : (this[value] as Bytes); + } + + fromParser(parser): Bytes { + return this.from(parser.readUIntN(this.ordinalWidth).toString()); + } +} + +/* + * type FieldInfo is the type of the objects containing information about each field in definitions.json + */ +interface FieldInfo { + nth: number; + isVLEncoded: boolean; + isSerialized: boolean; + isSigningField: boolean; + type: string; +} + +interface FieldInstance { + readonly nth: number; + readonly isVariableLengthEncoded: boolean; + readonly isSerialized: boolean; + readonly isSigningField: boolean; + readonly type: Bytes; + readonly ordinal: number; + readonly name: string; + readonly header: Buffer; + readonly associatedType: typeof SerializedType; +} + +function buildField([name, info]: [string, FieldInfo]): FieldInstance { + const typeOrdinal = enums.TYPES[info.type]; + const field = fieldHeader(typeOrdinal, info.nth); + return { + name: name, + nth: info.nth, + isVariableLengthEncoded: info.isVLEncoded, + isSerialized: info.isSerialized, + isSigningField: info.isSigningField, + ordinal: (typeOrdinal << 16) | info.nth, + type: new Bytes(info.type, typeOrdinal, TYPE_WIDTH), + header: field, + associatedType: SerializedType, // For later assignment in ./types/index.js + }; +} + +/* + * @brief: The collection of all fields as defined in definitions.json + */ +class FieldLookup { + constructor(fields: Array<[string, FieldInfo]>) { + fields.forEach(([k, v]) => { + this[k] = buildField([k, v]); + this[this[k].ordinal.toString()] = this[k]; + }); + } + + fromString(value: string): FieldInstance { + return this[value] as FieldInstance; + } +} + +const Type = new BytesLookup(enums.TYPES, TYPE_WIDTH); +const LedgerEntryType = new BytesLookup( + enums.LEDGER_ENTRY_TYPES, + LEDGER_ENTRY_WIDTH +); +const TransactionType = new BytesLookup( + enums.TRANSACTION_TYPES, + TRANSACTION_TYPE_WIDTH +); +const TransactionResult = new BytesLookup( + enums.TRANSACTION_RESULTS, + TRANSACTION_RESULT_WIDTH +); +const Field = new FieldLookup(enums.FIELDS as Array<[string, FieldInfo]>); + +export { + Field, + FieldInstance, + Type, + LedgerEntryType, + TransactionResult, + TransactionType, +}; diff --git a/packages/ripple-binary-codec/src/enums/utils-renumber.ts b/packages/ripple-binary-codec/src/enums/utils-renumber.ts new file mode 100644 index 00000000..c0d120ab --- /dev/null +++ b/packages/ripple-binary-codec/src/enums/utils-renumber.ts @@ -0,0 +1,134 @@ +/** + * Quick script to re-number values + */ + +const input = { + temBAD_SEND_XRP_PATHS: -283, + temBAD_SEQUENCE: -282, + temBAD_SIGNATURE: -281, + temBAD_SRC_ACCOUNT: -280, + temBAD_TRANSFER_RATE: -279, + temDST_IS_SRC: -278, + temDST_NEEDED: -277, + temINVALID: -276, + temINVALID_FLAG: -275, + temREDUNDANT: -274, + temRIPPLE_EMPTY: -273, + temDISABLED: -272, + temBAD_SIGNER: -271, + temBAD_QUORUM: -270, + temBAD_WEIGHT: -269, + temBAD_TICK_SIZE: -268, + temINVALID_ACCOUNT_ID: -267, + temCANNOT_PREAUTH_SELF: -266, + + temUNCERTAIN: -265, + temUNKNOWN: -264, + + tefFAILURE: -199, + tefALREADY: -198, + tefBAD_ADD_AUTH: -197, + tefBAD_AUTH: -196, + tefBAD_LEDGER: -195, + tefCREATED: -194, + tefEXCEPTION: -193, + tefINTERNAL: -192, + tefNO_AUTH_REQUIRED: -191, + tefPAST_SEQ: -190, + tefWRONG_PRIOR: -189, + tefMASTER_DISABLED: -188, + tefMAX_LEDGER: -187, + tefBAD_SIGNATURE: -186, + tefBAD_QUORUM: -185, + tefNOT_MULTI_SIGNING: -184, + tefBAD_AUTH_MASTER: -183, + tefINVARIANT_FAILED: -182, + tefTOO_BIG: -181, + + terRETRY: -99, + terFUNDS_SPENT: -98, + terINSUF_FEE_B: -97, + terNO_ACCOUNT: -96, + terNO_AUTH: -95, + terNO_LINE: -94, + terOWNERS: -93, + terPRE_SEQ: -92, + terLAST: -91, + terNO_RIPPLE: -90, + terQUEUED: -89, + + tesSUCCESS: 0, + + tecCLAIM: 100, + tecPATH_PARTIAL: 101, + tecUNFUNDED_ADD: 102, + tecUNFUNDED_OFFER: 103, + tecUNFUNDED_PAYMENT: 104, + tecFAILED_PROCESSING: 105, + tecDIR_FULL: 121, + tecINSUF_RESERVE_LINE: 122, + tecINSUF_RESERVE_OFFER: 123, + tecNO_DST: 124, + tecNO_DST_INSUF_XRP: 125, + tecNO_LINE_INSUF_RESERVE: 126, + tecNO_LINE_REDUNDANT: 127, + tecPATH_DRY: 128, + tecUNFUNDED: 129, + tecNO_ALTERNATIVE_KEY: 130, + tecNO_REGULAR_KEY: 131, + tecOWNERS: 132, + tecNO_ISSUER: 133, + tecNO_AUTH: 134, + tecNO_LINE: 135, + tecINSUFF_FEE: 136, + tecFROZEN: 137, + tecNO_TARGET: 138, + tecNO_PERMISSION: 139, + tecNO_ENTRY: 140, + tecINSUFFICIENT_RESERVE: 141, + tecNEED_MASTER_KEY: 142, + tecDST_TAG_NEEDED: 143, + tecINTERNAL: 144, + tecOVERSIZE: 145, + tecCRYPTOCONDITION_ERROR: 146, + tecINVARIANT_FAILED: 147, + tecEXPIRED: 148, + tecDUPLICATE: 149, + tecKILLED: 150, + tecHAS_OBLIGATIONS: 151, + tecTOO_SOON: 152, +}; + +let startingFromTemBADSENDXRPPATHS = -284; + +let startingFromTefFAILURE = -199; + +let startingFromTerRETRY = -99; + +const tesSUCCESS = 0; + +let startingFromTecCLAIM = 100; + +const startingFromTecDIRFULL = 121; + +let previousKey = "tem"; +Object.keys(input).forEach((key) => { + if (key.substring(0, 3) !== previousKey.substring(0, 3)) { + console.log(); + previousKey = key; + } + if (key.substring(0, 3) === "tem") { + console.log(` "${key}": ${startingFromTemBADSENDXRPPATHS++},`); + } else if (key.substring(0, 3) === "tef") { + console.log(` "${key}": ${startingFromTefFAILURE++},`); + } else if (key.substring(0, 3) === "ter") { + console.log(` "${key}": ${startingFromTerRETRY++},`); + } else if (key.substring(0, 3) === "tes") { + console.log(` "${key}": ${tesSUCCESS},`); + } else if (key.substring(0, 3) === "tec") { + if (key === "tecDIR_FULL") { + startingFromTecCLAIM = startingFromTecDIRFULL; + } + console.log(` "${key}": ${startingFromTecCLAIM++},`); + } +}); diff --git a/packages/ripple-binary-codec/src/hash-prefixes.ts b/packages/ripple-binary-codec/src/hash-prefixes.ts new file mode 100644 index 00000000..641d551d --- /dev/null +++ b/packages/ripple-binary-codec/src/hash-prefixes.ts @@ -0,0 +1,40 @@ +import { Buffer } from "buffer/"; + +/** + * Write a 32 bit integer to a Buffer + * + * @param uint32 32 bit integer to write to buffer + * @returns a buffer with the bytes representation of uint32 + */ +function bytes(uint32: number): Buffer { + const result = Buffer.alloc(4); + result.writeUInt32BE(uint32, 0); + return result; +} + +/** + * Maps HashPrefix names to their byte representation + */ +const HashPrefix: Record = { + transactionID: bytes(0x54584e00), + // transaction plus metadata + transaction: bytes(0x534e4400), + // account state + accountStateEntry: bytes(0x4d4c4e00), + // inner node in tree + innerNode: bytes(0x4d494e00), + // ledger master data for signing + ledgerHeader: bytes(0x4c575200), + // inner transaction to sign + transactionSig: bytes(0x53545800), + // inner transaction to sign + transactionMultiSig: bytes(0x534d5400), + // validation for signing + validation: bytes(0x56414c00), + // proposal for signing + proposal: bytes(0x50525000), + // payment channel claim + paymentChannelClaim: bytes(0x434c4d00), +}; + +export { HashPrefix }; diff --git a/packages/ripple-binary-codec/src/hashes.ts b/packages/ripple-binary-codec/src/hashes.ts new file mode 100644 index 00000000..ed5a4fb8 --- /dev/null +++ b/packages/ripple-binary-codec/src/hashes.ts @@ -0,0 +1,77 @@ +import { HashPrefix } from "./hash-prefixes"; +import * as createHash from "create-hash"; +import { Hash256 } from "./types/hash-256"; +import { BytesList } from "./serdes/binary-serializer"; +import { Buffer } from "buffer/"; + +/** + * Class for hashing with SHA512 + * @extends BytesList So SerializedTypes can write bytes to a Sha512Half + */ +class Sha512Half extends BytesList { + private hash: createHash = createHash("sha512"); + + /** + * Construct a new Sha512Hash and write bytes this.hash + * + * @param bytes bytes to write to this.hash + * @returns the new Sha512Hash object + */ + static put(bytes: Buffer): Sha512Half { + return new Sha512Half().put(bytes); + } + + /** + * Write bytes to an existing Sha512Hash + * + * @param bytes bytes to write to object + * @returns the Sha512 object + */ + put(bytes: Buffer): Sha512Half { + this.hash.update(bytes); + return this; + } + + /** + * Compute SHA512 hash and slice in half + * + * @returns half of a SHA512 hash + */ + finish256(): Buffer { + const bytes: Buffer = this.hash.digest(); + return bytes.slice(0, 32); + } + + /** + * Constructs a Hash256 from the Sha512Half object + * + * @returns a Hash256 object + */ + finish(): Hash256 { + return new Hash256(this.finish256()); + } +} + +/** + * compute SHA512 hash of a list of bytes + * + * @param args zero or more arguments to hash + * @returns the sha512half hash of the arguments. + */ +function sha512Half(...args: Buffer[]): Buffer { + const hash = new Sha512Half(); + args.forEach((a) => hash.put(a)); + return hash.finish256(); +} + +/** + * Construct a transactionID from a Serialized Transaction + * + * @param serialized bytes to hash + * @returns a Hash256 object + */ +function transactionID(serialized: Buffer): Hash256 { + return new Hash256(sha512Half(HashPrefix.transactionID, serialized)); +} + +export { Sha512Half, sha512Half, transactionID }; diff --git a/packages/ripple-binary-codec/src/index.ts b/packages/ripple-binary-codec/src/index.ts new file mode 100644 index 00000000..4c49f19e --- /dev/null +++ b/packages/ripple-binary-codec/src/index.ts @@ -0,0 +1,112 @@ +import * as assert from "assert"; +import { quality, binary } from "./coretypes"; +import { decodeLedgerData } from "./ledger-hashes"; +import { ClaimObject } from "./binary"; +import { JsonObject } from "./types/serialized-type"; +const { + signingData, + signingClaimData, + multiSigningData, + binaryToJSON, + serializeObject, +} = binary; + +/** + * Decode a transaction + * + * @param binary hex-string of the encoded transaction + * @returns the JSON representation of the transaction + */ +function decode(binary: string): JsonObject { + assert.ok(typeof binary === "string", "binary must be a hex string"); + return binaryToJSON(binary); +} + +/** + * Encode a transaction + * + * @param json The JSON representation of a transaction + * @returns A hex-string of the encoded transaction + */ +function encode(json: object): string { + assert.ok(typeof json === "object"); + return serializeObject(json as JsonObject) + .toString("hex") + .toUpperCase(); +} + +/** + * Encode a transaction and prepare for signing + * + * @param json JSON object representing the transaction + * @param signer string representing the account to sign the transaction with + * @returns a hex string of the encoded transaction + */ +function encodeForSigning(json: object): string { + assert.ok(typeof json === "object"); + return signingData(json as JsonObject) + .toString("hex") + .toUpperCase(); +} + +/** + * Encode a transaction and prepare for signing with a claim + * + * @param json JSON object representing the transaction + * @param signer string representing the account to sign the transaction with + * @returns a hex string of the encoded transaction + */ +function encodeForSigningClaim(json: object): string { + assert.ok(typeof json === "object"); + return signingClaimData(json as ClaimObject) + .toString("hex") + .toUpperCase(); +} + +/** + * Encode a transaction and prepare for multi-signing + * + * @param json JSON object representing the transaction + * @param signer string representing the account to sign the transaction with + * @returns a hex string of the encoded transaction + */ +function encodeForMultisigning(json: object, signer: string): string { + assert.ok(typeof json === "object"); + assert.equal(json["SigningPubKey"], ""); + return multiSigningData(json as JsonObject, signer) + .toString("hex") + .toUpperCase(); +} + +/** + * Encode a quality value + * + * @param value string representation of a number + * @returns a hex-string representing the quality + */ +function encodeQuality(value: string): string { + assert.ok(typeof value === "string"); + return quality.encode(value).toString("hex").toUpperCase(); +} + +/** + * Decode a quality value + * + * @param value hex-string of a quality + * @returns a string representing the quality + */ +function decodeQuality(value: string): string { + assert.ok(typeof value === "string"); + return quality.decode(value).toString(); +} + +export = { + decode, + encode, + encodeForSigning, + encodeForSigningClaim, + encodeForMultisigning, + encodeQuality, + decodeQuality, + decodeLedgerData, +}; diff --git a/packages/ripple-binary-codec/src/ledger-hashes.ts b/packages/ripple-binary-codec/src/ledger-hashes.ts new file mode 100644 index 00000000..45c0e0f5 --- /dev/null +++ b/packages/ripple-binary-codec/src/ledger-hashes.ts @@ -0,0 +1,181 @@ +import * as assert from "assert"; +import { ShaMap, ShaMapNode, ShaMapLeaf } from "./shamap"; +import { HashPrefix } from "./hash-prefixes"; +import { Sha512Half } from "./hashes"; +import { BinarySerializer, serializeObject } from "./binary"; +import { Hash256 } from "./types/hash-256"; +import { STObject } from "./types/st-object"; +import { UInt64 } from "./types/uint-64"; +import { UInt32 } from "./types/uint-32"; +import { UInt8 } from "./types/uint-8"; +import { BinaryParser } from "./serdes/binary-parser"; +import { JsonObject } from "./types/serialized-type"; +import * as bigInt from "big-integer"; + +/** + * Computes the hash of a list of objects + * + * @param itemizer Converts an item into a format that can be added to SHAMap + * @param itemsJson Array of items to add to a SHAMap + * @returns the hash of the SHAMap + */ +function computeHash( + itemizer: (item: JsonObject) => [Hash256?, ShaMapNode?, ShaMapLeaf?], + itemsJson: Array +): Hash256 { + const map = new ShaMap(); + itemsJson.forEach((item) => map.addItem(...itemizer(item))); + return map.hash(); +} + +/** + * Interface describing a transaction item + */ +interface transactionItemObject extends JsonObject { + hash: string; + metaData: JsonObject; +} + +/** + * Convert a transaction into an index and an item + * + * @param json transaction with metadata + * @returns a tuple of index and item to be added to SHAMap + */ +function transactionItemizer( + json: transactionItemObject +): [Hash256, ShaMapNode, undefined] { + assert.ok(json.hash); + const index = Hash256.from(json.hash); + const item = { + hashPrefix() { + return HashPrefix.transaction; + }, + toBytesSink(sink) { + const serializer = new BinarySerializer(sink); + serializer.writeLengthEncoded(STObject.from(json)); + serializer.writeLengthEncoded(STObject.from(json.metaData)); + }, + } as ShaMapNode; + return [index, item, undefined]; +} + +/** + * Interface describing an entry item + */ +interface entryItemObject extends JsonObject { + index: string; +} + +/** + * Convert an entry to a pair Hash256 and ShaMapNode + * + * @param json JSON describing a ledger entry item + * @returns a tuple of index and item to be added to SHAMap + */ +function entryItemizer( + json: entryItemObject +): [Hash256, ShaMapNode, undefined] { + const index = Hash256.from(json.index); + const bytes = serializeObject(json); + const item = { + hashPrefix() { + return HashPrefix.accountStateEntry; + }, + toBytesSink(sink) { + sink.put(bytes); + }, + } as ShaMapNode; + return [index, item, undefined]; +} + +/** + * Function computing the hash of a transaction tree + * + * @param param An array of transaction objects to hash + * @returns A Hash256 object + */ +function transactionTreeHash(param: Array): Hash256 { + const itemizer = transactionItemizer as ( + json: JsonObject + ) => [Hash256, ShaMapNode, undefined]; + return computeHash(itemizer, param); +} + +/** + * Function computing the hash of accountState + * + * @param param A list of accountStates hash + * @returns A Hash256 object + */ +function accountStateHash(param: Array): Hash256 { + const itemizer = entryItemizer as ( + json: JsonObject + ) => [Hash256, ShaMapNode, undefined]; + return computeHash(itemizer, param); +} + +/** + * Interface describing a ledger header + */ +interface ledgerObject { + ledger_index: number; + total_coins: string | number | bigInt.BigInteger; + parent_hash: string; + transaction_hash: string; + account_hash: string; + parent_close_time: number; + close_time: number; + close_time_resolution: number; + close_flags: number; +} + +/** + * Serialize and hash a ledger header + * + * @param header a ledger header + * @returns the hash of header + */ +function ledgerHash(header: ledgerObject): Hash256 { + const hash = new Sha512Half(); + hash.put(HashPrefix.ledgerHeader); + assert.ok(header.parent_close_time !== undefined); + assert.ok(header.close_flags !== undefined); + + UInt32.from(header.ledger_index).toBytesSink(hash); + UInt64.from( + bigInt(String(header.total_coins)) + ).toBytesSink(hash); + Hash256.from(header.parent_hash).toBytesSink(hash); + Hash256.from(header.transaction_hash).toBytesSink(hash); + Hash256.from(header.account_hash).toBytesSink(hash); + UInt32.from(header.parent_close_time).toBytesSink(hash); + UInt32.from(header.close_time).toBytesSink(hash); + UInt8.from(header.close_time_resolution).toBytesSink(hash); + UInt8.from(header.close_flags).toBytesSink(hash); + return hash.finish(); +} + +/** + * Decodes a serialized ledger header + * + * @param binary A serialized ledger header + * @returns A JSON object describing a ledger header + */ +function decodeLedgerData(binary: string): object { + assert.ok(typeof binary === "string", "binary must be a hex string"); + const parser = new BinaryParser(binary); + return { + ledger_index: parser.readUInt32(), + total_coins: parser.readType(UInt64).valueOf().toString(), + parent_hash: parser.readType(Hash256).toHex(), + transaction_hash: parser.readType(Hash256).toHex(), + account_hash: parser.readType(Hash256).toHex(), + parent_close_time: parser.readUInt32(), + close_time: parser.readUInt32(), + close_time_resolution: parser.readUInt8(), + close_flags: parser.readUInt8(), + }; +} + +export { accountStateHash, transactionTreeHash, ledgerHash, decodeLedgerData }; diff --git a/packages/ripple-binary-codec/src/quality.ts b/packages/ripple-binary-codec/src/quality.ts new file mode 100644 index 00000000..2387699d --- /dev/null +++ b/packages/ripple-binary-codec/src/quality.ts @@ -0,0 +1,39 @@ +import { coreTypes } from "./types"; +import { Decimal } from "decimal.js"; +import * as bigInt from "big-integer"; +import { Buffer } from "buffer/"; + +/** + * class for encoding and decoding quality + */ +class quality { + /** + * Encode quality amount + * + * @param arg string representation of an amount + * @returns Serialized quality + */ + static encode(quality: string): Buffer { + const decimal = new Decimal(quality); + const exponent = decimal.e - 15; + const qualityString = decimal.times(`1e${-exponent}`).abs().toString(); + const bytes = coreTypes.UInt64.from(bigInt(qualityString)).toBytes(); + bytes[0] = exponent + 100; + return bytes; + } + + /** + * Decode quality amount + * + * @param arg hex-string denoting serialized quality + * @returns deserialized quality + */ + static decode(quality: string): Decimal { + const bytes = Buffer.from(quality, "hex").slice(-8); + const exponent = bytes[0] - 100; + const mantissa = new Decimal(`0x${bytes.slice(1).toString("hex")}`); + return mantissa.times(`1e${exponent}`); + } +} + +export { quality }; diff --git a/packages/ripple-binary-codec/src/serdes/binary-parser.ts b/packages/ripple-binary-codec/src/serdes/binary-parser.ts new file mode 100644 index 00000000..7bf7e447 --- /dev/null +++ b/packages/ripple-binary-codec/src/serdes/binary-parser.ts @@ -0,0 +1,206 @@ +import * as assert from "assert"; +import { Field, FieldInstance } from "../enums"; +import { SerializedType } from "../types/serialized-type"; +import { Buffer } from "buffer/"; + +/** + * BinaryParser is used to compute fields and values from a HexString + */ +class BinaryParser { + private bytes: Buffer; + + /** + * Initialize bytes to a hex string + * + * @param hexBytes a hex string + */ + constructor(hexBytes: string) { + this.bytes = Buffer.from(hexBytes, "hex"); + } + + /** + * Peek the first byte of the BinaryParser + * + * @returns The first byte of the BinaryParser + */ + peek(): number { + assert.ok(this.bytes.byteLength !== 0); + return this.bytes[0]; + } + + /** + * Consume the first n bytes of the BinaryParser + * + * @param n the number of bytes to skip + */ + skip(n: number): void { + assert.ok(n <= this.bytes.byteLength); + this.bytes = this.bytes.slice(n); + } + + /** + * read the first n bytes from the BinaryParser + * + * @param n The number of bytes to read + * @return The bytes + */ + read(n: number): Buffer { + assert.ok(n <= this.bytes.byteLength); + + const slice = this.bytes.slice(0, n); + this.skip(n); + return slice; + } + + /** + * Read an integer of given size + * + * @param n The number of bytes to read + * @return The number represented by those bytes + */ + readUIntN(n: number): number { + assert.ok(0 < n && n <= 4, "invalid n"); + return this.read(n).reduce((a, b) => (a << 8) | b) >>> 0; + } + + readUInt8(): number { + return this.readUIntN(1); + } + + readUInt16(): number { + return this.readUIntN(2); + } + + readUInt32(): number { + return this.readUIntN(4); + } + + size(): number { + return this.bytes.byteLength; + } + + end(customEnd?: number): boolean { + const length = this.bytes.byteLength; + return length === 0 || (customEnd !== undefined && length <= customEnd); + } + + /** + * Reads variable length encoded bytes + * + * @return The variable length bytes + */ + readVariableLength(): Buffer { + return this.read(this.readVariableLengthLength()); + } + + /** + * Reads the length of the variable length encoded bytes + * + * @return The length of the variable length encoded bytes + */ + readVariableLengthLength(): number { + const b1 = this.readUInt8(); + if (b1 <= 192) { + return b1; + } else if (b1 <= 240) { + const b2 = this.readUInt8(); + return 193 + (b1 - 193) * 256 + b2; + } else if (b1 <= 254) { + const b2 = this.readUInt8(); + const b3 = this.readUInt8(); + return 12481 + (b1 - 241) * 65536 + b2 * 256 + b3; + } + throw new Error("Invalid variable length indicator"); + } + + /** + * Reads the field ordinal from the BinaryParser + * + * @return Field ordinal + */ + readFieldOrdinal(): number { + let type = this.readUInt8(); + let nth = type & 15; + type >>= 4; + + if (type === 0) { + type = this.readUInt8(); + if (type === 0 || type < 16) { + throw new Error("Cannot read FieldOrdinal, type_code out of range"); + } + } + + if (nth === 0) { + nth = this.readUInt8(); + if (nth === 0 || nth < 16) { + throw new Error("Cannot read FieldOrdinal, field_code out of range"); + } + } + + return (type << 16) | nth; + } + + /** + * Read the field from the BinaryParser + * + * @return The field represented by the bytes at the head of the BinaryParser + */ + readField(): FieldInstance { + return Field.fromString(this.readFieldOrdinal().toString()); + } + + /** + * Read a given type from the BinaryParser + * + * @param type The type that you want to read from the BinaryParser + * @return The instance of that type read from the BinaryParser + */ + readType(type: typeof SerializedType): SerializedType { + return type.fromParser(this); + } + + /** + * Get the type associated with a given field + * + * @param field The field that you wan to get the type of + * @return The type associated with the given field + */ + typeForField(field: FieldInstance): typeof SerializedType { + return field.associatedType; + } + + /** + * Read value of the type specified by field from the BinaryParser + * + * @param field The field that you want to get the associated value for + * @return The value associated with the given field + */ + readFieldValue(field: FieldInstance): SerializedType { + const type = this.typeForField(field); + if (!type) { + throw new Error(`unsupported: (${field.name}, ${field.type.name})`); + } + const sizeHint = field.isVariableLengthEncoded + ? this.readVariableLengthLength() + : undefined; + const value = type.fromParser(this, sizeHint); + if (value === undefined) { + throw new Error( + `fromParser for (${field.name}, ${field.type.name}) -> undefined ` + ); + } + return value; + } + + /** + * Get the next field and value from the BinaryParser + * + * @return The field and value + */ + readFieldAndValue(): [FieldInstance, SerializedType] { + const field = this.readField(); + return [field, this.readFieldValue(field)]; + } +} + +export { BinaryParser }; diff --git a/packages/ripple-binary-codec/src/serdes/binary-serializer.ts b/packages/ripple-binary-codec/src/serdes/binary-serializer.ts new file mode 100644 index 00000000..ff0fbe02 --- /dev/null +++ b/packages/ripple-binary-codec/src/serdes/binary-serializer.ts @@ -0,0 +1,156 @@ +import * as assert from "assert"; +import { FieldInstance } from "../enums"; +import { SerializedType } from "../types/serialized-type"; +import { Buffer } from "buffer/"; + +/** + * Bytes list is a collection of buffer objects + */ +class BytesList { + private bytesArray: Array = []; + + /** + * Get the total number of bytes in the BytesList + * + * @return the number of bytes + */ + public getLength(): number { + return Buffer.concat(this.bytesArray).byteLength; + } + + /** + * Put bytes in the BytesList + * + * @param bytesArg A Buffer + * @return this BytesList + */ + public put(bytesArg: Buffer): BytesList { + const bytes = Buffer.from(bytesArg); // Temporary, to catch instances of Uint8Array being passed in + this.bytesArray.push(bytes); + return this; + } + + /** + * Write this BytesList to the back of another bytes list + * + * @param list The BytesList to write to + */ + public toBytesSink(list: BytesList): void { + list.put(this.toBytes()); + } + + public toBytes(): Buffer { + return Buffer.concat(this.bytesArray); + } + + toHex(): string { + return this.toBytes().toString("hex").toUpperCase(); + } +} + +/** + * BinarySerializer is used to write fields and values to buffers + */ +class BinarySerializer { + private sink: BytesList = new BytesList(); + + constructor(sink: BytesList) { + this.sink = sink; + } + + /** + * Write a value to this BinarySerializer + * + * @param value a SerializedType value + */ + write(value: SerializedType): void { + value.toBytesSink(this.sink); + } + + /** + * Write bytes to this BinarySerializer + * + * @param bytes the bytes to write + */ + put(bytes: Buffer): void { + this.sink.put(bytes); + } + + /** + * Write a value of a given type to this BinarySerializer + * + * @param type the type to write + * @param value a value of that type + */ + writeType(type: typeof SerializedType, value: SerializedType): void { + this.write(type.from(value)); + } + + /** + * Write BytesList to this BinarySerializer + * + * @param bl BytesList to write to BinarySerializer + */ + writeBytesList(bl: BytesList): void { + bl.toBytesSink(this.sink); + } + + /** + * Calculate the header of Variable Length encoded bytes + * + * @param length the length of the bytes + */ + private encodeVariableLength(length: number): Buffer { + const lenBytes = Buffer.alloc(3); + if (length <= 192) { + lenBytes[0] = length; + return lenBytes.slice(0, 1); + } else if (length <= 12480) { + length -= 193; + lenBytes[0] = 193 + (length >>> 8); + lenBytes[1] = length & 0xff; + return lenBytes.slice(0, 2); + } else if (length <= 918744) { + length -= 12481; + lenBytes[0] = 241 + (length >>> 16); + lenBytes[1] = (length >> 8) & 0xff; + lenBytes[2] = length & 0xff; + return lenBytes.slice(0, 3); + } + throw new Error("Overflow error"); + } + + /** + * Write field and value to BinarySerializer + * + * @param field field to write to BinarySerializer + * @param value value to write to BinarySerializer + */ + writeFieldAndValue(field: FieldInstance, value: SerializedType): void { + const associatedValue = field.associatedType.from(value); + assert.ok(associatedValue.toBytesSink !== undefined); + assert.ok(field.name !== undefined); + + this.sink.put(field.header); + + if (field.isVariableLengthEncoded) { + this.writeLengthEncoded(associatedValue); + } else { + associatedValue.toBytesSink(this.sink); + } + } + + /** + * Write a variable length encoded value to the BinarySerializer + * + * @param value length encoded value to write to BytesList + */ + public writeLengthEncoded(value: SerializedType): void { + const bytes = new BytesList(); + value.toBytesSink(bytes); + this.put(this.encodeVariableLength(bytes.getLength())); + this.writeBytesList(bytes); + } +} + +export { BytesList, BinarySerializer }; diff --git a/packages/ripple-binary-codec/src/shamap.ts b/packages/ripple-binary-codec/src/shamap.ts new file mode 100644 index 00000000..c55f1e45 --- /dev/null +++ b/packages/ripple-binary-codec/src/shamap.ts @@ -0,0 +1,182 @@ +import { strict as assert } from "assert"; +import { coreTypes } from "./types"; +import { HashPrefix } from "./hash-prefixes"; +import { Sha512Half } from "./hashes"; +import { Hash256 } from "./types/hash-256"; +import { BytesList } from "./serdes/binary-serializer"; +import { Buffer } from "buffer/"; + +/** + * Abstract class describing a SHAMapNode + */ +abstract class ShaMapNode { + abstract hashPrefix(): Buffer; + abstract isLeaf(): boolean; + abstract isInner(): boolean; + abstract toBytesSink(list: BytesList): void; + abstract hash(): Hash256; +} + +/** + * Class describing a Leaf of SHAMap + */ +class ShaMapLeaf extends ShaMapNode { + constructor(public index: Hash256, public item?: ShaMapNode) { + super(); + } + + /** + * @returns true as ShaMapLeaf is a leaf node + */ + isLeaf(): boolean { + return true; + } + + /** + * @returns false as ShaMapLeaf is not an inner node + */ + isInner(): boolean { + return false; + } + + /** + * Get the prefix of the this.item + * + * @returns The hash prefix, unless this.item is undefined, then it returns an empty Buffer + */ + hashPrefix(): Buffer { + return this.item === undefined ? Buffer.alloc(0) : this.item.hashPrefix(); + } + + /** + * Hash the bytes representation of this + * + * @returns hash of this.item concatenated with this.index + */ + hash(): Hash256 { + const hash = Sha512Half.put(this.hashPrefix()); + this.toBytesSink(hash); + return hash.finish(); + } + + /** + * Write the bytes representation of this to a BytesList + * @param list BytesList to write bytes to + */ + toBytesSink(list: BytesList): void { + if (this.item !== undefined) { + this.item.toBytesSink(list); + } + this.index.toBytesSink(list); + } +} + +/** + * Class defining an Inner Node of a SHAMap + */ +class ShaMapInner extends ShaMapNode { + private slotBits = 0; + private branches: Array = Array(16); + + constructor(private depth: number = 0) { + super(); + } + + /** + * @returns true as ShaMapInner is an inner node + */ + isInner(): boolean { + return true; + } + + /** + * @returns false as ShaMapInner is not a leaf node + */ + isLeaf(): boolean { + return false; + } + + /** + * Get the hash prefix for this node + * + * @returns hash prefix describing an inner node + */ + hashPrefix(): Buffer { + return HashPrefix.innerNode; + } + + /** + * Set a branch of this node to be another node + * + * @param slot Slot to add branch to this.branches + * @param branch Branch to add + */ + setBranch(slot: number, branch: ShaMapNode): void { + this.slotBits = this.slotBits | (1 << slot); + this.branches[slot] = branch; + } + + /** + * @returns true if node is empty + */ + empty(): boolean { + return this.slotBits === 0; + } + + /** + * Compute the hash of this node + * + * @returns The hash of this node + */ + hash(): Hash256 { + if (this.empty()) { + return coreTypes.Hash256.ZERO_256; + } + const hash = Sha512Half.put(this.hashPrefix()); + this.toBytesSink(hash); + return hash.finish(); + } + + /** + * Writes the bytes representation of this node to a BytesList + * + * @param list BytesList to write bytes to + */ + toBytesSink(list: BytesList): void { + for (let i = 0; i < this.branches.length; i++) { + const branch = this.branches[i]; + const hash = branch ? branch.hash() : coreTypes.Hash256.ZERO_256; + hash.toBytesSink(list); + } + } + + /** + * Add item to the SHAMap + * + * @param index Hash of the index of the item being inserted + * @param item Item to insert in the map + * @param leaf Leaf node to insert when branch doesn't exist + */ + addItem(index?: Hash256, item?: ShaMapNode, leaf?: ShaMapLeaf): void { + assert.ok(index !== undefined); + const nibble = index.nibblet(this.depth); + const existing = this.branches[nibble]; + + if (existing === undefined) { + this.setBranch(nibble, leaf || new ShaMapLeaf(index, item)); + } else if (existing instanceof ShaMapLeaf) { + const newInner = new ShaMapInner(this.depth + 1); + newInner.addItem(existing.index, undefined, existing); + newInner.addItem(index, item, leaf); + this.setBranch(nibble, newInner); + } else if (existing instanceof ShaMapInner) { + existing.addItem(index, item, leaf); + } else { + throw new Error("invalid ShaMap.addItem call"); + } + } +} + +class ShaMap extends ShaMapInner {} + +export { ShaMap, ShaMapNode, ShaMapLeaf }; diff --git a/packages/ripple-binary-codec/src/types/account-id.ts b/packages/ripple-binary-codec/src/types/account-id.ts new file mode 100644 index 00000000..3134f8e0 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/account-id.ts @@ -0,0 +1,86 @@ +import { + decodeAccountID, + encodeAccountID, + isValidXAddress, + xAddressToClassicAddress, +} from "ripple-address-codec"; +import { Hash160 } from "./hash-160"; +import { Buffer } from "buffer/"; + +const HEX_REGEX = /^[A-F0-9]{40}$/; + +/** + * Class defining how to encode and decode an AccountID + */ +class AccountID extends Hash160 { + static readonly defaultAccountID: AccountID = new AccountID(Buffer.alloc(20)); + + constructor(bytes?: Buffer) { + super(bytes ?? AccountID.defaultAccountID.bytes); + } + + /** + * Defines how to construct an AccountID + * + * @param value either an existing AccountID, a hex-string, or a base58 r-Address + * @returns an AccountID object + */ + static from(value: T): AccountID { + if (value instanceof AccountID) { + return value; + } + + if (typeof value === "string") { + if (value === "") { + return new AccountID(); + } + + return HEX_REGEX.test(value) + ? new AccountID(Buffer.from(value, "hex")) + : this.fromBase58(value); + } + + throw new Error("Cannot construct AccountID from value given"); + } + + /** + * Defines how to build an AccountID from a base58 r-Address + * + * @param value a base58 r-Address + * @returns an AccountID object + */ + static fromBase58(value: string): AccountID { + if (isValidXAddress(value)) { + const classic = xAddressToClassicAddress(value); + + if (classic.tag !== false) + throw new Error("Only allowed to have tag on Account or Destination"); + + value = classic.classicAddress; + } + + return new AccountID(Buffer.from(decodeAccountID(value))); + } + + /** + * Overload of toJSON + * + * @returns the base58 string for this AccountID + */ + toJSON(): string { + return this.toBase58(); + } + + /** + * Defines how to encode AccountID into a base58 address + * + * @returns the base58 string defined by this.bytes + */ + toBase58(): string { + /* eslint-disable @typescript-eslint/no-explicit-any */ + return encodeAccountID(this.bytes as any); + /* eslint-enable @typescript-eslint/no-explicit-any */ + } +} + +export { AccountID }; diff --git a/packages/ripple-binary-codec/src/types/amount.ts b/packages/ripple-binary-codec/src/types/amount.ts new file mode 100644 index 00000000..81538de1 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/amount.ts @@ -0,0 +1,256 @@ +import { Decimal } from "decimal.js"; + +import { BinaryParser } from "../serdes/binary-parser"; + +import { AccountID } from "./account-id"; +import { Currency } from "./currency"; +import { JsonObject, SerializedType } from "./serialized-type"; +import * as bigInt from "big-integer"; +import { Buffer } from "buffer/"; + +/** + * Constants for validating amounts + */ +const MIN_IOU_EXPONENT = -96; +const MAX_IOU_EXPONENT = 80; +const MAX_IOU_PRECISION = 16; +const MAX_DROPS = new Decimal("1e17"); +const MIN_XRP = new Decimal("1e-6"); +const mask = bigInt(0x00000000ffffffff); + +/** + * decimal.js configuration for Amount IOUs + */ +Decimal.config({ + toExpPos: MAX_IOU_EXPONENT + MAX_IOU_PRECISION, + toExpNeg: MIN_IOU_EXPONENT - MAX_IOU_PRECISION, +}); + +/** + * Interface for JSON objects that represent amounts + */ +interface AmountObject extends JsonObject { + value: string; + currency: string; + issuer: string; +} + +/** + * Type guard for AmountObject + */ +function isAmountObject(arg): arg is AmountObject { + const keys = Object.keys(arg).sort(); + return ( + keys.length === 3 && + keys[0] === "currency" && + keys[1] === "issuer" && + keys[2] === "value" + ); +} + +/** + * Class for serializing/Deserializing Amounts + */ +class Amount extends SerializedType { + static defaultAmount: Amount = new Amount( + Buffer.from("4000000000000000", "hex") + ); + + constructor(bytes: Buffer) { + super(bytes ?? Amount.defaultAmount.bytes); + } + + /** + * Construct an amount from an IOU or string amount + * + * @param value An Amount, object representing an IOU, or a string + * representing an integer amount + * @returns An Amount object + */ + static from(value: T): Amount { + if (value instanceof Amount) { + return value; + } + + let amount = Buffer.alloc(8); + if (typeof value === "string") { + Amount.assertXrpIsValid(value); + + const number = bigInt(value); + + const intBuf = [Buffer.alloc(4), Buffer.alloc(4)]; + intBuf[0].writeUInt32BE(Number(number.shiftRight(32)), 0); + intBuf[1].writeUInt32BE(Number(number.and(mask)), 0); + + amount = Buffer.concat(intBuf); + + amount[0] |= 0x40; + + return new Amount(amount); + } + + if (isAmountObject(value)) { + const number = new Decimal(value.value); + Amount.assertIouIsValid(number); + + if (number.isZero()) { + amount[0] |= 0x80; + } else { + const integerNumberString = number + .times(`1e${-(number.e - 15)}`) + .abs() + .toString(); + + const num = bigInt(integerNumberString); + const intBuf = [Buffer.alloc(4), Buffer.alloc(4)]; + intBuf[0].writeUInt32BE(Number(num.shiftRight(32)), 0); + intBuf[1].writeUInt32BE(Number(num.and(mask)), 0); + + amount = Buffer.concat(intBuf); + + amount[0] |= 0x80; + + if (number.gt(new Decimal(0))) { + amount[0] |= 0x40; + } + + const exponent = number.e - 15; + const exponentByte = 97 + exponent; + amount[0] |= exponentByte >>> 2; + amount[1] |= (exponentByte & 0x03) << 6; + } + + const currency = Currency.from(value.currency).toBytes(); + const issuer = AccountID.from(value.issuer).toBytes(); + return new Amount(Buffer.concat([amount, currency, issuer])); + } + + throw new Error("Invalid type to construct an Amount"); + } + + /** + * Read an amount from a BinaryParser + * + * @param parser BinaryParser to read the Amount from + * @returns An Amount object + */ + static fromParser(parser: BinaryParser): Amount { + const isXRP = parser.peek() & 0x80; + const numBytes = isXRP ? 48 : 8; + return new Amount(parser.read(numBytes)); + } + + /** + * Get the JSON representation of this Amount + * + * @returns the JSON interpretation of this.bytes + */ + toJSON(): AmountObject | string { + if (this.isNative()) { + const bytes = this.bytes; + const isPositive = bytes[0] & 0x40; + const sign = isPositive ? "" : "-"; + bytes[0] &= 0x3f; + + const msb = bigInt(bytes.slice(0, 4).readUInt32BE(0)); + const lsb = bigInt(bytes.slice(4).readUInt32BE(0)); + const num = msb.shiftLeft(32).or(lsb); + + return `${sign}${num.toString()}`; + } else { + const parser = new BinaryParser(this.toString()); + const mantissa = parser.read(8); + const currency = Currency.fromParser(parser) as Currency; + const issuer = AccountID.fromParser(parser) as AccountID; + + const b1 = mantissa[0]; + const b2 = mantissa[1]; + + const isPositive = b1 & 0x40; + const sign = isPositive ? "" : "-"; + const exponent = ((b1 & 0x3f) << 2) + ((b2 & 0xff) >> 6) - 97; + + mantissa[0] = 0; + mantissa[1] &= 0x3f; + const value = new Decimal(`${sign}0x${mantissa.toString("hex")}`).times( + `1e${exponent}` + ); + Amount.assertIouIsValid(value); + + return { + value: value.toString(), + currency: currency.toJSON(), + issuer: issuer.toJSON(), + }; + } + } + + /** + * Validate XRP amount + * + * @param amount String representing XRP amount + * @returns void, but will throw if invalid amount + */ + private static assertXrpIsValid(amount: string): void { + if (amount.indexOf(".") !== -1) { + throw new Error(`${amount.toString()} is an illegal amount`); + } + + const decimal = new Decimal(amount); + if (!decimal.isZero()) { + if (decimal.lt(MIN_XRP) || decimal.gt(MAX_DROPS)) { + throw new Error(`${amount.toString()} is an illegal amount`); + } + } + } + + /** + * Validate IOU.value amount + * + * @param decimal Decimal.js object representing IOU.value + * @returns void, but will throw if invalid amount + */ + private static assertIouIsValid(decimal: Decimal): void { + if (!decimal.isZero()) { + const p = decimal.precision(); + const e = decimal.e - 15; + if ( + p > MAX_IOU_PRECISION || + e > MAX_IOU_EXPONENT || + e < MIN_IOU_EXPONENT + ) { + throw new Error("Decimal precision out of range"); + } + this.verifyNoDecimal(decimal); + } + } + + /** + * Ensure that the value after being multiplied by the exponent does not + * contain a decimal. + * + * @param decimal a Decimal object + * @returns a string of the object without a decimal + */ + private static verifyNoDecimal(decimal: Decimal): void { + const integerNumberString = decimal + .times(`1e${-(decimal.e - 15)}`) + .abs() + .toString(); + + if (integerNumberString.indexOf(".") !== -1) { + throw new Error("Decimal place found in integerNumberString"); + } + } + + /** + * Test if this amount is in units of Native Currency(XRP) + * + * @returns true if Native (XRP) + */ + private isNative(): boolean { + return (this.bytes[0] & 0x80) === 0; + } +} + +export { Amount, AmountObject }; diff --git a/packages/ripple-binary-codec/src/types/blob.ts b/packages/ripple-binary-codec/src/types/blob.ts new file mode 100644 index 00000000..8e8a9e05 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/blob.ts @@ -0,0 +1,43 @@ +import { SerializedType } from "./serialized-type"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +/** + * Variable length encoded type + */ +class Blob extends SerializedType { + constructor(bytes: Buffer) { + super(bytes); + } + + /** + * Defines how to read a Blob from a BinaryParser + * + * @param parser The binary parser to read the Blob from + * @param hint The length of the blob, computed by readVariableLengthLength() and passed in + * @returns A Blob object + */ + static fromParser(parser: BinaryParser, hint: number): Blob { + return new Blob(parser.read(hint)); + } + + /** + * Create a Blob object from a hex-string + * + * @param value existing Blob object or a hex-string + * @returns A Blob object + */ + static from(value: T): Blob { + if (value instanceof Blob) { + return value; + } + + if (typeof value === "string") { + return new Blob(Buffer.from(value, "hex")); + } + + throw new Error("Cannot construct Blob from value given"); + } +} + +export { Blob }; diff --git a/packages/ripple-binary-codec/src/types/currency.ts b/packages/ripple-binary-codec/src/types/currency.ts new file mode 100644 index 00000000..8ed7631a --- /dev/null +++ b/packages/ripple-binary-codec/src/types/currency.ts @@ -0,0 +1,139 @@ +import { Hash160 } from "./hash-160"; +import { Buffer } from "buffer/"; + +const ISO_REGEX = /^[A-Z0-9]{3}$/; +const HEX_REGEX = /^[A-F0-9]{40}$/; + +/** + * Convert an ISO code to a currency bytes representation + */ +function isoToBytes(iso: string): Buffer { + const bytes = Buffer.alloc(20); + if (iso !== "XRP") { + const isoBytes = iso.split("").map((c) => c.charCodeAt(0)); + bytes.set(isoBytes, 12); + } + return bytes; +} + +/** + * Tests if ISO is a valid iso code + */ +function isIsoCode(iso: string): boolean { + return ISO_REGEX.test(iso); +} + +function isoCodeFromHex(code: Buffer): string | null { + const iso = code.toString(); + if (iso === "XRP") { + throw new Error( + "Disallowed currency code: to indicate the currency XRP you must use 20 bytes of 0s" + ); + } + if (isIsoCode(iso)) { + return iso; + } + return null; +} + +/** + * Tests if hex is a valid hex-string + */ +function isHex(hex: string): boolean { + return HEX_REGEX.test(hex); +} + +/** + * Tests if a string is a valid representation of a currency + */ +function isStringRepresentation(input: string): boolean { + return input.length === 3 || isHex(input); +} + +/** + * Tests if a Buffer is a valid representation of a currency + */ +function isBytesArray(bytes: Buffer): boolean { + return bytes.byteLength === 20; +} + +/** + * Ensures that a value is a valid representation of a currency + */ +function isValidRepresentation(input: Buffer | string): boolean { + return input instanceof Buffer + ? isBytesArray(input) + : isStringRepresentation(input); +} + +/** + * Generate bytes from a string or buffer representation of a currency + */ +function bytesFromRepresentation(input: string): Buffer { + if (!isValidRepresentation(input)) { + throw new Error(`Unsupported Currency representation: ${input}`); + } + return input.length === 3 ? isoToBytes(input) : Buffer.from(input, "hex"); +} + +/** + * Class defining how to encode and decode Currencies + */ +class Currency extends Hash160 { + static readonly XRP = new Currency(Buffer.alloc(20)); + private readonly _iso: string | null; + + constructor(byteBuf: Buffer) { + super(byteBuf ?? Currency.XRP.bytes); + const code = this.bytes.slice(12, 15); + + if (this.bytes[0] !== 0) { + this._iso = null; + } else if (code.toString("hex") === "000000") { + this._iso = "XRP"; + } else { + this._iso = isoCodeFromHex(code); + } + } + + /** + * Return the ISO code of this currency + * + * @returns ISO code if it exists, else null + */ + iso(): string | null { + return this._iso; + } + + /** + * Constructs a Currency object + * + * @param val Currency object or a string representation of a currency + */ + static from(value: T): Currency { + if (value instanceof Currency) { + return value; + } + + if (typeof value === "string") { + return new Currency(bytesFromRepresentation(value)); + } + + throw new Error("Cannot construct Currency from value given"); + } + + /** + * Gets the JSON representation of a currency + * + * @returns JSON representation + */ + toJSON(): string { + const iso = this.iso(); + if (iso !== null) { + return iso; + } + return this.bytes.toString("hex").toUpperCase(); + } +} + +export { Currency }; diff --git a/packages/ripple-binary-codec/src/types/hash-128.ts b/packages/ripple-binary-codec/src/types/hash-128.ts new file mode 100644 index 00000000..4d45abee --- /dev/null +++ b/packages/ripple-binary-codec/src/types/hash-128.ts @@ -0,0 +1,16 @@ +import { Hash } from "./hash"; +import { Buffer } from "buffer/"; + +/** + * Hash with a width of 128 bits + */ +class Hash128 extends Hash { + static readonly width = 16; + static readonly ZERO_128: Hash128 = new Hash128(Buffer.alloc(Hash128.width)); + + constructor(bytes: Buffer) { + super(bytes ?? Hash128.ZERO_128.bytes); + } +} + +export { Hash128 }; diff --git a/packages/ripple-binary-codec/src/types/hash-160.ts b/packages/ripple-binary-codec/src/types/hash-160.ts new file mode 100644 index 00000000..3523399e --- /dev/null +++ b/packages/ripple-binary-codec/src/types/hash-160.ts @@ -0,0 +1,20 @@ +import { Hash } from "./hash"; +import { Buffer } from "buffer/"; + +/** + * Hash with a width of 160 bits + */ +class Hash160 extends Hash { + static readonly width = 20; + static readonly ZERO_160: Hash160 = new Hash160(Buffer.alloc(Hash160.width)); + + constructor(bytes?: Buffer) { + if (bytes && bytes.byteLength === 0) { + bytes = Hash160.ZERO_160.bytes; + } + + super(bytes ?? Hash160.ZERO_160.bytes); + } +} + +export { Hash160 }; diff --git a/packages/ripple-binary-codec/src/types/hash-256.ts b/packages/ripple-binary-codec/src/types/hash-256.ts new file mode 100644 index 00000000..f815c41a --- /dev/null +++ b/packages/ripple-binary-codec/src/types/hash-256.ts @@ -0,0 +1,16 @@ +import { Hash } from "./hash"; +import { Buffer } from "buffer/"; + +/** + * Hash with a width of 256 bits + */ +class Hash256 extends Hash { + static readonly width = 32; + static readonly ZERO_256 = new Hash256(Buffer.alloc(Hash256.width)); + + constructor(bytes: Buffer) { + super(bytes ?? Hash256.ZERO_256.bytes); + } +} + +export { Hash256 }; diff --git a/packages/ripple-binary-codec/src/types/hash.ts b/packages/ripple-binary-codec/src/types/hash.ts new file mode 100644 index 00000000..73345018 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/hash.ts @@ -0,0 +1,81 @@ +import { Comparable } from "./serialized-type"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +/** + * Base class defining how to encode and decode hashes + */ +class Hash extends Comparable { + static readonly width: number; + + constructor(bytes: Buffer) { + super(bytes); + if (this.bytes.byteLength !== (this.constructor as typeof Hash).width) { + throw new Error(`Invalid Hash length ${this.bytes.byteLength}`); + } + } + + /** + * Construct a Hash object from an existing Hash object or a hex-string + * + * @param value A hash object or hex-string of a hash + */ + static from(value: T): Hash { + if (value instanceof this) { + return value; + } + + if (typeof value === "string") { + return new this(Buffer.from(value, "hex")); + } + + throw new Error("Cannot construct Hash from given value"); + } + + /** + * Read a Hash object from a BinaryParser + * + * @param parser BinaryParser to read the hash from + * @param hint length of the bytes to read, optional + */ + static fromParser(parser: BinaryParser, hint?: number): Hash { + return new this(parser.read(hint ?? this.width)); + } + + /** + * Overloaded operator for comparing two hash objects + * + * @param other The Hash to compare this to + */ + compareTo(other: Hash): number { + return this.bytes.compare( + (this.constructor as typeof Hash).from(other).bytes + ); + } + + /** + * @returns the hex-string representation of this Hash + */ + toString(): string { + return this.toHex(); + } + + /** + * Returns four bits at the specified depth within a hash + * + * @param depth The depth of the four bits + * @returns The number represented by the four bits + */ + nibblet(depth: number): number { + const byteIx = depth > 0 ? (depth / 2) | 0 : 0; + let b = this.bytes[byteIx]; + if (depth % 2 === 0) { + b = (b & 0xf0) >>> 4; + } else { + b = b & 0x0f; + } + return b; + } +} + +export { Hash }; diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts new file mode 100644 index 00000000..5e2b89de --- /dev/null +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -0,0 +1,49 @@ +import { + Field, + TransactionResult, + TransactionType, + LedgerEntryType, +} from "../enums"; +import { AccountID } from "./account-id"; +import { Amount } from "./amount"; +import { Blob } from "./blob"; +import { Currency } from "./currency"; +import { Hash128 } from "./hash-128"; +import { Hash160 } from "./hash-160"; +import { Hash256 } from "./hash-256"; +import { PathSet } from "./path-set"; +import { STArray } from "./st-array"; +import { STObject } from "./st-object"; +import { UInt16 } from "./uint-16"; +import { UInt32 } from "./uint-32"; +import { UInt64 } from "./uint-64"; +import { UInt8 } from "./uint-8"; +import { Vector256 } from "./vector-256"; + +const coreTypes = { + AccountID, + Amount, + Blob, + Currency, + Hash128, + Hash160, + Hash256, + PathSet, + STArray, + STObject, + UInt8, + UInt16, + UInt32, + UInt64, + Vector256, +}; + +Object.values(Field).forEach((field) => { + field.associatedType = coreTypes[field.type.name]; +}); + +Field["TransactionType"].associatedType = TransactionType; +Field["TransactionResult"].associatedType = TransactionResult; +Field["LedgerEntryType"].associatedType = LedgerEntryType; + +export { coreTypes }; diff --git a/packages/ripple-binary-codec/src/types/path-set.ts b/packages/ripple-binary-codec/src/types/path-set.ts new file mode 100644 index 00000000..9b4ffbfd --- /dev/null +++ b/packages/ripple-binary-codec/src/types/path-set.ts @@ -0,0 +1,290 @@ +import { AccountID } from "./account-id"; +import { Currency } from "./currency"; +import { BinaryParser } from "../serdes/binary-parser"; +import { SerializedType, JsonObject } from "./serialized-type"; +import { Buffer } from "buffer/"; + +/** + * Constants for separating Paths in a PathSet + */ +const PATHSET_END_BYTE = 0x00; +const PATH_SEPARATOR_BYTE = 0xff; + +/** + * Constant for masking types of a Hop + */ +const TYPE_ACCOUNT = 0x01; +const TYPE_CURRENCY = 0x10; +const TYPE_ISSUER = 0x20; + +/** + * The object representation of a Hop, an issuer AccountID, an account AccountID, and a Currency + */ +interface HopObject extends JsonObject { + issuer?: string; + account?: string; + currency?: string; +} + +/** + * TypeGuard for HopObject + */ +function isHopObject(arg): arg is HopObject { + return ( + arg.issuer !== undefined || + arg.account !== undefined || + arg.currency !== undefined + ); +} + +/** + * TypeGuard for PathSet + */ +function isPathSet(arg): arg is Array> { + return ( + (Array.isArray(arg) && arg.length === 0) || + (Array.isArray(arg) && Array.isArray(arg[0]) && arg[0].length === 0) || + (Array.isArray(arg) && Array.isArray(arg[0]) && isHopObject(arg[0][0])) + ); +} + +/** + * Serialize and Deserialize a Hop + */ +class Hop extends SerializedType { + /** + * Create a Hop from a HopObject + * + * @param value Either a hop or HopObject to create a hop with + * @returns a Hop + */ + static from(value: Hop | HopObject): Hop { + if (value instanceof Hop) { + return value; + } + + const bytes: Array = [Buffer.from([0])]; + + if (value.account) { + bytes.push(AccountID.from(value.account).toBytes()); + bytes[0][0] |= TYPE_ACCOUNT; + } + + if (value.currency) { + bytes.push(Currency.from(value.currency).toBytes()); + bytes[0][0] |= TYPE_CURRENCY; + } + + if (value.issuer) { + bytes.push(AccountID.from(value.issuer).toBytes()); + bytes[0][0] |= TYPE_ISSUER; + } + + return new Hop(Buffer.concat(bytes)); + } + + /** + * Construct a Hop from a BinaryParser + * + * @param parser BinaryParser to read the Hop from + * @returns a Hop + */ + static fromParser(parser: BinaryParser): Hop { + const type = parser.readUInt8(); + const bytes: Array = [Buffer.from([type])]; + + if (type & TYPE_ACCOUNT) { + bytes.push(parser.read(AccountID.width)); + } + + if (type & TYPE_CURRENCY) { + bytes.push(parser.read(Currency.width)); + } + + if (type & TYPE_ISSUER) { + bytes.push(parser.read(AccountID.width)); + } + + return new Hop(Buffer.concat(bytes)); + } + + /** + * Get the JSON interpretation of this hop + * + * @returns a HopObject, an JS object with optional account, issuer, and currency + */ + toJSON(): HopObject { + const hopParser = new BinaryParser(this.bytes.toString("hex")); + const type = hopParser.readUInt8(); + + let account, currency, issuer; + if (type & TYPE_ACCOUNT) { + account = (AccountID.fromParser(hopParser) as AccountID).toJSON(); + } + + if (type & TYPE_CURRENCY) { + currency = (Currency.fromParser(hopParser) as Currency).toJSON(); + } + + if (type & TYPE_ISSUER) { + issuer = (AccountID.fromParser(hopParser) as AccountID).toJSON(); + } + + const result: HopObject = {}; + if (account) { + result.account = account; + } + + if (issuer) { + result.issuer = issuer; + } + + if (currency) { + result.currency = currency; + } + + return result; + } + + /** + * get a number representing the type of this hop + * + * @returns a number to be bitwise and-ed with TYPE_ constants to describe the types in the hop + */ + type(): number { + return this.bytes[0]; + } +} + +/** + * Class for serializing/deserializing Paths + */ +class Path extends SerializedType { + /** + * construct a Path from an array of Hops + * + * @param value Path or array of HopObjects to construct a Path + * @returns the Path + */ + static from(value: Path | Array): Path { + if (value instanceof Path) { + return value; + } + + const bytes: Array = []; + value.forEach((hop: HopObject) => { + bytes.push(Hop.from(hop).toBytes()); + }); + + return new Path(Buffer.concat(bytes)); + } + + /** + * Read a Path from a BinaryParser + * + * @param parser BinaryParser to read Path from + * @returns the Path represented by the bytes read from the BinaryParser + */ + static fromParser(parser: BinaryParser): Path { + const bytes: Array = []; + while (!parser.end()) { + bytes.push(Hop.fromParser(parser).toBytes()); + + if ( + parser.peek() === PATHSET_END_BYTE || + parser.peek() === PATH_SEPARATOR_BYTE + ) { + break; + } + } + return new Path(Buffer.concat(bytes)); + } + + /** + * Get the JSON representation of this Path + * + * @returns an Array of HopObject constructed from this.bytes + */ + toJSON(): Array { + const json: Array = []; + const pathParser = new BinaryParser(this.toString()); + + while (!pathParser.end()) { + json.push(Hop.fromParser(pathParser).toJSON()); + } + + return json; + } +} + +/** + * Deserialize and Serialize the PathSet type + */ +class PathSet extends SerializedType { + /** + * Construct a PathSet from an Array of Arrays representing paths + * + * @param value A PathSet or Array of Array of HopObjects + * @returns the PathSet constructed from value + */ + static from>>(value: T): PathSet { + if (value instanceof PathSet) { + return value; + } + + if (isPathSet(value)) { + const bytes: Array = []; + + value.forEach((path: Array) => { + bytes.push(Path.from(path).toBytes()); + bytes.push(Buffer.from([PATH_SEPARATOR_BYTE])); + }); + + bytes[bytes.length - 1] = Buffer.from([PATHSET_END_BYTE]); + + return new PathSet(Buffer.concat(bytes)); + } + + throw new Error("Cannot construct PathSet from given value"); + } + + /** + * Construct a PathSet from a BinaryParser + * + * @param parser A BinaryParser to read PathSet from + * @returns the PathSet read from parser + */ + static fromParser(parser: BinaryParser): PathSet { + const bytes: Array = []; + + while (!parser.end()) { + bytes.push(Path.fromParser(parser).toBytes()); + bytes.push(parser.read(1)); + + if (bytes[bytes.length - 1][0] == PATHSET_END_BYTE) { + break; + } + } + + return new PathSet(Buffer.concat(bytes)); + } + + /** + * Get the JSON representation of this PathSet + * + * @returns an Array of Array of HopObjects, representing this PathSet + */ + toJSON(): Array> { + const json: Array> = []; + const pathParser = new BinaryParser(this.toString()); + + while (!pathParser.end()) { + json.push(Path.fromParser(pathParser).toJSON()); + pathParser.skip(1); + } + + return json; + } +} + +export { PathSet }; diff --git a/packages/ripple-binary-codec/src/types/serialized-type.ts b/packages/ripple-binary-codec/src/types/serialized-type.ts new file mode 100644 index 00000000..7870a6f8 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/serialized-type.ts @@ -0,0 +1,118 @@ +import { BytesList } from "../serdes/binary-serializer"; +import { BinaryParser } from "../serdes/binary-parser"; +import * as bigInt from "big-integer"; +import { Buffer } from "buffer/"; + +type JSON = string | number | boolean | null | undefined | JSON[] | JsonObject; + +type JsonObject = { [key: string]: JSON }; + +/** + * The base class for all binary-codec types + */ +class SerializedType { + protected readonly bytes: Buffer = Buffer.alloc(0); + + constructor(bytes: Buffer) { + this.bytes = bytes ?? Buffer.alloc(0); + } + + static fromParser(parser: BinaryParser, hint?: number): SerializedType { + throw new Error("fromParser not implemented"); + return this.fromParser(parser, hint); + } + + static from( + value: SerializedType | JSON | bigInt.BigInteger + ): SerializedType { + throw new Error("from not implemented"); + return this.from(value); + } + + /** + * Write the bytes representation of a SerializedType to a BytesList + * + * @param list The BytesList to write SerializedType bytes to + */ + toBytesSink(list: BytesList): void { + list.put(this.bytes); + } + + /** + * Get the hex representation of a SerializedType's bytes + * + * @returns hex String of this.bytes + */ + toHex(): string { + return this.toBytes().toString("hex").toUpperCase(); + } + + /** + * Get the bytes representation of a SerializedType + * + * @returns A buffer of the bytes + */ + toBytes(): Buffer { + if (this.bytes) { + return this.bytes; + } + const bytes = new BytesList(); + this.toBytesSink(bytes); + return bytes.toBytes(); + } + + /** + * Return the JSON representation of a SerializedType + * + * @returns any type, if not overloaded returns hexString representation of bytes + */ + toJSON(): JSON { + return this.toHex(); + } + + /** + * @returns hexString representation of this.bytes + */ + toString(): string { + return this.toHex(); + } +} + +/** + * Base class for SerializedTypes that are comparable + */ +class Comparable extends SerializedType { + lt(other: Comparable): boolean { + return this.compareTo(other) < 0; + } + + eq(other: Comparable): boolean { + return this.compareTo(other) === 0; + } + + gt(other: Comparable): boolean { + return this.compareTo(other) > 0; + } + + gte(other: Comparable): boolean { + return this.compareTo(other) > -1; + } + + lte(other: Comparable): boolean { + return this.compareTo(other) < 1; + } + + /** + * Overload this method to define how two Comparable SerializedTypes are compared + * + * @param other The comparable object to compare this to + * @returns A number denoting the relationship of this and other + */ + compareTo(other: Comparable): number { + throw new Error( + `cannot compare ${this.toString()} and ${other.toString()}` + ); + } +} + +export { SerializedType, Comparable, JSON, JsonObject }; diff --git a/packages/ripple-binary-codec/src/types/st-array.ts b/packages/ripple-binary-codec/src/types/st-array.ts new file mode 100644 index 00000000..13269fc8 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/st-array.ts @@ -0,0 +1,99 @@ +import { SerializedType, JsonObject } from "./serialized-type"; +import { STObject } from "./st-object"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +const ARRAY_END_MARKER = Buffer.from([0xf1]); +const ARRAY_END_MARKER_NAME = "ArrayEndMarker"; + +const OBJECT_END_MARKER = Buffer.from([0xe1]); + +/** + * TypeGuard for Array + */ +function isObjects(args): args is Array { + return ( + Array.isArray(args) && (args.length === 0 || typeof args[0] === "object") + ); +} + +/** + * Class for serializing and deserializing Arrays of Objects + */ +class STArray extends SerializedType { + /** + * Construct an STArray from a BinaryParser + * + * @param parser BinaryParser to parse an STArray from + * @returns An STArray Object + */ + static fromParser(parser: BinaryParser): STArray { + const bytes: Array = []; + + while (!parser.end()) { + const field = parser.readField(); + if (field.name === ARRAY_END_MARKER_NAME) { + break; + } + + bytes.push( + field.header, + parser.readFieldValue(field).toBytes(), + OBJECT_END_MARKER + ); + } + + bytes.push(ARRAY_END_MARKER); + return new STArray(Buffer.concat(bytes)); + } + + /** + * Construct an STArray from an Array of JSON Objects + * + * @param value STArray or Array of Objects to parse into an STArray + * @returns An STArray object + */ + static from>(value: T): STArray { + if (value instanceof STArray) { + return value; + } + + if (isObjects(value)) { + const bytes: Array = []; + value.forEach((obj) => { + bytes.push(STObject.from(obj).toBytes()); + }); + + bytes.push(ARRAY_END_MARKER); + return new STArray(Buffer.concat(bytes)); + } + + throw new Error("Cannot construct STArray from value given"); + } + + /** + * Return the JSON representation of this.bytes + * + * @returns An Array of JSON objects + */ + toJSON(): Array { + const result: Array = []; + + const arrayParser = new BinaryParser(this.toString()); + + while (!arrayParser.end()) { + const field = arrayParser.readField(); + if (field.name === ARRAY_END_MARKER_NAME) { + break; + } + + const outer = {}; + outer[field.name] = STObject.fromParser(arrayParser).toJSON(); + result.push(outer); + } + + return result; + } +} + +export { STArray }; diff --git a/packages/ripple-binary-codec/src/types/st-object.ts b/packages/ripple-binary-codec/src/types/st-object.ts new file mode 100644 index 00000000..c3f4ee0b --- /dev/null +++ b/packages/ripple-binary-codec/src/types/st-object.ts @@ -0,0 +1,162 @@ +import { Field, FieldInstance } from "../enums"; +import { SerializedType, JsonObject } from "./serialized-type"; +import { + xAddressToClassicAddress, + isValidXAddress, +} from "ripple-address-codec"; +import { BinaryParser } from "../serdes/binary-parser"; +import { BinarySerializer, BytesList } from "../serdes/binary-serializer"; +import { Buffer } from "buffer/"; + +const OBJECT_END_MARKER_BYTE = Buffer.from([0xe1]); +const OBJECT_END_MARKER = "ObjectEndMarker"; +const ST_OBJECT = "STObject"; +const DESTINATION = "Destination"; +const ACCOUNT = "Account"; +const SOURCE_TAG = "SourceTag"; +const DEST_TAG = "DestinationTag"; + +/** + * Break down an X-Address into an account and a tag + * + * @param field Name of field + * @param xAddress X-Address corresponding to the field + */ +function handleXAddress(field: string, xAddress: string): JsonObject { + const decoded = xAddressToClassicAddress(xAddress); + + let tagName; + if (field === DESTINATION) tagName = DEST_TAG; + else if (field === ACCOUNT) tagName = SOURCE_TAG; + else if (decoded.tag !== false) + throw new Error(`${field} cannot have an associated tag`); + + return decoded.tag !== false + ? { [field]: decoded.classicAddress, [tagName]: decoded.tag } + : { [field]: decoded.classicAddress }; +} + +/** + * Validate that two objects don't both have the same tag fields + * + * @param obj1 First object to check for tags + * @param obj2 Second object to check for tags + * @throws When both objects have SourceTag or DestinationTag + */ +function checkForDuplicateTags(obj1: JsonObject, obj2: JsonObject): void { + if (!(obj1[SOURCE_TAG] === undefined || obj2[SOURCE_TAG] === undefined)) + throw new Error("Cannot have Account X-Address and SourceTag"); + if (!(obj1[DEST_TAG] === undefined || obj2[DEST_TAG] === undefined)) + throw new Error("Cannot have Destination X-Address and DestinationTag"); +} + +/** + * Class for Serializing/Deserializing objects + */ +class STObject extends SerializedType { + /** + * Construct a STObject from a BinaryParser + * + * @param parser BinaryParser to read STObject from + * @returns A STObject object + */ + static fromParser(parser: BinaryParser): STObject { + const list: BytesList = new BytesList(); + const bytes: BinarySerializer = new BinarySerializer(list); + + while (!parser.end()) { + const field = parser.readField(); + if (field.name === OBJECT_END_MARKER) { + break; + } + + const associatedValue = parser.readFieldValue(field); + + bytes.writeFieldAndValue(field, associatedValue); + if (field.type.name === ST_OBJECT) { + bytes.put(OBJECT_END_MARKER_BYTE); + } + } + + return new STObject(list.toBytes()); + } + + /** + * Construct a STObject from a JSON object + * + * @param value An object to include + * @param filter optional, denote which field to include in serialized object + * @returns a STObject object + */ + static from( + value: T, + filter?: (...any) => boolean + ): STObject { + if (value instanceof STObject) { + return value; + } + + const list: BytesList = new BytesList(); + const bytes: BinarySerializer = new BinarySerializer(list); + + const xAddressDecoded = Object.entries(value).reduce((acc, [key, val]) => { + let handled: JsonObject | undefined = undefined; + if (val && isValidXAddress(val.toString())) { + handled = handleXAddress(key, val.toString()); + checkForDuplicateTags(handled, value); + } + return Object.assign(acc, handled ?? { [key]: val }); + }, {}); + + let sorted = Object.keys(xAddressDecoded) + .map((f: string): FieldInstance => Field[f] as FieldInstance) + .filter( + (f: FieldInstance): boolean => + f !== undefined && + xAddressDecoded[f.name] !== undefined && + f.isSerialized + ) + .sort((a, b) => { + return a.ordinal - b.ordinal; + }); + + if (filter !== undefined) { + sorted = sorted.filter(filter); + } + + sorted.forEach((field) => { + const associatedValue = field.associatedType.from( + xAddressDecoded[field.name] + ); + + bytes.writeFieldAndValue(field, associatedValue); + if (field.type.name === ST_OBJECT) { + bytes.put(OBJECT_END_MARKER_BYTE); + } + }); + + return new STObject(list.toBytes()); + } + + /** + * Get the JSON interpretation of this.bytes + * + * @returns a JSON object + */ + toJSON(): JsonObject { + const objectParser = new BinaryParser(this.toString()); + const accumulator = {}; + + while (!objectParser.end()) { + const field = objectParser.readField(); + if (field.name === OBJECT_END_MARKER) { + break; + } + accumulator[field.name] = objectParser.readFieldValue(field).toJSON(); + } + + return accumulator; + } +} + +export { STObject }; diff --git a/packages/ripple-binary-codec/src/types/uint-16.ts b/packages/ripple-binary-codec/src/types/uint-16.ts new file mode 100644 index 00000000..6a51e095 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/uint-16.ts @@ -0,0 +1,51 @@ +import { UInt } from "./uint"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +/** + * Derived UInt class for serializing/deserializing 16 bit UInt + */ +class UInt16 extends UInt { + protected static readonly width: number = 16 / 8; // 2 + static readonly defaultUInt16: UInt16 = new UInt16( + Buffer.alloc(UInt16.width) + ); + + constructor(bytes: Buffer) { + super(bytes ?? UInt16.defaultUInt16.bytes); + } + + static fromParser(parser: BinaryParser): UInt { + return new UInt16(parser.read(UInt16.width)); + } + + /** + * Construct a UInt16 object from a number + * + * @param val UInt16 object or number + */ + static from(val: T): UInt16 { + if (val instanceof UInt16) { + return val; + } + + if (typeof val === "number") { + const buf = Buffer.alloc(UInt16.width); + buf.writeUInt16BE(val, 0); + return new UInt16(buf); + } + + throw new Error("Can not construct UInt16 with given value"); + } + + /** + * get the value of a UInt16 object + * + * @returns the number represented by this.bytes + */ + valueOf(): number { + return this.bytes.readUInt16BE(0); + } +} + +export { UInt16 }; diff --git a/packages/ripple-binary-codec/src/types/uint-32.ts b/packages/ripple-binary-codec/src/types/uint-32.ts new file mode 100644 index 00000000..1e96a7f9 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/uint-32.ts @@ -0,0 +1,58 @@ +import { UInt } from "./uint"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +/** + * Derived UInt class for serializing/deserializing 32 bit UInt + */ +class UInt32 extends UInt { + protected static readonly width: number = 32 / 8; // 4 + static readonly defaultUInt32: UInt32 = new UInt32( + Buffer.alloc(UInt32.width) + ); + + constructor(bytes: Buffer) { + super(bytes ?? UInt32.defaultUInt32.bytes); + } + + static fromParser(parser: BinaryParser): UInt { + return new UInt32(parser.read(UInt32.width)); + } + + /** + * Construct a UInt32 object from a number + * + * @param val UInt32 object or number + */ + static from(val: T): UInt32 { + if (val instanceof UInt32) { + return val; + } + + const buf = Buffer.alloc(UInt32.width); + + if (typeof val === "string") { + const num = Number.parseInt(val); + buf.writeUInt32BE(num, 0); + return new UInt32(buf); + } + + if (typeof val === "number") { + buf.writeUInt32BE(val, 0); + return new UInt32(buf); + } + + throw new Error("Cannot construct UInt32 from given value"); + } + + /** + * get the value of a UInt32 object + * + * @returns the number represented by this.bytes + */ + valueOf(): number { + return this.bytes.readUInt32BE(0); + } +} + +export { UInt32 }; diff --git a/packages/ripple-binary-codec/src/types/uint-64.ts b/packages/ripple-binary-codec/src/types/uint-64.ts new file mode 100644 index 00000000..678fd9fe --- /dev/null +++ b/packages/ripple-binary-codec/src/types/uint-64.ts @@ -0,0 +1,107 @@ +import { UInt } from "./uint"; +import { BinaryParser } from "../serdes/binary-parser"; +import * as bigInt from "big-integer"; +import { isInstance } from "big-integer"; +import { Buffer } from "buffer/"; + +const HEX_REGEX = /^[a-fA-F0-9]{1,16}$/; +const mask = bigInt(0x00000000ffffffff); + +/** + * Derived UInt class for serializing/deserializing 64 bit UInt + */ +class UInt64 extends UInt { + protected static readonly width: number = 64 / 8; // 8 + static readonly defaultUInt64: UInt64 = new UInt64( + Buffer.alloc(UInt64.width) + ); + + constructor(bytes: Buffer) { + super(bytes ?? UInt64.defaultUInt64.bytes); + } + + static fromParser(parser: BinaryParser): UInt { + return new UInt64(parser.read(UInt64.width)); + } + + /** + * Construct a UInt64 object + * + * @param val A UInt64, hex-string, bigInt, or number + * @returns A UInt64 object + */ + static from( + val: T + ): UInt64 { + if (val instanceof UInt64) { + return val; + } + + let buf = Buffer.alloc(UInt64.width); + + if (typeof val === "number") { + if (val < 0) { + throw new Error("value must be an unsigned integer"); + } + + const number = bigInt(val); + + const intBuf = [Buffer.alloc(4), Buffer.alloc(4)]; + intBuf[0].writeUInt32BE(Number(number.shiftRight(32)), 0); + intBuf[1].writeUInt32BE(Number(number.and(mask)), 0); + + return new UInt64(Buffer.concat(intBuf)); + } + + if (typeof val === "string") { + if (!HEX_REGEX.test(val)) { + throw new Error(`${val} is not a valid hex-string`); + } + + const strBuf = val.padStart(16, "0"); + buf = Buffer.from(strBuf, "hex"); + return new UInt64(buf); + } + + if (isInstance(val)) { + const intBuf = [Buffer.alloc(4), Buffer.alloc(4)]; + intBuf[0].writeUInt32BE(Number(val.shiftRight(bigInt(32))), 0); + intBuf[1].writeUInt32BE(Number(val.and(mask)), 0); + + return new UInt64(Buffer.concat(intBuf)); + } + + throw new Error("Cannot construct UInt64 from given value"); + } + + /** + * The JSON representation of a UInt64 object + * + * @returns a hex-string + */ + toJSON(): string { + return this.bytes.toString("hex").toUpperCase(); + } + + /** + * Get the value of the UInt64 + * + * @returns the number represented buy this.bytes + */ + valueOf(): bigInt.BigInteger { + const msb = bigInt(this.bytes.slice(0, 4).readUInt32BE(0)); + const lsb = bigInt(this.bytes.slice(4).readUInt32BE(0)); + return msb.shiftLeft(bigInt(32)).or(lsb); + } + + /** + * Get the bytes representation of the UInt64 object + * + * @returns 8 bytes representing the UInt64 + */ + toBytes(): Buffer { + return this.bytes; + } +} + +export { UInt64 }; diff --git a/packages/ripple-binary-codec/src/types/uint-8.ts b/packages/ripple-binary-codec/src/types/uint-8.ts new file mode 100644 index 00000000..91424906 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/uint-8.ts @@ -0,0 +1,49 @@ +import { UInt } from "./uint"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Buffer } from "buffer/"; + +/** + * Derived UInt class for serializing/deserializing 8 bit UInt + */ +class UInt8 extends UInt { + protected static readonly width: number = 8 / 8; // 1 + static readonly defaultUInt8: UInt8 = new UInt8(Buffer.alloc(UInt8.width)); + + constructor(bytes: Buffer) { + super(bytes ?? UInt8.defaultUInt8.bytes); + } + + static fromParser(parser: BinaryParser): UInt { + return new UInt8(parser.read(UInt8.width)); + } + + /** + * Construct a UInt8 object from a number + * + * @param val UInt8 object or number + */ + static from(val: T): UInt8 { + if (val instanceof UInt8) { + return val; + } + + if (typeof val === "number") { + const buf = Buffer.alloc(UInt8.width); + buf.writeUInt8(val, 0); + return new UInt8(buf); + } + + throw new Error("Cannot construct UInt8 from given value"); + } + + /** + * get the value of a UInt8 object + * + * @returns the number represented by this.bytes + */ + valueOf(): number { + return this.bytes.readUInt8(0); + } +} + +export { UInt8 }; diff --git a/packages/ripple-binary-codec/src/types/uint.ts b/packages/ripple-binary-codec/src/types/uint.ts new file mode 100644 index 00000000..a6b92356 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/uint.ts @@ -0,0 +1,57 @@ +import * as bigInt from "big-integer"; +import { Comparable } from "./serialized-type"; +import { Buffer } from "buffer/"; + +/** + * Compare numbers and bigInts n1 and n2 + * + * @param n1 First object to compare + * @param n2 Second object to compare + * @returns -1, 0, or 1, depending on how the two objects compare + */ +function compare( + n1: number | bigInt.BigInteger, + n2: number | bigInt.BigInteger +): number { + return n1 < n2 ? -1 : n1 == n2 ? 0 : 1; +} + +/** + * Base class for serializing and deserializing unsigned integers. + */ +abstract class UInt extends Comparable { + protected static width: number; + + constructor(bytes: Buffer) { + super(bytes); + } + + /** + * Overload of compareTo for Comparable + * + * @param other other UInt to compare this to + * @returns -1, 0, or 1 depending on how the objects relate to each other + */ + compareTo(other: UInt): number { + return compare(this.valueOf(), other.valueOf()); + } + + /** + * Convert a UInt object to JSON + * + * @returns number or string represented by this.bytes + */ + toJSON(): number | string { + const val = this.valueOf(); + return typeof val === "number" ? val : val.toString(); + } + + /** + * Get the value of the UInt represented by this.bytes + * + * @returns the value + */ + abstract valueOf(): number | bigInt.BigInteger; +} + +export { UInt }; diff --git a/packages/ripple-binary-codec/src/types/vector-256.ts b/packages/ripple-binary-codec/src/types/vector-256.ts new file mode 100644 index 00000000..7224f9bd --- /dev/null +++ b/packages/ripple-binary-codec/src/types/vector-256.ts @@ -0,0 +1,84 @@ +import { SerializedType } from "./serialized-type"; +import { BinaryParser } from "../serdes/binary-parser"; +import { Hash256 } from "./hash-256"; +import { BytesList } from "../serdes/binary-serializer"; +import { Buffer } from "buffer/"; + +/** + * TypeGuard for Array + */ +function isStrings(arg): arg is Array { + return Array.isArray(arg) && (arg.length === 0 || typeof arg[0] === "string"); +} + +/** + * Class for serializing and deserializing vectors of Hash256 + */ +class Vector256 extends SerializedType { + constructor(bytes: Buffer) { + super(bytes); + } + + /** + * Construct a Vector256 from a BinaryParser + * + * @param parser BinaryParser to + * @param hint length of the vector, in bytes, optional + * @returns a Vector256 object + */ + static fromParser(parser: BinaryParser, hint?: number): Vector256 { + const bytesList = new BytesList(); + const bytes = hint ?? parser.size(); + const hashes = bytes / 32; + for (let i = 0; i < hashes; i++) { + Hash256.fromParser(parser).toBytesSink(bytesList); + } + return new Vector256(bytesList.toBytes()); + } + + /** + * Construct a Vector256 object from an array of hashes + * + * @param value A Vector256 object or array of hex-strings representing Hash256's + * @returns a Vector256 object + */ + static from>(value: T): Vector256 { + if (value instanceof Vector256) { + return value; + } + + if (isStrings(value)) { + const bytesList = new BytesList(); + value.forEach((hash) => { + Hash256.from(hash).toBytesSink(bytesList); + }); + return new Vector256(bytesList.toBytes()); + } + + throw new Error("Cannot construct Vector256 from given value"); + } + + /** + * Return an Array of hex-strings represented by this.bytes + * + * @returns An Array of strings representing the Hash256 objects + */ + toJSON(): Array { + if (this.bytes.byteLength % 32 !== 0) { + throw new Error("Invalid bytes for Vector256"); + } + + const result: Array = []; + for (let i = 0; i < this.bytes.byteLength; i += 32) { + result.push( + this.bytes + .slice(i, i + 32) + .toString("hex") + .toUpperCase() + ); + } + return result; + } +} + +export { Vector256 }; diff --git a/packages/ripple-binary-codec/test/amount.test.js b/packages/ripple-binary-codec/test/amount.test.js new file mode 100644 index 00000000..a47ea811 --- /dev/null +++ b/packages/ripple-binary-codec/test/amount.test.js @@ -0,0 +1,43 @@ +const { loadFixture } = require("./utils"); +const { coreTypes } = require("../dist/types"); +const { Amount } = coreTypes; +const fixtures = loadFixture("data-driven-tests.json"); + +function amountErrorTests() { + fixtures.values_tests + .filter((obj) => obj.type === "Amount") + .forEach((f) => { + // We only want these with errors + if (!f.error) { + return; + } + const testName = + `${JSON.stringify(f.test_json)}\n\tis invalid ` + `because: ${f.error}`; + it(testName, () => { + expect(() => { + Amount.from(f.test_json); + JSON.stringify(f.test_json); + }).toThrow(); + }); + }); +} + +describe("Amount", function () { + it("can be parsed from", function () { + expect(Amount.from("1000000") instanceof Amount).toBe(true); + expect(Amount.from("1000000").toJSON()).toEqual("1000000"); + const fixture = { + value: "1", + issuer: "0000000000000000000000000000000000000000", + currency: "USD", + }; + const amt = Amount.from(fixture); + const rewritten = { + value: "1", + issuer: "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + currency: "USD", + }; + expect(amt.toJSON()).toEqual(rewritten); + }); + amountErrorTests(); +}); diff --git a/packages/ripple-binary-codec/test/binary-json.test.js b/packages/ripple-binary-codec/test/binary-json.test.js new file mode 100644 index 00000000..0317d9e3 --- /dev/null +++ b/packages/ripple-binary-codec/test/binary-json.test.js @@ -0,0 +1,45 @@ +const fixtures = require("./fixtures/codec-fixtures.json"); +const { decode, encode, decodeLedgerData } = require("../dist"); + +function json(object) { + return JSON.stringify(object); +} + +function truncateForDisplay(longStr) { + return `${longStr.slice(0, 10)} ... ${longStr.slice(-10)}`; +} + +describe("ripple-binary-codec", function () { + function makeSuite(name, entries) { + describe(name, function () { + entries.forEach((t, testN) => { + test(`${name}[${testN}] can encode ${truncateForDisplay( + json(t.json) + )} to ${truncateForDisplay(t.binary)}`, () => { + expect(encode(t.json)).toEqual(t.binary); + }); + test(`${name}[${testN}] can decode ${truncateForDisplay( + t.binary + )} to ${truncateForDisplay(json(t.json))}`, () => { + const decoded = decode(t.binary); + expect(decoded).toEqual(t.json); + }); + }); + }); + } + makeSuite("transactions", fixtures.transactions); + makeSuite("accountState", fixtures.accountState); + + describe("ledgerData", function () { + if (fixtures.ledgerData) { + fixtures.ledgerData.forEach((t, testN) => { + test(`ledgerData[${testN}] can decode ${t.binary} to ${json( + t.json + )}`, () => { + const decoded = decodeLedgerData(t.binary); + expect(t.json).toEqual(decoded); + }); + }); + } + }); +}); diff --git a/packages/ripple-binary-codec/test/binary-parser.test.js b/packages/ripple-binary-codec/test/binary-parser.test.js new file mode 100644 index 00000000..1a0925ef --- /dev/null +++ b/packages/ripple-binary-codec/test/binary-parser.test.js @@ -0,0 +1,396 @@ +const { coreTypes } = require("../dist/types"); +const Decimal = require("decimal.js"); + +const { encodeAccountID } = require("ripple-address-codec"); +const { binary } = require("../dist/coretypes"); +const { Amount, Hash160 } = coreTypes; +const { makeParser, readJSON } = binary; +const { Field, TransactionType } = require("./../dist/enums"); +const { parseHexOnly, hexOnly, loadFixture } = require("./utils"); +const fixtures = loadFixture("data-driven-tests.json"); +const { BytesList } = require("../dist/serdes/binary-serializer"); +const { Buffer } = require("buffer/"); + +const __ = hexOnly; +function toJSON(v) { + return v.toJSON ? v.toJSON() : v; +} + +function assertEqualAmountJSON(actual, expected) { + expect(typeof actual === typeof expected).toBe(true); + if (typeof actual === "string") { + expect(actual).toEqual(expected); + return; + } + expect(actual.currency).toEqual(expected.currency); + expect(actual.issuer).toEqual(expected.issuer); + expect( + actual.value === expected.value || + new Decimal(actual.value).equals(new Decimal(expected.value)) + ).toBe(true); +} + +function basicApiTests() { + const bytes = parseHexOnly("00,01020304,0506", Uint8Array); + test("can read slices of bytes", () => { + const parser = makeParser(bytes); + expect(parser.bytes instanceof Buffer).toBe(true); + const read1 = parser.read(1); + expect(read1 instanceof Buffer).toBe(true); + expect(read1).toEqual(Buffer.from([0])); + expect(parser.read(4)).toEqual(Buffer.from([1, 2, 3, 4])); + expect(parser.read(2)).toEqual(Buffer.from([5, 6])); + expect(() => parser.read(1)).toThrow(); + }); + test("can read a Uint32 at full", () => { + const parser = makeParser("FFFFFFFF"); + expect(parser.readUInt32()).toEqual(0xffffffff); + }); +} + +function transactionParsingTests() { + const transaction = { + json: { + Account: "raD5qJMAShLeHZXf9wjUmo6vRK4arj9cF3", + Fee: "10", + Flags: 0, + Sequence: 103929, + SigningPubKey: + "028472865AF4CB32AA285834B57576B7290AA8C31B459047DB27E16F418D6A7166", + TakerGets: { + currency: "ILS", + issuer: "rNPRNzBB92BVpAhhZr4iXDTveCgV5Pofm9", + value: "1694.768", + }, + TakerPays: "98957503520", + TransactionType: "OfferCreate", + TxnSignature: __(` + 304502202ABE08D5E78D1E74A4C18F2714F64E87B8BD57444AF + A5733109EB3C077077520022100DB335EE97386E4C0591CAC02 + 4D50E9230D8F171EEB901B5E5E4BD6D1E0AEF98C`), + }, + binary: __(` + 120007220000000024000195F964400000170A53AC2065D5460561E + C9DE000000000000000000000000000494C53000000000092D70596 + 8936C419CE614BF264B5EEB1CEA47FF468400000000000000A73210 + 28472865AF4CB32AA285834B57576B7290AA8C31B459047DB27E16F + 418D6A71667447304502202ABE08D5E78D1E74A4C18F2714F64E87B + 8BD57444AFA5733109EB3C077077520022100DB335EE97386E4C059 + 1CAC024D50E9230D8F171EEB901B5E5E4BD6D1E0AEF98C811439408 + A69F0895E62149CFCC006FB89FA7D1E6E5D`), + }; + + const tx_json = transaction.json; + // These tests are basically development logs + + test("can be done with low level apis", () => { + const parser = makeParser(transaction.binary); + + expect(parser.readField()).toEqual(Field.TransactionType); + expect(parser.readUInt16()).toEqual(7); + expect(parser.readField()).toEqual(Field.Flags); + expect(parser.readUInt32()).toEqual(0); + expect(parser.readField()).toEqual(Field.Sequence); + expect(parser.readUInt32()).toEqual(103929); + expect(parser.readField()).toEqual(Field.TakerPays); + parser.read(8); + expect(parser.readField()).toEqual(Field.TakerGets); + // amount value + expect(parser.read(8)).not.toBe([]); + // amount currency + expect(Hash160.fromParser(parser)).not.toBe([]); + expect(encodeAccountID(parser.read(20))).toEqual(tx_json.TakerGets.issuer); + expect(parser.readField()).toEqual(Field.Fee); + expect(parser.read(8)).not.toEqual([]); + expect(parser.readField()).toEqual(Field.SigningPubKey); + expect(parser.readVariableLengthLength()).toBe(33); + expect(parser.read(33).toString("hex").toUpperCase()).toEqual( + tx_json.SigningPubKey + ); + expect(parser.readField()).toEqual(Field.TxnSignature); + expect(parser.readVariableLength().toString("hex").toUpperCase()).toEqual( + tx_json.TxnSignature + ); + expect(parser.readField()).toEqual(Field.Account); + expect(encodeAccountID(parser.readVariableLength())).toEqual( + tx_json.Account + ); + expect(parser.end()).toBe(true); + }); + + test("can be done with high level apis", () => { + const parser = makeParser(transaction.binary); + function readField() { + return parser.readFieldAndValue(); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.TransactionType); + expect(value).toEqual(TransactionType.OfferCreate); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.Flags); + expect(value.valueOf()).toEqual(0); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.Sequence); + expect(value.valueOf()).toEqual(103929); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.TakerPays); + expect(value.isNative()).toEqual(true); + expect(value.toJSON()).toEqual("98957503520"); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.TakerGets); + expect(value.isNative()).toEqual(false); + expect(value.toJSON().issuer).toEqual(tx_json.TakerGets.issuer); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.Fee); + expect(value.isNative()).toEqual(true); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.SigningPubKey); + expect(value.toJSON()).toEqual(tx_json.SigningPubKey); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.TxnSignature); + expect(value.toJSON()).toEqual(tx_json.TxnSignature); + } + { + const [field, value] = readField(); + expect(field).toEqual(Field.Account); + expect(value.toJSON()).toEqual(tx_json.Account); + } + expect(parser.end()).toBe(true); + }); + + test("can be done with higher level apis", () => { + const parser = makeParser(transaction.binary); + const jsonFromBinary = readJSON(parser); + expect(jsonFromBinary).toEqual(tx_json); + }); + + test("readJSON (binary.decode) does not return STObject ", () => { + const parser = makeParser(transaction.binary); + const jsonFromBinary = readJSON(parser); + expect(jsonFromBinary instanceof coreTypes.STObject).toBe(false); + expect(jsonFromBinary instanceof Object).toBe(true); + expect(jsonFromBinary.prototype).toBe(undefined); + }); +} + +function amountParsingTests() { + fixtures.values_tests + .filter((obj) => obj.type === "Amount") + .forEach((f, i) => { + if (f.error) { + return; + } + const parser = makeParser(f.expected_hex); + const testName = `values_tests[${i}] parses ${f.expected_hex.slice( + 0, + 16 + )}... + as ${JSON.stringify(f.test_json)}`; + test(testName, () => { + const value = parser.readType(Amount); + // May not actually be in canonical form. The fixtures are to be used + // also for json -> binary; + const json = toJSON(value); + assertEqualAmountJSON(json, f.test_json); + if (f.exponent) { + const exponent = new Decimal(json.value); + expect(exponent.e - 15).toEqual(f.exponent); + } + }); + }); +} + +function fieldParsingTests() { + fixtures.fields_tests.forEach((f, i) => { + const parser = makeParser(f.expected_hex); + test(`fields[${i}]: parses ${f.expected_hex} as ${f.name}`, () => { + const field = parser.readField(); + expect(field.name).toEqual(f.name); + expect(field.type.name).toEqual(f.type_name); + }); + }); + test("Field throws when type code out of range", () => { + const parser = makeParser("0101"); + expect(() => parser.readField()).toThrow( + new Error("Cannot read FieldOrdinal, type_code out of range") + ); + }); + test("Field throws when field code out of range", () => { + const parser = makeParser("1001"); + expect(() => parser.readFieldOrdinal()).toThrowError( + new Error("Cannot read FieldOrdinal, field_code out of range") + ); + }); + test("Field throws when both type and field code out of range", () => { + const parser = makeParser("000101"); + expect(() => parser.readFieldOrdinal()).toThrowError( + new Error("Cannot read FieldOrdinal, type_code out of range") + ); + }); +} + +function assertRecyclable(json, forField) { + const Type = forField.associatedType; + const recycled = Type.from(json).toJSON(); + expect(recycled).toEqual(json); + const sink = new BytesList(); + Type.from(recycled).toBytesSink(sink); + const recycledAgain = makeParser(sink.toHex()).readType(Type).toJSON(); + expect(recycledAgain).toEqual(json); +} + +function nestedObjectTests() { + fixtures.whole_objects.forEach((f, i) => { + test(`whole_objects[${i}]: can parse blob into + ${JSON.stringify( + f.tx_json + )}`, /* */ () => { + const parser = makeParser(f.blob_with_no_signing); + let ix = 0; + while (!parser.end()) { + const [field, value] = parser.readFieldAndValue(); + const expected = f.fields[ix]; + const expectedJSON = expected[1].json; + const expectedField = expected[0]; + const actual = toJSON(value); + + try { + expect(actual).toEqual(expectedJSON); + } catch (e) { + throw new Error(`${e} ${field} a: ${actual} e: ${expectedJSON}`); + } + expect(field.name).toEqual(expectedField); + assertRecyclable(actual, field); + ix++; + } + }); + }); +} + +function pathSetBinaryTests() { + const bytes = __( + `1200002200000000240000002E2E00004BF161D4C71AFD498D00000000000000 + 0000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA0 + 6594D168400000000000000A69D446F8038585E9400000000000000000000000 + 00425443000000000078CA21A6014541AB7B26C3929B9E0CD8C284D61C732103 + A4665B1F0B7AE2BCA12E2DB80A192125BBEA660F80E9CEE137BA444C1B0769EC + 7447304502205A964536805E35785C659D1F9670D057749AE39668175D6AA75D + 25B218FE682E0221009252C0E5DDD5F2712A48F211669DE17B54113918E0D2C2 + 66F818095E9339D7D3811478CA21A6014541AB7B26C3929B9E0CD8C284D61C83 + 140A20B3C85F482532A9578DBB3950B85CA06594D1011231585E1F3BD02A15D6 + 185F8BB9B57CC60DEDDB37C10000000000000000000000004254430000000000 + 585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D694C + 8531CDEECBE84F33670000000000000000000000004254430000000000E4FE68 + 7C90257D3D2D694C8531CDEECBE84F3367310A20B3C85F482532A9578DBB3950 + B85CA06594D100000000000000000000000042544300000000000A20B3C85F48 + 2532A9578DBB3950B85CA06594D1300000000000000000000000005553440000 + 0000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A15 + D6185F8BB9B57CC60DEDDB37C100000000000000000000000042544300000000 + 00585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C131E4FE687C90257D3D2D69 + 4C8531CDEECBE84F33670000000000000000000000004254430000000000E4FE + 687C90257D3D2D694C8531CDEECBE84F33673115036E2D3F5437A83E5AC3CAEE + 34FF2C21DEB618000000000000000000000000425443000000000015036E2D3F + 5437A83E5AC3CAEE34FF2C21DEB6183000000000000000000000000055534400 + 000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF31585E1F3BD02A + 15D6185F8BB9B57CC60DEDDB37C1000000000000000000000000425443000000 + 0000585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C13157180C769B66D942EE + 69E6DCC940CA48D82337AD000000000000000000000000425443000000000057 + 180C769B66D942EE69E6DCC940CA48D82337AD10000000000000000000000000 + 00000000000000003000000000000000000000000055534400000000000A20B3 + C85F482532A9578DBB3950B85CA06594D100` + ); + + const expectedJSON = [ + [ + { + account: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + currency: "BTC", + issuer: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + }, + { + account: "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + currency: "BTC", + issuer: "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + }, + { + account: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + currency: "BTC", + issuer: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + }, + { + currency: "USD", + issuer: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + }, + ], + [ + { + account: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + currency: "BTC", + issuer: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + }, + { + account: "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + currency: "BTC", + issuer: "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + }, + { + account: "rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi", + currency: "BTC", + issuer: "rpvfJ4mR6QQAeogpXEKnuyGBx8mYCSnYZi", + }, + { + currency: "USD", + issuer: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + }, + ], + [ + { + account: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + currency: "BTC", + issuer: "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + }, + { + account: "r3AWbdp2jQLXLywJypdoNwVSvr81xs3uhn", + currency: "BTC", + issuer: "r3AWbdp2jQLXLywJypdoNwVSvr81xs3uhn", + }, + { currency: "XRP" }, + { + currency: "USD", + issuer: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + }, + ], + ]; + + test("works with long paths", () => { + const parser = makeParser(bytes); + const txn = readJSON(parser); + expect(txn.Paths).toEqual(expectedJSON); + // TODO: this should go elsewhere + expect(coreTypes.PathSet.from(txn.Paths).toJSON()).toEqual(expectedJSON); + }); +} + +describe("Binary Parser", function () { + describe("pathSetBinaryTests", () => pathSetBinaryTests()); + describe("nestedObjectTests", () => nestedObjectTests()); + describe("fieldParsingTests", () => fieldParsingTests()); + describe("amountParsingTests", () => amountParsingTests()); + describe("transactionParsingTests", () => transactionParsingTests()); + describe("basicApiTests", () => basicApiTests()); +}); diff --git a/packages/ripple-binary-codec/test/binary-serializer.test.js b/packages/ripple-binary-codec/test/binary-serializer.test.js new file mode 100644 index 00000000..acc69c66 --- /dev/null +++ b/packages/ripple-binary-codec/test/binary-serializer.test.js @@ -0,0 +1,260 @@ +const { binary } = require("../dist/coretypes"); +const { encode, decode } = require("../dist"); +const { makeParser, BytesList, BinarySerializer } = binary; +const { coreTypes } = require("../dist/types"); +const { UInt8, UInt16, UInt32, UInt64, STObject } = coreTypes; +const bigInt = require("big-integer"); +const { Buffer } = require("buffer/"); + +const { loadFixture } = require("./utils"); +const fixtures = loadFixture("data-driven-tests.json"); +const deliverMinTx = require("./fixtures/delivermin-tx.json"); +const deliverMinTxBinary = require("./fixtures/delivermin-tx-binary.json"); +const SignerListSet = { + tx: require("./fixtures/signerlistset-tx.json"), + binary: require("./fixtures/signerlistset-tx-binary.json"), + meta: require("./fixtures/signerlistset-tx-meta-binary.json"), +}; +const DepositPreauth = { + tx: require("./fixtures/deposit-preauth-tx.json"), + binary: require("./fixtures/deposit-preauth-tx-binary.json"), + meta: require("./fixtures/deposit-preauth-tx-meta-binary.json"), +}; +const Escrow = { + create: { + tx: require("./fixtures/escrow-create-tx.json"), + binary: require("./fixtures/escrow-create-binary.json"), + }, + finish: { + tx: require("./fixtures/escrow-finish-tx.json"), + binary: require("./fixtures/escrow-finish-binary.json"), + meta: require("./fixtures/escrow-finish-meta-binary.json"), + }, + cancel: { + tx: require("./fixtures/escrow-cancel-tx.json"), + binary: require("./fixtures/escrow-cancel-binary.json"), + }, +}; +const PaymentChannel = { + create: { + tx: require("./fixtures/payment-channel-create-tx.json"), + binary: require("./fixtures/payment-channel-create-binary.json"), + }, + fund: { + tx: require("./fixtures/payment-channel-fund-tx.json"), + binary: require("./fixtures/payment-channel-fund-binary.json"), + }, + claim: { + tx: require("./fixtures/payment-channel-claim-tx.json"), + binary: require("./fixtures/payment-channel-claim-binary.json"), + }, +}; + +const Ticket = { + create: { + tx: require("./fixtures/ticket-create-tx.json"), + binary: require("./fixtures/ticket-create-binary.json"), + }, +}; + +let json_undefined = { + TakerPays: "223174650", + Account: "rPk2dXr27rMw9G5Ej9ad2Tt7RJzGy8ycBp", + TransactionType: "OfferCreate", + Memos: [ + { + Memo: { + MemoType: "584D4D2076616C7565", + MemoData: "322E3230393635", + MemoFormat: undefined, + }, + }, + ], + Fee: "15", + OfferSequence: undefined, + TakerGets: { + currency: "XMM", + value: "100", + issuer: "rExAPEZvbkZqYPuNcZ7XEBLENEshsWDQc8", + }, + Flags: 524288, + Sequence: undefined, + LastLedgerSequence: 6220135, +}; + +let json_omitted = { + TakerPays: "223174650", + Account: "rPk2dXr27rMw9G5Ej9ad2Tt7RJzGy8ycBp", + TransactionType: "OfferCreate", + Memos: [ + { + Memo: { + MemoType: "584D4D2076616C7565", + MemoData: "322E3230393635", + }, + }, + ], + Fee: "15", + TakerGets: { + currency: "XMM", + value: "100", + issuer: "rExAPEZvbkZqYPuNcZ7XEBLENEshsWDQc8", + }, + Flags: 524288, + LastLedgerSequence: 6220135, +}; + +const NegativeUNL = require("./fixtures/negative-unl.json"); + +function bytesListTest() { + const list = new BytesList() + .put(Buffer.from([0])) + .put(Buffer.from([2, 3])) + .put(Buffer.from([4, 5])); + test("is an Array", function () { + expect(Array.isArray(list.bytesArray)).toBe(true); + expect(list.bytesArray[0] instanceof Buffer).toBe(true); + }); + test("keeps track of the length itself", function () { + expect(list.getLength()).toBe(5); + }); + test("can join all arrays into one via toBytes", function () { + const joined = list.toBytes(); + expect(joined).toHaveLength(5); + expect(joined).toEqual(Buffer.from([0, 2, 3, 4, 5])); + }); +} + +function assertRecycles(blob) { + const parser = makeParser(blob); + const so = parser.readType(STObject); + const out = new BytesList(); + so.toBytesSink(out); + const hex = out.toHex(); + expect(hex).toEqual(blob); + expect(hex + ":").not.toEqual(blob); +} + +function nestedObjectTests() { + fixtures.whole_objects.forEach((f, i) => { + test(`whole_objects[${i}]: can parse blob and dump out same blob`, () => { + assertRecycles(f.blob_with_no_signing); + }); + }); +} + +function check(type, n, expected) { + test(`Uint${type.width * 8} serializes ${n} as ${expected}`, function () { + const bl = new BytesList(); + const serializer = new BinarySerializer(bl); + if (expected === "throws") { + expect(() => serializer.writeType(type, n)).toThrow(); + return; + } + serializer.writeType(type, n); + expect(bl.toBytes()).toEqual(Buffer.from(expected)); + }); +} + +check(UInt8, 5, [5]); +check(UInt16, 5, [0, 5]); +check(UInt32, 5, [0, 0, 0, 5]); +check(UInt32, 0xffffffff, [255, 255, 255, 255]); +check(UInt8, 0xfeffffff, "throws"); +check(UInt16, 0xfeffffff, "throws"); +check(UInt16, 0xfeffffff, "throws"); +check(UInt64, 0xfeffffff, [0, 0, 0, 0, 254, 255, 255, 255]); +check(UInt64, -1, "throws"); +check(UInt64, 0, [0, 0, 0, 0, 0, 0, 0, 0]); +check(UInt64, 1, [0, 0, 0, 0, 0, 0, 0, 1]); +check(UInt64, bigInt(1), [0, 0, 0, 0, 0, 0, 0, 1]); + +function deliverMinTest() { + test("can serialize DeliverMin", () => { + expect(encode(deliverMinTx)).toEqual(deliverMinTxBinary); + }); +} + +function SignerListSetTest() { + test("can serialize SignerListSet", () => { + expect(encode(SignerListSet.tx)).toEqual(SignerListSet.binary); + }); + test("can serialize SignerListSet metadata", () => { + expect(encode(SignerListSet.tx.meta)).toEqual(SignerListSet.meta); + }); +} + +function DepositPreauthTest() { + test("can serialize DepositPreauth", () => { + expect(encode(DepositPreauth.tx)).toEqual(DepositPreauth.binary); + }); + test("can serialize DepositPreauth metadata", () => { + expect(encode(DepositPreauth.tx.meta)).toEqual(DepositPreauth.meta); + }); +} + +function EscrowTest() { + test("can serialize EscrowCreate", () => { + expect(encode(Escrow.create.tx)).toEqual(Escrow.create.binary); + }); + test("can serialize EscrowFinish", () => { + expect(encode(Escrow.finish.tx)).toEqual(Escrow.finish.binary); + expect(encode(Escrow.finish.tx.meta)).toEqual(Escrow.finish.meta); + }); + test("can serialize EscrowCancel", () => { + expect(encode(Escrow.cancel.tx)).toEqual(Escrow.cancel.binary); + }); +} + +function PaymentChannelTest() { + test("can serialize PaymentChannelCreate", () => { + expect(encode(PaymentChannel.create.tx)).toEqual( + PaymentChannel.create.binary + ); + }); + test("can serialize PaymentChannelFund", () => { + expect(encode(PaymentChannel.fund.tx)).toEqual(PaymentChannel.fund.binary); + }); + test("can serialize PaymentChannelClaim", () => { + expect(encode(PaymentChannel.claim.tx)).toEqual( + PaymentChannel.claim.binary + ); + }); +} + +function NegativeUNLTest() { + test("can serialize NegativeUNL", () => { + expect(encode(NegativeUNL.tx)).toEqual(NegativeUNL.binary); + }); + test("can deserialize NegativeUNL", () => { + expect(decode(NegativeUNL.binary)).toEqual(NegativeUNL.tx); + }); +} + +function omitUndefinedTest() { + test("omits fields with undefined value", () => { + let encodedOmitted = encode(json_omitted); + let encodedUndefined = encode(json_undefined); + expect(encodedOmitted).toEqual(encodedUndefined); + expect(decode(encodedOmitted)).toEqual(decode(encodedUndefined)); + }); +} + +function ticketTest() { + test("can serialize TicketCreate", () => { + expect(encode(Ticket.create.tx)).toEqual(Ticket.create.binary); + }); +} + +describe("Binary Serialization", function () { + describe("nestedObjectTests", () => nestedObjectTests()); + describe("BytesList", () => bytesListTest()); + describe("DeliverMin", () => deliverMinTest()); + describe("DepositPreauth", () => DepositPreauthTest()); + describe("SignerListSet", () => SignerListSetTest()); + describe("Escrow", () => EscrowTest()); + describe("PaymentChannel", () => PaymentChannelTest()); + describe("NegativeUNLTest", () => NegativeUNLTest()); + describe("OmitUndefined", () => omitUndefinedTest()); + describe("TicketTest", () => ticketTest()); +}); diff --git a/packages/ripple-binary-codec/test/fixtures/account-tx-transactions.db b/packages/ripple-binary-codec/test/fixtures/account-tx-transactions.db new file mode 100644 index 00000000..959dad94 Binary files /dev/null and b/packages/ripple-binary-codec/test/fixtures/account-tx-transactions.db differ diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json new file mode 100644 index 00000000..15aa20f1 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -0,0 +1,4466 @@ +{ + "accountState": [ + { + "binary": "1100612200000000240000000125000022C52D00000000558D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B46240000000160DC0808114712B799C79D1EEE3094B59EF9920C7FEB3CE4499", + "json": { + "OwnerCount": 0, + "Account": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7", + "PreviousTxnLgrSeq": 8901, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", + "Flags": 0, + "Sequence": 1, + "Balance": "370000000" + } + }, + { + "binary": "1100612200000000240000000125000000072D0000000055DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF6240000002540BE4008114D0F5430B66E06498D4CEEC816C7B3337F9982337", + "json": { + "OwnerCount": 0, + "Account": "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + "PreviousTxnLgrSeq": 7, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000058059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E68214F7FF2D5EA6BB5C26D85343656BEEE94D74B509E0011320908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB", + "json": { + "Owner": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6", + "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"] + } + }, + { + "binary": "1100612200000000240000000125000068652D0000000055B6632D6376A2D9319F20A1C6DCCB486432D1E4A79951229D4C3DE2946F51D56662400009184E72A00081140DD319918CD5AE792BF7EC80D63B0F01B4573BBC", + "json": { + "OwnerCount": 0, + "Account": "rpGaCyHRYbgKhErgFih3RdjJqXDsYBouz3", + "PreviousTxnLgrSeq": 26725, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "B6632D6376A2D9319F20A1C6DCCB486432D1E4A79951229D4C3DE2946F51D566", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100612200000000240000000125000000082D00000000550735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E56240000002540BE400811479927BAFFD3D04A26096C0C97B1B0D45B01AD3C0", + "json": { + "OwnerCount": 0, + "Account": "rUnFEsHjxqTswbivzL2DNHBb34rhAgZZZK", + "PreviousTxnLgrSeq": 8, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "0735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E5", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110061220000000024000000012500007C3A2D0000000055FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B329032626240000002540BE4008114EEAF1EB8C85B41B32816A3B833BA6B659D6E808A", + "json": { + "OwnerCount": 0, + "Account": "r4mscDrVMQz2on2px31aV5e5ouHeRPn8oy", + "PreviousTxnLgrSeq": 31802, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000031000000000000000232000000000000000158D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A4339871011340A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA19852733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "IndexNext": "0000000000000002", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198", + "52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0" + ] + } + }, + { + "binary": "1100642200000000580AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C82142B6C42A95B3F7EE1971E4A10098E8F1B5F66AA080113806BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6CA5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00", + "json": { + "Owner": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "0AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C", + "Indexes": [ + "6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28", + "263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8", + "C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C", + "A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00" + ] + } + }, + { + "binary": "1100612200000000240000000225000027522D0000000055C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F62400000000BEBC1F68114D9CEEA2E2AD331A8D087C216284D58EBBC6780E8", + "json": { + "OwnerCount": 0, + "Account": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ", + "PreviousTxnLgrSeq": 10066, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F", + "Flags": 0, + "Sequence": 2, + "Balance": "199999990" + } + }, + { + "binary": "110072220002000025000000EF55C6A2521BBCCF13282C4FFEBC00D47BBA18C6CE5F5E4E0EFC3E3FCE364BAFC6B862800000000000000000000000000000000000000055534400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000555344000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4C38D7EA4C680000000000000000000000000005553440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 239, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "C6A2521BBCCF13282C4FFEBC00D47BBA18C6CE5F5E4E0EFC3E3FCE364BAFC6B8", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "11007222000100002500005A7937000000000000000038000000000000000055BDBDD6CCF2F8211B41072BC37E934D2270F58EA5D5F44F7CA8483CF348B9377B6280000000000000000000000000000000000000004555520000000000000000000000000000000000000000000000000166D4C71AFD498D00000000000000000000000000004555520000000000169F404D62A8D2C8EE3935F230AA60BC07919E9667800000000000000000000000000000000000000045555200000000009F17DCA26FE8C8A1B258898D533305B92DB75127", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 23161, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "EUR", + "value": "20", + "issuer": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va" + }, + "PreviousTxnID": "BDBDD6CCF2F8211B41072BC37E934D2270F58EA5D5F44F7CA8483CF348B9377B", + "Flags": 65536, + "Balance": { + "currency": "EUR", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "EUR", + "value": "0", + "issuer": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE" + } + } + }, + { + "binary": "1100612200000000240000000125000000092D00000000555D2CC18F142044F1D792DC33D82218665359979ECFD5CD29211CC9CD6704F88C6240000002540BE4008114D7C71DCDCD004AA9F6B5AB1076B9F00FD4C4337C", + "json": { + "OwnerCount": 0, + "Account": "rLCvFaWk9WkJCCyg9Byvwbe9gxn1pnMLWL", + "PreviousTxnLgrSeq": 9, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "5D2CC18F142044F1D792DC33D82218665359979ECFD5CD29211CC9CD6704F88C", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000022842D0000000055FB7889B08F6B6413E37A3FBDDA421323B2E00EC2FDDFCE7A9035A2E12CA776E86240000002540BE4008114DB330727BF6CC97F43595AEA787874C155569F77", + "json": { + "OwnerCount": 0, + "Account": "rLzpfV5BFjUmBs8Et75Wurddg4CCXFLDFU", + "PreviousTxnLgrSeq": 8836, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "FB7889B08F6B6413E37A3FBDDA421323B2E00EC2FDDFCE7A9035A2E12CA776E8", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000020592D00000000551CE378FA7D55A2F000943FBB4EE60233AECC75CDE3F2845F0B603165968D9CB462400009184E72A0008114CBA90CB3210843D0CBC018F932DB46582DA0CE84", + "json": { + "OwnerCount": 0, + "Account": "rKZig5RFv5yWAqMi9PtC5akkGpNtn3pz8A", + "PreviousTxnLgrSeq": 8281, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1CE378FA7D55A2F000943FBB4EE60233AECC75CDE3F2845F0B603165968D9CB4", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100642200000000310000000000000003320000000000000002581F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C8214A82BB90BF7031413B42E2C890827EDC2399B7BFA01134085469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D", + "json": { + "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", + "IndexNext": "0000000000000003", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000002", + "Flags": 0, + "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", + "Indexes": [ + "85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC", + "2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D" + ] + } + }, + { + "binary": "110061220000000024000000012500000EAB2D0000000055F2BA48100AAEA92FAA28718F2F3E50452D7069696FAE781FE5043552593F95A5624000246139CA80008114D77E6F927BB1B6D7F80151B0853395733B9B4BC2", + "json": { + "OwnerCount": 0, + "Account": "rLeRkwDgbPVeSakJ2uXC2eqR8NLWMvU3kN", + "PreviousTxnLgrSeq": 3755, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F2BA48100AAEA92FAA28718F2F3E50452D7069696FAE781FE5043552593F95A5", + "Flags": 0, + "Sequence": 1, + "Balance": "40000000000000" + } + }, + { + "binary": "110072220002000025000000DE557B4DEC82CF3BE513DA95C57282FBD0659E4E352BF59FA04C6C819E4BBD7CFFC5628000000000000000000000000000000000000000425443000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004254430000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA67D491C37937E080000000000000000000000000004254430000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 222, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + }, + "PreviousTxnID": "7B4DEC82CF3BE513DA95C57282FBD0659E4E352BF59FA04C6C819E4BBD7CFFC5", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "5", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110061220000000024000000012500005EA62D000000005561055B0F50077E654D61666A1A58E24C9B4FB4C2541AC09E2CA1F850C57E0C7B6240000002540BE40081148362C2AF4216ED4BFCE8B902F5398E7BE5B3E06D", + "json": { + "OwnerCount": 0, + "Account": "rUy6q3TxE4iuVWMpzycrQfD5uZok51g1cq", + "PreviousTxnLgrSeq": 24230, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "61055B0F50077E654D61666A1A58E24C9B4FB4C2541AC09E2CA1F850C57E0C7B", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110072220001000025000022BD553906085AB9862A404113E9B17BF00E796D8A80ED2B1066212AB4F00A7D7BCD1D6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C8E1BC9BF0400000000000000000000000000055534400000000002C371D25803A0BF6F37CC37F99A10EC948B876F36780000000000000000000000000000000000000005553440000000000F8B331F4AEC7900AD1B990899C54F87633EBB741", + "json": { + "PreviousTxnLgrSeq": 8893, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "25", + "issuer": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK" + }, + "PreviousTxnID": "3906085AB9862A404113E9B17BF00E796D8A80ED2B1066212AB4F00A7D7BCD1D", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7" + } + } + }, + { + "binary": "1100722200030000250000275A557AE0C1DBADD06E4150AB00E94BD5AD41A3D1E5FC852C8A6922B5EFD2E812709E6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4D1C37937E08000000000000000000000000000555344000000000058C742CF55C456DE367686CB9CED83750BD2497967D4D1C37937E080000000000000000000000000005553440000000000E8ACFC6B5EF4EA0601241525375162F43C2FF285", + "json": { + "PreviousTxnLgrSeq": 10074, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "50", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + }, + "PreviousTxnID": "7AE0C1DBADD06E4150AB00E94BD5AD41A3D1E5FC852C8A6922B5EFD2E812709E", + "Flags": 196608, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "50", + "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3" + } + } + }, + { + "binary": "11006422000000005817CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B82149BBFDA47BD85A1E2D03F9A528BC95DC20432ED6E011320571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B", + "json": { + "Owner": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B", + "Indexes": ["571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"] + } + }, + { + "binary": "110061220000000024000000012500000E982D00000000552748D2555190DD2CC803E616C5276E299841DA53FB15AA9EFBEA1003549F7DD1624000B5E620F480008114E7D24CED46262A1BD2E415E1BD89F20DDB4042F5", + "json": { + "OwnerCount": 0, + "Account": "r43mpEMKY1cVUX8k6zKXnRhZMEyPU9aHzR", + "PreviousTxnLgrSeq": 3736, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "2748D2555190DD2CC803E616C5276E299841DA53FB15AA9EFBEA1003549F7DD1", + "Flags": 0, + "Sequence": 1, + "Balance": "200000000000000" + } + }, + { + "binary": "11006122000000002400000001250000000A2D000000005526B0EFCF1501118BD60F2BCD075E18865D8660B18C6581A8DDD626FA309762576240000002540BE4008114DD21BD1EC4969F62F7EEEA4315DF8D3A84EDB4D6", + "json": { + "OwnerCount": 0, + "Account": "rMwNkcpvcJucoWbFW89EGT6TfZyGUkaGso", + "PreviousTxnLgrSeq": 10, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "26B0EFCF1501118BD60F2BCD075E18865D8660B18C6581A8DDD626FA30976257", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000225000027902D0000000155C26F87CB499395AC8CD2DEDB7E944F4F16CEE07ECA0B481F9E2536450B7CC0DA6240000002540BE3F681145EBBD3E507B0FB7C03D592FF4F27E08A28AA5C50", + "json": { + "OwnerCount": 1, + "Account": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG", + "PreviousTxnLgrSeq": 10128, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "C26F87CB499395AC8CD2DEDB7E944F4F16CEE07ECA0B481F9E2536450B7CC0DA", + "Flags": 0, + "Sequence": 2, + "Balance": "9999999990" + } + }, + { + "binary": "1100642200000000581BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1821427E48F6D22BCB31D5F3D315CC512E60EFF80673D01132026B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873", + "json": { + "Owner": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1", + "Indexes": ["26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873"] + } + }, + { + "binary": "1100612200000000240000000125000068522D0000000055DA77B52C935CB91BE7E5D62FC3D1443A4861944944B4BD097F9210320C0AD85962400009184E72A00081145729F5F4CA2268C20F391BEFF6C01C081BEC8481", + "json": { + "OwnerCount": 0, + "Account": "r3AthBf5eW4b9ujLoXNHFeeEJsK3PtJDea", + "PreviousTxnLgrSeq": 26706, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "DA77B52C935CB91BE7E5D62FC3D1443A4861944944B4BD097F9210320C0AD859", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "11006122000000002400000001250000000C2D000000005516112AA178A920DA89B5F8D9DFCBA3487A767BD612AE4AF60B214A2136F7BEF56240000000773594008114B6D460A8040B7FE414E8CA08B78546547B159CF4", + "json": { + "OwnerCount": 0, + "Account": "rHC5QwZvGxyhC75StiJwZCrfnHhtSWrr8Y", + "PreviousTxnLgrSeq": 12, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "16112AA178A920DA89B5F8D9DFCBA3487A767BD612AE4AF60B214A2136F7BEF5", + "Flags": 0, + "Sequence": 1, + "Balance": "2000000000" + } + }, + { + "binary": "1100612200000000240000000125000068B02D0000000055D51FCBB193C8B1B3B981F894E0535FD58478B1146ECCC35DB462FE0C1A6B6CB66240000002540BE4008114F1F4D84D7870FEE3304E2959059C89D1C33608B1", + "json": { + "OwnerCount": 0, + "Account": "rPhMwMcn8ewJiM6NnP6xrm9NZBbKZ57kw1", + "PreviousTxnLgrSeq": 26800, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D51FCBB193C8B1B3B981F894E0535FD58478B1146ECCC35DB462FE0C1A6B6CB6", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100642200000000310000000000000001320000000000000003581F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C8214A82BB90BF7031413B42E2C890827EDC2399B7BFA011340AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5", + "json": { + "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000003", + "Flags": 0, + "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", + "Indexes": [ + "AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF", + "142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5" + ] + } + }, + { + "binary": "1100642200000000581F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C48214A3E4374D5570FDC25AA9F856E2A6635C66E9CFA50113207D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619", + "json": { + "Owner": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4", + "Indexes": ["7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"] + } + }, + { + "binary": "1100612200000000240000000125000079CB2D0000000055D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A62400000E8D4A510008114C2225C8CBC2B6D0E53C763B53A9AC66C658A4EEC", + "json": { + "OwnerCount": 0, + "Account": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE", + "PreviousTxnLgrSeq": 31179, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000000" + } + }, + { + "binary": "1100612200000000240000000125000045222D000000005519CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA62400000001DCD6500811487057DF0267E7A0ED8E1197ADC0EF8C4471A90A8", + "json": { + "OwnerCount": 0, + "Account": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG", + "PreviousTxnLgrSeq": 17698, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA", + "Flags": 0, + "Sequence": 1, + "Balance": "500000000" + } + }, + { + "binary": "11006422000000005823E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF8214BF3389DD51B5B8CC5AEA410403036A2990896C70011340E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06", + "json": { + "Owner": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "23E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF", + "Indexes": [ + "E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714", + "F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06" + ] + } + }, + { + "binary": "11007222000100002500004ED73700000000000000003800000000000000005554FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B696780000000000000000000000000000000000000005553440000000000F182797BA121247C17BD87C4563B881EDA680521", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 20183, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + }, + "PreviousTxnID": "54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA" + } + } + }, + { + "binary": "1100722200020000250000456B37000000000000000038000000000000000055A5C133CE96EEE6769F98A24B476A2E4B7B235C64C70527D8992A54D7A96252646280000000000000000000000000000000000000004A5059000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004A505900000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0867D59550F7DCA700000000000000000000000000004A5059000000000062FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 17771, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "JPY", + "value": "0", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "PreviousTxnID": "A5C133CE96EEE6769F98A24B476A2E4B7B235C64C70527D8992A54D7A9625264", + "Flags": 131072, + "Balance": { + "currency": "JPY", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "JPY", + "value": "60000", + "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j" + } + } + }, + { + "binary": "110061220000000024000000012500000B9C2D000000005564EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B562400000021E66FB008114E4FE687C90257D3D2D694C8531CDEECBE84F3367", + "json": { + "OwnerCount": 0, + "Account": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + "PreviousTxnLgrSeq": 2972, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5", + "Flags": 0, + "Sequence": 1, + "Balance": "9100000000" + } + }, + { + "binary": "110061220000000024000000022500007A552D00000001552485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F624000002540BE3FF681142C371D25803A0BF6F37CC37F99A10EC948B876F3", + "json": { + "OwnerCount": 1, + "Account": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK", + "PreviousTxnLgrSeq": 31317, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F", + "Flags": 0, + "Sequence": 2, + "Balance": "159999999990" + } + }, + { + "binary": "11007222000100002500004124370000000000000000380000000000000000552E504E650BEE8920BF979ADBE6236C6C3F239FA2B37F22741DCFAF245091115D6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C38D7EA4C68000000000000000000000000000555344000000000027E48F6D22BCB31D5F3D315CC512E60EFF80673D6780000000000000000000000000000000000000005553440000000000550FC62003E785DC231A1058A05E56E3F09CF4E6", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 16676, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "10", + "issuer": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo" + }, + "PreviousTxnID": "2E504E650BEE8920BF979ADBE6236C6C3F239FA2B37F22741DCFAF245091115D", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV" + } + } + }, + { + "binary": "1100612200000000240000000B25000045B12D00000006554E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6624000000165A0BB9C811462FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "OwnerCount": 6, + "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", + "PreviousTxnLgrSeq": 17841, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6", + "Flags": 0, + "Sequence": 11, + "Balance": "5999999900" + } + }, + { + "binary": "110064220000000058289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA081682140B8D970A5E6BB9C50EC063E9318C7218D65ECE43011320BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD", + "json": { + "Owner": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816", + "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"] + } + }, + { + "binary": "1100612200000000240000000125000000102D000000005512B9558B22BB2DF05643B745389145A2E12A07CD9AD6AB7F653A4B24DC50B2E06240000004B9F96B00811470EFFAAE000322A78E0D9DC9081564888C256C37", + "json": { + "OwnerCount": 0, + "Account": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th", + "PreviousTxnLgrSeq": 16, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "12B9558B22BB2DF05643B745389145A2E12A07CD9AD6AB7F653A4B24DC50B2E0", + "Flags": 0, + "Sequence": 1, + "Balance": "20300000000" + } + }, + { + "binary": "110064220000000031000000000000000432000000000000000358D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A43398710113409C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4CED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "IndexNext": "0000000000000004", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000003", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C", + "ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649" + ] + } + }, + { + "binary": "110061220000000024000000012500005E762D00000000557C27C4820F6E4BA7B0698253A38410EB68D82B5433EA320848677F9B1180B4476240000002540BE400811430D253198122405C114A30ECC1DBE88C7BA15EC8", + "json": { + "OwnerCount": 0, + "Account": "rnT9PFSfAnWyj2fd7D5TCoCyCYbK4n356A", + "PreviousTxnLgrSeq": 24182, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7C27C4820F6E4BA7B0698253A38410EB68D82B5433EA320848677F9B1180B447", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000039D42D00000000551EC7E89A17180B5DBA0B15709B616CB2CD703DC54702EB5EDCB1B95F3526AAC36240000002540BE4008114A42C21956B12F80C27355C6A337C4F032C643011", + "json": { + "OwnerCount": 0, + "Account": "rEyhgkRqGdCK7nXtfmADrqWYGT6rSsYYEZ", + "PreviousTxnLgrSeq": 14804, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1EC7E89A17180B5DBA0B15709B616CB2CD703DC54702EB5EDCB1B95F3526AAC3", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110061220000000024000000042500004ED72D000000005554FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA624000048BEB9E85E28114F182797BA121247C17BD87C4563B881EDA680521", + "json": { + "OwnerCount": 0, + "Account": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA", + "PreviousTxnLgrSeq": 20183, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA", + "Flags": 0, + "Sequence": 4, + "Balance": "4998999999970" + } + }, + { + "binary": "1100612200000000240000002F25000031AE2D00000000554EF16211BE5869C19E010B639568AA335DB9D9C7D02AC952A97E314A9C04743A62400000000BFB02748114B5F762798A53D543A014CAF8B297CFF8F2F937E8", + "json": { + "OwnerCount": 0, + "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "PreviousTxnLgrSeq": 12718, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4EF16211BE5869C19E010B639568AA335DB9D9C7D02AC952A97E314A9C04743A", + "Flags": 0, + "Sequence": 47, + "Balance": "200999540" + } + }, + { + "binary": "110061220000000024000000012500000EA42D00000000552C41F6108DF7234FFA6CCE96079196CF0F0B86E988993ECC8BAD6B61F0FAEFAE6240003691D6AFC000811426822909E3F673664367E8C7537098EB4CBAA13D", + "json": { + "OwnerCount": 0, + "Account": "rhWcbzUj9SVJocfHGLn58VYzXvoVnsU44u", + "PreviousTxnLgrSeq": 3748, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "2C41F6108DF7234FFA6CCE96079196CF0F0B86E988993ECC8BAD6B61F0FAEFAE", + "Flags": 0, + "Sequence": 1, + "Balance": "60000000000000" + } + }, + { + "binary": "1100642200000000582C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A55699158282146A03714FE4B738A637A094271E0DE8414D904CFA011320F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A", + "json": { + "Owner": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582", + "Indexes": ["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A"] + } + }, + { + "binary": "110072220002000025000000F7550C3BB479DBDF48DFC99792E46DEE584545F365D04351D57480A0FBD4543980EC62800000000000000000000000000000000000000042544300000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4838D7EA4C680000000000000000000000000004254430000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA", + "json": { + "PreviousTxnLgrSeq": 247, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "0C3BB479DBDF48DFC99792E46DEE584545F365D04351D57480A0FBD4543980EC", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + } + } + }, + { + "binary": "1100642200000000364F0415EB4EA0C727582FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C7270111000000000000000000000000555344000000000002112B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0803110000000000000000000000000000000000000000041100000000000000000000000000000000000000000113205F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719", + "json": { + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "ExchangeRate": "4F0415EB4EA0C727", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", + "Indexes": ["5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719"], + "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" + } + }, + { + "binary": "1100642200000000365003BAF82D03A000582FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A0000111000000000000000000000000555344000000000002112B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0803110000000000000000000000000000000000000000041100000000000000000000000000000000000000000113205B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46", + "json": { + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "ExchangeRate": "5003BAF82D03A000", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", + "Indexes": ["5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46"], + "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" + } + }, + { + "binary": "1100612200000000240000000125000022C12D00000000551A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F446240000000160DC08081149BBFDA47BD85A1E2D03F9A528BC95DC20432ED6E", + "json": { + "OwnerCount": 0, + "Account": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i", + "PreviousTxnLgrSeq": 8897, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", + "Flags": 0, + "Sequence": 1, + "Balance": "370000000" + } + }, + { + "binary": "1100612200000000240000000125000000152D000000005507F84B7AF363F23B822105078EBE49CC18E846B23697A3652294B2CCD333ACCF6240000002540BE4008114C36A74182B6D5FB7DD17264BD52056FB45B732F9", + "json": { + "OwnerCount": 0, + "Account": "rJFGHvCtpPrftTmeNAs8bYy5xUeTaxCD5t", + "PreviousTxnLgrSeq": 21, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "07F84B7AF363F23B822105078EBE49CC18E846B23697A3652294B2CCD333ACCF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11007222000100002500000B845538C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F46280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4838D7EA4C68000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC6780000000000000000000000000000000000000004254430000000000C2659C14642A6604CE305966307E5F21817A092D", + "json": { + "PreviousTxnLgrSeq": 2948, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj" + } + } + }, + { + "binary": "1100722200030000250000104E55D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C38D7EA4C68000000000000000000000000000555344000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4C38D7EA4C680000000000000000000000000005553440000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA", + "json": { + "PreviousTxnLgrSeq": 4174, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "10", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA", + "Flags": 196608, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + } + } + }, + { + "binary": "1100642200000000583811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F68214712B799C79D1EEE3094B59EF9920C7FEB3CE4499011340F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93", + "json": { + "Owner": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "3811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F6", + "Indexes": [ + "F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06", + "B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93" + ] + } + }, + { + "binary": "11006122000000002400000001250000001C2D0000000055DA64AD82376A8162070421BBB7644282F0B012779A0DECA1FC2EF01285E9F7A06240000002540BE4008114028A5595EBD2F6069C382B641259C21D3A806A29", + "json": { + "OwnerCount": 0, + "Account": "rNSnpURu2o7mD9JPjaLsdUw2HEMx5xHzd", + "PreviousTxnLgrSeq": 28, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "DA64AD82376A8162070421BBB7644282F0B012779A0DECA1FC2EF01285E9F7A0", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000004C2D0000000055D4AFFB56DCCCB4394A067BF61EA8084E53317392732A27D021FBB6B2ED4B19B962400000746A5288008114B49B00D585F63AAB70096D8615EAEC24EE684A2C", + "json": { + "OwnerCount": 0, + "Account": "rHTxKLzRbniScyQFGMb3NodmxA848W8dKM", + "PreviousTxnLgrSeq": 76, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D4AFFB56DCCCB4394A067BF61EA8084E53317392732A27D021FBB6B2ED4B19B9", + "Flags": 0, + "Sequence": 1, + "Balance": "500000000000" + } + }, + { + "binary": "11006422000000003100000000000000023200000000000000015898082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D8214B544029B077F39117BD0C9FB2913FCE08F9345CF011340A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DBD24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE", + "json": { + "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr", + "IndexNext": "0000000000000002", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", + "Indexes": [ + "A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB", + "D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE" + ] + } + }, + { + "binary": "1100612200000000240000000125000069422D000000005562EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E0400126240005AF3107A40008114B1E47CDF535B1E23C9750FDB57C2805DD7FA072E", + "json": { + "OwnerCount": 0, + "Account": "rHDcKZgR7JDGQEe9r13UZkryEVPytV6L6F", + "PreviousTxnLgrSeq": 26946, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012", + "Flags": 0, + "Sequence": 1, + "Balance": "100000000000000" + } + }, + { + "binary": "11006122000000002400000001250000207B2D00000000554D2FA912FFA328BC36A0804E1CC9FB4A54689B1419F9D22188DA59E739578E7962400009184E72A00081149445CAC489FF48025BBBB7A2EBC1C7F2019771BC", + "json": { + "OwnerCount": 0, + "Account": "rNWzcdSkXL28MeKaPwrvR3i7yU6XoqCiZc", + "PreviousTxnLgrSeq": 8315, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4D2FA912FFA328BC36A0804E1CC9FB4A54689B1419F9D22188DA59E739578E79", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100612200000000240000000E25000000F02D0000000C550C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC2462400000012B8369BE8114E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "OwnerCount": 12, + "Account": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "PreviousTxnLgrSeq": 240, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24", + "Flags": 0, + "Sequence": 14, + "Balance": "5024999870" + } + }, + { + "binary": "1100612200000000240000000125000000202D0000000055D70ACED6430B917DBFD98F92ECC1B7222C41E0283BC5854CC064EB01288889BF6240000002540BE40081147ECB328E2AFDCDB45D94FC6856790274BE8EC14D", + "json": { + "OwnerCount": 0, + "Account": "rUZRZ2b4NyCxjHSQKiYnpBuCWkKwDWTjxw", + "PreviousTxnLgrSeq": 32, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D70ACED6430B917DBFD98F92ECC1B7222C41E0283BC5854CC064EB01288889BF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100642200000000583F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E82145EBBD3E507B0FB7C03D592FF4F27E08A28AA5C5001132073E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F", + "json": { + "Owner": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E", + "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"] + } + }, + { + "binary": "1100642200000000310000000000000001320000000000000001583F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A98214F8B331F4AEC7900AD1B990899C54F87633EBB7410113401595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714", + "json": { + "Owner": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9", + "Indexes": [ + "1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5", + "E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714" + ] + } + }, + { + "binary": "1100642200000000584235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01821480799D02FF2097DEB21F66472FCF477C36E7039F0113206C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997", + "json": { + "Owner": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01", + "Indexes": ["6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997"] + } + }, + { + "binary": "11007222000100002500000B9C5564EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B56280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4838D7EA4C68000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC6780000000000000000000000000000000000000004254430000000000E4FE687C90257D3D2D694C8531CDEECBE84F3367", + "json": { + "PreviousTxnLgrSeq": 2972, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo" + } + } + }, + { + "binary": "1100612200000000240000000225000069252D0000000055D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31624000000253FCA1B681144B3FB75933675A8C3189B3A360B4AE272272B3E2", + "json": { + "OwnerCount": 0, + "Account": "rfitr7nL7MX85LLKJce7E3ATQjSiyUPDfj", + "PreviousTxnLgrSeq": 26917, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31", + "Flags": 0, + "Sequence": 2, + "Balance": "9998999990" + } + }, + { + "binary": "110064220000000031000000000000000132000000000000000558433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC011340E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A64FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000005", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6", + "4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454" + ] + } + }, + { + "binary": "110072220002000025000027775593DDD4D2532AB1BFC2A18FB2E32542A24EA353AEDF482520792F8BCDEAA77E876280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000004A77EF82417FCC4B8D801A9D64C9070C0824E5E767D48AA87BEE538000000000000000000000000000425443000000000058C742CF55C456DE367686CB9CED83750BD24979", + "json": { + "PreviousTxnLgrSeq": 10103, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS" + }, + "PreviousTxnID": "93DDD4D2532AB1BFC2A18FB2E32542A24EA353AEDF482520792F8BCDEAA77E87", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "3", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + } + } + }, + { + "binary": "110064220000000058433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC01134042E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7CAB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C", + "AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8" + ] + } + }, + { + "binary": "11006422000000005848E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D8214F182797BA121247C17BD87C4563B881EDA68052101132025DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766", + "json": { + "Owner": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D", + "Indexes": ["25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766"] + } + }, + { + "binary": "110061220000000024000000012500000E9B2D000000005566E8E26B5D80658B19D772E9CA701F5E6101A080DA6C45B386521EE2191315EE6240005AF3107A4000811479ED4C4AF533242AF5156D67A6BF04CAFCAD4BF7", + "json": { + "OwnerCount": 0, + "Account": "rUf6pynZ8ucVj1jC9bKExQ7mb9sQFooTPK", + "PreviousTxnLgrSeq": 3739, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "66E8E26B5D80658B19D772E9CA701F5E6101A080DA6C45B386521EE2191315EE", + "Flags": 0, + "Sequence": 1, + "Balance": "100000000000000" + } + }, + { + "binary": "1100612200000000240000000125000000212D00000000554FD7B01EF2A4D4A34336DAD124D774990DBBDD097E2A4DD8E8FB992C7642DDA16240000000773594008114E7DF5D1ACB4FDF118AE260E3EDD5EEE09681FFCF", + "json": { + "OwnerCount": 0, + "Account": "r49pCti5xm7WVNceBaiz7vozvE9zUGq8z2", + "PreviousTxnLgrSeq": 33, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4FD7B01EF2A4D4A34336DAD124D774990DBBDD097E2A4DD8E8FB992C7642DDA1", + "Flags": 0, + "Sequence": 1, + "Balance": "2000000000" + } + }, + { + "binary": "1100612200000000240000000125000094F12D00000000553B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF6240000002540BE4008114D4CC8AB5B21D86A82C3E9E8D0ECF2404B77FECBA", + "json": { + "OwnerCount": 0, + "Account": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", + "PreviousTxnLgrSeq": 38129, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100642200000000583F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A98214F8B331F4AEC7900AD1B990899C54F87633EBB741011340B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B", + "json": { + "Owner": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9", + "Indexes": [ + "B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489", + "571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B" + ] + } + }, + { + "binary": "1100642200000000584EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD82142C371D25803A0BF6F37CC37F99A10EC948B876F30113201595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5", + "json": { + "Owner": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD", + "Indexes": ["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5"] + } + }, + { + "binary": "1100612200000000240000000425000022C12D00000003551A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F446240000001FBD4E1E28114F8B331F4AEC7900AD1B990899C54F87633EBB741", + "json": { + "OwnerCount": 3, + "Account": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7", + "PreviousTxnLgrSeq": 8897, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", + "Flags": 0, + "Sequence": 4, + "Balance": "8519999970" + } + }, + { + "binary": "110061220000000024000000012500003F1A2D0000000055B24159F8552C355D35E43623F0E5AD965ADBF034D482421529E2703904E1EC096240000002540BE40081145E7B112523F68D2F5E879DB4EAC51C6698A69304", + "json": { + "OwnerCount": 0, + "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", + "PreviousTxnLgrSeq": 16154, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "B24159F8552C355D35E43623F0E5AD965ADBF034D482421529E2703904E1EC09", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100722200010000250000009855DFAC2C5FBD6C6DF48E65345F7926A5F158D62C31151E9A982FDFF65BC8627B426280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D448E1BC9BF04000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC6780000000000000000000000000000000000000004254430000000000550FC62003E785DC231A1058A05E56E3F09CF4E6", + "json": { + "PreviousTxnLgrSeq": 152, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0.25", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "DFAC2C5FBD6C6DF48E65345F7926A5F158D62C31151E9A982FDFF65BC8627B42", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV" + } + } + }, + { + "binary": "1100612200000000240000002025000048992D00000002551B91A44428CA0752C4111A528AB32593852A83AB372883A46A8929FF0F06A8996240000002526FE60A81148D3A0AEF277858BD4D9751ECECD16779C0CC86D0", + "json": { + "OwnerCount": 2, + "Account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "PreviousTxnLgrSeq": 18585, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1B91A44428CA0752C4111A528AB32593852A83AB372883A46A8929FF0F06A899", + "Flags": 0, + "Sequence": 32, + "Balance": "9972999690" + } + }, + { + "binary": "110072220002000025000000E15590931F239C10EA28D263A3E09A5817818B80A8E2501930F413455CDA7D586481628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000B544029B077F39117BD0C9FB2913FCE08F9345CF67D4C38D7EA4C680000000000000000000000000005553440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 225, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr" + }, + "PreviousTxnID": "90931F239C10EA28D263A3E09A5817818B80A8E2501930F413455CDA7D586481", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110064220000000031000000000000000532000000000000000458433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC011340353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D572307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "IndexNext": "0000000000000005", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000004", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5", + "72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B" + ] + } + }, + { + "binary": "110061220000000024000000122500007E2D2D00000005552E30F12CCD06E57502C5C9E834CA8834935B7DE14C79DA9ABE72E9D508BCBCB16240000002363E7E56811458C742CF55C456DE367686CB9CED83750BD24979", + "json": { + "OwnerCount": 5, + "Account": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", + "PreviousTxnLgrSeq": 32301, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "2E30F12CCD06E57502C5C9E834CA8834935B7DE14C79DA9ABE72E9D508BCBCB1", + "Flags": 0, + "Sequence": 18, + "Balance": "9499999830" + } + }, + { + "binary": "110061220000000024000000012500004ED32D00000000553662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC92536240002D79883D20008114D99223BCD7B2E92968DC60BC9C63D1D808191FB3", + "json": { + "OwnerCount": 0, + "Account": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY", + "PreviousTxnLgrSeq": 20179, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253", + "Flags": 0, + "Sequence": 1, + "Balance": "50000000000000" + } + }, + { + "binary": "1100612200000000240000000225000022C82D000000015545CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF366240000000160DC07681142ECC94F5447A3CC1348E94C84D4677442C9E4227", + "json": { + "OwnerCount": 1, + "Account": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA", + "PreviousTxnLgrSeq": 8904, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36", + "Flags": 0, + "Sequence": 2, + "Balance": "369999990" + } + }, + { + "binary": "1100612200000000240000000125000000272D00000000554EFE780DF3B843610B1F045EC6C0D921D5EE1A2225ADD558946AD5149170BB3D6240000002540BE400811440C0D2721826B0943F973A78931C4D2546D1FF01", + "json": { + "OwnerCount": 0, + "Account": "rauPN85FeNYLBpHgJJFH6g9fYUWBmJKKhs", + "PreviousTxnLgrSeq": 39, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4EFE780DF3B843610B1F045EC6C0D921D5EE1A2225ADD558946AD5149170BB3D", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000000292D0000000055126733220B5DDAD7854EF9F763D65BCBC1BBD61FD1FEEEF9CD7356037162C33F6240000002540BE40081149D8285F4BF6E88DB66575E9462A6F9DFFF2B3280", + "json": { + "OwnerCount": 0, + "Account": "rEMqTpu21XNk62QjTgVXKDig5HUpNnHvij", + "PreviousTxnLgrSeq": 41, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "126733220B5DDAD7854EF9F763D65BCBC1BBD61FD1FEEEF9CD7356037162C33F", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110072220002000025000022C1551A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F446280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000055534400000000009BBFDA47BD85A1E2D03F9A528BC95DC20432ED6E67D4C38D7EA4C680000000000000000000000000005553440000000000F8B331F4AEC7900AD1B990899C54F87633EBB741", + "json": { + "PreviousTxnLgrSeq": 8897, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i" + }, + "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7" + } + } + }, + { + "binary": "11006122000000002400000007250000010E2D00000005559C9AF3AC76FC4626D86305D1D6082944D1E56EC92E3ECEC07503E3B26BF233B262400000012A05F1C48114A82BB90BF7031413B42E2C890827EDC2399B7BFA", + "json": { + "OwnerCount": 5, + "Account": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", + "PreviousTxnLgrSeq": 270, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "9C9AF3AC76FC4626D86305D1D6082944D1E56EC92E3ECEC07503E3B26BF233B2", + "Flags": 0, + "Sequence": 7, + "Balance": "4999999940" + } + }, + { + "binary": "11006422000000005898082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D8214B544029B077F39117BD0C9FB2913FCE08F9345CF0113209BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB", + "json": { + "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", + "Indexes": ["9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"] + } + }, + { + "binary": "110061220000000024000000052500005ADC2D0000000255F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D62400000001DCD64D88114169F404D62A8D2C8EE3935F230AA60BC07919E96", + "json": { + "OwnerCount": 2, + "Account": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va", + "PreviousTxnLgrSeq": 23260, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D", + "Flags": 0, + "Sequence": 5, + "Balance": "499999960" + } + }, + { + "binary": "110061220000000024000000042500001F352D0000000055FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D38962400000000C8458628114840CB75C9645F23054D2449DFD4BC1DD8D4FE6B0", + "json": { + "OwnerCount": 0, + "Account": "rDsDR1pFaY8Ythr8px4N98bSueixyrKvPx", + "PreviousTxnLgrSeq": 7989, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389", + "Flags": 0, + "Sequence": 4, + "Balance": "209999970" + } + }, + { + "binary": "11006F2200000000240000000825000045A23300000000000000003400000000000000005515955F0DCBF3237CE8F5ACAB92C81B4368857AF2E9BD2BC3D0C1D9CEA26F45BA50102FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A00064D4CB30E8870AE00000000000000000000000000055534400000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA086540000000002DC6C0811462FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "TakerPays": { + "currency": "USD", + "value": "31.5", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", + "PreviousTxnLgrSeq": 17826, + "BookDirectory": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", + "LedgerEntryType": "Offer", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "15955F0DCBF3237CE8F5ACAB92C81B4368857AF2E9BD2BC3D0C1D9CEA26F45BA", + "TakerGets": "3000000", + "Flags": 0, + "Sequence": 8, + "BookNode": "0000000000000000" + } + }, + { + "binary": "11006122000000002400000001250000002E2D0000000055152DB308576D51A37ADF51D121BFE1B5BB0EDD15AC22F1D45C36CAF8C88A318B62400000003B9ACA0081143339A3C2251CA81F31EC67FCB6BA026C2CECE587", + "json": { + "OwnerCount": 0, + "Account": "rnCiWCUZXAHPpEjLY1gCjtbuc9jM1jq8FD", + "PreviousTxnLgrSeq": 46, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "152DB308576D51A37ADF51D121BFE1B5BB0EDD15AC22F1D45C36CAF8C88A318B", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000" + } + }, + { + "binary": "1100722200020000250000276C55BBE44659984409F29AF04F9422A2026D4A4D4343F80F53337BF5086555A1FD076280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000055534400000000004A77EF82417FCC4B8D801A9D64C9070C0824E5E767D4D1C37937E08000000000000000000000000000555344000000000058C742CF55C456DE367686CB9CED83750BD24979", + "json": { + "PreviousTxnLgrSeq": 10092, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS" + }, + "PreviousTxnID": "BBE44659984409F29AF04F9422A2026D4A4D4343F80F53337BF5086555A1FD07", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "50", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + } + } + }, + { + "binary": "110064220000000031000000000000000332000000000000000258433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC0113406231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C735FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "IndexNext": "0000000000000003", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000002", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7", + "35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC" + ] + } + }, + { + "binary": "1100612200000000240000000125000000302D000000005564F24DBD7EEBAF80F204C70EF972EC884EF4192F0D9D579588F5DA740D7199F66240000000773594008114CC4F138AF6612C3600A82D356D346D000094A27B", + "json": { + "OwnerCount": 0, + "Account": "rKdH2TKVGjoJkrE8zQKosL2PCvG2LcPzs5", + "PreviousTxnLgrSeq": 48, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "64F24DBD7EEBAF80F204C70EF972EC884EF4192F0D9D579588F5DA740D7199F6", + "Flags": 0, + "Sequence": 1, + "Balance": "2000000000" + } + }, + { + "binary": "11006F22000000002400000007250000459B33000000000000000034000000000000000055433789526B3A7A57B6402A867815A44F1F12800E552E581FA38EC6360471E5A450102FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C72764D4871AFD498D000000000000000000000000000055534400000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA086540000000001A897A811462FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "TakerPays": { + "currency": "USD", + "value": "2", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", + "PreviousTxnLgrSeq": 17819, + "BookDirectory": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", + "LedgerEntryType": "Offer", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "433789526B3A7A57B6402A867815A44F1F12800E552E581FA38EC6360471E5A4", + "TakerGets": "1739130", + "Flags": 0, + "Sequence": 7, + "BookNode": "0000000000000000" + } + }, + { + "binary": "11006F2200000000240000000925000045AB33000000000000000034000000000000000055DAB224E1847C8F0D69F77F53F564CCCABF25BE502128B34D772B1A8BB91E613C501062AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB000064D544B088731A80000000000000000000000000004A505900000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0865D503E871B540C000000000000000000000000000555344000000000062FE474693228F7F9ED1C5EFADB3B6555FBEAFBE811462FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "TakerPays": { + "currency": "JPY", + "value": "1320", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", + "PreviousTxnLgrSeq": 17835, + "BookDirectory": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", + "LedgerEntryType": "Offer", + "OwnerNode": "0000000000000000", + "PreviousTxnID": "DAB224E1847C8F0D69F77F53F564CCCABF25BE502128B34D772B1A8BB91E613C", + "TakerGets": { + "currency": "USD", + "value": "110", + "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j" + }, + "Flags": 0, + "Sequence": 9, + "BookNode": "0000000000000000" + } + }, + { + "binary": "1100612200000000240000000125000000312D0000000055C3157F699F23C4ECBA78442D68DDCAB29AE1C54C3EC9302959939C4B34913BE86240000002540BE40081148484558E9640B69D082861AE0FC8081858FA4D45", + "json": { + "OwnerCount": 0, + "Account": "rDngjhgeQZj9FNtW8adgHvdpMJtSBMymPe", + "PreviousTxnLgrSeq": 49, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "C3157F699F23C4ECBA78442D68DDCAB29AE1C54C3EC9302959939C4B34913BE8", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110072220002000025000000F0550C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC2462800000000000000000000000000000000000000043414400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000434144000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4C38D7EA4C680000000000000000000000000004341440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 240, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "CAD", + "value": "0", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24", + "Flags": 131072, + "Balance": { + "currency": "CAD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "CAD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "11006422000000003656044364C5BB00005862AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB000001110000000000000000000000004A5059000000000002112B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0803110000000000000000000000005553440000000000041162FE474693228F7F9ED1C5EFADB3B6555FBEAFBE011320600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C", + "json": { + "TakerPaysCurrency": "0000000000000000000000004A50590000000000", + "ExchangeRate": "56044364C5BB0000", + "TakerGetsCurrency": "0000000000000000000000005553440000000000", + "TakerGetsIssuer": "62FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", + "Indexes": ["600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"], + "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" + } + }, + { + "binary": "1100612200000000240000000225000022C52D00000001558D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B46240000000160DC0768114BF3389DD51B5B8CC5AEA410403036A2990896C70", + "json": { + "OwnerCount": 1, + "Account": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6", + "PreviousTxnLgrSeq": 8901, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", + "Flags": 0, + "Sequence": 2, + "Balance": "369999990" + } + }, + { + "binary": "1100612200000000240000000225000007EA2D0000000155A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E834206240000002540BE3F681140B8D970A5E6BB9C50EC063E9318C7218D65ECE43", + "json": { + "OwnerCount": 1, + "Account": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8", + "PreviousTxnLgrSeq": 2026, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420", + "Flags": 0, + "Sequence": 2, + "Balance": "9999999990" + } + }, + { + "binary": "110072220001000025000079CB37000000000000000038000000000000000055D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B696780000000000000000000000000000000000000005553440000000000C2225C8CBC2B6D0E53C763B53A9AC66C658A4EEC", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 31179, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + }, + "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE" + } + } + }, + { + "binary": "11006122000000002400000001250000004F2D0000000055523944DE44018CB5D3F2BB38FE0F54BF3953669328CEF1CF4751E91034B553FE62400009184E72A00081143F3DDC9342B131C3B20436F75DF3D1C691A0ADCF", + "json": { + "OwnerCount": 0, + "Account": "ramPgJkA1LSLevMg2Yrs1jWbqPTsSbbYHQ", + "PreviousTxnLgrSeq": 79, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "523944DE44018CB5D3F2BB38FE0F54BF3953669328CEF1CF4751E91034B553FE", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110061220000000024000000012500000E942D0000000055D994F257D0E357601AE60B58D7066906B6112D49771AD8F0A4B27F59C74A44156240038D7EA4C6800081141DEAA7EE1C600201BDADF21B7EC549BCF9E200C9", + "json": { + "OwnerCount": 0, + "Account": "rsjB6kHDBDUw7iB5A1EVDK1WmgmR6yFKpB", + "PreviousTxnLgrSeq": 3732, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D994F257D0E357601AE60B58D7066906B6112D49771AD8F0A4B27F59C74A4415", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000000000" + } + }, + { + "binary": "110061220000000024000000012500000EA92D00000000554B03D5A4EEFCAF8ADB8488E9FD767A69C6B5AC3020E8FF2128A8CBB8A4BA0AFF6240003691D6AFC000811433F791D7AA1775BDD6DD7AD89558AFF1054C765B", + "json": { + "OwnerCount": 0, + "Account": "rnj8sNUBCw3J6sSstY9QDDoncnijFwH7Cs", + "PreviousTxnLgrSeq": 3753, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4B03D5A4EEFCAF8ADB8488E9FD767A69C6B5AC3020E8FF2128A8CBB8A4BA0AFF", + "Flags": 0, + "Sequence": 1, + "Balance": "60000000000000" + } + }, + { + "binary": "1100682200000000201A00000100201B000094000213D2BF46CA85D119A4FDF7644339663A813131C791BD21472BB85C526E9E4072F87ABA30E34F73546C514C1BD389E1A71FBC266DCED3FC1DB7A186F3F0FCF1174845284EB7F83E4AE050D7C46744FC40C7C506E2D2468F520A1CF50325406231AB7BA0D7349AEAE4337A11FDF98A60F01CEDD7CA38CE8835FE66CCA2E4B227928A2AF5AA4CD783DE0238A741BE8C0FEFCBC37E8A07C75195919F617749D02ED86485819AB0D5C6ED47FBE7513253A012431D5BDEE6E9FE19D6E39A537C72212FDCBA53BF4836310428AE05209D703DB7BA805DBD309959DDFB1A013666CADFB3B02C2420D40412CA443B8972F7EFBD79D5ABA60A68744C75689A75050ECDE3106AE60FE1A81A0AC6B45B488E4D2EEA57E9D04BBFB078B4B72837C8754599D25C4C8D3B188FC5B7DC6F0CE992BA19ED4405BA8B3399FA69485CDEDE42F1BED9E4355447EA8C6297E23798A28D4D03782CFF274C45832141D2A084C6D550251D40C6F5E3B45FD83C30ACB19688E9F482C2BC5EA99242431DDFC761266FCE88FD5FFB4B22142F2DC1D72345824169FC14971E40154268A393AC0CEC260AAB171E77992218A464B55B61046CED55778A3F23AB49908EDC310223E74F4EFFAE195602655CDAE1532980D3BAA96CBE31A35DA8D85C4187DD2DC9285168D0BEFAB23AB7AFCA6CE57645836A7238265D735DCC3318446B513D95405759044EE367DA3933F902EB71BCE9D7C1CFFE3E8843FF25A3DAD31384AB561A91F4A0F074F5210F5E6BCA7703FD3FF1D27D5E4E9768B03A9438DC39827F34E559A82FD8FE3E0894ADF122A04E1F327BA0FAB0536C023A36ADC9226411FF4C7854CB73BA7230484D3B26A4FDDF40D6608787FFB9B9324C3E40388500CAF4B3CFC4C1857A7806C421D86787B40A80A82CE9A46DBFA6423FFC1D6B0FE0E05ECA4DC379D4A24E5AB78EED5D8D54E439B3FEF555EA03AFB0D518942C42EB546934B8DD57D8C531EA1A6EDCEF3D0E2153861CFA542E2AE593B38F1793268138D0EB462E21D45F9A40A84A12F42D19E1025986FB51465C5226BFF003F5C03D25C8C2D37A82D8A389EF536CF18F58150EF09ED9B4651FA200C7CFA76186B7F418B2F3C4838EEBC34AF679AC83F04DA5E0798890BD8C632C9B184BAC912129A000C21D9C261238CFFD49B85231F8691E0B666FF1E19633C145695FB01C8FC10EA5F51CB230ABD781F6306334D83DD4BCBA16AECB9E2CF8D68D31675C4B17A7D5A3E12ABAB9C47EA48942FBEC8BE574D541EA17AFDD8A096C2C37AEB30D6C840E394E9B33F1A23B46A6E5A0B458E602E79B359B65D509275EF1F8F97C90CCA7F1538689968C94BA5F93353E57EB1B4DEF8CEA4D27D9DAF3158A0DBB68FE7FB78CD9A01E880070EE5AD3F7C172B860F0CDC80FD9750847F44BBFE0A36A6ADC1653F48EDA3DFF515ED45C5D1DB455686138BE25E0085DDB6A18232448CE2CBFC4D9DADBC2613B026A334FE234811DCC2DCF08A08EA0C5D1E13BCD5F7032C1E27F0856EA10BDCDC163DF0FB396FE2CABA31BA68967254F794A6B6ADCF83A7FFA225276F3ADF81E23E2E9DBB48B103F4F287AD901F12F3B934543752F66F62DE2F70261499879611F3536C4C9F38CFED34FA2CF03209B2601483CCE4A08D000CE4B51B851CE8AC0E426675987BE5CF803C18CBA6878132CFDF8C68056875B00E33EF08FCF7BEA2A62193C36DE3B1875EF3B9D2A566045F7A7A243BAC56BE8EC924F02339E3C76F8DC7E046F7C11AA8C342B404AF051B5585F6222321E5F5B850353C03E0D63DAF5E143040471B444ABB728254A97A57376069E1257020D5501112A14CC01E9D0F05100C957C7BEDE339E50F837C67F8F6D16F25E5D4667934137D34723750B5D9FE83166A7D6D76B36C8C179707E9AF5FBFB4F9C49CF86A9574F5D92E2A116A33BC9DE99718880289A0788D9B42F73034086D2F0EBC448F712C593A03C4BEBFB8744D3BAD3E09A20F01828A30A2F54078737CFB3DC5926C59953D554A8694EF61B3636DAC92EBD43388889E270924BD1A23B8E5507FE9926CB313EA8B1DE0448A56745323431406CA16274FD05575230980F40E49E56A104C14F1E782D1BEF983698F5D362B5F07DE0D428E8FB1C5932BE70A69CCF6DBA76107FAA3BA1007ED13DFD1AAB17FC425A10EB158125FC22191B032F57E2FA33BE3479C2BDEA11CF9E2E2EFF708B27A87B1B523A89211A029A97B7F8B3BBCA0E522BDF59E38E9A31D81BE9E992D29DE8F2D4E22A4F3D854A51048D99BABF0007FBF7B689E3E098C30203BF6D1DA3D5E331EC14DD9822393FDC141993373E998910AEBCC3A325208E6C2F5AF5F0EA89AF8E707035BB48F51EB63247C8444E30FBF1C96C82732078EF017FD24E50F153701762D1C73C1933B26C54C13B95D4F5BB231C5C6C815F1CC549BB566176C69685FAB89B2D3018B0E6978BDA0F820ECCC2812D3BCBA26B5FCD82162BE4ECFBB2B37F4202022CAE268627782C85AE0B585DEBB70A360A25325163E052DEFC778B12D6F5F3140DA9D9251250BEA2908137E2BF02B5265489682CC0767ABDDEFEF2081AA400BE22E3D86A55F1C1247128CBDD92DCD6825ABA2B1A0CF11E708D4B7A095691FA921266ACAE0C1C0131C3C3E44F97EE718CF06D477745BBC5C1E62B5FAA1E64755C4064424CDBB7213281B55264AC5EDDBF8E3C08DC9F91AC522BC27F54E6927AEBF5E99D194A57372231B580720BFF3FBF97C9012E0FE1F24B9B8B1D4B3F712E0FFD28D45AD772BB438DB55ADC3F3E10A661C2386D530E7B818D66705830E642BACFF4BD92C5D43BD66D9C88CD8F7155CD9D4239D4BFDEAE39A59D508C55E94D92C9BB4569ABCAE972A58BBE235AA15804A1A5C338A88D58105EE156E691379FF6D6700B19B81823E8F5772800F7E43049733D5B0704DD2D1FE381D698BB80DD72619EA049B105956ECD1848EFDBF1BA5AC77200254D3B200B59A520216BF52F8B33E037EF16B6EC5247FF05EE5F2D3541E4F7DDB584FDB54369D89ED8C4F169A1BAFB5B4ACAF66451AD44AFC25E52A8883AD8F7C2D92A399BD06728AB949A0C254328416DC35EC84994E022398FE3D33AA5ECFB32402F3ECE8AE5AD44795653D80F9D65AA309D29A33CC11CF9A862764981A66ECAB7CD37857F7D088AF0E670117C04855D0B5B7C7BF3BF670C2E2A623AF02AABE2F1DAC85B81B63D7BB980FAE348819D06F863296E89D4B3D48E14A5B227EC89053F8CC9FE15029E22C34C912B927195B5FA6F039200B3F9A1C9E831502C9AA22794D8CEF4C35F72399B0C4B6F42D17CFB13B3657BED7CB506DB48258ED0DC0ABE9B6D04C75030DF208BE07EECA08930F9420CF861AD268B206BFCAA3BAB1D28906E43B6C4F0297D1D6579D58109131945F850C00D65D13712F64B41B1DFD7D6649AD78B3ADDCDC0AB51FB0A2FC2811B87B783CD76B9E612B867B355FB8CC4ABDAE9FA302C532733C41B52AB5FFE439CE2133E0C5DF12A0DB86AFF23D2D0CE8ADFEABDF2E2F3F568D58DA7A1C2778CEC9F269F28CD00FE9B4811F841BEE5E3937AC81EA30D17207CEEC9832091FB2EB319E8D384357255F300CC78E82FF7ECF84949A07D7043AE67645DD0D1708ADC6F10FD8B4E1BAA925BD1919BE70DF251B192B72D5CBF1BD42C69B5F9D9E33A7B2B336FB5149DB963FC0C84EEBD4271B7DC33A79FACCDB9CD3C98F821B8C11C5F8B5CF6AEE7ADF8FA23122E2AF6BBAD77E50D077483B545A9B6EBF6ECF13FC50C43B20F1A457970C8CEFAC5C1642EA8996BBD70DD2109AAD84E4D33CD1A97F3777E49B89E8C2D06ADF2F36817BB029F52A03469B71821F6EF77B6907611486BD91A0474F4B64E36D374C2AF78ADF85BA5844EDF4E72056944015B3349532A2977B609A5BC8BD805D581B06C2423E90C618C68484166632702DB08B0184C3B2605E41DCF6ED8D6154EF0D6AC8FD7302561E69DB1A8938C0AF9CC947343D80DED6C3AEB3E66F133591E6D20412B1816EAED5AF5643CB51D06188D36294AA9758CDD76DE696BDFEC3F18EAA16C17B78E9C8C5B56FA0FEB224B579A589C983F549C01502B404586D235FBB5FECB8D1CDE64F865AA1DA2A5EC877374DE717FEBF4A0FAB3679AE0D51A0BCB4AF004228AF5DB6DBD42CD1B0415BE5A83D282F6B448A1C7E8C01A3F5D0756F393CE2D1A14073EA0E4126D0170E04FE2F9CB97EF3A3C862A6419BD4F9111CC03F4B0EB459B902B69F0A685FCB20E5ACAE24903113FF2186BF67DCAC27D3E57F3B85FECDC1C6E6C70CE26EF27136EF38C45E6794BE9A40F2FD59B8594521D4F2DA9004B493BFA87C387694111C08BDFD66E69AEE4752BCF887647702EBA5D91A05A5FAAF36A4793CF8B6292612A96539F80FEB5D67A6CABB613E7A7A119E99DFF72B7B6F67906B211F95FF679686F65EDF5E32047FEBC60C010B145685BCBD6CF1CED7E42E8950910B9DD01D0D72BBE0EA9A52464386EC04564B180267F9DE53016E25E8D8AA20F9ACCAC4E76BAE60BACC8ACA70E766DD13CB16E7A33032CA80E0F935665304CEC1E61EE9BBB4B7A51E4B2708E6E7FAB7E96BF360D0FE736D520582AE5574A9FB6D482810F37B12504C7754FB9B0368D10F116AB72EBE3F85B7715599C6F88165550F88948883D293326D7A3A37607AD7F338BFAD9143B14AACDF99F0F16C9819585903EE264DFCA996FC0E29644EB26164B7EB8D620A38925EB26EB7BFE1D0D8A9F7A3F542CA79F25443C051349F75597D2F7152FC9E0B243A0AA33B1DF2B8AD0229D6BA08129A5E1BE79EF339017234E3EA85163CFA860E378792CC9C0F97B7B6D1A67A3E10A1D19D506EF4A07784CE9BBC59E15FEB70E5BA51B37DEADE73F386F3F6C32BF01E964C21ADEA961156A05A783B441DABD6E8FB82617396E676039714CDD55530AEFE9FA1950DDFB12D19C0983655D0A7A0A2EA9F47F4621098B62BD2350E3721F6126D852E14628F75B495E772F93AB27ED7ABC015E65DAC1636C4BEE65161B0C365E54C7B4E7253D085A73850E9B09C456566B1233F7E3E99A6C8A8DAC815351CAA8647733AFCDA89242EB2E44652F1D48125B2B1D765EEC7E666CD61774A09DC5062332975B1E5BB9CEB067B4B47A15BC454EAF10F1528CDA034050E14ED6B4C7B8A69152252EB7EC5961D7F81182F42A97B32AE2CA5FF818C6D6BD1252822C9DE96412CF9C44C26E5284BAF99B7C240088590D793FB2AB3E0CFD7EC8A22771D78870FEAF902FBCA3CA47ED82D33D08A086409370EE11344E1429DC1072D053FA84C5047186E09E94152E8A8D8C7DB6156C707260A1B9C80B79C7F2916C52267925A04D24B91BCDA57189ADAF9ECA28CEB75C9DFAD092A6028FB6F9EC8B0AB1816B7446881E59BF1E5AD6A2446D0A74397534CDCB9F6B27C3846A43914FF88C1487878A608B0AF9736102EB8D561A1FB6AD0443C7EA50978129BE3013E627696E35F4A86AA2664EA6C760D8452D3D1329802051FF7D64750EF89D0FA7F52407D27DCAAD4FC9866AB3C648A6817C81ADD8E803604C3A907BB5B98D1545FED8E69542EB3CF8FD5DDE956416564946C4C731287922FA4E1E7E8F619F0A4F1BACE642D8D9C914D0A992C3F0C59D15488844223AC052BB01A3A547B2C378E11D1DBBC037F1A924A58BB3A7A5CC2E8827C0FCAB29E90F466E22AAA9E54C95D214517AE6824361CF6C4B1A1DA943E701475E1A25107B4585645A83CD942B8644C65111193DABC1D148C4CF6E182F29FEEFF9D59C9DFE325A86C127677EB619B69D8337A6924DC99541199F288095713AB9878E9CC9F459ED06E2E8AE08B3AA7059690AB7ABE9AF5E6B03F974C5B9761DF3B6A17C9223F17619A31CC7E751CA43F79FF97517A0379F9A0970BDD5D23B27C92B27A8349B9DC838C1060445D4A5F11036A1ECB731B4F1A8A2FEE68A2A9230932745154A632BE6E8BC02BDA70ACC63BA35CD5D9CB7FE8037C5E17B5A5EB24E22E303BAB86456FC00C414F274C138C4809B2C4BB1A60B824F22D13E49D8212A0EDCACC94A5DD9BA8862DEA437206E1D6D98A080FA6FC81AE907FE52632DF6D2E2D633407B98809F32B1EB0A4145385F9F81CE5F7B0BC2E1E6B0F809C983C1EECD541CDED8F7DCA5118B402156AC50F5130CC55E8A34740EF3BCEF445DE3DD4311EC37E750D62B5AA6BEBB6007D7FE652155B2B8CA52B59DC58BDF5E7F1CFDBAB1465C114335BCE962621B3B9F3E464817F7403031FB5558A2B4A514E9A35860460AD1096EBCBFF7E8C0A7086594C18BC0AA5F7CB23C1E40FF22FC133F09FE0839286B47089EA34D465C2089EC205B40604EE51725E697035DE58134B6A3CC048DB8E7F433B86C311D6226EA64BE2BA0137B818EF35BE98B3E900DA88ADB764B3E83DEE68022BD886D5CC1276B31FBBBEDA3186E5E1BDE2EEC1B8E8C9E83485A81ECBA2E8E2EF0B6A1DA4D730D863E32E2CA46FBB8415E9621799984F8269DC791F56AACAEF6CEA04C6C99450345D3D692A2F74E38B9CC161C182BB1BC23FBE8EE73A47376CD8799610ADA8509539B480BE3D9E280DB83CF2AF6DC9DB538E7AB66E8C93173DE7373DA4A616E458DF4196E140C8EFAABDF21B7D4BE9741FB0EA9CF94A19B0980A109E07D60FC009042940D79EB7A6C611FEEBD4E59049AAB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7", + "json": { + "Hashes": [ + "46CA85D119A4FDF7644339663A813131C791BD21472BB85C526E9E4072F87ABA", + "30E34F73546C514C1BD389E1A71FBC266DCED3FC1DB7A186F3F0FCF117484528", + "4EB7F83E4AE050D7C46744FC40C7C506E2D2468F520A1CF50325406231AB7BA0", + "D7349AEAE4337A11FDF98A60F01CEDD7CA38CE8835FE66CCA2E4B227928A2AF5", + "AA4CD783DE0238A741BE8C0FEFCBC37E8A07C75195919F617749D02ED8648581", + "9AB0D5C6ED47FBE7513253A012431D5BDEE6E9FE19D6E39A537C72212FDCBA53", + "BF4836310428AE05209D703DB7BA805DBD309959DDFB1A013666CADFB3B02C24", + "20D40412CA443B8972F7EFBD79D5ABA60A68744C75689A75050ECDE3106AE60F", + "E1A81A0AC6B45B488E4D2EEA57E9D04BBFB078B4B72837C8754599D25C4C8D3B", + "188FC5B7DC6F0CE992BA19ED4405BA8B3399FA69485CDEDE42F1BED9E4355447", + "EA8C6297E23798A28D4D03782CFF274C45832141D2A084C6D550251D40C6F5E3", + "B45FD83C30ACB19688E9F482C2BC5EA99242431DDFC761266FCE88FD5FFB4B22", + "142F2DC1D72345824169FC14971E40154268A393AC0CEC260AAB171E77992218", + "A464B55B61046CED55778A3F23AB49908EDC310223E74F4EFFAE195602655CDA", + "E1532980D3BAA96CBE31A35DA8D85C4187DD2DC9285168D0BEFAB23AB7AFCA6C", + "E57645836A7238265D735DCC3318446B513D95405759044EE367DA3933F902EB", + "71BCE9D7C1CFFE3E8843FF25A3DAD31384AB561A91F4A0F074F5210F5E6BCA77", + "03FD3FF1D27D5E4E9768B03A9438DC39827F34E559A82FD8FE3E0894ADF122A0", + "4E1F327BA0FAB0536C023A36ADC9226411FF4C7854CB73BA7230484D3B26A4FD", + "DF40D6608787FFB9B9324C3E40388500CAF4B3CFC4C1857A7806C421D86787B4", + "0A80A82CE9A46DBFA6423FFC1D6B0FE0E05ECA4DC379D4A24E5AB78EED5D8D54", + "E439B3FEF555EA03AFB0D518942C42EB546934B8DD57D8C531EA1A6EDCEF3D0E", + "2153861CFA542E2AE593B38F1793268138D0EB462E21D45F9A40A84A12F42D19", + "E1025986FB51465C5226BFF003F5C03D25C8C2D37A82D8A389EF536CF18F5815", + "0EF09ED9B4651FA200C7CFA76186B7F418B2F3C4838EEBC34AF679AC83F04DA5", + "E0798890BD8C632C9B184BAC912129A000C21D9C261238CFFD49B85231F8691E", + "0B666FF1E19633C145695FB01C8FC10EA5F51CB230ABD781F6306334D83DD4BC", + "BA16AECB9E2CF8D68D31675C4B17A7D5A3E12ABAB9C47EA48942FBEC8BE574D5", + "41EA17AFDD8A096C2C37AEB30D6C840E394E9B33F1A23B46A6E5A0B458E602E7", + "9B359B65D509275EF1F8F97C90CCA7F1538689968C94BA5F93353E57EB1B4DEF", + "8CEA4D27D9DAF3158A0DBB68FE7FB78CD9A01E880070EE5AD3F7C172B860F0CD", + "C80FD9750847F44BBFE0A36A6ADC1653F48EDA3DFF515ED45C5D1DB455686138", + "BE25E0085DDB6A18232448CE2CBFC4D9DADBC2613B026A334FE234811DCC2DCF", + "08A08EA0C5D1E13BCD5F7032C1E27F0856EA10BDCDC163DF0FB396FE2CABA31B", + "A68967254F794A6B6ADCF83A7FFA225276F3ADF81E23E2E9DBB48B103F4F287A", + "D901F12F3B934543752F66F62DE2F70261499879611F3536C4C9F38CFED34FA2", + "CF03209B2601483CCE4A08D000CE4B51B851CE8AC0E426675987BE5CF803C18C", + "BA6878132CFDF8C68056875B00E33EF08FCF7BEA2A62193C36DE3B1875EF3B9D", + "2A566045F7A7A243BAC56BE8EC924F02339E3C76F8DC7E046F7C11AA8C342B40", + "4AF051B5585F6222321E5F5B850353C03E0D63DAF5E143040471B444ABB72825", + "4A97A57376069E1257020D5501112A14CC01E9D0F05100C957C7BEDE339E50F8", + "37C67F8F6D16F25E5D4667934137D34723750B5D9FE83166A7D6D76B36C8C179", + "707E9AF5FBFB4F9C49CF86A9574F5D92E2A116A33BC9DE99718880289A0788D9", + "B42F73034086D2F0EBC448F712C593A03C4BEBFB8744D3BAD3E09A20F01828A3", + "0A2F54078737CFB3DC5926C59953D554A8694EF61B3636DAC92EBD43388889E2", + "70924BD1A23B8E5507FE9926CB313EA8B1DE0448A56745323431406CA16274FD", + "05575230980F40E49E56A104C14F1E782D1BEF983698F5D362B5F07DE0D428E8", + "FB1C5932BE70A69CCF6DBA76107FAA3BA1007ED13DFD1AAB17FC425A10EB1581", + "25FC22191B032F57E2FA33BE3479C2BDEA11CF9E2E2EFF708B27A87B1B523A89", + "211A029A97B7F8B3BBCA0E522BDF59E38E9A31D81BE9E992D29DE8F2D4E22A4F", + "3D854A51048D99BABF0007FBF7B689E3E098C30203BF6D1DA3D5E331EC14DD98", + "22393FDC141993373E998910AEBCC3A325208E6C2F5AF5F0EA89AF8E707035BB", + "48F51EB63247C8444E30FBF1C96C82732078EF017FD24E50F153701762D1C73C", + "1933B26C54C13B95D4F5BB231C5C6C815F1CC549BB566176C69685FAB89B2D30", + "18B0E6978BDA0F820ECCC2812D3BCBA26B5FCD82162BE4ECFBB2B37F4202022C", + "AE268627782C85AE0B585DEBB70A360A25325163E052DEFC778B12D6F5F3140D", + "A9D9251250BEA2908137E2BF02B5265489682CC0767ABDDEFEF2081AA400BE22", + "E3D86A55F1C1247128CBDD92DCD6825ABA2B1A0CF11E708D4B7A095691FA9212", + "66ACAE0C1C0131C3C3E44F97EE718CF06D477745BBC5C1E62B5FAA1E64755C40", + "64424CDBB7213281B55264AC5EDDBF8E3C08DC9F91AC522BC27F54E6927AEBF5", + "E99D194A57372231B580720BFF3FBF97C9012E0FE1F24B9B8B1D4B3F712E0FFD", + "28D45AD772BB438DB55ADC3F3E10A661C2386D530E7B818D66705830E642BACF", + "F4BD92C5D43BD66D9C88CD8F7155CD9D4239D4BFDEAE39A59D508C55E94D92C9", + "BB4569ABCAE972A58BBE235AA15804A1A5C338A88D58105EE156E691379FF6D6", + "700B19B81823E8F5772800F7E43049733D5B0704DD2D1FE381D698BB80DD7261", + "9EA049B105956ECD1848EFDBF1BA5AC77200254D3B200B59A520216BF52F8B33", + "E037EF16B6EC5247FF05EE5F2D3541E4F7DDB584FDB54369D89ED8C4F169A1BA", + "FB5B4ACAF66451AD44AFC25E52A8883AD8F7C2D92A399BD06728AB949A0C2543", + "28416DC35EC84994E022398FE3D33AA5ECFB32402F3ECE8AE5AD44795653D80F", + "9D65AA309D29A33CC11CF9A862764981A66ECAB7CD37857F7D088AF0E670117C", + "04855D0B5B7C7BF3BF670C2E2A623AF02AABE2F1DAC85B81B63D7BB980FAE348", + "819D06F863296E89D4B3D48E14A5B227EC89053F8CC9FE15029E22C34C912B92", + "7195B5FA6F039200B3F9A1C9E831502C9AA22794D8CEF4C35F72399B0C4B6F42", + "D17CFB13B3657BED7CB506DB48258ED0DC0ABE9B6D04C75030DF208BE07EECA0", + "8930F9420CF861AD268B206BFCAA3BAB1D28906E43B6C4F0297D1D6579D58109", + "131945F850C00D65D13712F64B41B1DFD7D6649AD78B3ADDCDC0AB51FB0A2FC2", + "811B87B783CD76B9E612B867B355FB8CC4ABDAE9FA302C532733C41B52AB5FFE", + "439CE2133E0C5DF12A0DB86AFF23D2D0CE8ADFEABDF2E2F3F568D58DA7A1C277", + "8CEC9F269F28CD00FE9B4811F841BEE5E3937AC81EA30D17207CEEC9832091FB", + "2EB319E8D384357255F300CC78E82FF7ECF84949A07D7043AE67645DD0D1708A", + "DC6F10FD8B4E1BAA925BD1919BE70DF251B192B72D5CBF1BD42C69B5F9D9E33A", + "7B2B336FB5149DB963FC0C84EEBD4271B7DC33A79FACCDB9CD3C98F821B8C11C", + "5F8B5CF6AEE7ADF8FA23122E2AF6BBAD77E50D077483B545A9B6EBF6ECF13FC5", + "0C43B20F1A457970C8CEFAC5C1642EA8996BBD70DD2109AAD84E4D33CD1A97F3", + "777E49B89E8C2D06ADF2F36817BB029F52A03469B71821F6EF77B6907611486B", + "D91A0474F4B64E36D374C2AF78ADF85BA5844EDF4E72056944015B3349532A29", + "77B609A5BC8BD805D581B06C2423E90C618C68484166632702DB08B0184C3B26", + "05E41DCF6ED8D6154EF0D6AC8FD7302561E69DB1A8938C0AF9CC947343D80DED", + "6C3AEB3E66F133591E6D20412B1816EAED5AF5643CB51D06188D36294AA9758C", + "DD76DE696BDFEC3F18EAA16C17B78E9C8C5B56FA0FEB224B579A589C983F549C", + "01502B404586D235FBB5FECB8D1CDE64F865AA1DA2A5EC877374DE717FEBF4A0", + "FAB3679AE0D51A0BCB4AF004228AF5DB6DBD42CD1B0415BE5A83D282F6B448A1", + "C7E8C01A3F5D0756F393CE2D1A14073EA0E4126D0170E04FE2F9CB97EF3A3C86", + "2A6419BD4F9111CC03F4B0EB459B902B69F0A685FCB20E5ACAE24903113FF218", + "6BF67DCAC27D3E57F3B85FECDC1C6E6C70CE26EF27136EF38C45E6794BE9A40F", + "2FD59B8594521D4F2DA9004B493BFA87C387694111C08BDFD66E69AEE4752BCF", + "887647702EBA5D91A05A5FAAF36A4793CF8B6292612A96539F80FEB5D67A6CAB", + "B613E7A7A119E99DFF72B7B6F67906B211F95FF679686F65EDF5E32047FEBC60", + "C010B145685BCBD6CF1CED7E42E8950910B9DD01D0D72BBE0EA9A52464386EC0", + "4564B180267F9DE53016E25E8D8AA20F9ACCAC4E76BAE60BACC8ACA70E766DD1", + "3CB16E7A33032CA80E0F935665304CEC1E61EE9BBB4B7A51E4B2708E6E7FAB7E", + "96BF360D0FE736D520582AE5574A9FB6D482810F37B12504C7754FB9B0368D10", + "F116AB72EBE3F85B7715599C6F88165550F88948883D293326D7A3A37607AD7F", + "338BFAD9143B14AACDF99F0F16C9819585903EE264DFCA996FC0E29644EB2616", + "4B7EB8D620A38925EB26EB7BFE1D0D8A9F7A3F542CA79F25443C051349F75597", + "D2F7152FC9E0B243A0AA33B1DF2B8AD0229D6BA08129A5E1BE79EF339017234E", + "3EA85163CFA860E378792CC9C0F97B7B6D1A67A3E10A1D19D506EF4A07784CE9", + "BBC59E15FEB70E5BA51B37DEADE73F386F3F6C32BF01E964C21ADEA961156A05", + "A783B441DABD6E8FB82617396E676039714CDD55530AEFE9FA1950DDFB12D19C", + "0983655D0A7A0A2EA9F47F4621098B62BD2350E3721F6126D852E14628F75B49", + "5E772F93AB27ED7ABC015E65DAC1636C4BEE65161B0C365E54C7B4E7253D085A", + "73850E9B09C456566B1233F7E3E99A6C8A8DAC815351CAA8647733AFCDA89242", + "EB2E44652F1D48125B2B1D765EEC7E666CD61774A09DC5062332975B1E5BB9CE", + "B067B4B47A15BC454EAF10F1528CDA034050E14ED6B4C7B8A69152252EB7EC59", + "61D7F81182F42A97B32AE2CA5FF818C6D6BD1252822C9DE96412CF9C44C26E52", + "84BAF99B7C240088590D793FB2AB3E0CFD7EC8A22771D78870FEAF902FBCA3CA", + "47ED82D33D08A086409370EE11344E1429DC1072D053FA84C5047186E09E9415", + "2E8A8D8C7DB6156C707260A1B9C80B79C7F2916C52267925A04D24B91BCDA571", + "89ADAF9ECA28CEB75C9DFAD092A6028FB6F9EC8B0AB1816B7446881E59BF1E5A", + "D6A2446D0A74397534CDCB9F6B27C3846A43914FF88C1487878A608B0AF97361", + "02EB8D561A1FB6AD0443C7EA50978129BE3013E627696E35F4A86AA2664EA6C7", + "60D8452D3D1329802051FF7D64750EF89D0FA7F52407D27DCAAD4FC9866AB3C6", + "48A6817C81ADD8E803604C3A907BB5B98D1545FED8E69542EB3CF8FD5DDE9564", + "16564946C4C731287922FA4E1E7E8F619F0A4F1BACE642D8D9C914D0A992C3F0", + "C59D15488844223AC052BB01A3A547B2C378E11D1DBBC037F1A924A58BB3A7A5", + "CC2E8827C0FCAB29E90F466E22AAA9E54C95D214517AE6824361CF6C4B1A1DA9", + "43E701475E1A25107B4585645A83CD942B8644C65111193DABC1D148C4CF6E18", + "2F29FEEFF9D59C9DFE325A86C127677EB619B69D8337A6924DC99541199F2880", + "95713AB9878E9CC9F459ED06E2E8AE08B3AA7059690AB7ABE9AF5E6B03F974C5", + "B9761DF3B6A17C9223F17619A31CC7E751CA43F79FF97517A0379F9A0970BDD5", + "D23B27C92B27A8349B9DC838C1060445D4A5F11036A1ECB731B4F1A8A2FEE68A", + "2A9230932745154A632BE6E8BC02BDA70ACC63BA35CD5D9CB7FE8037C5E17B5A", + "5EB24E22E303BAB86456FC00C414F274C138C4809B2C4BB1A60B824F22D13E49", + "D8212A0EDCACC94A5DD9BA8862DEA437206E1D6D98A080FA6FC81AE907FE5263", + "2DF6D2E2D633407B98809F32B1EB0A4145385F9F81CE5F7B0BC2E1E6B0F809C9", + "83C1EECD541CDED8F7DCA5118B402156AC50F5130CC55E8A34740EF3BCEF445D", + "E3DD4311EC37E750D62B5AA6BEBB6007D7FE652155B2B8CA52B59DC58BDF5E7F", + "1CFDBAB1465C114335BCE962621B3B9F3E464817F7403031FB5558A2B4A514E9", + "A35860460AD1096EBCBFF7E8C0A7086594C18BC0AA5F7CB23C1E40FF22FC133F", + "09FE0839286B47089EA34D465C2089EC205B40604EE51725E697035DE58134B6", + "A3CC048DB8E7F433B86C311D6226EA64BE2BA0137B818EF35BE98B3E900DA88A", + "DB764B3E83DEE68022BD886D5CC1276B31FBBBEDA3186E5E1BDE2EEC1B8E8C9E", + "83485A81ECBA2E8E2EF0B6A1DA4D730D863E32E2CA46FBB8415E9621799984F8", + "269DC791F56AACAEF6CEA04C6C99450345D3D692A2F74E38B9CC161C182BB1BC", + "23FBE8EE73A47376CD8799610ADA8509539B480BE3D9E280DB83CF2AF6DC9DB5", + "38E7AB66E8C93173DE7373DA4A616E458DF4196E140C8EFAABDF21B7D4BE9741", + "FB0EA9CF94A19B0980A109E07D60FC009042940D79EB7A6C611FEEBD4E59049A", + "AB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7" + ], + "LedgerEntryType": "LedgerHashes", + "Flags": 0, + "FirstLedgerSequence": 256, + "LastLedgerSequence": 37888 + } + }, + { + "binary": "110061220000000024000000012500000E9F2D00000000557B2A63FEEDB3A8ECCC0FF2A342C677804E75DCC525B1447AB36406AB0E0CFE48624000886C98B76000811475792AA81BDEBC1B7218F0F73E5BE962B9E374CE", + "json": { + "OwnerCount": 0, + "Account": "rB59DESmVnTwXd2SCy1G4ReVkP5UM7ZYcN", + "PreviousTxnLgrSeq": 3743, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7B2A63FEEDB3A8ECCC0FF2A342C677804E75DCC525B1447AB36406AB0E0CFE48", + "Flags": 0, + "Sequence": 1, + "Balance": "150000000000000" + } + }, + { + "binary": "110072220003000025000045B1370000000000000000380000000000000000554E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D66280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5038D7EA4C6800000000000000000000000000055534400000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0867D517A93C16344000000000000000000000000000555344000000000062FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 17841, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "100", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "PreviousTxnID": "4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6", + "Flags": 196608, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "666", + "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j" + } + } + }, + { + "binary": "11007222000200002500003E9D37000000000000000038000000000000000055865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946628000000000000000000000000000000000000000425443000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004254430000000000550FC62003E785DC231A1058A05E56E3F09CF4E667D4C38D7EA4C68000000000000000000000000000425443000000000080799D02FF2097DEB21F66472FCF477C36E7039F", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 16029, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV" + }, + "PreviousTxnID": "865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "10", + "issuer": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8" + } + } + }, + { + "binary": "1100612200000000240000000125000020DC2D0000000055217DF9EC25E736AF6D6A5F5DEECCD8F1E2B1CFDA65723AB6CC75D8C53D3CA98B624000B5E620F4800081145823936C23037AE05A77BEAF88D4684EA934C0E8", + "json": { + "OwnerCount": 0, + "Account": "r9ssnjg97d86PxMrjVsCAX1xE9qg8czZTu", + "PreviousTxnLgrSeq": 8412, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "217DF9EC25E736AF6D6A5F5DEECCD8F1E2B1CFDA65723AB6CC75D8C53D3CA98B", + "Flags": 0, + "Sequence": 1, + "Balance": "200000000000000" + } + }, + { + "binary": "1100612200000000240000000125000000362D000000005583F0BFD13373B83B76BDD3CB47F705791E57B43DB6D00675F9AB0C5B75698BAC6240000002540BE40081149CECBD6618C3CF4822DFE9C7B39217EF6E798B72", + "json": { + "OwnerCount": 0, + "Account": "rEJkrunCP8hpvk4ijxUgEWnxCE6iUiXxc2", + "PreviousTxnLgrSeq": 54, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "83F0BFD13373B83B76BDD3CB47F705791E57B43DB6D00675F9AB0C5B75698BAC", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11007222000100002500000B97557C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD46280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4C38D7EA4C68000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC6780000000000000000000000000000000000000004254430000000000A0B2F54B75C3D1EAC4FFC68EC03CCBB772CC1325", + "json": { + "PreviousTxnLgrSeq": 2967, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "10", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN" + } + } + }, + { + "binary": "11006422000000005872D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F8214FCD4E320A9A95903D3C787A6892B809C7F00BF02011320AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8", + "json": { + "Owner": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F", + "Indexes": ["AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"] + } + }, + { + "binary": "11007222000200002500006B1C55AAC46BD97B75B21F81B73BE6F81DF13AE4F9E83B6BD8C290894A095878158DEB6294838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000555344000000000058C742CF55C456DE367686CB9CED83750BD2497967D4C38D7EA4C6800000000000000000000000000055534400000000005EBBD3E507B0FB7C03D592FF4F27E08A28AA5C50", + "json": { + "PreviousTxnLgrSeq": 27420, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + }, + "PreviousTxnID": "AAC46BD97B75B21F81B73BE6F81DF13AE4F9E83B6BD8C290894A095878158DEB", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "-1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG" + } + } + }, + { + "binary": "1100612200000000240000000125000000382D00000000555D4529121A6F29A1390730EBF6C6DEF542A6B6B852786A4B75388DA0067EAEE46240000002540BE4008114D7C7722F339A77BB53038B1B916302DFFF1EA25C", + "json": { + "OwnerCount": 0, + "Account": "rLCAUzFMzKzcyRLa1B4LRqEMsUkYXX1LAs", + "PreviousTxnLgrSeq": 56, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "5D4529121A6F29A1390730EBF6C6DEF542A6B6B852786A4B75388DA0067EAEE4", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006422000000005877F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F58214550FC62003E785DC231A1058A05E56E3F09CF4E60113804FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E6304546C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE4199726B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610", + "json": { + "Owner": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "77F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F5", + "Indexes": [ + "4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454", + "6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997", + "26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873", + "E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610" + ] + } + }, + { + "binary": "1100642200000000588E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4821458C742CF55C456DE367686CB9CED83750BD2497901134044A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A017D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619", + "json": { + "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", + "Indexes": [ + "44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01", + "7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619" + ] + } + }, + { + "binary": "1100612200000000240000000125000000392D000000005566A8F5C59CC1C77A647CFFEE2B2CA3755E44EC02BA3BC9FDEE4A4403747B5B356240000002540BE4008114ED1E32FD10D9553CDD043AC0F4A62E04FBFC2E84", + "json": { + "OwnerCount": 0, + "Account": "r4cmKj1gK9EcNggeHMy1eqWakPBicwp69R", + "PreviousTxnLgrSeq": 57, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "66A8F5C59CC1C77A647CFFEE2B2CA3755E44EC02BA3BC9FDEE4A4403747B5B35", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100642200000000310000000000000002320000000000000001581F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C8214A82BB90BF7031413B42E2C890827EDC2399B7BFA011340E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC46935FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC", + "json": { + "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", + "IndexNext": "0000000000000002", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", + "Indexes": [ + "E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469", + "35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC" + ] + } + }, + { + "binary": "11007222000200002500007E6737000000000000000338000000000000000055A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C6294838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000555344000000000058C742CF55C456DE367686CB9CED83750BD249796780000000000000000000000000000000000000005553440000000000A3E4374D5570FDC25AA9F856E2A6635C66E9CFA5", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000003", + "PreviousTxnLgrSeq": 32359, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + }, + "PreviousTxnID": "A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "-1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd" + } + } + }, + { + "binary": "11006422000000005880AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E52198214E4FE687C90257D3D2D694C8531CDEECBE84F336701132042E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C", + "json": { + "Owner": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219", + "Indexes": ["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C"] + } + }, + { + "binary": "110061220000000024000000012500001F352D0000000055FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D38962400000049B936F808114B45254658C3762C24897587A13724DABF7F18415", + "json": { + "OwnerCount": 0, + "Account": "rHSTEtAcRZBg1SjcR4KKNQzJKF3y86MNxT", + "PreviousTxnLgrSeq": 7989, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389", + "Flags": 0, + "Sequence": 1, + "Balance": "19790000000" + } + }, + { + "binary": "11006122000000002400000001250000003C2D0000000055F26CE2140F7B9F9A0D9E17919F7E0DA9040FB5312D155E6CDA1FEDDD3FFB6F4D6240000002540BE40081142E68D54B3026C1EF1A70726EA031C9F0926E9CED", + "json": { + "OwnerCount": 0, + "Account": "rnNPCm97TBMPprUGbfwqp1VpkfHUqMeUm7", + "PreviousTxnLgrSeq": 60, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F26CE2140F7B9F9A0D9E17919F7E0DA9040FB5312D155E6CDA1FEDDD3FFB6F4D", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000003D2D00000000559D02BD8906820772FCF8A413A6BF603603A5489DE1CFE7775FDCF3691A473B646240000002540BE400811468C7AE9575D9931E496CC23F6DDE4CB570CABDD5", + "json": { + "OwnerCount": 0, + "Account": "rwZpVacRQHYArgN3NzUfuKEcRDfbdvqGMi", + "PreviousTxnLgrSeq": 61, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "9D02BD8906820772FCF8A413A6BF603603A5489DE1CFE7775FDCF3691A473B64", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110072220002000025000000F655E816716B912B1476D4DE80C872A52D148F1B0791EA7A2CEF1AF5632451FECCAD62800000000000000000000000000000000000000043414400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000434144000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4C38D7EA4C680000000000000000000000000004341440000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA", + "json": { + "PreviousTxnLgrSeq": 246, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "CAD", + "value": "0", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "E816716B912B1476D4DE80C872A52D148F1B0791EA7A2CEF1AF5632451FECCAD", + "Flags": 131072, + "Balance": { + "currency": "CAD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "CAD", + "value": "10", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + } + } + }, + { + "binary": "110061220000000024000000012500000EAF2D0000000055E6FB5CDEC11A45AF7CD9B81E8B7A5D1E85A42B8DCD9D741786588214D82E0A8A62400009184E72A0008114AF9743438C773D077D6F483C3FE68896C289CD69", + "json": { + "OwnerCount": 0, + "Account": "rHrSTVSjMsZKeZMenkpeLgHGvY5svPkRvR", + "PreviousTxnLgrSeq": 3759, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "E6FB5CDEC11A45AF7CD9B81E8B7A5D1E85A42B8DCD9D741786588214D82E0A8A", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100722200010000250000316737000000000000000038000000000000000055B9EB652FCC0BEA72F8FDDDC5A8355938084E48E6CAA4744E09E5023D64D0199E6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C38D7EA4C6800000000000000000000000000055534400000000008D3A0AEF277858BD4D9751ECECD16779C0CC86D06780000000000000000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E8", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 12647, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "10", + "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x" + }, + "PreviousTxnID": "B9EB652FCC0BEA72F8FDDDC5A8355938084E48E6CAA4744E09E5023D64D0199E", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh" + } + } + }, + { + "binary": "110061220000000024000000012500007C362D000000005510C5A4DCEF6078D1DCD654DAB48F77A7073D32981CD514669CCEFA5F409852CA6240000002540BE4008114491A65349BED002808866FD1CC72F3B912BF27EE", + "json": { + "OwnerCount": 0, + "Account": "rfCXAzsmsnqDvyQj2TxDszTsbVj5cRTXGM", + "PreviousTxnLgrSeq": 31798, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "10C5A4DCEF6078D1DCD654DAB48F77A7073D32981CD514669CCEFA5F409852CA", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100642200000000588ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A82141A5CD521A26A45FF77EA1343E25E71740344BB66011320BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD", + "json": { + "Owner": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A", + "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"] + } + }, + { + "binary": "1100642200000000588BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A450982147588B8DBDC8932DC410E8571045466C03F5A6B690113C0CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13BC683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB97669A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC61065492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E", + "json": { + "Owner": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "8BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A4509", + "Indexes": [ + "CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B", + "C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C", + "25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766", + "9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09", + "E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610", + "65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E" + ] + } + }, + { + "binary": "11006122000000002400000001250000003E2D00000000550C5C64EDBB27641A83F5DD135CD3ADFE86D311D3F466BACFEBB69EB8E8D8E60F6240000002540BE400811442151E1DA6C825C4D1078D44B9E63B6363371E49", + "json": { + "OwnerCount": 0, + "Account": "rfpQtAXgPpHNzfnAYykgT6aWa94xvTEYce", + "PreviousTxnLgrSeq": 62, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "0C5C64EDBB27641A83F5DD135CD3ADFE86D311D3F466BACFEBB69EB8E8D8E60F", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000031000000000000000532000000000000000458D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A4339871011340CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FBCEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "IndexNext": "0000000000000005", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000004", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB", + "CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF" + ] + } + }, + { + "binary": "1100642200000000310000000000000001320000000000000003588E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4821458C742CF55C456DE367686CB9CED83750BD2497901134017B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836", + "json": { + "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000003", + "Flags": 0, + "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", + "Indexes": [ + "17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036", + "F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836" + ] + } + }, + { + "binary": "1100612200000000240000000125000000552D0000000055EE8B75C4A4C54F61F1A3EE0D0BB9A712FCE18D5DFB0B8973F232EEED301ACD846240038D7EA4C680008114A920D83B36B75B2783EABED574D4D96AD1A8C03C", + "json": { + "OwnerCount": 0, + "Account": "rGRGYWLmSvPuhKm4rQV287PpJUgTB1VeD7", + "PreviousTxnLgrSeq": 85, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "EE8B75C4A4C54F61F1A3EE0D0BB9A712FCE18D5DFB0B8973F232EEED301ACD84", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000000000" + } + }, + { + "binary": "1100722200020000250000275255C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F6294838D7EA4C680000000000000000000000000004D4541000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004D45410000000000D9CEEA2E2AD331A8D087C216284D58EBBC6780E867D4838D7EA4C680000000000000000000000000004D45410000000000F7FF2D5EA6BB5C26D85343656BEEE94D74B509E0", + "json": { + "PreviousTxnLgrSeq": 10066, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "MEA", + "value": "0", + "issuer": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ" + }, + "PreviousTxnID": "C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F", + "Flags": 131072, + "Balance": { + "currency": "MEA", + "value": "-1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "MEA", + "value": "1", + "issuer": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG" + } + } + }, + { + "binary": "11006422000000005890F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD821462FE474693228F7F9ED1C5EFADB3B6555FBEAFBE0113C06BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA85F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC687195B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C", + "json": { + "Owner": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "90F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD", + "Indexes": [ + "6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28", + "A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00", + "263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8", + "5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719", + "5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46", + "600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C" + ] + } + }, + { + "binary": "1100612200000000240000000525000023192D000000025521278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D562400000025FF7A5D88114B544029B077F39117BD0C9FB2913FCE08F9345CF", + "json": { + "OwnerCount": 2, + "Account": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr", + "PreviousTxnLgrSeq": 8985, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5", + "Flags": 0, + "Sequence": 5, + "Balance": "10199999960" + } + }, + { + "binary": "1100612200000000240000000125000000412D0000000055024FF4B5506ABC1359DBFF40F783911D0E5547D29BDD857B9D8D78861CFC6BE76240000002540BE4008114E8923A64A22E8707AB3BC8A766337454B3094172", + "json": { + "OwnerCount": 0, + "Account": "r4U5AcSVABL6Ym85jB94KYnURnzkRDqh1Y", + "PreviousTxnLgrSeq": 65, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "024FF4B5506ABC1359DBFF40F783911D0E5547D29BDD857B9D8D78861CFC6BE7", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000376A2D0000000055CBF0F1AC96D1E0AA8EBA6685E085CD389D83E60BA19F141618BFFA022165EDA26240000002540BE4008114BA62AC025B12D793C3E2FD57E820E8318EB9B1C9", + "json": { + "OwnerCount": 0, + "Account": "rHzWtXTBrArrGoLDixQAgcSD2dBisM19fF", + "PreviousTxnLgrSeq": 14186, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "CBF0F1AC96D1E0AA8EBA6685E085CD389D83E60BA19F141618BFFA022165EDA2", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000525000027532D000000025547F959E260E8EEBA242DF638229E3298C8988FEAC77041D7D419C6ED835EF4A86240000002540BE3D88114E8ACFC6B5EF4EA0601241525375162F43C2FF285", + "json": { + "OwnerCount": 2, + "Account": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3", + "PreviousTxnLgrSeq": 10067, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "47F959E260E8EEBA242DF638229E3298C8988FEAC77041D7D419C6ED835EF4A8", + "Flags": 0, + "Sequence": 5, + "Balance": "9999999960" + } + }, + { + "binary": "110061220000000024000000012500000BEF2D0000000055AE5929DE1626787EF84680B4B9741D793E3294CC8DFE5C03B5C911AF7C39AD8C6240000002540BE4008114585E1F3BD02A15D6185F8BB9B57CC60DEDDB37C1", + "json": { + "OwnerCount": 0, + "Account": "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", + "PreviousTxnLgrSeq": 3055, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "AE5929DE1626787EF84680B4B9741D793E3294CC8DFE5C03B5C911AF7C39AD8C", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006422000000003100000000000000013200000000000000025898082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D8214B544029B077F39117BD0C9FB2913FCE08F9345CF011340A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA19852733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0", + "json": { + "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000002", + "Flags": 0, + "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", + "Indexes": [ + "A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198", + "52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0" + ] + } + }, + { + "binary": "110061220000000024000000032500007E672D0000000155A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C62400000001DCD64EC8114A3E4374D5570FDC25AA9F856E2A6635C66E9CFA5", + "json": { + "OwnerCount": 1, + "Account": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd", + "PreviousTxnLgrSeq": 32359, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C", + "Flags": 0, + "Sequence": 3, + "Balance": "499999980" + } + }, + { + "binary": "11006122000000002400000001250000273B2D00000000554C6DC2D608C3B0781856F42042CD33B6053FB46C673A057FB192AB4319967A0C6240000002540BE400811406644B90F5D2A144A0758A6BE1F7F61700CC6B8A", + "json": { + "OwnerCount": 0, + "Account": "r2oU84CFuT4MgmrDejBaoyHNvovpMSPiA", + "PreviousTxnLgrSeq": 10043, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4C6DC2D608C3B0781856F42042CD33B6053FB46C673A057FB192AB4319967A0C", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000685E2D00000000558439B6029A9E670D0980088928C3EE35A6C7B1D851F73E68FA7607E9C173AFA862400009184E72A0008114FA48C3F6D1B57BCFA72BAE7EA498673590E23693", + "json": { + "OwnerCount": 0, + "Account": "rPFPa8AjKofbPiYNtYqSWxYA4A9Eqrf9jG", + "PreviousTxnLgrSeq": 26718, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "8439B6029A9E670D0980088928C3EE35A6C7B1D851F73E68FA7607E9C173AFA8", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110064220000000031000000000000000232000000000000000136531AA535D3D0C000588E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4011100000000000000000000000042544300000000000211E8ACFC6B5EF4EA0601241525375162F43C2FF28503110000000000000000000000005553440000000000041158C742CF55C456DE367686CB9CED83750BD24979011340D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F525CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515", + "json": { + "TakerPaysCurrency": "0000000000000000000000004254430000000000", + "ExchangeRate": "531AA535D3D0C000", + "TakerGetsCurrency": "0000000000000000000000005553440000000000", + "IndexNext": "0000000000000002", + "TakerGetsIssuer": "58C742CF55C456DE367686CB9CED83750BD24979", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", + "Indexes": [ + "D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52", + "5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515" + ], + "TakerPaysIssuer": "E8ACFC6B5EF4EA0601241525375162F43C2FF285" + } + }, + { + "binary": "1100612200000000240000000125000000422D0000000055059D2DCA15ACF2DC3873C2A1ACF9E9309C4574FFC8DA0CEEAB6DCC746A02715762400000003B9ACA008114149B1B2B6B991AFC19AD3415BB6165438E3471EB", + "json": { + "OwnerCount": 0, + "Account": "rp1xKo4CWEzTuT2CmfHnYntKeZSf21KqKq", + "PreviousTxnLgrSeq": 66, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "059D2DCA15ACF2DC3873C2A1ACF9E9309C4574FFC8DA0CEEAB6DCC746A027157", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000" + } + }, + { + "binary": "11006122000000002400000001250000685A2D00000000551AC83C3910B20C2A8D7D9A14772F78A8F8CA87632F3EEA8EE2C9731937CF72926240002D79883D20008114AD44A3BD8E19E4DA9A92FEB5FF4688C84C52597B", + "json": { + "OwnerCount": 0, + "Account": "rGow3MKvbQJvuzPPP4vEoohGmLLZ5jXtcC", + "PreviousTxnLgrSeq": 26714, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1AC83C3910B20C2A8D7D9A14772F78A8F8CA87632F3EEA8EE2C9731937CF7292", + "Flags": 0, + "Sequence": 1, + "Balance": "50000000000000" + } + }, + { + "binary": "110061220000000024000000012500000B842D000000005538C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F46240000000135F1B408114C2659C14642A6604CE305966307E5F21817A092D", + "json": { + "OwnerCount": 0, + "Account": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj", + "PreviousTxnLgrSeq": 2948, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4", + "Flags": 0, + "Sequence": 1, + "Balance": "325000000" + } + }, + { + "binary": "11007222000100002500004ED3370000000000000000380000000000000000553662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC92536280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B696780000000000000000000000000000000000000005553440000000000D99223BCD7B2E92968DC60BC9C63D1D808191FB3", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 20179, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + }, + "PreviousTxnID": "3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY" + } + } + }, + { + "binary": "1100612200000000240000003C25000079CB2D0000000655D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A62401D17DA2410CDB281147588B8DBDC8932DC410E8571045466C03F5A6B69", + "json": { + "OwnerCount": 6, + "Account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", + "PreviousTxnLgrSeq": 31179, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", + "Flags": 0, + "Sequence": 60, + "Balance": "8188999999999410" + } + }, + { + "binary": "1100722200030000250000231255F7A5BF798499FF7862D2E5F65798673AADB6E4248D057FE100DF9DFC98A7DED66280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4838D7EA4C680000000000000000000000000004254430000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA67D4871AFD498D00000000000000000000000000004254430000000000B544029B077F39117BD0C9FB2913FCE08F9345CF", + "json": { + "PreviousTxnLgrSeq": 8978, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + }, + "PreviousTxnID": "F7A5BF798499FF7862D2E5F65798673AADB6E4248D057FE100DF9DFC98A7DED6", + "Flags": 196608, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "2", + "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr" + } + } + }, + { + "binary": "110072220002000025000000E855189DB8A6DB5160CFBD62AB7A21AFC5F4246E704A1A1B4B1DB5E23F7F4600D37E628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000C2659C14642A6604CE305966307E5F21817A092D67D4C38D7EA4C680000000000000000000000000005553440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 232, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj" + }, + "PreviousTxnID": "189DB8A6DB5160CFBD62AB7A21AFC5F4246E704A1A1B4B1DB5E23F7F4600D37E", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "1100612200000000240000000125000000FA2D0000000055DA52CF235F41B229158DB77302966E7AB04B1DFE05E3B5F4E381BC9A19FE2A306240002D79883D2000811482BB55879A01141BA8021E710BD3925192A43206", + "json": { + "OwnerCount": 0, + "Account": "rUvEG9ahtFRcdZHi3nnJeFcJWhwXQoEkbi", + "PreviousTxnLgrSeq": 250, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "DA52CF235F41B229158DB77302966E7AB04B1DFE05E3B5F4E381BC9A19FE2A30", + "Flags": 0, + "Sequence": 1, + "Balance": "50000000000000" + } + }, + { + "binary": "110064220000000058A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683821470EFFAAE000322A78E0D9DC9081564888C256C37011320E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6", + "json": { + "Owner": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683", + "Indexes": ["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6"] + } + }, + { + "binary": "1100612200000000240000000125000068542D00000000558E78494EFF840F90FEAD186E3A4374D8A82F48B512EA105B415ED0705E59B11262400009184E72A00081145268777807E2032EB76D11C0D97151CE2E8CA5E7", + "json": { + "OwnerCount": 0, + "Account": "r3WjZU5LKLmjh8ff1q2RiaPLcUJeSU414x", + "PreviousTxnLgrSeq": 26708, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "8E78494EFF840F90FEAD186E3A4374D8A82F48B512EA105B415ED0705E59B112", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110072220003000025000023195521278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D56280000000000000000000000000000000000000004341440000000000000000000000000000000000000000000000000166D4C71AFD498D00000000000000000000000000004341440000000000B544029B077F39117BD0C9FB2913FCE08F9345CF67D4C38D7EA4C680000000000000000000000000004341440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 8985, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "CAD", + "value": "20", + "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr" + }, + "PreviousTxnID": "21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5", + "Flags": 196608, + "Balance": { + "currency": "CAD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "CAD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110064220000000058A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010821450FCCA71E98DFA43305149F9F0C7897DE5A9D18C011320CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488", + "json": { + "Owner": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010", + "Indexes": ["CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"] + } + }, + { + "binary": "1100722200020000250000456937000000000000000038000000000000000055D0D1DC6636198949642D9125B5EEC51FF6AC02A47D32387CBB6AAB346FB3AFE36280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000042544300000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA0867D4CBB9551FC24000000000000000000000000000425443000000000062FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 17769, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "PreviousTxnID": "D0D1DC6636198949642D9125B5EEC51FF6AC02A47D32387CBB6AAB346FB3AFE3", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "33", + "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j" + } + } + }, + { + "binary": "1100612200000000240000000C2500005ABE2D0000000055070E052D8D38BCE690A69A25D164569315A20E29F07C9279E2F1231F4B97171162400000000BEBC19281149F17DCA26FE8C8A1B258898D533305B92DB75127", + "json": { + "OwnerCount": 0, + "Account": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE", + "PreviousTxnLgrSeq": 23230, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "070E052D8D38BCE690A69A25D164569315A20E29F07C9279E2F1231F4B971711", + "Flags": 0, + "Sequence": 12, + "Balance": "199999890" + } + }, + { + "binary": "110064220000000058A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C382149F17DCA26FE8C8A1B258898D533305B92DB75127011320116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747", + "json": { + "Owner": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3", + "Indexes": ["116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"] + } + }, + { + "binary": "110072220002000025000000E055058EC111AAF1F21207A3D87FC2AB7F841B02D95F73A37423F3119FDA65C031F7628000000000000000000000000000000000000000425443000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004254430000000000B544029B077F39117BD0C9FB2913FCE08F9345CF67D491C37937E080000000000000000000000000004254430000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 224, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr" + }, + "PreviousTxnID": "058EC111AAF1F21207A3D87FC2AB7F841B02D95F73A37423F3119FDA65C031F7", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "5", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110064220000000058AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C7210388214A0B2F54B75C3D1EAC4FFC68EC03CCBB772CC132501132072307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B", + "json": { + "Owner": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038", + "Indexes": ["72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"] + } + }, + { + "binary": "1100722200010000250000103C5599711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD13606280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D451C37937E08000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC6780000000000000000000000000000000000000004254430000000000FCD4E320A9A95903D3C787A6892B809C7F00BF02", + "json": { + "PreviousTxnLgrSeq": 4156, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0.5", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je" + } + } + }, + { + "binary": "1100612200000000240000000725000069252D0000000155D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C316240000002541B2604811427E48F6D22BCB31D5F3D315CC512E60EFF80673D", + "json": { + "OwnerCount": 1, + "Account": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo", + "PreviousTxnLgrSeq": 26917, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31", + "Flags": 0, + "Sequence": 7, + "Balance": "10000999940" + } + }, + { + "binary": "110072220002000025000000DB559A9C9267E11734F53C6B25308F03B4F99ECD3CA4CCF330C94BD94F01EFC0E0C5628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA67D4C38D7EA4C680000000000000000000000000005553440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 219, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + }, + "PreviousTxnID": "9A9C9267E11734F53C6B25308F03B4F99ECD3CA4CCF330C94BD94F01EFC0E0C5", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110064220000000031000000000000000332000000000000000258D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A4339871011340A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DBE136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "IndexNext": "0000000000000003", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000002", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB", + "E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469" + ] + } + }, + { + "binary": "1100612200000000240000000E2500007C3A2D0000000055FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262624000000BA43B737E81144A77EF82417FCC4B8D801A9D64C9070C0824E5E7", + "json": { + "OwnerCount": 0, + "Account": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS", + "PreviousTxnLgrSeq": 31802, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262", + "Flags": 0, + "Sequence": 14, + "Balance": "49999999870" + } + }, + { + "binary": "1100612200000000240000000125000068592D00000000557957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D462400009184E72A000811473B3ED1EBFF63BECF6E84D03B6A0CAF1BE8A6050", + "json": { + "OwnerCount": 0, + "Account": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy", + "PreviousTxnLgrSeq": 26713, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110064220000000058D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A433987101134010BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F", + "6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7" + ] + } + }, + { + "binary": "1100612200000000240000000125000000462D000000005517C00ADB90EE2F481FEE456FF0AFD5A991D1C13D364ED48549680646F4BBE3FF6240000002540BE4008114056A94238EA9CFE9962E8FB5D5D3D14D50196BAF", + "json": { + "OwnerCount": 0, + "Account": "rVehB9r1dWghqrzJxY2y8qTiKxMgHFtQh", + "PreviousTxnLgrSeq": 70, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "17C00ADB90EE2F481FEE456FF0AFD5A991D1C13D364ED48549680646F4BBE3FF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000058AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE148214169F404D62A8D2C8EE3935F230AA60BC07919E96011340F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747", + "json": { + "Owner": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE14", + "Indexes": [ + "F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A", + "116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747" + ] + } + }, + { + "binary": "1100642200000000581F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C8214A82BB90BF7031413B42E2C890827EDC2399B7BFA011340D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB", + "json": { + "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", + "Indexes": [ + "D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE", + "9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB" + ] + } + }, + { + "binary": "110072220002000025000022C0551DA779A65D0FAA515C2B463E353DC249EBF9A9258AF0ED668F478CF8185FDFD66280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000055534400000000002ECC94F5447A3CC1348E94C84D4677442C9E422767D4C38D7EA4C680000000000000000000000000005553440000000000F8B331F4AEC7900AD1B990899C54F87633EBB741", + "json": { + "PreviousTxnLgrSeq": 8896, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA" + }, + "PreviousTxnID": "1DA779A65D0FAA515C2B463E353DC249EBF9A9258AF0ED668F478CF8185FDFD6", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7" + } + } + }, + { + "binary": "1100612200000000240000000125000038562D0000000055C10DFDB026BBB12AC419EC8653AEB659C896FD5398F95F90FDADCBC256AA927C624000048C62D41A00811484B98A8D409C49401F237D6D988A0BAFD114F760", + "json": { + "OwnerCount": 0, + "Account": "rDa8TxBdCfokqZyyYEpGMsiKziraLtyPe8", + "PreviousTxnLgrSeq": 14422, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "C10DFDB026BBB12AC419EC8653AEB659C896FD5398F95F90FDADCBC256AA927C", + "Flags": 0, + "Sequence": 1, + "Balance": "5001000000000" + } + }, + { + "binary": "1100612200000000240000003F25000094F12D00000000553B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF62400000E484E2CC148114550FC62003E785DC231A1058A05E56E3F09CF4E6", + "json": { + "OwnerCount": 0, + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "PreviousTxnLgrSeq": 38129, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF", + "Flags": 0, + "Sequence": 63, + "Balance": "981481999380" + } + }, + { + "binary": "110061220000000024000000032500005A9A2D00000001556C2C3126A945E8371F973DAC3DF4E899C2BC8AAC51DE6748E873BBE63FCD760762400000003C33606C81146A03714FE4B738A637A094271E0DE8414D904CFA", + "json": { + "OwnerCount": 1, + "Account": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB", + "PreviousTxnLgrSeq": 23194, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "6C2C3126A945E8371F973DAC3DF4E899C2BC8AAC51DE6748E873BBE63FCD7607", + "Flags": 0, + "Sequence": 3, + "Balance": "1009999980" + } + }, + { + "binary": "1100682200000000201A00000002201B000094F00213E03F056D7738851FBD18F97540878F241406CD9500C09FA122276F76EDAC1E1D2CACECC95BC5EB4C803BB1366ED330DB5B9147AD226C2F3FED211E90DE6CC0F71352509B11298E12037FCEF95D23CB114F2D915CF10517C6AD1BC3167FCE1DC7BDED6F9F019AF5B8E05139FE9CEE935CDC23CF20DBCF9F1158E1E768ABDD69F4A0A1A2C7F4879262338CC3DFE555F95BDEAE83D7D794AA366E0F4763517BC97CE699D6FF9995F80CF77C328078F683131701DCC785432BA2667714E631B63925C9CB96E2641030BE3125203138BFB5462F6FC92301A7FEDFA4E9BE1524C88EC518680EADB49F36BD52EFC108C5A391BB6BB476ED49567890E6905F34E33DEE148BD252E148694FFF4EEB299200479B890AC44391EFA22A8B8457A284531324A7ADE096FD3D3F92D86A80587412830744FCE541D784D3B8D7A02370BF69CCC766247BA1DBD3008FC62317DCC4032DB4A977EBB6FCAB97DF52707D37B8095927A007E7E2CBE8FAFA93037CD348B557D38C522E089C2FE3630D28456393A6107B1A0318718908DB484B0240B13658A74B9C37AC5EC598259CF53EC60FA572EE5C1F498BCF4382954F0BAF03E4F41FE36F8AD27420A617DE2B83FF0E8C0A64FC657C0116F08A893C5F6BD8357E91AAEF0A5FE43CAD434ABAC2C50E12D0D1A2E8FD6AA50FAB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7E9AE4FCD90FCB2EC3ACDC586FF0745F088589FF3ED2304C2207A9AC90C53281D7E62332FDAB4CC24C84F65EFF2C56E2DFF46FAF06F1C2D06097DB371BDA055BA5DA7F596B35B93F3744C24FC24D38EB1F7C1DEE0B82D623BBABB3C7B755E84F4DB1815DC49AEC22B8D113A31C49F21E2C2E16AF90382782DB88FED3314A5852F5D325E10EC62FEEC8A81DEA67B9F6C063CC1C6AC4D9B3D50ECCF0871D7C1F77D35F2C0C7481F746806534FE07AD0079113BE3E66950E6C8E6F4EC936D0FA0A6798690C9DA76E98D1AC64016FB22409305CA8FA80DB017F21D320735FCFA5E5C2527BA3AD471083EDBADF1E16D0AAE66C523A2CA046269F5C247A0D0CF79B49D0D5425FF294972BE11A257450D0D50BF13B921468FB3CEB97F3CF72934C5D0E559B7C77B98A5F5123977EEFE8D8379E8B452EADA4C53118307D166BABFB1F67BF33D66153DFB3A5303D33D02944740E7357E9E0215B97B8BBE413174353B1814517A5E7A6F002129A90068D1C7B70EBB9FFCA5E2F5E265DAC1042C5E0270C36153DD7AE830D991E6E3D8A7CC9D01C19D1C08CC8CCEBF867125D4CB453C50378036B39622CD91CE6080C4233730E5E67AAA4F374ECFC9C9FB227DF182E3A59DC4455C43A1AE5F2F70ACEB0FA9CF4EF7C2CA9C1B3EA55D6FD2F79AA170F8BC2EDF394865D4CA990E82D2B5D3166AEC38DFE10E4EB6B52CFD17326591056D5DEAF68D34B27A33D0E9C7897AF7FE64136986EA66094796144F4ECD42ECDD517A51FAFA741432A6BDD7803DDEECD58344D760404FDEC50ADA38CA9E68AC8D1AEAAC445EFA19B907FAA27C601659A82F0F26B94AC040F88E4F7B9A684BBAE8162E3C34AD7D533B00FC59F9858D886DBFF337B6D03ABFA325397F0A522266D7837381D58C10E1A8F1D0C6E37DBCB88D98BD6F380BB62E335ECA96CA364B8D4C6EC9EC9ED1FE534EB25642A007EF9F970E0CD3B8C0C9999C37BA970389238F320764EF6B1D43B5A8D55553D40B5A98E7EA0DD650EBAB18EDA2CD6BE11EC8B21CC330CC1B75D843AC4F2D4A3ADB8485275D344D4A87BC7956F6CED377B361FB2C31EB439302C784EF08739DBDE46ED4DF42941B01591757AFCD176D9FF18C29D1FCC99F0767B1B767F8BD9882AEE899E3102433B8CAE6375564A624D4C94883CFBD0776A8EA3CBFB78A3255C4A679C42CBDEB5387D1460DE5E53FB82B1D2EFECB41ECD1A9F0188EB6FF2CBE5599599C2E963BADE3B22BD3CD39C76D59CB0FCCA2FBAD9CA3D7F45DBB723564112648198DE968DA7F517789D8F8C7D2C787EAA9A7BDC7FA5DB92EC7B02E82D4FC924A2CF62A13DB68035BD27B29ABA7E02872A2E3364691B5B2B9A177AA5092513DD872484C34393462531304E65C3D12E9208C430502953AE08E7DE50D3CC7950D189648CAE50320FDDF9E28B3B7382A84EC2F2C750F69BA97392B6F3FBB2FE83679AADAF8BE84A3352A1041B87F5DAAAA04D58D02470D41EE11403585E6FB5DE6192C919E10F81107BC5B5715684E15D8A4394DC59E9B43D9774DCC8E937CC57B3517D25409831FF31C48E4028C4E25FB5B15D51051A8215B3255E243A7F7D7DE9022C5F61D58702E99D574EC46219CC2C615BCE173AD429E6871C2A2DA2E41C9D7F7FA5250B2A4650F37446463A85E88A18922C8F1F90607D597E3A3EBD5F498C45106C21526E67A1491CA7EC83536C14815038FF8ADFC96FD6D6060009BE5D2FC0C04F2B78224F322311993F2A2B135B0E4CE49C02B50C1F99F6D38DB112CA3AAB7984F57EDD6C1946820FA96271EC1E7084233D5034D9028B140ECEA84849D936E2F2C6120C8B13CBC4B97C8840C6F62491B619F9928A954EF6772EB72B74F4ABF5A377398EF4B83EBB1DC14753F40B24CBF2E458347AB6ECB4F5CAE7671E9442EF45AE118A2FB668DAA1D4DB7784D120BFDC40355B5AA05A877C96CD89FA4F32C9E0B0844F5C3A3D5621F9A6C1C1E32D7440A5D4C59DA58C28C144DCBF337DDAB2CEB1398C523A1D27CA237AA31AC7AF2DA24A2AFA4E85DAF7919222E8825BA3B75F0565B2576753FD121EFF68DA6CEC721AF88A9C8721DD00E5922193FF0EDACCFA861C3895C69D5B4078363228FDF2FB79369A88B5F400334A708DF3F512634F61D783ED5F5869513EAD4A6FEE0C3F3EF2FD063FBCBC5F6F7EBB4F2FD246934700F320DF96EC29E2BAD58955C8BED79FE88C893CFA2229B8ACA74DC538B69EECBC9890505704544BFA19770E9B276D5657C8869FA0C5FF54EC678FEB98484F59040412045651E7E8776BB3933F3664BDD4442B0DCAFDCED05409F5F2F0E1C7F9B590286332CBAACC8CFDE9FB65C92C6885A3A09E63478395B56880BD65DCA3356EC96CEBDBEB9EECFA35484B51EE543C66A8D0E06F277281C5F3F61893980CAFCCCF3A595F50D03E275345E81D47AD19F5656795924534E16B6AF3F930610C0C98DA713ED5A77738E1C187295163ADCDF50DFAFC5B6DAF4401FBFFB4E6BA792DBD76DCE26E691B784BD7A27ABAA23B27538A9352582E055CEE9A4B996818C1FCC3954AC9E3FF5A904984D3844685BF08A51E8A532065745C1C30EC71476511A325E61A72622A61AFE77689D4267C37B0522005008FEFD4A2DEB0C071ECF5B7007D67935486DCC1BB0C21EC54D194538F8F96C6CCEE433BB3C65E7DCCB6A2C29BA7BE979747FF26C2C5C3DC1261840ED5A931AEA04680284791B7C98765E879D4F9653983E5A66815F094255E1C27F7C7327BC884C19BC36C37D41BB45D9E6F0DD32171B1E03153A51C60BEE164A8BC18DA7D46030DE3210646F17D30B1C33AA82B3A911E8204FB37CA441C5D6A05DB693B5CEF6BA6847A6F1088D3B30F93E898220F0805AD342EB1CE2E1B79D0E74C533F3354E2157FC9F9EB4DDE0E2B78044F95EC0BFD850AA7E1ECCB038BB724CA0BDA92F17A37FB06BF2E7943B107D958717068E0F0ABCA3844C24069CB9B651036E5279244202FB2EC022BBE9115CB1B5C9FFCFAB714D5D9D107359AC9FE6EDD4C5AA30C8F3BCD0C1292EA381B96F2163BA3F2C7BCD1BB6737557D6D773D6473B321069F198CA32CEEB91982EDD48C975E14D1B6BB6F9D89E50401EBBE44B859F92BAED3F3712F39EC62D4D31C3B5CBABA20B760F211848D2B91DBC81093E65476CB2A3993F365DBEE85C7180F9C5C9DE1484BEC463129DD9F3D8423EE5F71C695B9D3BE884F38C573238771A20912C888D0F5E78F605802D3284F0BC44A88312AE9AFA05444194A8C0FBE4C67873DE00943C6BFE46BF0BADC0E599193B9B280B3E4A89364152236B2EC26A12C3507BBB73000F45C66D99EAB36C71CCE074406B3DE2AAB55229C3EDBBC3C5A18E4700DE363D5E6B62872911EB287BC72F28C294BBD867A6792F50EE5B0BF99D86609240B360F841748C207B167D8DD883119D212738690AF083C1200A655E50C8CED5E050131508AE11239B9A54964487AC1A4C37D00EB65D241D53788A52018C2E64631486C47F33E0BD18F175790D5A75CD7104AC4B940BFB007D8BCCC5395A11AD09B2E082A47E89A9452F26C1448A7D2F9477EBF007A53836BF05E781C00092A1182FE8CF481F51086BE939CA03BE98108FBB70F20C703ACC725A403B511FA46DC93B469682F0720773F7795A7D502793BFF4C14EA367E45014AED8A6657B0B6CA7C8C90EA27561F5B1200D296FEF2B8D72821E4B2C7CF7EE683A29CF5D00B9BD9D0FA0D33220B1267F5F2B4AB068052EB3B437CF10403DA941B01177D7B99719DB51139CC95C818A196B4F651F274951B323BFDDD04E4766DDDF1D677B72F5D9DACD348C4E9CEC9155A4C7C1DC1200097D936010A521AFFBADD2699D37CCB574C7B497A213C9E1BA6BB137BEEFC18149959A01EA1B20EAF970E1C31EE2D50FC8A6116AEEAF7E076AA0F532532E7E00F2FB1C97766F2EA4C621E3E6E7EA2D537C4BC16289C851F45385772054EB8E480FA8FF4F1C73B15B1D4BCFEDCA38B86CA12D5253407DA51DB84F52E173F9F50CD4C33A029B1F6265B67070DA3D5B5922AF42B8525F41B70B0D500CB11E0A9A65FF7979855A327A074EB669791E0AC9FC44DF8782E97276EB844936BB8BA7EF16D52E02BB4DB0340C9F915B255DF51D876B1F3B50FBB73D5BD029DD6607D7AB223CAF21AD8D1BAD0D0FDA0029952FE27437F1B2BCB376FF19D29E0C43BBB3FD38122EB4D193AB6E7D96F7DA38C84044720A5D25CFABF3B83377A46B6F5EE32EB37EAB9628F4797E500E42FAC740E896D8696AC2C6C7C6CB6AC3C66DCACE88987B59B1CB7A0E4AA12757BC03F5D14ED09D6CD4CB8CA51EB1BBE2250FB941465D037C733BC88E978C39B6355A007386E66E8868C50A6CB2C2FE73360E47B083BCAFD9A692B6BFEBA01683DBFC2F170B7E740D423D9728969E1313E9C9BB24424A849C045206AAE3B5457747904177BBE8EB93F869D1A0234E54EE9492C15CB796B66703C0F7BA49D87BD0DF2C0CA450FF2CB0983602C0F31837F14D18DC238C0291BE45BAB61F9CC515869B6B0308C04A2EA597A51EDE1F919AD42C34744E32A12D46D8972EE7E44B63E5EE63B300CF7B5D433DCC4EDB982796A3B68C23EFB1DB8164C74A9A21B1AEF0A56ABC0632AE52285B8B270C483C7C5EFC9C290A2F6F2B7E4D7486102E722CC9664AE6C47D7FE35ECFF08919EF30B2876520B947935D00CAFBDEB2B8ED1A626F8EBA8D7BD0F9767AF2FFC62F5A64831AF9858C6AF7D4220127F39B8508389B73BAF31CB0C3193D8F2B9DB44C2168DD2A0E2632A38F4A2317900C8E0199D5410E3D8B355232E53F0F29ADB4A0D2BECAA0ABDB9C4F76C7B49D5133332C2C06D92B690626D0D6B54FAB461C4A36736F8BDF95364DBC4D594735E226649EB05458AD604B587E6C0F3C7DF04C44C99AF993AD21526AE686FC3365901DA8999C42CA4CC833B6CDDF9F38779913AA285EE0104F3E283170CA0FC78F2653FC1D3666C10AB0FE6B44818EFE913618BC30EF7E62D22829B10F0EC84F14B8DEBD5F2554E57352057AB9D4436946106493CD78CDC9BA9F9C28AC08364305E41D4891A6818ED5CB8851EBCF0A410D083BE68895CA36F7C334C28A84C2EF75CF365815DB0C5DA29E3EDBB46B9719E07B484622F17B7158503E842F3EB7700BD2EA056F77C2308BCDEB868158A277F40C954E9E22D2D206265BBCC4FCBC900A5312247DCA036128D0A8F6725393E747E5D63792F6528D17DEFB88A250528B6E09C3961809EC40ABF6E35F6ABB9F0FC1E5BBACA8E94CB6A339BB039D724A4FBF5BADCF6E0A49853B33797E9EF0D5AD3741AAAA4070731259DD46F3510B2BAA53CA03EF0C7EC2D793A8EA13651B67041E43954FD0D2BCFBE54B2D4BF5F2436A58E747AB9C5977EE0029CE8F49B3A8881D3A80A996DBE4CB6DE93C8AA6C495C6702981E16D4A483E4C74BB06CC28ABEB79EDED2A5343D52FF75E1653E98185C7398277E9B64861DAFFFE0B50B26ACD98C9183D0CD16FE210F7E9A77F7313F630A9F372924DBCA02CF84210BA9CB5E648F4C8F21D9CC2CBE72D683DFC30735D578604D2EED6338C258BF565F30320F5CE89215D1BBD028DFD315981F7420672F84D0CF35A6D02CA4D2EE3931DC193ADD06318BC435076C056004CF40390A2F762D5E203AE991B49F0ADAD787389406BC027778E6B66D8B8ADF6E68045675AA3D0BCB859422280AEAE5BB17C736E651C2DE1C59662CC592305814B5D25C69D501D13E07F0BF82526FE2681664E8F719528ACCD0785BDA00CE60001066F8E7EAF25B74C3E406E6E88E2C363BEB0B3FE8796719E0D0F35AF6B1382977A60BB5275642CC09CE9B54B3D4FB6B90F34E96C9EA29C7C19667A41475FFA614846434D56A4D224E5102EFE617DE0A3B8524535CACAE5B2C4B05DCBA6AE54802C4B6B20977608014426CA0E4EC14AA3FDFA1D9B1FFC9B2CC9CDCFFA798B6A46CCCA472B6BB700E8C4F4150208BDAD37478A894C201DEA05937B7B508AE8B3C32A02CB916439DBCE58CA63DABB611C544CA7BC3FABFCA577DDD94C15A9F9A82DFE9959B5D19301D28E08546249B948EA79E7324A5E4B8B02304C9208609C2A36D3F70EF8115743167E7EA1039C4733D7D907BB2018976D740C4383C938DCFACFC397F21653C8D73A57FB7573C7FAB2420437C6E283036F6AC8B729F238CBCC61FEC0EB5CB95EF8741BCBD27236F7BABE8DD45041E6CE9941A9F5C4D826C9A7FA04E6122418C47D4306E4C8883052C44AF37B03CAE2C0CCDA926CE080A86FDDD7BBFA79934FF895B0AEEF492000C7EDAE27EE7A656B511EACB20E92D69E6F1D307FC9314F87DE9282E791413F818791AABA4FF5129DB2C93EE68F0AF326FABCB85AA07AADB6793BBEA4F59D354E862E3823E89F56FDF1496C4D2D310130DE1DE3F9959F9C30D27C16E59FE80F0BBC2FF93D4D2FC97084ACDEE0289EA8915C5A27492594447875D8A4FD54E7AA10AC1AB16A156ED2871C2B89FB847E907F5361C89D503254D8D3D9497E8D446BB403982202D0F004CF5B8686AB36F47F27FA6F4866D4B90DB81D8E3BBD239AC8800C262718EAD1DCF7A8A193C6C9EC936EBE963E1D24EEE35BF0F061E7BCF1D35DA97818F83781C351B3CCA2D06D47798102486F33D335C0218D6FF2BA1312C969EA4106794773A59BC5596A3595BBC1693AB10BE7AED59096E9288F658CB7C8877D00E08E0E28ED9F53A0711384A13967FAA980AEE5C6812EC6D3B78AFE8B385BB343F5D97056B31D3A07B02BF02FACBFC8DDE93EFD28BBAFA00DB0EBF0F98EBA436D633C7EC029ACCAD3C10BA420CE53BEA14245DC2A30A79BE43A305EB603E780506208009FDCE2B64F4831436EFAF7F5A98B20D5676695C84B108A4B67872A70C38916704F7644B384A60794142A8C6CE6159B72A7137BF32EBA473C05E0DFD602D4FD632B4E6E14EE35B90C961E87FD85A0D79FB729D33378C0DFE46C772C7C241540A573C18FDEF97B591947988C9D6C9C1EAABB21144860D171A235F4A2C9F311D7BC3CAB11E9419E2EF09B145367D077BC65C20AA4B0728DE4D720CDBFA2127E545F29FFC264332865B962F6CEFEC9AC1EC453FE7C8541715E078EDC66774F9987E4FF2104405763F827F7A04C02684033EF0881A55218FDCD75749A7E5E4A6214893E710016BC81C46D6A93911F0C68FA129C593DA258AEC0292B3FDBF94B220D8A682F7476A00ACA23FEA85D627C05B56260AE0CBBA664AB4CD582AF997F77A0EFD9E7EE75FDFD6C262BB1366FF411E7957317696F9FEA3FA77DEEBFA2693D2C1D57BAA64CB43874EDEC4119D4436E0154B34DAF7166A2ACA9B4F5EA62E405FDC9C170BC06539BC5AFD5950598633A2270F3EBF7A583C84685CCD787E97E1F9BB6567AA7AB0572AB0244B88A784967DA23BB624952A9EA0C7C388789CD5DE174A6E0F0CC6001BC6FCC4A7B8A35B76709F373E236D3D100F777099A42263CB49FEE9896E83955A9CC87EFE254C825F25F0631760A52F8864F5A286C8787763ADA89CE5200E765E47D3C9C7BA606162D60DF71A3091894A27C850B05B33B9F7CF8DCDAD6358E0B353C083CC3922C81B4DAF4A175574C1184F530ED6C3185C9524C4905778C2B780970F8FBDA80B6D1C79FF2B9989A6368245640D92AE1A567D56DFE71C719AF4F92720101BF381A6121F8C5944E36495CFA22998367D8E168EABA03CB34535E807584491F439E5E622BC54729DFD0073F9AFB55641CAAC1DE5F0AAF0568F1319BED1A6E6234A6B6BEFBC5BCB6F39C07A8B794F84CF3F18732593E9D9F33326FE921325B30D39F26EFD93739D4D3D46B29FA77C21FFD415C52B595D8B7FD494D2EED53D929006910031144ED21F25ADDEC1F83D2CAD96445B6C4100EB1A3F77DE533167E459BE7240987F26BE436C05D7501AE3B47AF91AA80AB0905CED76219D208D262183168A84758ACCAC0173312BDFEECFEAB63748FF8B922D41A15207167D290656E1FE29EE1689F6D24AD0D3935F81902106C78EF5CC5FE2AFEEB9C20062970886FD6B6F92E309240AC25A8794E13D1FE433ECF81400230C6241689491572F2BE8BD1ADA201C755AA09FBD58B3F01C2EA9F6C38FBC30B14D0B82D30352B920416D821BE00C391A807013F678C07866B595A9AE738A8D92FB2055B39D6FF7682B02B592A670E0A0D908AC27270137D3DDBD0FF8AC0F4FFA9DB1383819C6CE28196ED5F3EDBE7A1FA94445E00C672AAC61BD41336794C6C0190BEBD34311C076BD9686BA0B1D7A043184FC37F379563ABE97A1CB7ED1E0E1101D1D35DFFD64054C91CD82925FA434C8BCBE05600DFC73AFE56518FE049B578D75BCF9C41E6F5C87BE54F76A1AE329C129D1D4FD219150B76BC704C4BDA02A86CB74ED364942FD0F3599F953BD646FA6025D5DC090C8900CADC94983F5CE315FD3F9DA2FBC43455441E5B9F43B2A852FF539818BC4D1004677EFF67EB26942E57B59A1C816DD7B023974A820CF39E5111E323B64714B71E513F32D4ADFC4020F18B45515E28DC63AEE2C3E803F3CDE5BB52DC5290D95D701A57BCC2E1AE4D627BF109801536717DCA33D1B393736F34BD413067C576A78240A96ABC7F144501F1D58899F7E6C3A846436427DA09D0958A11EF83A5E9741752B9534B1EF64034F640E653A0558B25C5B457271A496CFE0F624763DA87362626396F4BBDCDDA1988F4B0022213D725ACF50E26ED43257EDAA080E8DBAE8A6DFC1683CEFCBB1312083CAC0826CD72F17F122E8F4F53E9C4266CD2D0D10C94876CE38FDBE914590BDAE1C9E21661FC7A65FEAEEE951A73F695BDF8CA0E82FF811CD588D4769495651FDD51FE5F200713A5F9AE81B5F7089066F14642FC492CBE6568AE81B321B8C44C9BDA8AACCD0E6F2B123749CEA414AA3D569135EF8FDDB60B23A43C3F2A36AD1FBF7F0617DBBF4C10B01906A17BA83657B604945A57AF17E79FAA5ADBBB2B14726E4F2C84130D098109E4D8723BAFC4A9F08384553EC904B5A7798C9C8A1A71AF0E102EBD7DD93D412CE63E386D7221BEAB9770C22BBBC051EADE759A44C6622A0F8D2105573CD2A6494C9B983FEE0D3B02977639EE575BCD2F4EF3D4193B79BAF0D3163D935066393FEF8C2EB5543B5DCFA8FE465F85E396982E197733FE4FB9171E4649CCA3D59A391548265046059BE3788B3FF39CBF92FA677048E0DF5E7953DF0FEE769AC70228E9513CF6B1F4EBD86A1A64C6ADCCD0E66005871FE43B8F38E62A4757616C70CEE02EB2FCF9F45E4E1A43EE4C8022ABDB97333B1C891795E8244A5EA1D43139906E5CD6D9FEC177EB3D5CFD598B99599C0FCB8436D81C724EDEA609E5C5572369DCC7FD1D0986C7B82B42CC6E2D1E80A3FE8F9F96F400AA10A6BFF484F5E07D6D697152E35E3CEB3FE0ED9886E1607B77B1048D8F3BBE219C82DF2CC1800393EAD3D929299BC75BACDF70380C6C6067A33238D11A28E4ED96F099C0CE07707FECB985D4828EC48795D365B78DFABEC653071C0BF745538F694DC743AB6E9F0CF0C05833E57F6600D3DB3F247FC45C0224AD521A6CFDE6DFA90BD8F64F8649ABD6D4EE608BC3F50B42C37CE5708EF1A815211623DD2503BCFCD803762316DFEE6AD32D56CAAC1D96CB58677E893DE386D9B512AD3E4EF842488E8CD8C7AB209282D213329D2BC80AD3C1D8676AE7BC1A85B4564A95568508C40782DDC028E42FEEB78F67E5C188BD35098CC58CCDD43FB4BA51AB47EE1AC2A77EB0862FC5E6CA4319F95AA960679B572A476F8282C38F1C2823D3639C7CD3568BF877D40754C585A6A4A0CA1A57F3B8CB144A01CA1DE18E4489F85F3265799D576F322295A6229A705D212BB25C82B639A47D037B0817B883475D0C8EFBBA6764313900DCA6EEB64B195D25F089224B8DB461B306D461A6966856CC290527E7C357B2E5A0F9178C6BE1B0B566FD513C814F27A664A62827DC634658A6CCC84998154349F6080B21AB1FF1BDAF9D9C7B24984BA5E6CD06BEDD7BA7AACD9E8F6BAE1913EAAD4B52F5FEFDB3F6C69317C36658749AF39120810F566C90927A201F9281C4D652EC4DD0676A179C1B731B59FE062D6BE1198AA1483E41C38D24962B4DDB2711539404CBDD97A7393EAEC52A81E03FEB7D159D9290996BC5BFE6AA81E2AF93E3A066F2D7818A40E51FEDF35CE848023BE3330D52484130D7739C48A8EBAEFCF19F631FC06BB3C7FB5E7F00462BD6D58F5C1027B0BCDEB594FC1B97A8D4E414A0B982E3251A62419396A9D1FA8114A1A777BFD8A6CE15D9EA895737B7B3EBEFAD289AA36873E7F11EBE74D4A014B1AF8EBDC159803B911063A0E7A191BDB5F7E7F0A55F69C60BBFC262521134E71198C7EDF1465F294FDB518A9C02DEBCF75B1A24EA924059630B6634467C5AD6CCBEDB0077EF9AFFFEE695C90FC5FD33F9DDED79B78540D5FF1D4C9B2A18D2AFD5D3E0A2E7FF5F00A05554B63D5CB16236D4307C1DA72CD51DCCD1F8D454256BE6361F3B848C4423F56AAA6117797578DA5047D9C500F56FC1CD3BFCE0CB052F6EB6BC5D6BD932C29F2BB50ABE7AB7DCF1ACA12EB06E38C2B3B2C54B753A05B81F3B5E18CDE1F164F3FFCA49DD813109E8BDC408360E80BFD9CF945501BA3152FDAB719B2989946560145910EC78E8775AC2925611B580E043098816E2D8391ECF6C7333D1D31FDEF1BEFBB364250F2E73783579D3229A75B98B91582933D402914C2FFA2A95F8D358BC77E1F64DC0B37DAFF2738A915E049D5240499E46920B92564B532C67873CCFCFCFE96806BDB98DDB651A4C9C80749C79215ED8ED26BEDD10E49AB91631CCAB5A63401E5B2E5D3A53EB0891088A5F2D9364BBB6CE5B37A337D2C0660DAF9C4175E", + "json": { + "Hashes": [ + "056D7738851FBD18F97540878F241406CD9500C09FA122276F76EDAC1E1D2CAC", + "ECC95BC5EB4C803BB1366ED330DB5B9147AD226C2F3FED211E90DE6CC0F71352", + "509B11298E12037FCEF95D23CB114F2D915CF10517C6AD1BC3167FCE1DC7BDED", + "6F9F019AF5B8E05139FE9CEE935CDC23CF20DBCF9F1158E1E768ABDD69F4A0A1", + "A2C7F4879262338CC3DFE555F95BDEAE83D7D794AA366E0F4763517BC97CE699", + "D6FF9995F80CF77C328078F683131701DCC785432BA2667714E631B63925C9CB", + "96E2641030BE3125203138BFB5462F6FC92301A7FEDFA4E9BE1524C88EC51868", + "0EADB49F36BD52EFC108C5A391BB6BB476ED49567890E6905F34E33DEE148BD2", + "52E148694FFF4EEB299200479B890AC44391EFA22A8B8457A284531324A7ADE0", + "96FD3D3F92D86A80587412830744FCE541D784D3B8D7A02370BF69CCC766247B", + "A1DBD3008FC62317DCC4032DB4A977EBB6FCAB97DF52707D37B8095927A007E7", + "E2CBE8FAFA93037CD348B557D38C522E089C2FE3630D28456393A6107B1A0318", + "718908DB484B0240B13658A74B9C37AC5EC598259CF53EC60FA572EE5C1F498B", + "CF4382954F0BAF03E4F41FE36F8AD27420A617DE2B83FF0E8C0A64FC657C0116", + "F08A893C5F6BD8357E91AAEF0A5FE43CAD434ABAC2C50E12D0D1A2E8FD6AA50F", + "AB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7", + "E9AE4FCD90FCB2EC3ACDC586FF0745F088589FF3ED2304C2207A9AC90C53281D", + "7E62332FDAB4CC24C84F65EFF2C56E2DFF46FAF06F1C2D06097DB371BDA055BA", + "5DA7F596B35B93F3744C24FC24D38EB1F7C1DEE0B82D623BBABB3C7B755E84F4", + "DB1815DC49AEC22B8D113A31C49F21E2C2E16AF90382782DB88FED3314A5852F", + "5D325E10EC62FEEC8A81DEA67B9F6C063CC1C6AC4D9B3D50ECCF0871D7C1F77D", + "35F2C0C7481F746806534FE07AD0079113BE3E66950E6C8E6F4EC936D0FA0A67", + "98690C9DA76E98D1AC64016FB22409305CA8FA80DB017F21D320735FCFA5E5C2", + "527BA3AD471083EDBADF1E16D0AAE66C523A2CA046269F5C247A0D0CF79B49D0", + "D5425FF294972BE11A257450D0D50BF13B921468FB3CEB97F3CF72934C5D0E55", + "9B7C77B98A5F5123977EEFE8D8379E8B452EADA4C53118307D166BABFB1F67BF", + "33D66153DFB3A5303D33D02944740E7357E9E0215B97B8BBE413174353B18145", + "17A5E7A6F002129A90068D1C7B70EBB9FFCA5E2F5E265DAC1042C5E0270C3615", + "3DD7AE830D991E6E3D8A7CC9D01C19D1C08CC8CCEBF867125D4CB453C5037803", + "6B39622CD91CE6080C4233730E5E67AAA4F374ECFC9C9FB227DF182E3A59DC44", + "55C43A1AE5F2F70ACEB0FA9CF4EF7C2CA9C1B3EA55D6FD2F79AA170F8BC2EDF3", + "94865D4CA990E82D2B5D3166AEC38DFE10E4EB6B52CFD17326591056D5DEAF68", + "D34B27A33D0E9C7897AF7FE64136986EA66094796144F4ECD42ECDD517A51FAF", + "A741432A6BDD7803DDEECD58344D760404FDEC50ADA38CA9E68AC8D1AEAAC445", + "EFA19B907FAA27C601659A82F0F26B94AC040F88E4F7B9A684BBAE8162E3C34A", + "D7D533B00FC59F9858D886DBFF337B6D03ABFA325397F0A522266D7837381D58", + "C10E1A8F1D0C6E37DBCB88D98BD6F380BB62E335ECA96CA364B8D4C6EC9EC9ED", + "1FE534EB25642A007EF9F970E0CD3B8C0C9999C37BA970389238F320764EF6B1", + "D43B5A8D55553D40B5A98E7EA0DD650EBAB18EDA2CD6BE11EC8B21CC330CC1B7", + "5D843AC4F2D4A3ADB8485275D344D4A87BC7956F6CED377B361FB2C31EB43930", + "2C784EF08739DBDE46ED4DF42941B01591757AFCD176D9FF18C29D1FCC99F076", + "7B1B767F8BD9882AEE899E3102433B8CAE6375564A624D4C94883CFBD0776A8E", + "A3CBFB78A3255C4A679C42CBDEB5387D1460DE5E53FB82B1D2EFECB41ECD1A9F", + "0188EB6FF2CBE5599599C2E963BADE3B22BD3CD39C76D59CB0FCCA2FBAD9CA3D", + "7F45DBB723564112648198DE968DA7F517789D8F8C7D2C787EAA9A7BDC7FA5DB", + "92EC7B02E82D4FC924A2CF62A13DB68035BD27B29ABA7E02872A2E3364691B5B", + "2B9A177AA5092513DD872484C34393462531304E65C3D12E9208C430502953AE", + "08E7DE50D3CC7950D189648CAE50320FDDF9E28B3B7382A84EC2F2C750F69BA9", + "7392B6F3FBB2FE83679AADAF8BE84A3352A1041B87F5DAAAA04D58D02470D41E", + "E11403585E6FB5DE6192C919E10F81107BC5B5715684E15D8A4394DC59E9B43D", + "9774DCC8E937CC57B3517D25409831FF31C48E4028C4E25FB5B15D51051A8215", + "B3255E243A7F7D7DE9022C5F61D58702E99D574EC46219CC2C615BCE173AD429", + "E6871C2A2DA2E41C9D7F7FA5250B2A4650F37446463A85E88A18922C8F1F9060", + "7D597E3A3EBD5F498C45106C21526E67A1491CA7EC83536C14815038FF8ADFC9", + "6FD6D6060009BE5D2FC0C04F2B78224F322311993F2A2B135B0E4CE49C02B50C", + "1F99F6D38DB112CA3AAB7984F57EDD6C1946820FA96271EC1E7084233D5034D9", + "028B140ECEA84849D936E2F2C6120C8B13CBC4B97C8840C6F62491B619F9928A", + "954EF6772EB72B74F4ABF5A377398EF4B83EBB1DC14753F40B24CBF2E458347A", + "B6ECB4F5CAE7671E9442EF45AE118A2FB668DAA1D4DB7784D120BFDC40355B5A", + "A05A877C96CD89FA4F32C9E0B0844F5C3A3D5621F9A6C1C1E32D7440A5D4C59D", + "A58C28C144DCBF337DDAB2CEB1398C523A1D27CA237AA31AC7AF2DA24A2AFA4E", + "85DAF7919222E8825BA3B75F0565B2576753FD121EFF68DA6CEC721AF88A9C87", + "21DD00E5922193FF0EDACCFA861C3895C69D5B4078363228FDF2FB79369A88B5", + "F400334A708DF3F512634F61D783ED5F5869513EAD4A6FEE0C3F3EF2FD063FBC", + "BC5F6F7EBB4F2FD246934700F320DF96EC29E2BAD58955C8BED79FE88C893CFA", + "2229B8ACA74DC538B69EECBC9890505704544BFA19770E9B276D5657C8869FA0", + "C5FF54EC678FEB98484F59040412045651E7E8776BB3933F3664BDD4442B0DCA", + "FDCED05409F5F2F0E1C7F9B590286332CBAACC8CFDE9FB65C92C6885A3A09E63", + "478395B56880BD65DCA3356EC96CEBDBEB9EECFA35484B51EE543C66A8D0E06F", + "277281C5F3F61893980CAFCCCF3A595F50D03E275345E81D47AD19F565679592", + "4534E16B6AF3F930610C0C98DA713ED5A77738E1C187295163ADCDF50DFAFC5B", + "6DAF4401FBFFB4E6BA792DBD76DCE26E691B784BD7A27ABAA23B27538A935258", + "2E055CEE9A4B996818C1FCC3954AC9E3FF5A904984D3844685BF08A51E8A5320", + "65745C1C30EC71476511A325E61A72622A61AFE77689D4267C37B0522005008F", + "EFD4A2DEB0C071ECF5B7007D67935486DCC1BB0C21EC54D194538F8F96C6CCEE", + "433BB3C65E7DCCB6A2C29BA7BE979747FF26C2C5C3DC1261840ED5A931AEA046", + "80284791B7C98765E879D4F9653983E5A66815F094255E1C27F7C7327BC884C1", + "9BC36C37D41BB45D9E6F0DD32171B1E03153A51C60BEE164A8BC18DA7D46030D", + "E3210646F17D30B1C33AA82B3A911E8204FB37CA441C5D6A05DB693B5CEF6BA6", + "847A6F1088D3B30F93E898220F0805AD342EB1CE2E1B79D0E74C533F3354E215", + "7FC9F9EB4DDE0E2B78044F95EC0BFD850AA7E1ECCB038BB724CA0BDA92F17A37", + "FB06BF2E7943B107D958717068E0F0ABCA3844C24069CB9B651036E527924420", + "2FB2EC022BBE9115CB1B5C9FFCFAB714D5D9D107359AC9FE6EDD4C5AA30C8F3B", + "CD0C1292EA381B96F2163BA3F2C7BCD1BB6737557D6D773D6473B321069F198C", + "A32CEEB91982EDD48C975E14D1B6BB6F9D89E50401EBBE44B859F92BAED3F371", + "2F39EC62D4D31C3B5CBABA20B760F211848D2B91DBC81093E65476CB2A3993F3", + "65DBEE85C7180F9C5C9DE1484BEC463129DD9F3D8423EE5F71C695B9D3BE884F", + "38C573238771A20912C888D0F5E78F605802D3284F0BC44A88312AE9AFA05444", + "194A8C0FBE4C67873DE00943C6BFE46BF0BADC0E599193B9B280B3E4A8936415", + "2236B2EC26A12C3507BBB73000F45C66D99EAB36C71CCE074406B3DE2AAB5522", + "9C3EDBBC3C5A18E4700DE363D5E6B62872911EB287BC72F28C294BBD867A6792", + "F50EE5B0BF99D86609240B360F841748C207B167D8DD883119D212738690AF08", + "3C1200A655E50C8CED5E050131508AE11239B9A54964487AC1A4C37D00EB65D2", + "41D53788A52018C2E64631486C47F33E0BD18F175790D5A75CD7104AC4B940BF", + "B007D8BCCC5395A11AD09B2E082A47E89A9452F26C1448A7D2F9477EBF007A53", + "836BF05E781C00092A1182FE8CF481F51086BE939CA03BE98108FBB70F20C703", + "ACC725A403B511FA46DC93B469682F0720773F7795A7D502793BFF4C14EA367E", + "45014AED8A6657B0B6CA7C8C90EA27561F5B1200D296FEF2B8D72821E4B2C7CF", + "7EE683A29CF5D00B9BD9D0FA0D33220B1267F5F2B4AB068052EB3B437CF10403", + "DA941B01177D7B99719DB51139CC95C818A196B4F651F274951B323BFDDD04E4", + "766DDDF1D677B72F5D9DACD348C4E9CEC9155A4C7C1DC1200097D936010A521A", + "FFBADD2699D37CCB574C7B497A213C9E1BA6BB137BEEFC18149959A01EA1B20E", + "AF970E1C31EE2D50FC8A6116AEEAF7E076AA0F532532E7E00F2FB1C97766F2EA", + "4C621E3E6E7EA2D537C4BC16289C851F45385772054EB8E480FA8FF4F1C73B15", + "B1D4BCFEDCA38B86CA12D5253407DA51DB84F52E173F9F50CD4C33A029B1F626", + "5B67070DA3D5B5922AF42B8525F41B70B0D500CB11E0A9A65FF7979855A327A0", + "74EB669791E0AC9FC44DF8782E97276EB844936BB8BA7EF16D52E02BB4DB0340", + "C9F915B255DF51D876B1F3B50FBB73D5BD029DD6607D7AB223CAF21AD8D1BAD0", + "D0FDA0029952FE27437F1B2BCB376FF19D29E0C43BBB3FD38122EB4D193AB6E7", + "D96F7DA38C84044720A5D25CFABF3B83377A46B6F5EE32EB37EAB9628F4797E5", + "00E42FAC740E896D8696AC2C6C7C6CB6AC3C66DCACE88987B59B1CB7A0E4AA12", + "757BC03F5D14ED09D6CD4CB8CA51EB1BBE2250FB941465D037C733BC88E978C3", + "9B6355A007386E66E8868C50A6CB2C2FE73360E47B083BCAFD9A692B6BFEBA01", + "683DBFC2F170B7E740D423D9728969E1313E9C9BB24424A849C045206AAE3B54", + "57747904177BBE8EB93F869D1A0234E54EE9492C15CB796B66703C0F7BA49D87", + "BD0DF2C0CA450FF2CB0983602C0F31837F14D18DC238C0291BE45BAB61F9CC51", + "5869B6B0308C04A2EA597A51EDE1F919AD42C34744E32A12D46D8972EE7E44B6", + "3E5EE63B300CF7B5D433DCC4EDB982796A3B68C23EFB1DB8164C74A9A21B1AEF", + "0A56ABC0632AE52285B8B270C483C7C5EFC9C290A2F6F2B7E4D7486102E722CC", + "9664AE6C47D7FE35ECFF08919EF30B2876520B947935D00CAFBDEB2B8ED1A626", + "F8EBA8D7BD0F9767AF2FFC62F5A64831AF9858C6AF7D4220127F39B8508389B7", + "3BAF31CB0C3193D8F2B9DB44C2168DD2A0E2632A38F4A2317900C8E0199D5410", + "E3D8B355232E53F0F29ADB4A0D2BECAA0ABDB9C4F76C7B49D5133332C2C06D92", + "B690626D0D6B54FAB461C4A36736F8BDF95364DBC4D594735E226649EB05458A", + "D604B587E6C0F3C7DF04C44C99AF993AD21526AE686FC3365901DA8999C42CA4", + "CC833B6CDDF9F38779913AA285EE0104F3E283170CA0FC78F2653FC1D3666C10", + "AB0FE6B44818EFE913618BC30EF7E62D22829B10F0EC84F14B8DEBD5F2554E57", + "352057AB9D4436946106493CD78CDC9BA9F9C28AC08364305E41D4891A6818ED", + "5CB8851EBCF0A410D083BE68895CA36F7C334C28A84C2EF75CF365815DB0C5DA", + "29E3EDBB46B9719E07B484622F17B7158503E842F3EB7700BD2EA056F77C2308", + "BCDEB868158A277F40C954E9E22D2D206265BBCC4FCBC900A5312247DCA03612", + "8D0A8F6725393E747E5D63792F6528D17DEFB88A250528B6E09C3961809EC40A", + "BF6E35F6ABB9F0FC1E5BBACA8E94CB6A339BB039D724A4FBF5BADCF6E0A49853", + "B33797E9EF0D5AD3741AAAA4070731259DD46F3510B2BAA53CA03EF0C7EC2D79", + "3A8EA13651B67041E43954FD0D2BCFBE54B2D4BF5F2436A58E747AB9C5977EE0", + "029CE8F49B3A8881D3A80A996DBE4CB6DE93C8AA6C495C6702981E16D4A483E4", + "C74BB06CC28ABEB79EDED2A5343D52FF75E1653E98185C7398277E9B64861DAF", + "FFE0B50B26ACD98C9183D0CD16FE210F7E9A77F7313F630A9F372924DBCA02CF", + "84210BA9CB5E648F4C8F21D9CC2CBE72D683DFC30735D578604D2EED6338C258", + "BF565F30320F5CE89215D1BBD028DFD315981F7420672F84D0CF35A6D02CA4D2", + "EE3931DC193ADD06318BC435076C056004CF40390A2F762D5E203AE991B49F0A", + "DAD787389406BC027778E6B66D8B8ADF6E68045675AA3D0BCB859422280AEAE5", + "BB17C736E651C2DE1C59662CC592305814B5D25C69D501D13E07F0BF82526FE2", + "681664E8F719528ACCD0785BDA00CE60001066F8E7EAF25B74C3E406E6E88E2C", + "363BEB0B3FE8796719E0D0F35AF6B1382977A60BB5275642CC09CE9B54B3D4FB", + "6B90F34E96C9EA29C7C19667A41475FFA614846434D56A4D224E5102EFE617DE", + "0A3B8524535CACAE5B2C4B05DCBA6AE54802C4B6B20977608014426CA0E4EC14", + "AA3FDFA1D9B1FFC9B2CC9CDCFFA798B6A46CCCA472B6BB700E8C4F4150208BDA", + "D37478A894C201DEA05937B7B508AE8B3C32A02CB916439DBCE58CA63DABB611", + "C544CA7BC3FABFCA577DDD94C15A9F9A82DFE9959B5D19301D28E08546249B94", + "8EA79E7324A5E4B8B02304C9208609C2A36D3F70EF8115743167E7EA1039C473", + "3D7D907BB2018976D740C4383C938DCFACFC397F21653C8D73A57FB7573C7FAB", + "2420437C6E283036F6AC8B729F238CBCC61FEC0EB5CB95EF8741BCBD27236F7B", + "ABE8DD45041E6CE9941A9F5C4D826C9A7FA04E6122418C47D4306E4C8883052C", + "44AF37B03CAE2C0CCDA926CE080A86FDDD7BBFA79934FF895B0AEEF492000C7E", + "DAE27EE7A656B511EACB20E92D69E6F1D307FC9314F87DE9282E791413F81879", + "1AABA4FF5129DB2C93EE68F0AF326FABCB85AA07AADB6793BBEA4F59D354E862", + "E3823E89F56FDF1496C4D2D310130DE1DE3F9959F9C30D27C16E59FE80F0BBC2", + "FF93D4D2FC97084ACDEE0289EA8915C5A27492594447875D8A4FD54E7AA10AC1", + "AB16A156ED2871C2B89FB847E907F5361C89D503254D8D3D9497E8D446BB4039", + "82202D0F004CF5B8686AB36F47F27FA6F4866D4B90DB81D8E3BBD239AC8800C2", + "62718EAD1DCF7A8A193C6C9EC936EBE963E1D24EEE35BF0F061E7BCF1D35DA97", + "818F83781C351B3CCA2D06D47798102486F33D335C0218D6FF2BA1312C969EA4", + "106794773A59BC5596A3595BBC1693AB10BE7AED59096E9288F658CB7C8877D0", + "0E08E0E28ED9F53A0711384A13967FAA980AEE5C6812EC6D3B78AFE8B385BB34", + "3F5D97056B31D3A07B02BF02FACBFC8DDE93EFD28BBAFA00DB0EBF0F98EBA436", + "D633C7EC029ACCAD3C10BA420CE53BEA14245DC2A30A79BE43A305EB603E7805", + "06208009FDCE2B64F4831436EFAF7F5A98B20D5676695C84B108A4B67872A70C", + "38916704F7644B384A60794142A8C6CE6159B72A7137BF32EBA473C05E0DFD60", + "2D4FD632B4E6E14EE35B90C961E87FD85A0D79FB729D33378C0DFE46C772C7C2", + "41540A573C18FDEF97B591947988C9D6C9C1EAABB21144860D171A235F4A2C9F", + "311D7BC3CAB11E9419E2EF09B145367D077BC65C20AA4B0728DE4D720CDBFA21", + "27E545F29FFC264332865B962F6CEFEC9AC1EC453FE7C8541715E078EDC66774", + "F9987E4FF2104405763F827F7A04C02684033EF0881A55218FDCD75749A7E5E4", + "A6214893E710016BC81C46D6A93911F0C68FA129C593DA258AEC0292B3FDBF94", + "B220D8A682F7476A00ACA23FEA85D627C05B56260AE0CBBA664AB4CD582AF997", + "F77A0EFD9E7EE75FDFD6C262BB1366FF411E7957317696F9FEA3FA77DEEBFA26", + "93D2C1D57BAA64CB43874EDEC4119D4436E0154B34DAF7166A2ACA9B4F5EA62E", + "405FDC9C170BC06539BC5AFD5950598633A2270F3EBF7A583C84685CCD787E97", + "E1F9BB6567AA7AB0572AB0244B88A784967DA23BB624952A9EA0C7C388789CD5", + "DE174A6E0F0CC6001BC6FCC4A7B8A35B76709F373E236D3D100F777099A42263", + "CB49FEE9896E83955A9CC87EFE254C825F25F0631760A52F8864F5A286C87877", + "63ADA89CE5200E765E47D3C9C7BA606162D60DF71A3091894A27C850B05B33B9", + "F7CF8DCDAD6358E0B353C083CC3922C81B4DAF4A175574C1184F530ED6C3185C", + "9524C4905778C2B780970F8FBDA80B6D1C79FF2B9989A6368245640D92AE1A56", + "7D56DFE71C719AF4F92720101BF381A6121F8C5944E36495CFA22998367D8E16", + "8EABA03CB34535E807584491F439E5E622BC54729DFD0073F9AFB55641CAAC1D", + "E5F0AAF0568F1319BED1A6E6234A6B6BEFBC5BCB6F39C07A8B794F84CF3F1873", + "2593E9D9F33326FE921325B30D39F26EFD93739D4D3D46B29FA77C21FFD415C5", + "2B595D8B7FD494D2EED53D929006910031144ED21F25ADDEC1F83D2CAD96445B", + "6C4100EB1A3F77DE533167E459BE7240987F26BE436C05D7501AE3B47AF91AA8", + "0AB0905CED76219D208D262183168A84758ACCAC0173312BDFEECFEAB63748FF", + "8B922D41A15207167D290656E1FE29EE1689F6D24AD0D3935F81902106C78EF5", + "CC5FE2AFEEB9C20062970886FD6B6F92E309240AC25A8794E13D1FE433ECF814", + "00230C6241689491572F2BE8BD1ADA201C755AA09FBD58B3F01C2EA9F6C38FBC", + "30B14D0B82D30352B920416D821BE00C391A807013F678C07866B595A9AE738A", + "8D92FB2055B39D6FF7682B02B592A670E0A0D908AC27270137D3DDBD0FF8AC0F", + "4FFA9DB1383819C6CE28196ED5F3EDBE7A1FA94445E00C672AAC61BD41336794", + "C6C0190BEBD34311C076BD9686BA0B1D7A043184FC37F379563ABE97A1CB7ED1", + "E0E1101D1D35DFFD64054C91CD82925FA434C8BCBE05600DFC73AFE56518FE04", + "9B578D75BCF9C41E6F5C87BE54F76A1AE329C129D1D4FD219150B76BC704C4BD", + "A02A86CB74ED364942FD0F3599F953BD646FA6025D5DC090C8900CADC94983F5", + "CE315FD3F9DA2FBC43455441E5B9F43B2A852FF539818BC4D1004677EFF67EB2", + "6942E57B59A1C816DD7B023974A820CF39E5111E323B64714B71E513F32D4ADF", + "C4020F18B45515E28DC63AEE2C3E803F3CDE5BB52DC5290D95D701A57BCC2E1A", + "E4D627BF109801536717DCA33D1B393736F34BD413067C576A78240A96ABC7F1", + "44501F1D58899F7E6C3A846436427DA09D0958A11EF83A5E9741752B9534B1EF", + "64034F640E653A0558B25C5B457271A496CFE0F624763DA87362626396F4BBDC", + "DDA1988F4B0022213D725ACF50E26ED43257EDAA080E8DBAE8A6DFC1683CEFCB", + "B1312083CAC0826CD72F17F122E8F4F53E9C4266CD2D0D10C94876CE38FDBE91", + "4590BDAE1C9E21661FC7A65FEAEEE951A73F695BDF8CA0E82FF811CD588D4769", + "495651FDD51FE5F200713A5F9AE81B5F7089066F14642FC492CBE6568AE81B32", + "1B8C44C9BDA8AACCD0E6F2B123749CEA414AA3D569135EF8FDDB60B23A43C3F2", + "A36AD1FBF7F0617DBBF4C10B01906A17BA83657B604945A57AF17E79FAA5ADBB", + "B2B14726E4F2C84130D098109E4D8723BAFC4A9F08384553EC904B5A7798C9C8", + "A1A71AF0E102EBD7DD93D412CE63E386D7221BEAB9770C22BBBC051EADE759A4", + "4C6622A0F8D2105573CD2A6494C9B983FEE0D3B02977639EE575BCD2F4EF3D41", + "93B79BAF0D3163D935066393FEF8C2EB5543B5DCFA8FE465F85E396982E19773", + "3FE4FB9171E4649CCA3D59A391548265046059BE3788B3FF39CBF92FA677048E", + "0DF5E7953DF0FEE769AC70228E9513CF6B1F4EBD86A1A64C6ADCCD0E66005871", + "FE43B8F38E62A4757616C70CEE02EB2FCF9F45E4E1A43EE4C8022ABDB97333B1", + "C891795E8244A5EA1D43139906E5CD6D9FEC177EB3D5CFD598B99599C0FCB843", + "6D81C724EDEA609E5C5572369DCC7FD1D0986C7B82B42CC6E2D1E80A3FE8F9F9", + "6F400AA10A6BFF484F5E07D6D697152E35E3CEB3FE0ED9886E1607B77B1048D8", + "F3BBE219C82DF2CC1800393EAD3D929299BC75BACDF70380C6C6067A33238D11", + "A28E4ED96F099C0CE07707FECB985D4828EC48795D365B78DFABEC653071C0BF", + "745538F694DC743AB6E9F0CF0C05833E57F6600D3DB3F247FC45C0224AD521A6", + "CFDE6DFA90BD8F64F8649ABD6D4EE608BC3F50B42C37CE5708EF1A815211623D", + "D2503BCFCD803762316DFEE6AD32D56CAAC1D96CB58677E893DE386D9B512AD3", + "E4EF842488E8CD8C7AB209282D213329D2BC80AD3C1D8676AE7BC1A85B4564A9", + "5568508C40782DDC028E42FEEB78F67E5C188BD35098CC58CCDD43FB4BA51AB4", + "7EE1AC2A77EB0862FC5E6CA4319F95AA960679B572A476F8282C38F1C2823D36", + "39C7CD3568BF877D40754C585A6A4A0CA1A57F3B8CB144A01CA1DE18E4489F85", + "F3265799D576F322295A6229A705D212BB25C82B639A47D037B0817B883475D0", + "C8EFBBA6764313900DCA6EEB64B195D25F089224B8DB461B306D461A6966856C", + "C290527E7C357B2E5A0F9178C6BE1B0B566FD513C814F27A664A62827DC63465", + "8A6CCC84998154349F6080B21AB1FF1BDAF9D9C7B24984BA5E6CD06BEDD7BA7A", + "ACD9E8F6BAE1913EAAD4B52F5FEFDB3F6C69317C36658749AF39120810F566C9", + "0927A201F9281C4D652EC4DD0676A179C1B731B59FE062D6BE1198AA1483E41C", + "38D24962B4DDB2711539404CBDD97A7393EAEC52A81E03FEB7D159D9290996BC", + "5BFE6AA81E2AF93E3A066F2D7818A40E51FEDF35CE848023BE3330D52484130D", + "7739C48A8EBAEFCF19F631FC06BB3C7FB5E7F00462BD6D58F5C1027B0BCDEB59", + "4FC1B97A8D4E414A0B982E3251A62419396A9D1FA8114A1A777BFD8A6CE15D9E", + "A895737B7B3EBEFAD289AA36873E7F11EBE74D4A014B1AF8EBDC159803B91106", + "3A0E7A191BDB5F7E7F0A55F69C60BBFC262521134E71198C7EDF1465F294FDB5", + "18A9C02DEBCF75B1A24EA924059630B6634467C5AD6CCBEDB0077EF9AFFFEE69", + "5C90FC5FD33F9DDED79B78540D5FF1D4C9B2A18D2AFD5D3E0A2E7FF5F00A0555", + "4B63D5CB16236D4307C1DA72CD51DCCD1F8D454256BE6361F3B848C4423F56AA", + "A6117797578DA5047D9C500F56FC1CD3BFCE0CB052F6EB6BC5D6BD932C29F2BB", + "50ABE7AB7DCF1ACA12EB06E38C2B3B2C54B753A05B81F3B5E18CDE1F164F3FFC", + "A49DD813109E8BDC408360E80BFD9CF945501BA3152FDAB719B2989946560145", + "910EC78E8775AC2925611B580E043098816E2D8391ECF6C7333D1D31FDEF1BEF", + "BB364250F2E73783579D3229A75B98B91582933D402914C2FFA2A95F8D358BC7", + "7E1F64DC0B37DAFF2738A915E049D5240499E46920B92564B532C67873CCFCFC", + "FE96806BDB98DDB651A4C9C80749C79215ED8ED26BEDD10E49AB91631CCAB5A6", + "3401E5B2E5D3A53EB0891088A5F2D9364BBB6CE5B37A337D2C0660DAF9C4175E" + ], + "LedgerEntryType": "LedgerHashes", + "Flags": 0, + "FirstLedgerSequence": 2, + "LastLedgerSequence": 38128 + } + }, + { + "binary": "1100612200000000240000000125000000472D000000005583124A90968261C4EC33F29A5F1D2B2941AC7A52D74639C1F8B94E36C13FA3F96240000002540BE40081141A5CD521A26A45FF77EA1343E25E71740344BB66", + "json": { + "OwnerCount": 0, + "Account": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif", + "PreviousTxnLgrSeq": 71, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "83124A90968261C4EC33F29A5F1D2B2941AC7A52D74639C1F8B94E36C13FA3F9", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000000592D0000000055BFB2829F8C2549B420539853A3A03A6F29803D6E885465F11E6BBED711DD013A6240000002540BE4008114E3AC9945731DF31ED7AECBEC6406DC30CCE36A36", + "json": { + "OwnerCount": 0, + "Account": "rMkq9vs7zfJyQSPPkS2JgD8hXpDR5djrTA", + "PreviousTxnLgrSeq": 89, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "BFB2829F8C2549B420539853A3A03A6F29803D6E885465F11E6BBED711DD013A", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000000ED2D00000000551EE8602B929B4690E2F3D318AFA25F5248607F82831930EB3280690F66F981476240002D79883D20008114721E29387C4B08E3DFD66E17DAA4CA12A5D63169", + "json": { + "OwnerCount": 0, + "Account": "rBQQwVbHrkf8TEcW4h4MtE6EUyPQedmtof", + "PreviousTxnLgrSeq": 237, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "1EE8602B929B4690E2F3D318AFA25F5248607F82831930EB3280690F66F98147", + "Flags": 0, + "Sequence": 1, + "Balance": "50000000000000" + } + }, + { + "binary": "1100612200000000240000000125000037E62D0000000055F00540C7D38779DEEE08CA90584D3A3D5A43E3ADAA97902B1541DD84D31D3CA76240000002540BE4008114EF991ABBD1A8C4165EA623911A940920CA6BBB91", + "json": { + "OwnerCount": 0, + "Account": "r4q1ujKY4hwBpgFNFx43629f2LuViU4LfA", + "PreviousTxnLgrSeq": 14310, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F00540C7D38779DEEE08CA90584D3A3D5A43E3ADAA97902B1541DD84D31D3CA7", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000005A2D00000000554D4C38E4A5BD7D7864F7C28CAD712D6CD1E85804C7645ABF6F4C5B2FE54720356240000002540BE40081142332A8767CAD430E9EF644CC2177BD04545C0C60", + "json": { + "OwnerCount": 0, + "Account": "rhDfLV1hUCanViHnjJaq3gF1R2mo6PDCSC", + "PreviousTxnLgrSeq": 90, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "4D4C38E4A5BD7D7864F7C28CAD712D6CD1E85804C7645ABF6F4C5B2FE5472035", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000020DA2D000000005577A1280E1103759D7C77C6B4F4759AF005AFC58F84988C1893A74D47E3E0568A624000B5E620F4800081140B417F9DCA89CB7F5BA50C7BE64359BAB19588BD", + "json": { + "OwnerCount": 0, + "Account": "rppWupV826yJUFd2zcpRGSjQHnAHXqe7Ny", + "PreviousTxnLgrSeq": 8410, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "77A1280E1103759D7C77C6B4F4759AF005AFC58F84988C1893A74D47E3E0568A", + "Flags": 0, + "Sequence": 1, + "Balance": "200000000000000" + } + }, + { + "binary": "1100612200000000240000000125000068562D0000000055663F8A73611629DCE63205AEA8C698770607CE929E1D015407D8D352E9DCEF8E62400009184E72A0008114E7D17BE3C17D850BDE314C04C20036A1E7DB2AA0", + "json": { + "OwnerCount": 0, + "Account": "r43ksW5oFnW7FMjQXDqpYGJfUwmLan9dGo", + "PreviousTxnLgrSeq": 26710, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "663F8A73611629DCE63205AEA8C698770607CE929E1D015407D8D352E9DCEF8E", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110072220001000025000022C85545CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF366280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D498DE76816D800000000000000000000000000055534400000000002ECC94F5447A3CC1348E94C84D4677442C9E42276780000000000000000000000000000000000000005553440000000000712B799C79D1EEE3094B59EF9920C7FEB3CE4499", + "json": { + "PreviousTxnLgrSeq": 8904, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "7", + "issuer": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA" + }, + "PreviousTxnID": "45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7" + } + } + }, + { + "binary": "110061220000000024000000012500005A372D00000000557FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B62400000000BEBC20081148E4F82DCBBADCD6946C3AAA1DF6578E3FE8DB322", + "json": { + "OwnerCount": 0, + "Account": "rDy7Um1PmjPgkyhJzUWo1G8pzcDan9drox", + "PreviousTxnLgrSeq": 23095, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B", + "Flags": 0, + "Sequence": 1, + "Balance": "200000000" + } + }, + { + "binary": "110072220001000025000007EA55A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E834206280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D551C37937E0800000000000000000000000000055534400000000000B8D970A5E6BB9C50EC063E9318C7218D65ECE4367800000000000000000000000000000000000000055534400000000001A5CD521A26A45FF77EA1343E25E71740344BB66", + "json": { + "PreviousTxnLgrSeq": 2026, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "5000", + "issuer": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8" + }, + "PreviousTxnID": "A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif" + } + } + }, + { + "binary": "110061220000000024000000022500003E9D2D0000000155865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C224669466240000002540BE3F6811480799D02FF2097DEB21F66472FCF477C36E7039F", + "json": { + "OwnerCount": 1, + "Account": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8", + "PreviousTxnLgrSeq": 16029, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946", + "Flags": 0, + "Sequence": 2, + "Balance": "9999999990" + } + }, + { + "binary": "11006122000000002400000001250000103C2D000000005599711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360624000000265ED87008114FCD4E320A9A95903D3C787A6892B809C7F00BF02", + "json": { + "OwnerCount": 0, + "Account": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je", + "PreviousTxnLgrSeq": 4156, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360", + "Flags": 0, + "Sequence": 1, + "Balance": "10300000000" + } + }, + { + "binary": "110061220000000024000000012500000EA72D0000000055D99B7B1D66C09166319920116CAAE2B7209FB1C44C352EAA18862EA0D49D68D3624000246139CA800081141A7B9B708797D20498853B2BB3C7D613A6312DF4", + "json": { + "OwnerCount": 0, + "Account": "rsRpe4UHx6HB32kJJ3FjB6Q1wUdY2wi3xi", + "PreviousTxnLgrSeq": 3751, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D99B7B1D66C09166319920116CAAE2B7209FB1C44C352EAA18862EA0D49D68D3", + "Flags": 0, + "Sequence": 1, + "Balance": "40000000000000" + } + }, + { + "binary": "110072220001000025000045223700000000000000003800000000000000005519CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D50AA87BEE53800000000000000000000000000055534400000000002B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08678000000000000000000000000000000000000000555344000000000087057DF0267E7A0ED8E1197ADC0EF8C4471A90A8", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 17698, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "300", + "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy" + }, + "PreviousTxnID": "19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG" + } + } + }, + { + "binary": "11006122000000002400000001250000005D2D00000000553FAF5E34874473A4D9707124DA8A4D6AF6820EBA718F588A07B9C021CC5CAF016240000002540BE400811465168339D44E757DE639F93C5B96960A49CFBBC8", + "json": { + "OwnerCount": 0, + "Account": "rwDWD2WoU7npQKKeYd6tyiLkmr7DuyRgsz", + "PreviousTxnLgrSeq": 93, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "3FAF5E34874473A4D9707124DA8A4D6AF6820EBA718F588A07B9C021CC5CAF01", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110061220000000024000000012500000EA12D000000005530DF2860F25D582699D4C802C7650A65DC54A07FA0D60ACCEB9A7A66B4454D5A624000886C98B7600081148ADF9C14E258B4AF221A7900CF6136EE070D4AC0", + "json": { + "OwnerCount": 0, + "Account": "rDCJ39V8yW39Ar3Pod7umxnrp24jATE1rt", + "PreviousTxnLgrSeq": 3745, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "30DF2860F25D582699D4C802C7650A65DC54A07FA0D60ACCEB9A7A66B4454D5A", + "Flags": 0, + "Sequence": 1, + "Balance": "150000000000000" + } + }, + { + "binary": "110061220000000024000000012500000E9D2D0000000055BEF9DFDEA6B289FF343E83734A125D87C3B60E6007D1C3A499DA47CE1F909FFD624000886C98B76000811446ECDEAC5FC86A4A4F11766567CCF769B3C7A848", + "json": { + "OwnerCount": 0, + "Account": "rf7phSp1ABzXhBvEwgSA7nRzWv2F7K5VM7", + "PreviousTxnLgrSeq": 3741, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "BEF9DFDEA6B289FF343E83734A125D87C3B60E6007D1C3A499DA47CE1F909FFD", + "Flags": 0, + "Sequence": 1, + "Balance": "150000000000000" + } + }, + { + "binary": "11006122000000002400000001250000685F2D00000000553F8E7146B8BF4A208C01135EF1688E38FE4D2EB72DCEC472330B278660F5C25162400009184E72A00081146B788C7732603A7EF853921BBB18FF93F3F5B8B1", + "json": { + "OwnerCount": 0, + "Account": "rwoE5PxARitChLgu6VrMxWBHN7j11Jt18x", + "PreviousTxnLgrSeq": 26719, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "3F8E7146B8BF4A208C01135EF1688E38FE4D2EB72DCEC472330B278660F5C251", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "11007222000100002500004EE0370000000000000000380000000000000000554E4AAF8C25F0A436FECEA7D1CB8C36FCE33F1117B81B712B9CF30B400C226C3F6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B696780000000000000000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E8", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 20192, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + }, + "PreviousTxnID": "4E4AAF8C25F0A436FECEA7D1CB8C36FCE33F1117B81B712B9CF30B400C226C3F", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh" + } + } + }, + { + "binary": "110064220000000058C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D882144A77EF82417FCC4B8D801A9D64C9070C0824E5E70113405CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B751544A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01", + "json": { + "Owner": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D8", + "Indexes": [ + "5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515", + "44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01" + ] + } + }, + { + "binary": "11006122000000002400000001250000005F2D0000000055189228C5636A8B16F1A811F0533953E71F2B8B1009D343888B72A23A83FAFB3F624000000011E1A30081143676E3F66EFC8DDE76646A0B689BCDBCD12B89AF", + "json": { + "OwnerCount": 0, + "Account": "rnxyvrF2mUhK6HubgPxUfWExERAwZXMhVL", + "PreviousTxnLgrSeq": 95, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "189228C5636A8B16F1A811F0533953E71F2B8B1009D343888B72A23A83FAFB3F", + "Flags": 0, + "Sequence": 1, + "Balance": "300000000" + } + }, + { + "binary": "1100612200000000240000000125000001062D00000000555014D1C3606B264324998AB36403FFD4A70F1E942F7586EA217DBE9336F962DA6240002D79883D20008114C93D6E551A8127AA283100B232C70E6C113F4AB2", + "json": { + "OwnerCount": 0, + "Account": "rKMhQik9qdyq8TDCYT92xPPRnFtuq8wvQK", + "PreviousTxnLgrSeq": 262, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "5014D1C3606B264324998AB36403FFD4A70F1E942F7586EA217DBE9336F962DA", + "Flags": 0, + "Sequence": 1, + "Balance": "50000000000000" + } + }, + { + "binary": "11006122000000002400000009250000104E2D0000000855D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA6240000001EBBD0230811436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC", + "json": { + "OwnerCount": 8, + "Account": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "PreviousTxnLgrSeq": 4174, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA", + "Flags": 0, + "Sequence": 9, + "Balance": "8249999920" + } + }, + { + "binary": "11007222000200002500006859370000000000000000380000000000000000557957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D462800000000000000000000000000000000000000055534400000000000000000000000000000000000000000000000001668000000000000000000000000000000000000000555344000000000073B3ED1EBFF63BECF6E84D03B6A0CAF1BE8A605067D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B69", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 26713, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy" + }, + "PreviousTxnID": "7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + } + } + }, + { + "binary": "110064220000000031000000000000000232000000000000000158433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC011340CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "IndexNext": "0000000000000002", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF", + "10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F" + ] + } + }, + { + "binary": "1100722200030000250000455F370000000000000000380000000000000000553B76C257B746C298DCD945AD900B05A17BA44C74E298A1B70C75A89AD588D0066280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4838D7EA4C68000000000000000000000000000555344000000000050FCCA71E98DFA43305149F9F0C7897DE5A9D18C67D4838D7EA4C6800000000000000000000000000055534400000000008D3A0AEF277858BD4D9751ECECD16779C0CC86D0", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 17759, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "1", + "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH" + }, + "PreviousTxnID": "3B76C257B746C298DCD945AD900B05A17BA44C74E298A1B70C75A89AD588D006", + "Flags": 196608, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "1", + "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x" + } + } + }, + { + "binary": "110061220000000024000000012500000EB12D0000000055D156CB5A5736E5B4383DEF61D4E4F934442077A4B4E291903A4B082E7E48FD4262400009184E72A0008114DDE7AF8EB7CFABA51FCBDE40601AC0973C42D0DE", + "json": { + "OwnerCount": 0, + "Account": "rMNKtUq5Z5TB5C4MJnwzUZ3YP7qmMGog3y", + "PreviousTxnLgrSeq": 3761, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "D156CB5A5736E5B4383DEF61D4E4F934442077A4B4E291903A4B082E7E48FD42", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "11007222000300002500000B89553319CF0238A16958E2F5B26CFB90B05A2B16A290B933F105F66929DA16A09E6E6280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4838D7EA4C68000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC67D4838D7EA4C680000000000000000000000000004254430000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 2953, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "3319CF0238A16958E2F5B26CFB90B05A2B16A290B933F105F66929DA16A09E6E", + "Flags": 196608, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110072220002000025000000EA55DEEB01071843D07939A19BD97128604F2B788C744D01AF82D631DF5023F4C7C0628000000000000000000000000000000000000000425443000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004254430000000000C2659C14642A6604CE305966307E5F21817A092D67D4838D7EA4C680000000000000000000000000004254430000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 234, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj" + }, + "PreviousTxnID": "DEEB01071843D07939A19BD97128604F2B788C744D01AF82D631DF5023F4C7C0", + "Flags": 131072, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "1", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110064220000000031000000000000000132000000000000000558D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C38214E14829DB4C6419A8EFCAC1EC21D891A1A4339871011340AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5", + "json": { + "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000005", + "Flags": 0, + "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", + "Indexes": [ + "AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF", + "142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5" + ] + } + }, + { + "binary": "11006F2200000000240000000625000027643300000000000000003400000000000000015558BF1AC5F8ADDB088913149E0440EF41430F2E62A0BE200674F6F5F28979F1F85010F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C00064D49AA535D3D0C0000000000000000000000000004254430000000000E8ACFC6B5EF4EA0601241525375162F43C2FF28565D5038D7EA4C68000000000000000000000000000555344000000000058C742CF55C456DE367686CB9CED83750BD24979811458C742CF55C456DE367686CB9CED83750BD24979", + "json": { + "TakerPays": { + "currency": "BTC", + "value": "7.5", + "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3" + }, + "Account": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", + "PreviousTxnLgrSeq": 10084, + "BookDirectory": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", + "LedgerEntryType": "Offer", + "OwnerNode": "0000000000000001", + "PreviousTxnID": "58BF1AC5F8ADDB088913149E0440EF41430F2E62A0BE200674F6F5F28979F1F8", + "TakerGets": { + "currency": "USD", + "value": "100", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + }, + "Flags": 0, + "Sequence": 6, + "BookNode": "0000000000000000" + } + }, + { + "binary": "110061220000000024000000012500000B972D00000000557C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4624000000277CF2A008114A0B2F54B75C3D1EAC4FFC68EC03CCBB772CC1325", + "json": { + "OwnerCount": 0, + "Account": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN", + "PreviousTxnLgrSeq": 2967, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4", + "Flags": 0, + "Sequence": 1, + "Balance": "10600000000" + } + }, + { + "binary": "1100722200010000250000010C559C88635839AF1B4142FC8A03E733DCB62ADAE7D2407F13365A05B94A5A153D596280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C38D7EA4C680000000000000000000000000005553440000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA6780000000000000000000000000000000000000005553440000000000B544029B077F39117BD0C9FB2913FCE08F9345CF", + "json": { + "PreviousTxnLgrSeq": 268, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "10", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + }, + "PreviousTxnID": "9C88635839AF1B4142FC8A03E733DCB62ADAE7D2407F13365A05B94A5A153D59", + "Flags": 65536, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "0", + "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr" + } + } + }, + { + "binary": "110064220000000031000000000000000432000000000000000358433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840821436D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC01134085469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D", + "json": { + "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", + "IndexNext": "0000000000000004", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000003", + "Flags": 0, + "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", + "Indexes": [ + "85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC", + "2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D" + ] + } + }, + { + "binary": "110064220000000058D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D821487057DF0267E7A0ED8E1197ADC0EF8C4471A90A8011320C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C", + "json": { + "Owner": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D", + "Indexes": ["C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C"] + } + }, + { + "binary": "110064220000000058D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB408214D99223BCD7B2E92968DC60BC9C63D1D808191FB30113209A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09", + "json": { + "Owner": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40", + "Indexes": ["9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09"] + } + }, + { + "binary": "1100612200000000240000000225000027512D0000000155AF65070E6664E619813067C49BC64CBDB9A7543042DA7741DA5446859BDD782C62400000025A01C4F68114F7FF2D5EA6BB5C26D85343656BEEE94D74B509E0", + "json": { + "OwnerCount": 1, + "Account": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG", + "PreviousTxnLgrSeq": 10065, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "AF65070E6664E619813067C49BC64CBDB9A7543042DA7741DA5446859BDD782C", + "Flags": 0, + "Sequence": 2, + "Balance": "10099999990" + } + }, + { + "binary": "110064220000000058D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA6352048214B5F762798A53D543A014CAF8B297CFF8F2F937E80113408A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13CC683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C", + "json": { + "Owner": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204", + "Indexes": [ + "8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C", + "C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C" + ] + } + }, + { + "binary": "1100612200000000240000000125000000652D0000000055972A6B3107761A267F54B48A337B5145BC59A565E9E36E970525877CB053678C6240000002540BE40081146DB2F1BE3E0DE1750C4F4ECD9CC2F6099344CC07", + "json": { + "OwnerCount": 0, + "Account": "rBrspBLnwBRXEeszToxcDUHs4GbWtGrhdE", + "PreviousTxnLgrSeq": 101, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "972A6B3107761A267F54B48A337B5145BC59A565E9E36E970525877CB053678C", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "11006122000000002400000001250000376E2D0000000055458F1F8CC965A0677BC7B0761AFE57D47845B501B9E5293C49736A100E2E92926240000002540BE4008114D786692D656E042B3FD6459C3ED9EF54347E7A46", + "json": { + "OwnerCount": 0, + "Account": "rLebJGqYffmcTbFwBzWJRiv5fo2ccmmvsB", + "PreviousTxnLgrSeq": 14190, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "458F1F8CC965A0677BC7B0761AFE57D47845B501B9E5293C49736A100E2E9292", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100612200000000240000000125000000662D00000000552DA2B33FFAE8CDCC011C86E52904A665256AD3F9D0A1D85A6637C461925E3FB06240000002540BE4008114F6FE4B8E0AE3139FF83919611A3562BF3BF50F4E", + "json": { + "OwnerCount": 0, + "Account": "rPWyiv5PXyKWitakbaKne4cnCQppRvDc5B", + "PreviousTxnLgrSeq": 102, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "2DA2B33FFAE8CDCC011C86E52904A665256AD3F9D0A1D85A6637C461925E3FB0", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000058DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D958214D9CEEA2E2AD331A8D087C216284D58EBBC6780E8011320908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB", + "json": { + "Owner": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95", + "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"] + } + }, + { + "binary": "1100612200000000240000000125000000572D00000000558D247FF7A5195A888A36C0CA56DD2B70C2AB5BBD04F3045CD3B9CAF34BBF81436240038D7EA4C680008114838627B98B8D25DF362F111B570A5CC5EA2F3CA9", + "json": { + "OwnerCount": 0, + "Account": "rUzSNPtxrmeSTpnjsvaTuQvF2SQFPFSvLn", + "PreviousTxnLgrSeq": 87, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "8D247FF7A5195A888A36C0CA56DD2B70C2AB5BBD04F3045CD3B9CAF34BBF8143", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000000000" + } + }, + { + "binary": "1100612200000000240000000925000045922D0000000155821706FDED3BED3D146CED9896683E2D4131B0D1238F44ED53C5C40E07DD659A624000000255A7E070811450FCCA71E98DFA43305149F9F0C7897DE5A9D18C", + "json": { + "OwnerCount": 1, + "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", + "PreviousTxnLgrSeq": 17810, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "821706FDED3BED3D146CED9896683E2D4131B0D1238F44ED53C5C40E07DD659A", + "Flags": 0, + "Sequence": 9, + "Balance": "10026999920" + } + }, + { + "binary": "1100612200000000240000000125000000682D000000005581066DCA6C77C2C8A2F39EB03DCC720652AA0FA0EDF6E99A92202ACB5414A1B56240000004A817C8008114DE08239AAD0DFD1939741D086C1C4E7D72C9AA44", + "json": { + "OwnerCount": 0, + "Account": "rMNzmamctjEDqgwyBKbYfEzHbMeSkLQfaS", + "PreviousTxnLgrSeq": 104, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "81066DCA6C77C2C8A2F39EB03DCC720652AA0FA0EDF6E99A92202ACB5414A1B5", + "Flags": 0, + "Sequence": 1, + "Balance": "20000000000" + } + }, + { + "binary": "1100612200000000240000000125000000692D0000000055711B2ED1072F60EA84B05BA99C594D56BB10701BD83BBA68EC0D55CD4C4FDC506240000002540BE4008114B50D5FCBBD0125DD2085CFB29B82FF0DC7EA2D48", + "json": { + "OwnerCount": 0, + "Account": "rHWKKygGWPon9WSj4SzTH7vS4ict1QWKo9", + "PreviousTxnLgrSeq": 105, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "711B2ED1072F60EA84B05BA99C594D56BB10701BD83BBA68EC0D55CD4C4FDC50", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110072220002000025000000E355AED7737870A63125C3255323624846181E422B8E6E5CB7F1740EB364B89AC1F0628000000000000000000000000000000000000000434144000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004341440000000000A82BB90BF7031413B42E2C890827EDC2399B7BFA67D4C38D7EA4C680000000000000000000000000004341440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 227, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "CAD", + "value": "0", + "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa" + }, + "PreviousTxnID": "AED7737870A63125C3255323624846181E422B8E6E5CB7F1740EB364B89AC1F0", + "Flags": 131072, + "Balance": { + "currency": "CAD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "CAD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110072220002000025000022BF55EB662576200A6F79B29F58B4C08605A391151199A551D0B2A7231013FD722D9C628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000BF3389DD51B5B8CC5AEA410403036A2990896C7067D4C38D7EA4C680000000000000000000000000005553440000000000F8B331F4AEC7900AD1B990899C54F87633EBB741", + "json": { + "PreviousTxnLgrSeq": 8895, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6" + }, + "PreviousTxnID": "EB662576200A6F79B29F58B4C08605A391151199A551D0B2A7231013FD722D9C", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "10", + "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7" + } + } + }, + { + "binary": "110064220000000031000000000000000132000000000000000158E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B298214C2659C14642A6604CE305966307E5F21817A092D0113409C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4CED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649", + "json": { + "Owner": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj", + "IndexNext": "0000000000000001", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000001", + "Flags": 0, + "RootIndex": "E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29", + "Indexes": [ + "9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C", + "ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649" + ] + } + }, + { + "binary": "1100612200000000240000000F2500005A2D2D00000000556F4331FB011A35EDBD5B17BF5D09764E9F5AA21984F7DDEB1C79E72E684BAD356240000001EE00D7748114D0A1812F500329A007707A05F5F7A8794E9200C0", + "json": { + "OwnerCount": 0, + "Account": "rLp9pST1aAndXTeUYFkpLtkmtZVNcMs2Hc", + "PreviousTxnLgrSeq": 23085, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "6F4331FB011A35EDBD5B17BF5D09764E9F5AA21984F7DDEB1C79E72E684BAD35", + "Flags": 0, + "Sequence": 15, + "Balance": "8287999860" + } + }, + { + "binary": "11006122000000002400000001250000006A2D000000005594057E3093D47E7A5286F1ABBF11780FBE644AE9DE530C15B1EDCF512AAC42EA624000000077359400811476E579FE6002C8EBBD229066CD5CD449DFFC85BD", + "json": { + "OwnerCount": 0, + "Account": "rBqCdAqw7jLH3EDx1Gkw4gUAbFqF7Gap4c", + "PreviousTxnLgrSeq": 106, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "94057E3093D47E7A5286F1ABBF11780FBE644AE9DE530C15B1EDCF512AAC42EA", + "Flags": 0, + "Sequence": 1, + "Balance": "2000000000" + } + }, + { + "binary": "110064220000000058E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED8214C2225C8CBC2B6D0E53C763B53A9AC66C658A4EEC01132065492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E", + "json": { + "Owner": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED", + "Indexes": ["65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"] + } + }, + { + "binary": "1100612200000000240000000125000043032D0000000055DE5907B8533B8D3C40D1BA268D54E34D74F03348DAB54837F0000F9182A6BE036240000002540BE4008114A6473D67D54E36ED960CC45526D78345C96FAE5A", + "json": { + "OwnerCount": 0, + "Account": "rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E", + "PreviousTxnLgrSeq": 17155, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "DE5907B8533B8D3C40D1BA268D54E34D74F03348DAB54837F0000F9182A6BE03", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "1100722200010000250000009355981BC0B7C0BD6686453A9DC15A98E32E77834B55CA5D177916C03A09F8B896396280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4C8E1BC9BF04000000000000000000000000000425443000000000036D16F18B3AAC1868C1E3E8FA8EB7DDFD8ECCCAC678000000000000000000000000000000000000000425443000000000070EFFAAE000322A78E0D9DC9081564888C256C37", + "json": { + "PreviousTxnLgrSeq": 147, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "25", + "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm" + }, + "PreviousTxnID": "981BC0B7C0BD6686453A9DC15A98E32E77834B55CA5D177916C03A09F8B89639", + "Flags": 65536, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "0", + "issuer": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th" + } + } + }, + { + "binary": "110061220000000024000000012500000E962D000000005548632A870D75AD35F30022A6E1406DE55D7807ACED8376BB9B6A99FCAD7242C66240038D7EA4C6800081149330CB93BA6421F2A782C45FBDF9CFAC001CE831", + "json": { + "OwnerCount": 0, + "Account": "rNRG8YAUqgsqoE5HSNPHTYqEGoKzMd7DJr", + "PreviousTxnLgrSeq": 3734, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "48632A870D75AD35F30022A6E1406DE55D7807ACED8376BB9B6A99FCAD7242C6", + "Flags": 0, + "Sequence": 1, + "Balance": "1000000000000000" + } + }, + { + "binary": "1100722200020000250000720737000000000000000038000000000000000055782876BCD6E5A40816DA9C300D06BF1736E7938CDF72C3A5F65AD50EABB956EB628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000550FC62003E785DC231A1058A05E56E3F09CF4E667D5438D7EA4C6800000000000000000000000000055534400000000007588B8DBDC8932DC410E8571045466C03F5A6B69", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 29191, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV" + }, + "PreviousTxnID": "782876BCD6E5A40816DA9C300D06BF1736E7938CDF72C3A5F65AD50EABB956EB", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "1000", + "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY" + } + } + }, + { + "binary": "1100612200000000240000000325000000962D0000000055F85D6E7FBA9FEB513B4A3FD80A5EB8A7245A0D93F3BDB86DC0D00CAD928C7F2062411C35669CC63CAC81140898C7B111B44A37A45C00A62C1B0C0FE904F2EB", + "json": { + "OwnerCount": 0, + "Account": "r8TR1AeB1RDQFabM6i8UoFsRF5basqoHJ", + "PreviousTxnLgrSeq": 150, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F85D6E7FBA9FEB513B4A3FD80A5EB8A7245A0D93F3BDB86DC0D00CAD928C7F20", + "Flags": 0, + "Sequence": 3, + "Balance": "79997608218999980" + } + }, + { + "binary": "110061220000000024000000012500000EAD2D0000000055EC842B3F83593784A904FB1C43FF0677DEE59399E11286D426A52A1976856AB862400012309CE540008114107454A4BD1F14D5948783B7F2DE1E9E3819EAC4", + "json": { + "OwnerCount": 0, + "Account": "rpWrw1a5rQjZba1VySn2jichsPuB4GVnoC", + "PreviousTxnLgrSeq": 3757, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "EC842B3F83593784A904FB1C43FF0677DEE59399E11286D426A52A1976856AB8", + "Flags": 0, + "Sequence": 1, + "Balance": "20000000000000" + } + }, + { + "binary": "110072220002000025000000E955F859E3DE1B110C73CABAB950FEB0D734DE68B3E6028AC831A5E3EA65271953FD628000000000000000000000000000000000000000434144000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000004341440000000000C2659C14642A6604CE305966307E5F21817A092D67D4C38D7EA4C680000000000000000000000000004341440000000000E14829DB4C6419A8EFCAC1EC21D891A1A4339871", + "json": { + "PreviousTxnLgrSeq": 233, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "CAD", + "value": "0", + "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj" + }, + "PreviousTxnID": "F859E3DE1B110C73CABAB950FEB0D734DE68B3E6028AC831A5E3EA65271953FD", + "Flags": 131072, + "Balance": { + "currency": "CAD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "CAD", + "value": "10", + "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui" + } + } + }, + { + "binary": "110061220000000024000000022500005A372D00000000557FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B6240000002482021F68114BF02028C1FC2BA3B3AE4D5B82BE5FCE1FFF2BD6C", + "json": { + "OwnerCount": 0, + "Account": "rJQx7JpaHUBgk7C56T2MeEAu1JZcxDekgH", + "PreviousTxnLgrSeq": 23095, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B", + "Flags": 0, + "Sequence": 2, + "Balance": "9799999990" + } + }, + { + "binary": "110061220000000024000000052500001EEF2D0000000055898B68513DA6B1680A114474E0327C076FDA4F1280721657FF639AAAD60669B16240000002540BE3D881146E981A51F3A195FB2C2EA7263B08093FFD6D8A4C", + "json": { + "OwnerCount": 0, + "Account": "rBnmYPdB5ModK8NyDUad1mxuQjHVp6tAbk", + "PreviousTxnLgrSeq": 7919, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "898B68513DA6B1680A114474E0327C076FDA4F1280721657FF639AAAD60669B1", + "Flags": 0, + "Sequence": 5, + "Balance": "9999999960" + } + }, + { + "binary": "11006122000000002400000001250000685B2D00000000557E9190820F32DF1CAE924C9257B610F46003794229030F314E2075E4101B09DF62400009184E72A0008114ADAF33BE117C38CB64B508AE83B5CA81252800BA", + "json": { + "OwnerCount": 0, + "Account": "rGqM8S5GnGwiEdZ6QRm1GThiTAa89tS86E", + "PreviousTxnLgrSeq": 26715, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "7E9190820F32DF1CAE924C9257B610F46003794229030F314E2075E4101B09DF", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100642200000000310000000000000003320000000000000002588E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4821458C742CF55C456DE367686CB9CED83750BD2497901132073E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F", + "json": { + "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", + "IndexNext": "0000000000000003", + "LedgerEntryType": "DirectoryNode", + "IndexPrevious": "0000000000000002", + "Flags": 0, + "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", + "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"] + } + }, + { + "binary": "11006122000000002400000001250000006E2D000000005560CA81BF12767F5E9159DFDA983525E2B45776567ACA83D19FDBC28353F25D9F624000000277CF2A008114C0A76C462911CBC082751F5D8324F0648FE37381", + "json": { + "OwnerCount": 0, + "Account": "rJZCJ2jcohxtTzssBPeTGHLstMNEj5D96n", + "PreviousTxnLgrSeq": 110, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "60CA81BF12767F5E9159DFDA983525E2B45776567ACA83D19FDBC28353F25D9F", + "Flags": 0, + "Sequence": 1, + "Balance": "10600000000" + } + }, + { + "binary": "1100612200000000240000001125000069422D000000005562EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E04001262401508355D263D608114C06883DA16983A0289DFAC996C491D8F8E8FD996", + "json": { + "OwnerCount": 0, + "Account": "rJYMACXJd1eejwzZA53VncYmiK2kZSBxyD", + "PreviousTxnLgrSeq": 26946, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012", + "Flags": 0, + "Sequence": 17, + "Balance": "5919999799999840" + } + }, + { + "binary": "110064220000000058E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B298214C2659C14642A6604CE305966307E5F21817A092D011340CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5", + "json": { + "Owner": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29", + "Indexes": [ + "CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB", + "353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5" + ] + } + }, + { + "binary": "1100612200000000240000000125000068612D0000000055AFD4F8E6EAB0CBE97A842576D6CEB158A54B209B6C28E5106E8445F0C599EF5362400009184E72A0008114D256C27AAE7F92B7E798EFA70891AD4B1B8E431F", + "json": { + "OwnerCount": 0, + "Account": "rLBwqTG5ErivwPXGaAGLQzJ2rr7ZTpjMx7", + "PreviousTxnLgrSeq": 26721, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "AFD4F8E6EAB0CBE97A842576D6CEB158A54B209B6C28E5106E8445F0C599EF53", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "1100612200000000240000000125000068632D0000000055256238C32D954F1DBE93C7FDF50D24226238DB495ED6A3205803915A27A138C262400009184E72A00081142ADE77C62E7CA974C2A211935FAD3686630FB451", + "json": { + "OwnerCount": 0, + "Account": "rhuCtPvq6jJeYF1S7aEmAcE5iM8LstSrrP", + "PreviousTxnLgrSeq": 26723, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "256238C32D954F1DBE93C7FDF50D24226238DB495ED6A3205803915A27A138C2", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "11007222000300002500005ADC37000000000000000038000000000000000055F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D6280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D4C71AFD498D00000000000000000000000000005553440000000000169F404D62A8D2C8EE3935F230AA60BC07919E9667D4C71AFD498D000000000000000000000000000055534400000000006A03714FE4B738A637A094271E0DE8414D904CFA", + "json": { + "HighNode": "0000000000000000", + "LowNode": "0000000000000000", + "PreviousTxnLgrSeq": 23260, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "20", + "issuer": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va" + }, + "PreviousTxnID": "F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D", + "Flags": 196608, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "20", + "issuer": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB" + } + } + }, + { + "binary": "110064220000000036531AA535D3D0C00058F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000011100000000000000000000000042544300000000000211E8ACFC6B5EF4EA0601241525375162F43C2FF28503110000000000000000000000005553440000000000041158C742CF55C456DE367686CB9CED83750BD24979011320D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52", + "json": { + "TakerPaysCurrency": "0000000000000000000000004254430000000000", + "ExchangeRate": "531AA535D3D0C000", + "TakerGetsCurrency": "0000000000000000000000005553440000000000", + "TakerGetsIssuer": "58C742CF55C456DE367686CB9CED83750BD24979", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", + "Indexes": ["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52"], + "TakerPaysIssuer": "E8ACFC6B5EF4EA0601241525375162F43C2FF285" + } + }, + { + "binary": "110064220000000058F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E8214E8ACFC6B5EF4EA0601241525375162F43C2FF28501134017B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836", + "json": { + "Owner": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E", + "Indexes": [ + "17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036", + "F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836" + ] + } + }, + { + "binary": "110072220002000025000022C5558D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4628000000000000000000000000000000000000000555344000000000000000000000000000000000000000000000000016680000000000000000000000000000000000000005553440000000000712B799C79D1EEE3094B59EF9920C7FEB3CE449967D498DE76816D80000000000000000000000000005553440000000000BF3389DD51B5B8CC5AEA410403036A2990896C70", + "json": { + "PreviousTxnLgrSeq": 8901, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "USD", + "value": "0", + "issuer": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7" + }, + "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", + "Flags": 131072, + "Balance": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "USD", + "value": "7", + "issuer": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6" + } + } + }, + { + "binary": "1100612200000000240000000125000000E52D00000000556B10BDDABEB8C1D5F8E0CD7A54C08FEAD32260BDFFAC9692EE79B95E6E022A2762400009184E72A0008114E965F6EB72FBBB66B6A5A366F79B964D50115D4C", + "json": { + "OwnerCount": 0, + "Account": "r4HabKLiKYtCbwnGG3Ev4HqncmXWsCtF9F", + "PreviousTxnLgrSeq": 229, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "6B10BDDABEB8C1D5F8E0CD7A54C08FEAD32260BDFFAC9692EE79B95E6E022A27", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000000" + } + }, + { + "binary": "110064220000000058F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3821473B3ED1EBFF63BECF6E84D03B6A0CAF1BE8A6050011320CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B", + "json": { + "Owner": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3", + "Indexes": ["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B"] + } + }, + { + "binary": "1100722200030000250000274255FE8A112AD2C27440245F120388EB00C8208833B3737A6DE6CB8D3AF3840ECEAD6280000000000000000000000000000000000000004254430000000000000000000000000000000000000000000000000166D4D1C37937E08000000000000000000000000000425443000000000058C742CF55C456DE367686CB9CED83750BD2497967D4D1C37937E080000000000000000000000000004254430000000000E8ACFC6B5EF4EA0601241525375162F43C2FF285", + "json": { + "PreviousTxnLgrSeq": 10050, + "LedgerEntryType": "RippleState", + "LowLimit": { + "currency": "BTC", + "value": "50", + "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx" + }, + "PreviousTxnID": "FE8A112AD2C27440245F120388EB00C8208833B3737A6DE6CB8D3AF3840ECEAD", + "Flags": 196608, + "Balance": { + "currency": "BTC", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "HighLimit": { + "currency": "BTC", + "value": "50", + "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3" + } + } + }, + { + "binary": "11006122000000002400000001250000006F2D0000000055F1414803262CA34694E60B7D1EFBD6F7400966BFE1C7EEF2C564599730D792CC6240000002540BE4008114C88385F33698DEA709EAD494EB4E60343B36A466", + "json": { + "OwnerCount": 0, + "Account": "rKHD6m92oprEVdi1FwGfTzxbgKt8eQfUYL", + "PreviousTxnLgrSeq": 111, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "F1414803262CA34694E60B7D1EFBD6F7400966BFE1C7EEF2C564599730D792CC", + "Flags": 0, + "Sequence": 1, + "Balance": "10000000000" + } + }, + { + "binary": "110064220000000058FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE82148D3A0AEF277858BD4D9751ECECD16779C0CC86D00113408A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13CCD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488", + "json": { + "Owner": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE", + "Indexes": [ + "8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C", + "CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488" + ] + } + }, + { + "binary": "1100612200000000240000000925000045B22D00000002550A7E6FD67D2EB7B7AD0E10DAC33B595B26E8E0DFD9F06183FB430A46779B66346240000000D09DC2B081142B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08", + "json": { + "OwnerCount": 2, + "Account": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy", + "PreviousTxnLgrSeq": 17842, + "LedgerEntryType": "AccountRoot", + "PreviousTxnID": "0A7E6FD67D2EB7B7AD0E10DAC33B595B26E8E0DFD9F06183FB430A46779B6634", + "Flags": 0, + "Sequence": 9, + "Balance": "3499999920" + } + }, + { + "binary": "110064220000000058FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C82142ECC94F5447A3CC1348E94C84D4677442C9E4227011340B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93", + "json": { + "Owner": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA", + "LedgerEntryType": "DirectoryNode", + "Flags": 0, + "RootIndex": "FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C", + "Indexes": [ + "B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489", + "B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93" + ] + } + } + ], + "transactions": [{ + "binary": "1200002200000000240000003E6140000002540BE40068400000000000000A7321034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E74473045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F17962646398114550FC62003E785DC231A1058A05E56E3F09CF4E68314D4CC8AB5B21D86A82C3E9E8D0ECF2404B77FECBA", + "json": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Destination": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", + "TransactionType": "Payment", + "TxnSignature": "3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639", + "SigningPubKey": "034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E", + "Amount": "10000000000", + "Fee": "10", + "Flags": 0, + "Sequence": 62 + } + }], + "ledgerData": [{ + "binary": "01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00", + "json": { + "account_hash": "3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5", + "close_flags": 0, + "close_time": 556231910, + "close_time_resolution": 10, + "ledger_index": 32052277, + "parent_close_time": 556231902, + "parent_hash": "EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6", + "total_coins": "99994494362043555", + "transaction_hash": "DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87" + } + }] +} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json b/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json new file mode 100644 index 00000000..f5c76b48 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json @@ -0,0 +1,3721 @@ +{ + "types": [ + { + "name": "UInt16", + "ordinal": 1 + }, + { + "name": "UInt32", + "ordinal": 2 + }, + { + "name": "UInt64", + "ordinal": 3 + }, + { + "name": "Hash128", + "ordinal": 4 + }, + { + "name": "Hash256", + "ordinal": 5 + }, + { + "name": "Amount", + "ordinal": 6 + }, + { + "name": "Blob", + "ordinal": 7 + }, + { + "name": "AccountID", + "ordinal": 8 + }, + { + "name": "STObject", + "ordinal": 14 + }, + { + "name": "STArray", + "ordinal": 15 + }, + { + "name": "UInt8", + "ordinal": 16 + }, + { + "name": "Hash160", + "ordinal": 17 + }, + { + "name": "PathSet", + "ordinal": 18 + }, + { + "name": "Vector256", + "ordinal": 19 + }, + { + "name": "Transaction", + "ordinal": 10001 + }, + { + "name": "LedgerEntry", + "ordinal": 10002 + }, + { + "name": "Validation", + "ordinal": 10003 + } + ], + "fields_tests": [ + { + "type_name": "UInt16", + "name": "LedgerEntryType", + "nth_of_type": 1, + "type": 1, + "expected_hex": "11" + }, + { + "type_name": "UInt16", + "name": "TransactionType", + "nth_of_type": 2, + "type": 1, + "expected_hex": "12" + }, + { + "type_name": "UInt32", + "name": "Flags", + "nth_of_type": 2, + "type": 2, + "expected_hex": "22" + }, + { + "type_name": "UInt32", + "name": "SourceTag", + "nth_of_type": 3, + "type": 2, + "expected_hex": "23" + }, + { + "type_name": "UInt32", + "name": "Sequence", + "nth_of_type": 4, + "type": 2, + "expected_hex": "24" + }, + { + "type_name": "UInt32", + "name": "PreviousTxnLgrSeq", + "nth_of_type": 5, + "type": 2, + "expected_hex": "25" + }, + { + "type_name": "UInt32", + "name": "LedgerSequence", + "nth_of_type": 6, + "type": 2, + "expected_hex": "26" + }, + { + "type_name": "UInt32", + "name": "CloseTime", + "nth_of_type": 7, + "type": 2, + "expected_hex": "27" + }, + { + "type_name": "UInt32", + "name": "ParentCloseTime", + "nth_of_type": 8, + "type": 2, + "expected_hex": "28" + }, + { + "type_name": "UInt32", + "name": "SigningTime", + "nth_of_type": 9, + "type": 2, + "expected_hex": "29" + }, + { + "type_name": "UInt32", + "name": "Expiration", + "nth_of_type": 10, + "type": 2, + "expected_hex": "2A" + }, + { + "type_name": "UInt32", + "name": "TransferRate", + "nth_of_type": 11, + "type": 2, + "expected_hex": "2B" + }, + { + "type_name": "UInt32", + "name": "WalletSize", + "nth_of_type": 12, + "type": 2, + "expected_hex": "2C" + }, + { + "type_name": "UInt32", + "name": "OwnerCount", + "nth_of_type": 13, + "type": 2, + "expected_hex": "2D" + }, + { + "type_name": "UInt32", + "name": "DestinationTag", + "nth_of_type": 14, + "type": 2, + "expected_hex": "2E" + }, + { + "type_name": "UInt32", + "name": "HighQualityIn", + "nth_of_type": 16, + "type": 2, + "expected_hex": "2010" + }, + { + "type_name": "UInt32", + "name": "HighQualityOut", + "nth_of_type": 17, + "type": 2, + "expected_hex": "2011" + }, + { + "type_name": "UInt32", + "name": "LowQualityIn", + "nth_of_type": 18, + "type": 2, + "expected_hex": "2012" + }, + { + "type_name": "UInt32", + "name": "LowQualityOut", + "nth_of_type": 19, + "type": 2, + "expected_hex": "2013" + }, + { + "type_name": "UInt32", + "name": "QualityIn", + "nth_of_type": 20, + "type": 2, + "expected_hex": "2014" + }, + { + "type_name": "UInt32", + "name": "QualityOut", + "nth_of_type": 21, + "type": 2, + "expected_hex": "2015" + }, + { + "type_name": "UInt32", + "name": "StampEscrow", + "nth_of_type": 22, + "type": 2, + "expected_hex": "2016" + }, + { + "type_name": "UInt32", + "name": "BondAmount", + "nth_of_type": 23, + "type": 2, + "expected_hex": "2017" + }, + { + "type_name": "UInt32", + "name": "LoadFee", + "nth_of_type": 24, + "type": 2, + "expected_hex": "2018" + }, + { + "type_name": "UInt32", + "name": "OfferSequence", + "nth_of_type": 25, + "type": 2, + "expected_hex": "2019" + }, + { + "type_name": "UInt32", + "name": "FirstLedgerSequence", + "nth_of_type": 26, + "type": 2, + "expected_hex": "201A" + }, + { + "type_name": "UInt32", + "name": "LastLedgerSequence", + "nth_of_type": 27, + "type": 2, + "expected_hex": "201B" + }, + { + "type_name": "UInt32", + "name": "TransactionIndex", + "nth_of_type": 28, + "type": 2, + "expected_hex": "201C" + }, + { + "type_name": "UInt32", + "name": "OperationLimit", + "nth_of_type": 29, + "type": 2, + "expected_hex": "201D" + }, + { + "type_name": "UInt32", + "name": "ReferenceFeeUnits", + "nth_of_type": 30, + "type": 2, + "expected_hex": "201E" + }, + { + "type_name": "UInt32", + "name": "ReserveBase", + "nth_of_type": 31, + "type": 2, + "expected_hex": "201F" + }, + { + "type_name": "UInt32", + "name": "ReserveIncrement", + "nth_of_type": 32, + "type": 2, + "expected_hex": "2020" + }, + { + "type_name": "UInt32", + "name": "SetFlag", + "nth_of_type": 33, + "type": 2, + "expected_hex": "2021" + }, + { + "type_name": "UInt32", + "name": "ClearFlag", + "nth_of_type": 34, + "type": 2, + "expected_hex": "2022" + }, + { + "type_name": "UInt32", + "name": "SignerQuorum", + "nth_of_type": 35, + "type": 2, + "expected_hex": "2023" + }, + { + "type_name": "UInt32", + "name": "CancelAfter", + "nth_of_type": 36, + "type": 2, + "expected_hex": "2024" + }, + { + "type_name": "UInt32", + "name": "FinishAfter", + "nth_of_type": 37, + "type": 2, + "expected_hex": "2025" + }, + { + "type_name": "UInt64", + "name": "IndexNext", + "nth_of_type": 1, + "type": 3, + "expected_hex": "31" + }, + { + "type_name": "UInt64", + "name": "IndexPrevious", + "nth_of_type": 2, + "type": 3, + "expected_hex": "32" + }, + { + "type_name": "UInt64", + "name": "BookNode", + "nth_of_type": 3, + "type": 3, + "expected_hex": "33" + }, + { + "type_name": "UInt64", + "name": "OwnerNode", + "nth_of_type": 4, + "type": 3, + "expected_hex": "34" + }, + { + "type_name": "UInt64", + "name": "BaseFee", + "nth_of_type": 5, + "type": 3, + "expected_hex": "35" + }, + { + "type_name": "UInt64", + "name": "ExchangeRate", + "nth_of_type": 6, + "type": 3, + "expected_hex": "36" + }, + { + "type_name": "UInt64", + "name": "LowNode", + "nth_of_type": 7, + "type": 3, + "expected_hex": "37" + }, + { + "type_name": "UInt64", + "name": "HighNode", + "nth_of_type": 8, + "type": 3, + "expected_hex": "38" + }, + { + "type_name": "Hash128", + "name": "EmailHash", + "nth_of_type": 1, + "type": 4, + "expected_hex": "41" + }, + { + "type_name": "Hash256", + "name": "LedgerHash", + "nth_of_type": 1, + "type": 5, + "expected_hex": "51" + }, + { + "type_name": "Hash256", + "name": "ParentHash", + "nth_of_type": 2, + "type": 5, + "expected_hex": "52" + }, + { + "type_name": "Hash256", + "name": "TransactionHash", + "nth_of_type": 3, + "type": 5, + "expected_hex": "53" + }, + { + "type_name": "Hash256", + "name": "AccountHash", + "nth_of_type": 4, + "type": 5, + "expected_hex": "54" + }, + { + "type_name": "Hash256", + "name": "PreviousTxnID", + "nth_of_type": 5, + "type": 5, + "expected_hex": "55" + }, + { + "type_name": "Hash256", + "name": "LedgerIndex", + "nth_of_type": 6, + "type": 5, + "expected_hex": "56" + }, + { + "type_name": "Hash256", + "name": "WalletLocator", + "nth_of_type": 7, + "type": 5, + "expected_hex": "57" + }, + { + "type_name": "Hash256", + "name": "RootIndex", + "nth_of_type": 8, + "type": 5, + "expected_hex": "58" + }, + { + "type_name": "Hash256", + "name": "AccountTxnID", + "nth_of_type": 9, + "type": 5, + "expected_hex": "59" + }, + { + "type_name": "Hash256", + "name": "BookDirectory", + "nth_of_type": 16, + "type": 5, + "expected_hex": "5010" + }, + { + "type_name": "Hash256", + "name": "InvoiceID", + "nth_of_type": 17, + "type": 5, + "expected_hex": "5011" + }, + { + "type_name": "Hash256", + "name": "Nickname", + "nth_of_type": 18, + "type": 5, + "expected_hex": "5012" + }, + { + "type_name": "Hash256", + "name": "Amendment", + "nth_of_type": 19, + "type": 5, + "expected_hex": "5013" + }, + { + "type_name": "Hash256", + "name": "TicketID", + "nth_of_type": 20, + "type": 5, + "expected_hex": "5014" + }, + { + "type_name": "Hash256", + "name": "Digest", + "nth_of_type": 21, + "type": 5, + "expected_hex": "5015" + }, + { + "type_name": "Amount", + "name": "Amount", + "nth_of_type": 1, + "type": 6, + "expected_hex": "61" + }, + { + "type_name": "Amount", + "name": "Balance", + "nth_of_type": 2, + "type": 6, + "expected_hex": "62" + }, + { + "type_name": "Amount", + "name": "LimitAmount", + "nth_of_type": 3, + "type": 6, + "expected_hex": "63" + }, + { + "type_name": "Amount", + "name": "TakerPays", + "nth_of_type": 4, + "type": 6, + "expected_hex": "64" + }, + { + "type_name": "Amount", + "name": "TakerGets", + "nth_of_type": 5, + "type": 6, + "expected_hex": "65" + }, + { + "type_name": "Amount", + "name": "LowLimit", + "nth_of_type": 6, + "type": 6, + "expected_hex": "66" + }, + { + "type_name": "Amount", + "name": "HighLimit", + "nth_of_type": 7, + "type": 6, + "expected_hex": "67" + }, + { + "type_name": "Amount", + "name": "Fee", + "nth_of_type": 8, + "type": 6, + "expected_hex": "68" + }, + { + "type_name": "Amount", + "name": "SendMax", + "nth_of_type": 9, + "type": 6, + "expected_hex": "69" + }, + { + "type_name": "Amount", + "name": "MinimumOffer", + "nth_of_type": 16, + "type": 6, + "expected_hex": "6010" + }, + { + "type_name": "Amount", + "name": "RippleEscrow", + "nth_of_type": 17, + "type": 6, + "expected_hex": "6011" + }, + { + "type_name": "Amount", + "name": "DeliveredAmount", + "nth_of_type": 18, + "type": 6, + "expected_hex": "6012" + }, + { + "type_name": "Blob", + "name": "PublicKey", + "nth_of_type": 1, + "type": 7, + "expected_hex": "71" + }, + { + "type_name": "Blob", + "name": "MessageKey", + "nth_of_type": 2, + "type": 7, + "expected_hex": "72" + }, + { + "type_name": "Blob", + "name": "SigningPubKey", + "nth_of_type": 3, + "type": 7, + "expected_hex": "73" + }, + { + "type_name": "Blob", + "name": "TxnSignature", + "nth_of_type": 4, + "type": 7, + "expected_hex": "74" + }, + { + "type_name": "Blob", + "name": "Generator", + "nth_of_type": 5, + "type": 7, + "expected_hex": "75" + }, + { + "type_name": "Blob", + "name": "Signature", + "nth_of_type": 6, + "type": 7, + "expected_hex": "76" + }, + { + "type_name": "Blob", + "name": "Domain", + "nth_of_type": 7, + "type": 7, + "expected_hex": "77" + }, + { + "type_name": "Blob", + "name": "FundCode", + "nth_of_type": 8, + "type": 7, + "expected_hex": "78" + }, + { + "type_name": "Blob", + "name": "RemoveCode", + "nth_of_type": 9, + "type": 7, + "expected_hex": "79" + }, + { + "type_name": "Blob", + "name": "ExpireCode", + "nth_of_type": 10, + "type": 7, + "expected_hex": "7A" + }, + { + "type_name": "Blob", + "name": "CreateCode", + "nth_of_type": 11, + "type": 7, + "expected_hex": "7B" + }, + { + "type_name": "Blob", + "name": "MemoType", + "nth_of_type": 12, + "type": 7, + "expected_hex": "7C" + }, + { + "type_name": "Blob", + "name": "MemoData", + "nth_of_type": 13, + "type": 7, + "expected_hex": "7D" + }, + { + "type_name": "Blob", + "name": "MemoFormat", + "nth_of_type": 14, + "type": 7, + "expected_hex": "7E" + }, + { + "type_name": "Blob", + "name": "Fulfillment", + "nth_of_type": 16, + "type": 7, + "expected_hex": "7010" + }, + { + "type_name": "Blob", + "name": "Condition", + "nth_of_type": 17, + "type": 7, + "expected_hex": "7011" + }, + { + "type_name": "AccountID", + "name": "Account", + "nth_of_type": 1, + "type": 8, + "expected_hex": "81" + }, + { + "type_name": "AccountID", + "name": "Owner", + "nth_of_type": 2, + "type": 8, + "expected_hex": "82" + }, + { + "type_name": "AccountID", + "name": "Destination", + "nth_of_type": 3, + "type": 8, + "expected_hex": "83" + }, + { + "type_name": "AccountID", + "name": "Issuer", + "nth_of_type": 4, + "type": 8, + "expected_hex": "84" + }, + { + "type_name": "AccountID", + "name": "Target", + "nth_of_type": 7, + "type": 8, + "expected_hex": "87" + }, + { + "type_name": "AccountID", + "name": "RegularKey", + "nth_of_type": 8, + "type": 8, + "expected_hex": "88" + }, + { + "type_name": "STObject", + "name": "ObjectEndMarker", + "nth_of_type": 1, + "type": 14, + "expected_hex": "E1" + }, + { + "type_name": "STObject", + "name": "TransactionMetaData", + "nth_of_type": 2, + "type": 14, + "expected_hex": "E2" + }, + { + "type_name": "STObject", + "name": "CreatedNode", + "nth_of_type": 3, + "type": 14, + "expected_hex": "E3" + }, + { + "type_name": "STObject", + "name": "DeletedNode", + "nth_of_type": 4, + "type": 14, + "expected_hex": "E4" + }, + { + "type_name": "STObject", + "name": "ModifiedNode", + "nth_of_type": 5, + "type": 14, + "expected_hex": "E5" + }, + { + "type_name": "STObject", + "name": "PreviousFields", + "nth_of_type": 6, + "type": 14, + "expected_hex": "E6" + }, + { + "type_name": "STObject", + "name": "FinalFields", + "nth_of_type": 7, + "type": 14, + "expected_hex": "E7" + }, + { + "type_name": "STObject", + "name": "NewFields", + "nth_of_type": 8, + "type": 14, + "expected_hex": "E8" + }, + { + "type_name": "STObject", + "name": "TemplateEntry", + "nth_of_type": 9, + "type": 14, + "expected_hex": "E9" + }, + { + "type_name": "STObject", + "name": "Memo", + "nth_of_type": 10, + "type": 14, + "expected_hex": "EA" + }, + { + "type_name": "STArray", + "name": "ArrayEndMarker", + "nth_of_type": 1, + "type": 15, + "expected_hex": "F1" + }, + { + "type_name": "STArray", + "name": "Signers", + "nth_of_type": 3, + "type": 15, + "expected_hex": "F3" + }, + { + "type_name": "STArray", + "name": "SignerEntries", + "nth_of_type": 4, + "type": 15, + "expected_hex": "F4" + }, + { + "type_name": "STArray", + "name": "Template", + "nth_of_type": 5, + "type": 15, + "expected_hex": "F5" + }, + { + "type_name": "STArray", + "name": "Necessary", + "nth_of_type": 6, + "type": 15, + "expected_hex": "F6" + }, + { + "type_name": "STArray", + "name": "Sufficient", + "nth_of_type": 7, + "type": 15, + "expected_hex": "F7" + }, + { + "type_name": "STArray", + "name": "AffectedNodes", + "nth_of_type": 8, + "type": 15, + "expected_hex": "F8" + }, + { + "type_name": "STArray", + "name": "Memos", + "nth_of_type": 9, + "type": 15, + "expected_hex": "F9" + }, + { + "type_name": "UInt8", + "name": "CloseResolution", + "nth_of_type": 1, + "type": 16, + "expected_hex": "0110" + }, + { + "type_name": "UInt8", + "name": "Method", + "nth_of_type": 2, + "type": 16, + "expected_hex": "0210" + }, + { + "type_name": "UInt8", + "name": "TransactionResult", + "nth_of_type": 3, + "type": 16, + "expected_hex": "0310" + }, + { + "type_name": "Hash160", + "name": "TakerPaysCurrency", + "nth_of_type": 1, + "type": 17, + "expected_hex": "0111" + }, + { + "type_name": "Hash160", + "name": "TakerPaysIssuer", + "nth_of_type": 2, + "type": 17, + "expected_hex": "0211" + }, + { + "type_name": "Hash160", + "name": "TakerGetsCurrency", + "nth_of_type": 3, + "type": 17, + "expected_hex": "0311" + }, + { + "type_name": "Hash160", + "name": "TakerGetsIssuer", + "nth_of_type": 4, + "type": 17, + "expected_hex": "0411" + }, + { + "type_name": "PathSet", + "name": "Paths", + "nth_of_type": 1, + "type": 18, + "expected_hex": "0112" + }, + { + "type_name": "Vector256", + "name": "Indexes", + "nth_of_type": 1, + "type": 19, + "expected_hex": "0113" + }, + { + "type_name": "Vector256", + "name": "Hashes", + "nth_of_type": 2, + "type": 19, + "expected_hex": "0213" + }, + { + "type_name": "Vector256", + "name": "Amendments", + "nth_of_type": 3, + "type": 19, + "expected_hex": "0313" + }, + { + "type_name": "UInt8", + "name": "TickSize", + "nth_of_type": 16, + "type": 16, + "expected_hex": "001010" + } + ], + "whole_objects": [ + { + "tx_json": { + "TakerPays": "101204800", + "Account": "rGFpans8aW7XZNEcNky6RHKyEdLvXPMnUn", + "TransactionType": "OfferCreate", + "Fee": "12", + "Expiration": 1398443249, + "TakerGets": { + "currency": "CNY", + "value": "4.2", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y" + }, + "Flags": 0, + "Sequence": 6068 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0007"], + "json": "OfferCreate", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["000017B4"], + "json": 6068, + "field_header": "24" + } + ], + [ + "Expiration", + { + "binary": ["535A8CF1"], + "json": 1398443249, + "field_header": "2A" + } + ], + [ + "TakerPays", + { + "binary": ["4000000006084340"], + "json": "101204800", + "field_header": "64" + } + ], + [ + "TakerGets", + { + "binary": [ + "D48EEBE0B40E8000", + "000000000000000000000000434E590000000000", + "CED6E99370D5C00EF4EBF72567DA99F5661BFB3A" + ], + "json": { + "currency": "CNY", + "value": "4.2", + "issuer": "rKiCet8SdvWxPXnAgYarFUXMh1zCPz432Y" + }, + "field_header": "65" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["AD6E583D47F90F29FD8B23225E6F905602B0292E"], + "vl_length": "14", + "json": "rGFpans8aW7XZNEcNky6RHKyEdLvXPMnUn", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "120007220000000024000017B42A535A8CF164400000000608434065D48EEBE0B40E8000000000000000000000000000434E590000000000CED6E99370D5C00EF4EBF72567DA99F5661BFB3A68400000000000000C8114AD6E583D47F90F29FD8B23225E6F905602B0292E" + }, + { + "tx_json": { + "TakerPays": "1311313", + "Account": "rLpW9Reyn9YqZ8mxbq8nviXSp4TnHafVJQ", + "TransactionType": "OfferCreate", + "Fee": "12", + "TakerGets": { + "currency": "CNY", + "value": "0.05114362355976031", + "issuer": "rGYYWKxT1XgNipUJouCq4cKiyAdq8xBoE9" + }, + "Flags": 0, + "Sequence": 20772, + "LastLedgerSequence": 6220012 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0007"], + "json": "OfferCreate", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00005124"], + "json": 20772, + "field_header": "24" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EE8EC"], + "json": 6220012, + "field_header": "201B" + } + ], + [ + "TakerPays", + { + "binary": ["4000000000140251"], + "json": "1311313", + "field_header": "64" + } + ], + [ + "TakerGets", + { + "binary": [ + "D4122B7C477B075F", + "000000000000000000000000434E590000000000", + "AA8114C65DA8EA1BE40849F974685289CC145CCF" + ], + "json": { + "currency": "CNY", + "value": "0.05114362355976031", + "issuer": "rGYYWKxT1XgNipUJouCq4cKiyAdq8xBoE9" + }, + "field_header": "65" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["D0B32295596E50017E246FE85FC5982A1BD89CE4"], + "vl_length": "14", + "json": "rLpW9Reyn9YqZ8mxbq8nviXSp4TnHafVJQ", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "12000722000000002400005124201B005EE8EC64400000000014025165D4122B7C477B075F000000000000000000000000434E590000000000AA8114C65DA8EA1BE40849F974685289CC145CCF68400000000000000C8114D0B32295596E50017E246FE85FC5982A1BD89CE4" + }, + { + "tx_json": { + "TakerPays": "223174650", + "Account": "rPk2dXr27rMw9G5Ej9ad2Tt7RJzGy8ycBp", + "TransactionType": "OfferCreate", + "Memos": [{"Memo": { + "MemoType": "584D4D2076616C7565", + "MemoData": "322E3230393635" + }}], + "Fee": "15", + "OfferSequence": 1002, + "TakerGets": { + "currency": "XMM", + "value": "100", + "issuer": "rExAPEZvbkZqYPuNcZ7XEBLENEshsWDQc8" + }, + "Flags": 524288, + "Sequence": 1003, + "LastLedgerSequence": 6220135 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0007"], + "json": "OfferCreate", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00080000"], + "json": 524288, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["000003EB"], + "json": 1003, + "field_header": "24" + } + ], + [ + "OfferSequence", + { + "binary": ["000003EA"], + "json": 1002, + "field_header": "2019" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EE967"], + "json": 6220135, + "field_header": "201B" + } + ], + [ + "TakerPays", + { + "binary": ["400000000D4D5FFA"], + "json": "223174650", + "field_header": "64" + } + ], + [ + "TakerGets", + { + "binary": [ + "D5038D7EA4C68000", + "000000000000000000000000584D4D0000000000", + "A426093A78AA86EB2B878E5C2E33FEC224A01849" + ], + "json": { + "currency": "XMM", + "value": "100", + "issuer": "rExAPEZvbkZqYPuNcZ7XEBLENEshsWDQc8" + }, + "field_header": "65" + } + ], + [ + "Fee", + { + "binary": ["400000000000000F"], + "json": "15", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["F990B9E746546554A7B50A5E013BCB57095C6BB8"], + "vl_length": "14", + "json": "rPk2dXr27rMw9G5Ej9ad2Tt7RJzGy8ycBp", + "field_header": "81" + } + ], + [ + "Memos", + { + "binary": [ + "EA", + "7C", + "09", + "584D4D2076616C7565", + "7D", + "07", + "322E3230393635", + "E1" + ], + "json": [{"Memo": { + "MemoType": "584D4D2076616C7565", + "MemoData": "322E3230393635" + }}], + "field_header": "F9" + } + ] + ], + "blob_with_no_signing": "120007220008000024000003EB2019000003EA201B005EE96764400000000D4D5FFA65D5038D7EA4C68000000000000000000000000000584D4D0000000000A426093A78AA86EB2B878E5C2E33FEC224A0184968400000000000000F8114F990B9E746546554A7B50A5E013BCB57095C6BB8F9EA7C09584D4D2076616C75657D07322E3230393635E1F1" + }, + { + "tx_json": { + "TakerPays": { + "currency": "BTC", + "value": "0.01262042643559221", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" + }, + "Account": "rPEZyTnSyQyXBCwMVYyaafSVPL8oMtfG6a", + "TransactionType": "OfferCreate", + "Fee": "50", + "OfferSequence": 526554, + "TakerGets": "1010386370", + "Sequence": 526615 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0007"], + "json": "OfferCreate", + "field_header": "12" + } + ], + [ + "Sequence", + { + "binary": ["00080917"], + "json": 526615, + "field_header": "24" + } + ], + [ + "OfferSequence", + { + "binary": ["000808DA"], + "json": 526554, + "field_header": "2019" + } + ], + [ + "TakerPays", + { + "binary": [ + "D4047BD23375F335", + "0000000000000000000000004254430000000000", + "0A20B3C85F482532A9578DBB3950B85CA06594D1" + ], + "json": { + "currency": "BTC", + "value": "0.01262042643559221", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" + }, + "field_header": "64" + } + ], + [ + "TakerGets", + { + "binary": ["400000003C3945C2"], + "json": "1010386370", + "field_header": "65" + } + ], + [ + "Fee", + { + "binary": ["4000000000000032"], + "json": "50", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["F4141D8B4EF33BC3EE224088CA418DFCD2847193"], + "vl_length": "14", + "json": "rPEZyTnSyQyXBCwMVYyaafSVPL8oMtfG6a", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "12000724000809172019000808DA64D4047BD23375F33500000000000000000000000042544300000000000A20B3C85F482532A9578DBB3950B85CA06594D165400000003C3945C26840000000000000328114F4141D8B4EF33BC3EE224088CA418DFCD2847193" + }, + { + "tx_json": { + "Account": "rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn", + "Destination": "r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK", + "TransactionType": "Payment", + "Amount": { + "currency": "CNY", + "value": "5000", + "issuer": "r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK" + }, + "Fee": "12", + "SendMax": { + "currency": "CNY", + "value": "5050", + "issuer": "rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn" + }, + "Flags": 0, + "Sequence": 6, + "Paths": [[{ + "account": "razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA" + }]], + "DestinationTag": 736049272 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000006"], + "json": 6, + "field_header": "24" + } + ], + [ + "DestinationTag", + { + "binary": ["2BDF3878"], + "json": 736049272, + "field_header": "2E" + } + ], + [ + "Amount", + { + "binary": [ + "D551C37937E08000", + "000000000000000000000000434E590000000000", + "EE39E6D05CFD6A90DAB700A1D70149ECEE29DFEC" + ], + "json": { + "currency": "CNY", + "value": "5000", + "issuer": "r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK" + }, + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "SendMax", + { + "binary": [ + "D551F0F2C01DA000", + "000000000000000000000000434E590000000000", + "B53847FA45E828BF9A52E38F7FB39E363493CE8B" + ], + "json": { + "currency": "CNY", + "value": "5050", + "issuer": "rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn" + }, + "field_header": "69" + } + ], + [ + "Account", + { + "binary": ["B53847FA45E828BF9A52E38F7FB39E363493CE8B"], + "vl_length": "14", + "json": "rHXUjUtk5eiPFYpg27izxHeZ1t4x835Ecn", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["EE39E6D05CFD6A90DAB700A1D70149ECEE29DFEC"], + "vl_length": "14", + "json": "r45dBj4S3VvMMYXxr9vHX4Z4Ma6ifPMCkK", + "field_header": "83" + } + ], + [ + "Paths", + { + "binary": [ + "01", + "41C8BE2C0A6AA17471B9F6D0AF92AAB1C94D5A25", + "00" + ], + "json": [[{ + "account": "razqQKzJRdB4UxFPWf5NEpEG3WMkmwgcXA" + }]], + "field_header": "0112" + } + ] + ], + "blob_with_no_signing": "120000220000000024000000062E2BDF387861D551C37937E08000000000000000000000000000434E590000000000EE39E6D05CFD6A90DAB700A1D70149ECEE29DFEC68400000000000000C69D551F0F2C01DA000000000000000000000000000434E590000000000B53847FA45E828BF9A52E38F7FB39E363493CE8B8114B53847FA45E828BF9A52E38F7FB39E363493CE8B8314EE39E6D05CFD6A90DAB700A1D70149ECEE29DFEC01120141C8BE2C0A6AA17471B9F6D0AF92AAB1C94D5A2500" + }, + { + "tx_json": { + "Account": "rP2jdgJhtY1pwDJQEMLfCixesg4cw8HcrW", + "Destination": "rHoUTGMxWKbrTTF8tpAjysjpu8PWrbt1Wx", + "TransactionType": "Payment", + "Amount": { + "currency": "RDD", + "value": "1150.848", + "issuer": "ra9eZxMbJrUcgV8ui7aPc161FgrqWScQxV" + }, + "Fee": "10", + "SendMax": { + "currency": "RDD", + "value": "1152", + "issuer": "ra9eZxMbJrUcgV8ui7aPc161FgrqWScQxV" + }, + "Flags": 2147483648, + "Sequence": 21703 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["80000000"], + "json": 2147483648, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["000054C7"], + "json": 21703, + "field_header": "24" + } + ], + [ + "Amount", + { + "binary": [ + "D54416B0AE3B0000", + "0000000000000000000000005244440000000000", + "387B5123A1C93417271BA6DBBBD087E68E7445B2" + ], + "json": { + "currency": "RDD", + "value": "1150.848", + "issuer": "ra9eZxMbJrUcgV8ui7aPc161FgrqWScQxV" + }, + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000000A"], + "json": "10", + "field_header": "68" + } + ], + [ + "SendMax", + { + "binary": [ + "D54417BCE6C80000", + "0000000000000000000000005244440000000000", + "387B5123A1C93417271BA6DBBBD087E68E7445B2" + ], + "json": { + "currency": "RDD", + "value": "1152", + "issuer": "ra9eZxMbJrUcgV8ui7aPc161FgrqWScQxV" + }, + "field_header": "69" + } + ], + [ + "Account", + { + "binary": ["F7B414E9D25EE050553D8A0BB27202F4249AD328"], + "vl_length": "14", + "json": "rP2jdgJhtY1pwDJQEMLfCixesg4cw8HcrW", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["B83EB506BBE5BCF3E89C638FDB185B1DEAC96584"], + "vl_length": "14", + "json": "rHoUTGMxWKbrTTF8tpAjysjpu8PWrbt1Wx", + "field_header": "83" + } + ] + ], + "blob_with_no_signing": "120000228000000024000054C761D54416B0AE3B00000000000000000000000000005244440000000000387B5123A1C93417271BA6DBBBD087E68E7445B268400000000000000A69D54417BCE6C800000000000000000000000000005244440000000000387B5123A1C93417271BA6DBBBD087E68E7445B28114F7B414E9D25EE050553D8A0BB27202F4249AD3288314B83EB506BBE5BCF3E89C638FDB185B1DEAC96584" + }, + { + "tx_json": { + "Account": "r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb", + "Destination": "r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C", + "TransactionType": "Payment", + "Amount": "25000000", + "Fee": "10", + "Flags": 0, + "Sequence": 2 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000002"], + "json": 2, + "field_header": "24" + } + ], + [ + "Amount", + { + "binary": ["40000000017D7840"], + "json": "25000000", + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000000A"], + "json": "10", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["5CCB151F6E9D603F394AE778ACF10D3BECE874F6"], + "vl_length": "14", + "json": "r9TeThyi5xiuUUrFjtPKZiHcDxs7K9H6Rb", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["E851BBBE79E328E43D68F43445368133DF5FBA5A"], + "vl_length": "14", + "json": "r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C", + "field_header": "83" + } + ] + ], + "blob_with_no_signing": "120000220000000024000000026140000000017D784068400000000000000A81145CCB151F6E9D603F394AE778ACF10D3BECE874F68314E851BBBE79E328E43D68F43445368133DF5FBA5A" + }, + { + "tx_json": { + "Account": "rGWTUVmm1fB5QUjMYn8KfnyrFNgDiD9H9e", + "Destination": "rw71Qs1UYQrSQ9hSgRohqNNQcyjCCfffkQ", + "TransactionType": "Payment", + "Amount": "200000", + "Fee": "15", + "Flags": 0, + "Sequence": 144, + "LastLedgerSequence": 6220218 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000090"], + "json": 144, + "field_header": "24" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EE9BA"], + "json": 6220218, + "field_header": "201B" + } + ], + [ + "Amount", + { + "binary": ["4000000000030D40"], + "json": "200000", + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000000F"], + "json": "15", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["AA1BD19D9E87BE8069FDBF6843653C43837C03C6"], + "vl_length": "14", + "json": "rGWTUVmm1fB5QUjMYn8KfnyrFNgDiD9H9e", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["67FE6EC28E0464DD24FB2D62A492AAC697CFAD02"], + "vl_length": "14", + "json": "rw71Qs1UYQrSQ9hSgRohqNNQcyjCCfffkQ", + "field_header": "83" + } + ] + ], + "blob_with_no_signing": "12000022000000002400000090201B005EE9BA614000000000030D4068400000000000000F8114AA1BD19D9E87BE8069FDBF6843653C43837C03C6831467FE6EC28E0464DD24FB2D62A492AAC697CFAD02" + }, + { + "tx_json": { + "Account": "r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C", + "Destination": "rBqSFEFg2B6GBMobtxnU1eLA1zbNC9NDGM", + "TransactionType": "Payment", + "Amount": "25000000", + "Fee": "12", + "Flags": 0, + "Sequence": 1, + "DestinationTag": 4146942154 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000001"], + "json": 1, + "field_header": "24" + } + ], + [ + "DestinationTag", + { + "binary": ["F72D50CA"], + "json": 4146942154, + "field_header": "2E" + } + ], + [ + "Amount", + { + "binary": ["40000000017D7840"], + "json": "25000000", + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["E851BBBE79E328E43D68F43445368133DF5FBA5A"], + "vl_length": "14", + "json": "r4BPgS7DHebQiU31xWELvZawwSG2fSPJ7C", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["76DAC5E814CD4AA74142C3AB45E69A900E637AA2"], + "vl_length": "14", + "json": "rBqSFEFg2B6GBMobtxnU1eLA1zbNC9NDGM", + "field_header": "83" + } + ] + ], + "blob_with_no_signing": "120000220000000024000000012EF72D50CA6140000000017D784068400000000000000C8114E851BBBE79E328E43D68F43445368133DF5FBA5A831476DAC5E814CD4AA74142C3AB45E69A900E637AA2" + }, + { + "tx_json": { + "Account": "rFLiPGytDEwC5heoqFcFAZoqPPmKBzX1o", + "Destination": "rBsbetvMYuMkEeHZYizPMkpveCVH8EVQYd", + "TransactionType": "Payment", + "Amount": "500000", + "Fee": "20", + "SourceTag": 668920, + "Sequence": 34954 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "SourceTag", + { + "binary": ["000A34F8"], + "json": 668920, + "field_header": "23" + } + ], + [ + "Sequence", + { + "binary": ["0000888A"], + "json": 34954, + "field_header": "24" + } + ], + [ + "Amount", + { + "binary": ["400000000007A120"], + "json": "500000", + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["4000000000000014"], + "json": "20", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["08F41F116A1F60D60296B16907F0A041BF106197"], + "vl_length": "14", + "json": "rFLiPGytDEwC5heoqFcFAZoqPPmKBzX1o", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["6E2F0455C46CF5DF61A1E58419A89D45459045EA"], + "vl_length": "14", + "json": "rBsbetvMYuMkEeHZYizPMkpveCVH8EVQYd", + "field_header": "83" + } + ] + ], + "blob_with_no_signing": "12000023000A34F8240000888A61400000000007A120684000000000000014811408F41F116A1F60D60296B16907F0A041BF10619783146E2F0455C46CF5DF61A1E58419A89D45459045EA" + }, + { + "tx_json": { + "Account": "r3ZDv3hLmTKwkgAqcXtX2yaMfnhRD3Grjc", + "Destination": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", + "TransactionType": "Payment", + "Amount": { + "currency": "BTC", + "value": "0.04", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }, + "Fee": "106", + "SendMax": "3267350000", + "Flags": 0, + "Sequence": 10, + "Paths": [[{ + "currency": "BTC", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }]], + "InvoiceID": "342B8D16BEE494D169034AFF0908FDE35874A38E548D4CEC8DFC5C49E9A33B76", + "DestinationTag": 1403334172 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0000"], + "json": "Payment", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["0000000A"], + "json": 10, + "field_header": "24" + } + ], + [ + "DestinationTag", + { + "binary": ["53A52E1C"], + "json": 1403334172, + "field_header": "2E" + } + ], + [ + "InvoiceID", + { + "binary": ["342B8D16BEE494D169034AFF0908FDE35874A38E548D4CEC8DFC5C49E9A33B76"], + "json": "342B8D16BEE494D169034AFF0908FDE35874A38E548D4CEC8DFC5C49E9A33B76", + "field_header": "5011" + } + ], + [ + "Amount", + { + "binary": [ + "D40E35FA931A0000", + "0000000000000000000000004254430000000000", + "DD39C650A96EDA48334E70CC4A85B8B2E8502CD3" + ], + "json": { + "currency": "BTC", + "value": "0.04", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }, + "field_header": "61" + } + ], + [ + "Fee", + { + "binary": ["400000000000006A"], + "json": "106", + "field_header": "68" + } + ], + [ + "SendMax", + { + "binary": ["40000000C2BFCDF0"], + "json": "3267350000", + "field_header": "69" + } + ], + [ + "Account", + { + "binary": ["52E0F910686FB449A23BC78C3D4CE564C988C6C0"], + "vl_length": "14", + "json": "r3ZDv3hLmTKwkgAqcXtX2yaMfnhRD3Grjc", + "field_header": "81" + } + ], + [ + "Destination", + { + "binary": ["DD39C650A96EDA48334E70CC4A85B8B2E8502CD3"], + "vl_length": "14", + "json": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", + "field_header": "83" + } + ], + [ + "Paths", + { + "binary": [ + "30", + "0000000000000000000000004254430000000000", + "DD39C650A96EDA48334E70CC4A85B8B2E8502CD3", + "00" + ], + "json": [[{ + "currency": "BTC", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }]], + "field_header": "0112" + } + ] + ], + "blob_with_no_signing": "1200002200000000240000000A2E53A52E1C5011342B8D16BEE494D169034AFF0908FDE35874A38E548D4CEC8DFC5C49E9A33B7661D40E35FA931A00000000000000000000000000004254430000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD368400000000000006A6940000000C2BFCDF0811452E0F910686FB449A23BC78C3D4CE564C988C6C08314DD39C650A96EDA48334E70CC4A85B8B2E8502CD30112300000000000000000000000004254430000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD300" + }, + { + "tx_json": { + "Account": "rLpW9Reyn9YqZ8mxbq8nviXSp4TnHafVJQ", + "TransactionType": "OfferCancel", + "Fee": "12", + "OfferSequence": 20763, + "Flags": 0, + "Sequence": 20769, + "LastLedgerSequence": 6220009 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0008"], + "json": "OfferCancel", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00005121"], + "json": 20769, + "field_header": "24" + } + ], + [ + "OfferSequence", + { + "binary": ["0000511B"], + "json": 20763, + "field_header": "2019" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EE8E9"], + "json": 6220009, + "field_header": "201B" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["D0B32295596E50017E246FE85FC5982A1BD89CE4"], + "vl_length": "14", + "json": "rLpW9Reyn9YqZ8mxbq8nviXSp4TnHafVJQ", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "1200082200000000240000512120190000511B201B005EE8E968400000000000000C8114D0B32295596E50017E246FE85FC5982A1BD89CE4" + }, + { + "tx_json": { + "Account": "rfeMWWbSaGqc6Yth2dTetLBeKeUTTfE2pG", + "TransactionType": "SetRegularKey", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 3, + "RegularKey": "rfeMWWbSaGqc6Yth2dTetLBeKeUTTfE2pG" + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0005"], + "json": "SetRegularKey", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["80000000"], + "json": 2147483648, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000003"], + "json": 3, + "field_header": "24" + } + ], + [ + "Fee", + { + "binary": ["400000000000000A"], + "json": "10", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["48E143E2384A1B3C69A412789F2CA3FCE2F65F0B"], + "vl_length": "14", + "json": "rfeMWWbSaGqc6Yth2dTetLBeKeUTTfE2pG", + "field_header": "81" + } + ], + [ + "RegularKey", + { + "binary": ["48E143E2384A1B3C69A412789F2CA3FCE2F65F0B"], + "vl_length": "14", + "json": "rfeMWWbSaGqc6Yth2dTetLBeKeUTTfE2pG", + "field_header": "88" + } + ] + ], + "blob_with_no_signing": "1200052280000000240000000368400000000000000A811448E143E2384A1B3C69A412789F2CA3FCE2F65F0B881448E143E2384A1B3C69A412789F2CA3FCE2F65F0B" + }, + { + "tx_json": { + "Account": "rKXCummUHnenhYudNb9UoJ4mGBR75vFcgz", + "TransactionType": "SetRegularKey", + "Fee": "12", + "Flags": 2147483648, + "Sequence": 238, + "RegularKey": "rP9jbfTepHAHWB4q9YjNkLyaZT15uvexiZ", + "LastLedgerSequence": 6224204 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0005"], + "json": "SetRegularKey", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["80000000"], + "json": 2147483648, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["000000EE"], + "json": 238, + "field_header": "24" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EF94C"], + "json": 6224204, + "field_header": "201B" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["CB3F392892D0772FF5AD155D8D70404B1DB2ACFE"], + "vl_length": "14", + "json": "rKXCummUHnenhYudNb9UoJ4mGBR75vFcgz", + "field_header": "81" + } + ], + [ + "RegularKey", + { + "binary": ["F2F9A54D9CEBBE64342B52DE3450FFA0738C8D00"], + "vl_length": "14", + "json": "rP9jbfTepHAHWB4q9YjNkLyaZT15uvexiZ", + "field_header": "88" + } + ] + ], + "blob_with_no_signing": "120005228000000024000000EE201B005EF94C68400000000000000C8114CB3F392892D0772FF5AD155D8D70404B1DB2ACFE8814F2F9A54D9CEBBE64342B52DE3450FFA0738C8D00" + }, + { + "tx_json": { + "Account": "rJMiz2rCMjZzEMijXNH1exNBryTQEjFd9S", + "TransactionType": "TrustSet", + "LimitAmount": { + "currency": "WCG", + "value": "10000000", + "issuer": "rUx4xgE7bNWCCgGcXv1CCoQyTcCeZ275YG" + }, + "Fee": "12", + "Flags": 131072, + "Sequence": 44 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0014"], + "json": "TrustSet", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00020000"], + "json": 131072, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["0000002C"], + "json": 44, + "field_header": "24" + } + ], + [ + "LimitAmount", + { + "binary": [ + "D6438D7EA4C68000", + "0000000000000000000000005743470000000000", + "832297BEF589D59F9C03A84F920F8D9128CC1CE4" + ], + "json": { + "currency": "WCG", + "value": "10000000", + "issuer": "rUx4xgE7bNWCCgGcXv1CCoQyTcCeZ275YG" + }, + "field_header": "63" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["BE6C30732AE33CF2AF3344CE8172A6B9300183E3"], + "vl_length": "14", + "json": "rJMiz2rCMjZzEMijXNH1exNBryTQEjFd9S", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "1200142200020000240000002C63D6438D7EA4C680000000000000000000000000005743470000000000832297BEF589D59F9C03A84F920F8D9128CC1CE468400000000000000C8114BE6C30732AE33CF2AF3344CE8172A6B9300183E3" + }, + { + "tx_json": { + "Account": "rUyPiNcSFFj6uMR2gEaD8jUerQ59G1qvwN", + "TransactionType": "TrustSet", + "LimitAmount": { + "currency": "BTC", + "value": "1", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }, + "Fee": "12", + "Flags": 2147614720, + "Sequence": 43, + "LastLedgerSequence": 6220463 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0014"], + "json": "TrustSet", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["80020000"], + "json": 2147614720, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["0000002B"], + "json": 43, + "field_header": "24" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EEAAF"], + "json": 6220463, + "field_header": "201B" + } + ], + [ + "LimitAmount", + { + "binary": [ + "D4838D7EA4C68000", + "0000000000000000000000004254430000000000", + "DD39C650A96EDA48334E70CC4A85B8B2E8502CD3" + ], + "json": { + "currency": "BTC", + "value": "1", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q" + }, + "field_header": "63" + } + ], + [ + "Fee", + { + "binary": ["400000000000000C"], + "json": "12", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["8353C031DF5AA061A23535E6ABCEEEA23F152B1E"], + "vl_length": "14", + "json": "rUyPiNcSFFj6uMR2gEaD8jUerQ59G1qvwN", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "1200142280020000240000002B201B005EEAAF63D4838D7EA4C680000000000000000000000000004254430000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD368400000000000000C81148353C031DF5AA061A23535E6ABCEEEA23F152B1E" + }, + { + "tx_json": { + "Account": "rpP2GdsQwenNnFPefbXFgiTvEgJWQpq8Rw", + "TransactionType": "AccountSet", + "Fee": "10", + "Flags": 0, + "Sequence": 10598 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0003"], + "json": "AccountSet", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00002966"], + "json": 10598, + "field_header": "24" + } + ], + [ + "Fee", + { + "binary": ["400000000000000A"], + "json": "10", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["0F3D0C7D2CFAB2EC8295451F0B3CA038E8E9CDCD"], + "vl_length": "14", + "json": "rpP2GdsQwenNnFPefbXFgiTvEgJWQpq8Rw", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "1200032200000000240000296668400000000000000A81140F3D0C7D2CFAB2EC8295451F0B3CA038E8E9CDCD" + }, + { + "tx_json": { + "Account": "rGCnJuD31Kx4QGZJ2dX7xoje6T4Zr5s9EB", + "TransactionType": "AccountSet", + "Fee": "15", + "Flags": 0, + "Sequence": 290, + "LastLedgerSequence": 6221014 + }, + "fields": [ + [ + "TransactionType", + { + "binary": ["0003"], + "json": "AccountSet", + "field_header": "12" + } + ], + [ + "Flags", + { + "binary": ["00000000"], + "json": 0, + "field_header": "22" + } + ], + [ + "Sequence", + { + "binary": ["00000122"], + "json": 290, + "field_header": "24" + } + ], + [ + "LastLedgerSequence", + { + "binary": ["005EECD6"], + "json": 6221014, + "field_header": "201B" + } + ], + [ + "Fee", + { + "binary": ["400000000000000F"], + "json": "15", + "field_header": "68" + } + ], + [ + "Account", + { + "binary": ["ABBD4A3AF95FDFD6D072F11421D8F107CAEA1852"], + "vl_length": "14", + "json": "rGCnJuD31Kx4QGZJ2dX7xoje6T4Zr5s9EB", + "field_header": "81" + } + ] + ], + "blob_with_no_signing": "12000322000000002400000122201B005EECD668400000000000000F8114ABBD4A3AF95FDFD6D072F11421D8F107CAEA1852" + } + ], + "values_tests": [ + { + "test_json": "0", + "type_id": 6, + "is_native": true, + "type": "Amount", + "expected_hex": "4000000000000000", + "is_negative": false + }, + { + "test_json": "1", + "type_id": 6, + "is_native": true, + "type": "Amount", + "expected_hex": "4000000000000001", + "is_negative": false + }, + { + "test_json": "-1", + "type_id": 6, + "is_native": true, + "type": "Amount", + "expected_hex": "0000000000000001", + "is_negative": true + }, + { + "test_json": { + "currency": "USD", + "value": "-1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "94838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": true, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "D4838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "0000000000000000", + "type": "Amount", + "expected_hex": "800000000000000000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "-1.0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "94838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": true, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "1.0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "D4838D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "0.0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "0000000000000000", + "type": "Amount", + "expected_hex": "800000000000000000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "0.000000000000000000000000000000000000000000000000000000000000000000000000001", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "C1C38D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -90 + }, + { + "test_json": { + "currency": "USD", + "value": "100000000000000000000000000000000000000000000000000000000000000000000000000000", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 1, + "type_id": 6, + "is_native": false, + "mantissa": "00038D7EA4C68000", + "type": "Amount", + "expected_hex": "E7C38D7EA4C6800000000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": 62 + }, + { + "test_json": { + "currency": "USD", + "value": "1.111111111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D483F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -15 + }, + { + "test_json": { + "currency": "USD", + "value": "11.11111111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D4C3F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -14 + }, + { + "test_json": { + "currency": "USD", + "value": "111.1111111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D503F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -13 + }, + { + "test_json": { + "currency": "USD", + "value": "1111.111111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D543F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -12 + }, + { + "test_json": { + "currency": "USD", + "value": "11111.11111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D583F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -11 + }, + { + "test_json": { + "currency": "USD", + "value": "111111.1111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D5C3F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -10 + }, + { + "test_json": { + "currency": "USD", + "value": "1111111.111111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D603F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -9 + }, + { + "test_json": { + "currency": "USD", + "value": "11111111.11111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D643F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -8 + }, + { + "test_json": { + "currency": "USD", + "value": "111111111.1111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D683F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -7 + }, + { + "test_json": { + "currency": "USD", + "value": "1111111111.111111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D6C3F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -6 + }, + { + "test_json": { + "currency": "USD", + "value": "11111111111.11111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D703F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -5 + }, + { + "test_json": { + "currency": "USD", + "value": "111111111111.1111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D743F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -4 + }, + { + "test_json": { + "currency": "USD", + "value": "1111111111111.111", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D783F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -3 + }, + { + "test_json": { + "currency": "USD", + "value": "11111111111111.11", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D7C3F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -2 + }, + { + "test_json": { + "currency": "USD", + "value": "111111111111111.1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D803F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -1 + }, + { + "test_json": { + "currency": "USD", + "value": "1111111111111111.0", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28CB71571C7", + "type": "Amount", + "expected_hex": "D843F28CB71571C700000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": 0 + }, + { + "test_json": { + "currency": "USD", + "value": "1111111111111111.1", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 17, + "type_id": 6, + "is_native": false, + "type": "Amount", + "error": "value precision of 17 is greater than maximum iou precision of 16", + "is_negative": false + }, + { + "test_json": { + "currency": "USD", + "value": "9999999999999999000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "type": "Amount", + "error": "exponent is too large" + }, + { + "test_json": { + "currency": "USD", + "value": "11111000.00000001", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "significant_digits": 16, + "type_id": 6, + "is_native": false, + "mantissa": "0003F28A20CF5801", + "type": "Amount", + "expected_hex": "D643F28A20CF580100000000000000000000000055534400000000000000000000000000000000000000000000000001", + "is_negative": false, + "exponent": -8 + }, + { + "test_json": "1000000000000000000", + "type_id": 6, + "is_native": true, + "type": "Amount", + "error": "1000000000000 absolute XRP is bigger than max native value 100000000000.0", + "is_negative": false + }, + { + "test_json": "-10000000000000000000000000", + "type_id": 6, + "is_native": true, + "type": "Amount", + "error": "10000000000000000000 absolute XRP is bigger than max native value 100000000000.0", + "is_negative": true + }, + { + "test_json": 0, + "canonical_json": "Payment", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0000" + }, + { + "test_json": "EscrowCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0001" + }, + { + "test_json": 1, + "canonical_json": "EscrowCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0001" + }, + { + "test_json": "EscrowFinish", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0002" + }, + { + "test_json": 2, + "canonical_json": "EscrowFinish", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0002" + }, + { + "test_json": "AccountSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0003" + }, + { + "test_json": 3, + "canonical_json": "AccountSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0003" + }, + { + "test_json": "EscrowCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0004" + }, + { + "test_json": 4, + "canonical_json": "EscrowCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0004" + }, + { + "test_json": "SetRegularKey", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0005" + }, + { + "test_json": 5, + "canonical_json": "SetRegularKey", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0005" + }, + { + "test_json": "NickNameSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0006" + }, + { + "test_json": 6, + "canonical_json": "NickNameSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0006" + }, + { + "test_json": "OfferCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0007" + }, + { + "test_json": 7, + "canonical_json": "OfferCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0007" + }, + { + "test_json": "OfferCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0008" + }, + { + "test_json": 8, + "canonical_json": "OfferCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0008" + }, + { + "test_json": "Contract", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0009" + }, + { + "test_json": 9, + "canonical_json": "Contract", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0009" + }, + { + "test_json": "TicketCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "000A" + }, + { + "test_json": 10, + "canonical_json": "TicketCreate", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "000A" + }, + { + "test_json": "TicketCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "000B" + }, + { + "test_json": 11, + "canonical_json": "TicketCancel", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "000B" + }, + { + "test_json": "TrustSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0014" + }, + { + "test_json": 20, + "canonical_json": "TrustSet", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0014" + }, + { + "test_json": "EnableAmendment", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0064" + }, + { + "test_json": 100, + "canonical_json": "EnableAmendment", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0064" + }, + { + "test_json": "SetFee", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0065" + }, + { + "test_json": 101, + "canonical_json": "SetFee", + "type_id": 1, + "type_specialisation_field": "TransactionType", + "type": "UInt16", + "expected_hex": "0065" + }, + { + "test_json": "AccountRoot", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0061" + }, + { + "test_json": 97, + "canonical_json": "AccountRoot", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0061" + }, + { + "test_json": "DirectoryNode", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0064" + }, + { + "test_json": 100, + "canonical_json": "DirectoryNode", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0064" + }, + { + "test_json": "GeneratorMap", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0067" + }, + { + "test_json": 103, + "canonical_json": "GeneratorMap", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0067" + }, + { + "test_json": "RippleState", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0072" + }, + { + "test_json": 114, + "canonical_json": "RippleState", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0072" + }, + { + "test_json": "Offer", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "006F" + }, + { + "test_json": 111, + "canonical_json": "Offer", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "006F" + }, + { + "test_json": "Contract", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0063" + }, + { + "test_json": 99, + "canonical_json": "Contract", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0063" + }, + { + "test_json": "LedgerHashes", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0068" + }, + { + "test_json": 104, + "canonical_json": "LedgerHashes", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0068" + }, + { + "test_json": "EnabledAmendments", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0066" + }, + { + "test_json": 102, + "canonical_json": "EnabledAmendments", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0066" + }, + { + "test_json": "FeeSettings", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0073" + }, + { + "test_json": 115, + "canonical_json": "FeeSettings", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0073" + }, + { + "test_json": "Ticket", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0054" + }, + { + "test_json": 84, + "canonical_json": "Ticket", + "type_id": 1, + "type_specialisation_field": "LedgerEntryType", + "type": "UInt16", + "expected_hex": "0054" + }, + { + "test_json": "tesSUCCESS", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "00" + }, + { + "test_json": 0, + "canonical_json": "tesSUCCESS", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "00" + }, + { + "test_json": "tecCLAIM", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "64" + }, + { + "test_json": 100, + "canonical_json": "tecCLAIM", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "64" + }, + { + "test_json": "tecPATH_PARTIAL", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "65" + }, + { + "test_json": 101, + "canonical_json": "tecPATH_PARTIAL", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "65" + }, + { + "test_json": "tecUNFUNDED_ADD", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "66" + }, + { + "test_json": 102, + "canonical_json": "tecUNFUNDED_ADD", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "66" + }, + { + "test_json": "tecUNFUNDED_OFFER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "67" + }, + { + "test_json": 103, + "canonical_json": "tecUNFUNDED_OFFER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "67" + }, + { + "test_json": "tecUNFUNDED_PAYMENT", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "68" + }, + { + "test_json": 104, + "canonical_json": "tecUNFUNDED_PAYMENT", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "68" + }, + { + "test_json": "tecFAILED_PROCESSING", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "69" + }, + { + "test_json": 105, + "canonical_json": "tecFAILED_PROCESSING", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "69" + }, + { + "test_json": "tecDIR_FULL", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "79" + }, + { + "test_json": 121, + "canonical_json": "tecDIR_FULL", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "79" + }, + { + "test_json": "tecINSUF_RESERVE_LINE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7A" + }, + { + "test_json": 122, + "canonical_json": "tecINSUF_RESERVE_LINE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7A" + }, + { + "test_json": "tecINSUF_RESERVE_OFFER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7B" + }, + { + "test_json": 123, + "canonical_json": "tecINSUF_RESERVE_OFFER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7B" + }, + { + "test_json": "tecNO_DST", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7C" + }, + { + "test_json": 124, + "canonical_json": "tecNO_DST", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7C" + }, + { + "test_json": "tecNO_DST_INSUF_XRP", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7D" + }, + { + "test_json": 125, + "canonical_json": "tecNO_DST_INSUF_XRP", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7D" + }, + { + "test_json": "tecNO_LINE_INSUF_RESERVE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7E" + }, + { + "test_json": 126, + "canonical_json": "tecNO_LINE_INSUF_RESERVE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7E" + }, + { + "test_json": "tecNO_LINE_REDUNDANT", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7F" + }, + { + "test_json": 127, + "canonical_json": "tecNO_LINE_REDUNDANT", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "7F" + }, + { + "test_json": "tecPATH_DRY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "80" + }, + { + "test_json": 128, + "canonical_json": "tecPATH_DRY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "80" + }, + { + "test_json": "tecUNFUNDED", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "81" + }, + { + "test_json": 129, + "canonical_json": "tecUNFUNDED", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "81" + }, + { + "test_json": "tecMASTER_DISABLED", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "82" + }, + { + "test_json": 130, + "canonical_json": "tecMASTER_DISABLED", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "82" + }, + { + "test_json": "tecNO_REGULAR_KEY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "83" + }, + { + "test_json": 131, + "canonical_json": "tecNO_REGULAR_KEY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "83" + }, + { + "test_json": "tecOWNERS", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "84" + }, + { + "test_json": 132, + "canonical_json": "tecOWNERS", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "84" + }, + { + "test_json": "tecNO_ISSUER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "85" + }, + { + "test_json": 133, + "canonical_json": "tecNO_ISSUER", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "85" + }, + { + "test_json": "tecNO_AUTH", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "86" + }, + { + "test_json": 134, + "canonical_json": "tecNO_AUTH", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "86" + }, + { + "test_json": "tecNO_LINE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "87" + }, + { + "test_json": 135, + "canonical_json": "tecNO_LINE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "87" + }, + { + "test_json": "tecINSUFF_FEE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "88" + }, + { + "test_json": 136, + "canonical_json": "tecINSUFF_FEE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "88" + }, + { + "test_json": "tecFROZEN", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "89" + }, + { + "test_json": 137, + "canonical_json": "tecFROZEN", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "89" + }, + { + "test_json": "tecNO_TARGET", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8A" + }, + { + "test_json": 138, + "canonical_json": "tecNO_TARGET", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8A" + }, + { + "test_json": "tecNO_PERMISSION", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8B" + }, + { + "test_json": 139, + "canonical_json": "tecNO_PERMISSION", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8B" + }, + { + "test_json": "tecNO_ENTRY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8C" + }, + { + "test_json": 140, + "canonical_json": "tecNO_ENTRY", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8C" + }, + { + "test_json": "tecINSUFFICIENT_RESERVE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8D" + }, + { + "test_json": 141, + "canonical_json": "tecINSUFFICIENT_RESERVE", + "type_id": 16, + "type_specialisation_field": "TransactionResult", + "type": "UInt8", + "expected_hex": "8D" + } + ] +} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/delivermin-tx-binary.json b/packages/ripple-binary-codec/test/fixtures/delivermin-tx-binary.json new file mode 100644 index 00000000..b4703139 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/delivermin-tx-binary.json @@ -0,0 +1 @@ +"1200002280020000240000689E201B010BF0E361D4950EA99C657EF800000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1684000000000002AF8694000000000003A986AD40485B690F28E8000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D173210254D771E2A30552D1F347F5B88EC87513843F8BC1A408E70A4175B2E3C325FD3C7446304402202A4965FCF0571B7308971956864B1949C2BD924B5A41B5E8DAF00C91C64F964502207FD3BEB7C165BD1F10E6E7C443742BD686F8E102A89B502A4A495F4C29EC5C488114EAAA52373B59DCFBFD3476049AA6408AA22EAA898314EAAA52373B59DCFBFD3476049AA6408AA22EAA8901123000000000000000000000000055534400000000000A20B3C85F482532A9578DBB3950B85CA06594D1FF01FDF050193BEDEAA9074764B961405D31E66AC0E9300000000000000000000000005553440000000000FDF050193BEDEAA9074764B961405D31E66AC0E901FDF050193BEDEAA9074764B961405D31E66AC0E9FF300000000000000000000000005553440000000000DD39C650A96EDA48334E70CC4A85B8B2E8502CD301DD39C650A96EDA48334E70CC4A85B8B2E8502CD3017C44F934D7A5FEEBD1530570CDB83D1D8EF1F37E00" diff --git a/packages/ripple-binary-codec/test/fixtures/delivermin-tx.json b/packages/ripple-binary-codec/test/fixtures/delivermin-tx.json new file mode 100644 index 00000000..910fa8c6 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/delivermin-tx.json @@ -0,0 +1,98 @@ +{ + "Account": "r4PowrZ7KZw83oWDYxzY82ht2kgDmFUpB7", + "Amount": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "5.927096147083" + }, + "DeliverMin": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0.012729190692" + }, + "Destination": "r4PowrZ7KZw83oWDYxzY82ht2kgDmFUpB7", + "Fee": "11000", + "Flags": 2147614720, + "LastLedgerSequence": 17559779, + "Paths": [ + [ + { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "type": 48, + "type_hex": "0000000000000030" + } + ], + [ + { + "account": "rQ96qm46YsRX2F7SSCQxToR2ybRuUYsZ4R", + "type": 1, + "type_hex": "0000000000000001" + }, + { + "currency": "USD", + "issuer": "rQ96qm46YsRX2F7SSCQxToR2ybRuUYsZ4R", + "type": 48, + "type_hex": "0000000000000030" + }, + { + "account": "rQ96qm46YsRX2F7SSCQxToR2ybRuUYsZ4R", + "type": 1, + "type_hex": "0000000000000001" + } + ], + [ + { + "currency": "USD", + "issuer": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", + "type": 48, + "type_hex": "0000000000000030" + }, + { + "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q", + "type": 1, + "type_hex": "0000000000000001" + }, + { + "account": "rULnR9YhAkj9HrcxAcudzBhaXRSqT7zJkq", + "type": 1, + "type_hex": "0000000000000001" + } + ] + ], + "SendMax": "15000", + "Sequence": 26782, + "SigningPubKey": "0254D771E2A30552D1F347F5B88EC87513843F8BC1A408E70A4175B2E3C325FD3C", + "TransactionType": "Payment", + "TxnSignature": "304402202A4965FCF0571B7308971956864B1949C2BD924B5A41B5E8DAF00C91C64F964502207FD3BEB7C165BD1F10E6E7C443742BD686F8E102A89B502A4A495F4C29EC5C48", + "date": 502912010, + "hash": "0FB10DF664F33840ABC68A8BBE78178359C55AC1AFC83DB468CE69C4A86E3EAC", + "inLedger": 17559773, + "ledger_index": 17559773, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r4PowrZ7KZw83oWDYxzY82ht2kgDmFUpB7", + "Balance": "1064773000", + "Flags": 65536, + "OwnerCount": 9, + "Sequence": 26783 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "0D7F8ADAA3269E9C8B2AA9CDE31BC57E2E52133F36516D3DF576DBCE6E405BDC", + "PreviousFields": { + "Balance": "1064784000", + "Sequence": 26782 + }, + "PreviousTxnID": "E028797D6C7AE9B84C6930452D427D5E40CE23E199E8DF0534DAAE5277A76CC1", + "PreviousTxnLgrSeq": 17537115 + } + } + ], + "TransactionIndex": 12, + "TransactionResult": "tecPATH_PARTIAL" + }, + "validated": true +} diff --git a/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-binary.json b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-binary.json new file mode 100644 index 00000000..213509b4 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-binary.json @@ -0,0 +1 @@ +"1200132280000000240000004168400000000000000A732103EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A5574473045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D81148A928D14A643F388AC0D26BAF9755B07EB0A2B44851486FFE2A17E861BA0FE9A3ED8352F895D80E789E0" \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-meta-binary.json b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-meta-binary.json new file mode 100644 index 00000000..e10fce8c --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx-meta-binary.json @@ -0,0 +1 @@ +"201C00000000F8E51100612500AE5F59558107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E56146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2E624000000412D00000007624000000249CB5DD0E1E7220000000024000000422D00000008624000000249CB5DC681148A928D14A643F388AC0D26BAF9755B07EB0A2B44E1E1E311007056C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3AE881148A928D14A643F388AC0D26BAF9755B07EB0A2B44851486FFE2A17E861BA0FE9A3ED8352F895D80E789E0E1E1E511006456CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82ECE7220000000058CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC82148A928D14A643F388AC0D26BAF9755B07EB0A2B44E1E1F1031000" \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx.json b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx.json new file mode 100644 index 00000000..784af380 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/deposit-preauth-tx.json @@ -0,0 +1,58 @@ +{ + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "Authorize": "rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 65, + "SigningPubKey": "03EB1E2603E7571D6144684996C10DA75063D6E2F3B3FDABE38B857C1BE9578A55", + "TransactionType": "DepositPreauth", + "TxnSignature": "3045022100B0A5672E3E09FA3AF8CF1DCC1D8C881F58B39212D6FDC42CCF30E5400D0EFD9F02202DDD9517D9409D1D9A529B8AEA7DE13AE4CDF96BB6D18FA0D9732DBFC887348D", + "hash": "B5D94C027C846171B2F5D4C2D126E88580BF369986A155C1890352F5BC4D7AF9", + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "Balance": "9827999174", + "Flags": 0, + "OwnerCount": 8, + "Sequence": 66 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "146AAAF7A266D8A92DFFEAB1A71B6523534F27820873F4E213014B23398867D2", + "PreviousFields": { + "Balance": "9827999184", + "OwnerCount": 7, + "Sequence": 65 + }, + "PreviousTxnID": "8107CEE99D556326ACD4662CA10A24550240D9F933E55435A0C0DB3B06DD343E", + "PreviousTxnLgrSeq": 11427673 + } + }, + { + "CreatedNode": { + "LedgerEntryType": "DepositPreauth", + "LedgerIndex": "C2D0317AD266B93CB3B36AEB0ABB673B0AFFAB134809CCACFD7158F539603C3A", + "NewFields": { + "Account": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "Authorize": "rDJFnv5sEfp42LMFiX3mVQKczpFTdxYDzM" + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rDd6FpNbeY2CrQajSmP178BmNGusmQiYMM", + "RootIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "CD08416851CA53E9649408118A4908E01E43436ED950886D1B1E66F4B68B82EC" + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + } +} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-cancel-binary.json b/packages/ripple-binary-codec/test/fixtures/escrow-cancel-binary.json new file mode 100644 index 00000000..f9d13347 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-cancel-binary.json @@ -0,0 +1 @@ +"1200042019000000198114EE5F7CF61504C7CF7E0C22562EB19CC7ACB0FCBA8214EE5F7CF61504C7CF7E0C22562EB19CC7ACB0FCBA" diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-cancel-tx.json b/packages/ripple-binary-codec/test/fixtures/escrow-cancel-tx.json new file mode 100644 index 00000000..4f51c2d3 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-cancel-tx.json @@ -0,0 +1,6 @@ +{ + "Account" : "r4jQDHCUvgcBAa5EzcB1D8BHGcjYP9eBC2", + "OfferSequence" : 25, + "Owner" : "r4jQDHCUvgcBAa5EzcB1D8BHGcjYP9eBC2", + "TransactionType" : "EscrowCancel" +} diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-create-binary.json b/packages/ripple-binary-codec/test/fixtures/escrow-create-binary.json new file mode 100644 index 00000000..58fa1ea2 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-create-binary.json @@ -0,0 +1 @@ +"1200012E00005BB82024258D09812025258D0980614000000000000064701127A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B8558101008114EE5F7CF61504C7CF7E0C22562EB19CC7ACB0FCBA8314B5F762798A53D543A014CAF8B297CFF8F2F937E8" diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-create-tx.json b/packages/ripple-binary-codec/test/fixtures/escrow-create-tx.json new file mode 100644 index 00000000..376efaf6 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-create-tx.json @@ -0,0 +1,10 @@ +{ + "Account" : "r4jQDHCUvgcBAa5EzcB1D8BHGcjYP9eBC2", + "Amount" : "100", + "CancelAfter" : 630000001, + "Condition" : "A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100", + "Destination" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "DestinationTag" : 23480, + "FinishAfter" : 630000000, + "TransactionType": "EscrowCreate" +} diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-finish-binary.json b/packages/ripple-binary-codec/test/fixtures/escrow-finish-binary.json new file mode 100644 index 00000000..1922af43 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-finish-binary.json @@ -0,0 +1 @@ +"1200022280000000240000000320190000000268400000000000000A7321028DB04DA8B702272B2A29FAF3DBCF40D01386208E6A9541DB497BE962FEF96A9C74473045022100E3C860D54E88AFA8584FBED99AA38BCB512AB1D69D87F3F71EF38ACB6EA4B7A202204CC1BB34DAA221416DB8946B583D4F33C7E22C130F9FA49353FB6ADB2DF6C69D8114E151CA3207BAB5B91D2F0E4D35ECDFD4551C69A18214E151CA3207BAB5B91D2F0E4D35ECDFD4551C69A1" diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-finish-meta-binary.json b/packages/ripple-binary-codec/test/fixtures/escrow-finish-meta-binary.json new file mode 100644 index 00000000..cb8f0c5d --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-finish-meta-binary.json @@ -0,0 +1 @@ +"201C0000000BF8E511006125020B814F55F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F95644A462A2806A513D7480CA71059D3D33637B65458017A8828A8F95AF17272501E6624000000010DC67D0E1E7220000000024000000052D00000000624000000013C074F08114DC0BCC71D87BB4E684B35721DC12F2C4E1ABABA4E1E1E4110075569766AE124E5053BCFDE253F6E3DDBAC13858CC0700DDECDCD57FF2FA777BEF7DE7220000000025020B814F202521A0C1B834000000000000000039000000000000000055F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F9614000000002E40D208114E151CA3207BAB5B91D2F0E4D35ECDFD4551C69A18314DC0BCC71D87BB4E684B35721DC12F2C4E1ABABA4E1E1E511006456BA4B47767C25E21CCDA3553BD45BE3699B34B508B459FE0472C70C51660058E0E7220000000058BA4B47767C25E21CCDA3553BD45BE3699B34B508B459FE0472C70C51660058E08214E151CA3207BAB5B91D2F0E4D35ECDFD4551C69A1E1E1E511006125020B814F55F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F956E4DA2A510F0C7FFD0474FAA4C7308A83828E0B3DD09EAA9CFDFFC067E3719D2EE624000000032D00000001624000000002FAF06CE1E7220000000024000000042D00000000624000000002FAF0628114E151CA3207BAB5B91D2F0E4D35ECDFD4551C69A1E1E1E511006456ECE79D27042E87B02DF3A263DB6BB6FCD96E69E20E0955F84D47D164C37546A1E7220000000058ECE79D27042E87B02DF3A263DB6BB6FCD96E69E20E0955F84D47D164C37546A18214DC0BCC71D87BB4E684B35721DC12F2C4E1ABABA4E1E1F1031000" diff --git a/packages/ripple-binary-codec/test/fixtures/escrow-finish-tx.json b/packages/ripple-binary-codec/test/fixtures/escrow-finish-tx.json new file mode 100644 index 00000000..3b751a81 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/escrow-finish-tx.json @@ -0,0 +1,95 @@ +{ + "Account": "rMYPppnVNQ7crMizv8D6wF45kYuSupygyr", + "Fee": "10", + "Flags": 2147483648, + "OfferSequence": 2, + "Owner": "rMYPppnVNQ7crMizv8D6wF45kYuSupygyr", + "Sequence": 3, + "SigningPubKey": "028DB04DA8B702272B2A29FAF3DBCF40D01386208E6A9541DB497BE962FEF96A9C", + "TransactionType": "EscrowFinish", + "TxnSignature": "3045022100E3C860D54E88AFA8584FBED99AA38BCB512AB1D69D87F3F71EF38ACB6EA4B7A202204CC1BB34DAA221416DB8946B583D4F33C7E22C130F9FA49353FB6ADB2DF6C69D", + "hash": "1A76D4BA47A53A66B539D4BD4C30826A5E51C78D0B7344758EACAC77A6753C3C", + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rMhV8zfKJRqEspcayRfqa4FuzQg8kW5LdB", + "Balance": "331379952", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 5 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "44A462A2806A513D7480CA71059D3D33637B65458017A8828A8F95AF17272501", + "PreviousFields": { + "Balance": "282879952" + }, + "PreviousTxnID": "F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F9", + "PreviousTxnLgrSeq": 34308431 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rMYPppnVNQ7crMizv8D6wF45kYuSupygyr", + "Amount": "48500000", + "Destination": "rMhV8zfKJRqEspcayRfqa4FuzQg8kW5LdB", + "DestinationNode": "0000000000000000", + "FinishAfter": 564183480, + "Flags": 0, + "OwnerNode": "0000000000000000", + "PreviousTxnID": "F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F9", + "PreviousTxnLgrSeq": 34308431 + }, + "LedgerEntryType": "Escrow", + "LedgerIndex": "9766AE124E5053BCFDE253F6E3DDBAC13858CC0700DDECDCD57FF2FA777BEF7D" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rMYPppnVNQ7crMizv8D6wF45kYuSupygyr", + "RootIndex": "BA4B47767C25E21CCDA3553BD45BE3699B34B508B459FE0472C70C51660058E0" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "BA4B47767C25E21CCDA3553BD45BE3699B34B508B459FE0472C70C51660058E0" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rMYPppnVNQ7crMizv8D6wF45kYuSupygyr", + "Balance": "49999970", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 4 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "E4DA2A510F0C7FFD0474FAA4C7308A83828E0B3DD09EAA9CFDFFC067E3719D2E", + "PreviousFields": { + "Balance": "49999980", + "OwnerCount": 1, + "Sequence": 3 + }, + "PreviousTxnID": "F72706F8C7B9C07D83332BE330D77B5CE6A246FE4FA04DD47EBC88719A35B5F9", + "PreviousTxnLgrSeq": 34308431 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rMhV8zfKJRqEspcayRfqa4FuzQg8kW5LdB", + "RootIndex": "ECE79D27042E87B02DF3A263DB6BB6FCD96E69E20E0955F84D47D164C37546A1" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "ECE79D27042E87B02DF3A263DB6BB6FCD96E69E20E0955F84D47D164C37546A1" + } + } + ], + "TransactionIndex": 11, + "TransactionResult": "tesSUCCESS" + } +} diff --git a/packages/ripple-binary-codec/test/fixtures/ledger-full-38129.json b/packages/ripple-binary-codec/test/fixtures/ledger-full-38129.json new file mode 100644 index 00000000..d9ff4b53 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/ledger-full-38129.json @@ -0,0 +1 @@ +{"close_flags": 0, "parent_close_time" : 410424200, "accepted":true, "accountState" : [{"LedgerEntryType":"AccountRoot","index":"02CE52E3E46AD340B1C7900F86AFB959AE0C246916E3463905EDD61DE26FFFDD","Account":"rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7","PreviousTxnID":"8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4","PreviousTxnLgrSeq":8901,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"370000000"},{"LedgerEntryType":"AccountRoot","index":"032D4205B5D7DCEC8A4E56851C44555F6DC7D410AA823AE140C78674B8734DBF","Account":"rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv","PreviousTxnID":"DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF","PreviousTxnLgrSeq":7,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"],"Owner":"rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG","index":"059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6","RootIndex":"059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6","Flags":0},{"LedgerEntryType":"AccountRoot","index":"0759D1C1AF5C5C2251041D89AA5F0BED1F5862B81C871CB22EBAD2791BAB4429","Account":"rpGaCyHRYbgKhErgFih3RdjJqXDsYBouz3","PreviousTxnID":"B6632D6376A2D9319F20A1C6DCCB486432D1E4A79951229D4C3DE2946F51D566","PreviousTxnLgrSeq":26725,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"AccountRoot","index":"08A35A2FF113218BEE04FC88497423D6DB4DB0CE449D0EDE52116ED7346E06A4","Account":"rUnFEsHjxqTswbivzL2DNHBb34rhAgZZZK","PreviousTxnID":"0735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E5","PreviousTxnLgrSeq":8,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"093DB18D8C4149E47B18BB66FF32707D1DE48558D130A7C3CA6726D20C89BA69","Account":"r4mscDrVMQz2on2px31aV5e5ouHeRPn8oy","PreviousTxnID":"FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262","PreviousTxnLgrSeq":31802,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198","52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"0A00840157CD29095E4C1B36D531DD24724CB671FDC8849F0C793EEB9FEC271E","IndexPrevious":"0000000000000001","IndexNext":"0000000000000002","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28","263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8","C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C","A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00"],"Owner":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","index":"0AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C","RootIndex":"0AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C","Flags":0},{"LedgerEntryType":"AccountRoot","index":"0CDD052C146A8C41332FA75348FAD0F09C095D6D75AEB1B745F12F08693BCFF3","Account":"rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ","PreviousTxnID":"C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F","PreviousTxnLgrSeq":10066,"OwnerCount":0,"Flags":0,"Sequence":2,"Balance":"199999990"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0","currency":"USD"},"index":"10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F","PreviousTxnID":"C6A2521BBCCF13282C4FFEBC00D47BBA18C6CE5F5E4E0EFC3E3FCE364BAFC6B8","PreviousTxnLgrSeq":239,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"HighLimit":{"issuer":"rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE","value":"0","currency":"EUR"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va","value":"20","currency":"EUR"},"HighNode":"0000000000000000","index":"116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747","LowNode":"0000000000000000","PreviousTxnID":"BDBDD6CCF2F8211B41072BC37E934D2270F58EA5D5F44F7CA8483CF348B9377B","PreviousTxnLgrSeq":23161,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"EUR"}},{"LedgerEntryType":"AccountRoot","index":"11AE1AD4EDD8AB9FBB5633CF2BBC839F8DC2925694899AB7FD867CB916E2FE51","Account":"rLCvFaWk9WkJCCyg9Byvwbe9gxn1pnMLWL","PreviousTxnID":"5D2CC18F142044F1D792DC33D82218665359979ECFD5CD29211CC9CD6704F88C","PreviousTxnLgrSeq":9,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"123844B6D8A1C962D9550B458148446BBED40FE76FEFCDC9EAE4EE28CF4035F6","Account":"rLzpfV5BFjUmBs8Et75Wurddg4CCXFLDFU","PreviousTxnID":"FB7889B08F6B6413E37A3FBDDA421323B2E00EC2FDDFCE7A9035A2E12CA776E8","PreviousTxnLgrSeq":8836,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"1339FDDB2A22B6E1A58B9FF4CF2F82B2DE1D573FD1E86D269575E7962764E32B","Account":"rKZig5RFv5yWAqMi9PtC5akkGpNtn3pz8A","PreviousTxnID":"1CE378FA7D55A2F000943FBB4EE60233AECC75CDE3F2845F0B603165968D9CB4","PreviousTxnLgrSeq":8281,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC","2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D"],"Owner":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","index":"135865FC9FD50B9D4A60014354B6CD773933F9B7D7C3F95A2B25473A8855B3E1","IndexPrevious":"0000000000000002","IndexNext":"0000000000000003","RootIndex":"1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C","Flags":0},{"LedgerEntryType":"AccountRoot","index":"13AC6889F24D27C2CFE8BEA4F2015A40B321D556C332695EF32C43A0DFAA0A7C","Account":"rLeRkwDgbPVeSakJ2uXC2eqR8NLWMvU3kN","PreviousTxnID":"F2BA48100AAEA92FAA28718F2F3E50452D7069696FAE781FE5043552593F95A5","PreviousTxnLgrSeq":3755,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"40000000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"5","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"0","currency":"BTC"},"index":"142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5","PreviousTxnID":"7B4DEC82CF3BE513DA95C57282FBD0659E4E352BF59FA04C6C819E4BBD7CFFC5","PreviousTxnLgrSeq":222,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"14F1FE0D1CAC489EDB11AC3ACA089FA46CC156B63B442F28681C685D871B4CED","Account":"rUy6q3TxE4iuVWMpzycrQfD5uZok51g1cq","PreviousTxnID":"61055B0F50077E654D61666A1A58E24C9B4FB4C2541AC09E2CA1F850C57E0C7B","PreviousTxnLgrSeq":24230,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK","value":"25","currency":"USD"},"index":"1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5","PreviousTxnID":"3906085AB9862A404113E9B17BF00E796D8A80ED2B1066212AB4F00A7D7BCD1D","PreviousTxnLgrSeq":8893,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"HighLimit":{"issuer":"r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3","value":"50","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"50","currency":"USD"},"index":"17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036","PreviousTxnID":"7AE0C1DBADD06E4150AB00E94BD5AD41A3D1E5FC852C8A6922B5EFD2E812709E","PreviousTxnLgrSeq":10074,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"],"Owner":"rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i","index":"17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B","RootIndex":"17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B","Flags":0},{"LedgerEntryType":"AccountRoot","index":"189421C25E1A4E2EF76706DABD5BAB665350A4C2C21EA7F60C90BEB2782B3CCE","Account":"r43mpEMKY1cVUX8k6zKXnRhZMEyPU9aHzR","PreviousTxnID":"2748D2555190DD2CC803E616C5276E299841DA53FB15AA9EFBEA1003549F7DD1","PreviousTxnLgrSeq":3736,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"200000000000000"},{"LedgerEntryType":"AccountRoot","index":"18CCCF5B17E8249F29E063E0DD4CDDD456A735D32F84BEEDFA28DBC395208132","Account":"rMwNkcpvcJucoWbFW89EGT6TfZyGUkaGso","PreviousTxnID":"26B0EFCF1501118BD60F2BCD075E18865D8660B18C6581A8DDD626FA30976257","PreviousTxnLgrSeq":10,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"1A2655AF29E0F2A67B1AB9ADBA8E20BB519643E501B6C1D1F260A37CE551DA43","Account":"r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG","PreviousTxnID":"C26F87CB499395AC8CD2DEDB7E944F4F16CEE07ECA0B481F9E2536450B7CC0DA","PreviousTxnLgrSeq":10128,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"9999999990"},{"LedgerEntryType":"DirectoryNode","Indexes":["26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873"],"Owner":"rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo","index":"1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1","RootIndex":"1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1","Flags":0},{"LedgerEntryType":"AccountRoot","index":"1D244513C5E50ADD3E8FD609F59EA5C9025084BC4AC6323A7379D3DB612485BF","Account":"r3AthBf5eW4b9ujLoXNHFeeEJsK3PtJDea","PreviousTxnID":"DA77B52C935CB91BE7E5D62FC3D1443A4861944944B4BD097F9210320C0AD859","PreviousTxnLgrSeq":26706,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"AccountRoot","index":"1D8325B5042AB6516C770CADB520AF2EFD6651C3E19F9447302B3F0A64A58B1B","Account":"rHC5QwZvGxyhC75StiJwZCrfnHhtSWrr8Y","PreviousTxnID":"16112AA178A920DA89B5F8D9DFCBA3487A767BD612AE4AF60B214A2136F7BEF5","PreviousTxnLgrSeq":12,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"2000000000"},{"LedgerEntryType":"AccountRoot","index":"1DE259DB4EC17712E018546C9C749C1EE95CD24749E69AF914A53A066FD4D751","Account":"rPhMwMcn8ewJiM6NnP6xrm9NZBbKZ57kw1","PreviousTxnID":"D51FCBB193C8B1B3B981F894E0535FD58478B1146ECCC35DB462FE0C1A6B6CB6","PreviousTxnLgrSeq":26800,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF","142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5"],"Owner":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","index":"1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C","IndexPrevious":"0000000000000003","IndexNext":"0000000000000001","RootIndex":"1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"],"Owner":"rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd","index":"1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4","RootIndex":"1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4","Flags":0},{"LedgerEntryType":"AccountRoot","index":"202A624CC0A77BA877355FD55E080421BE5DE05D57E1FABCE8660D519CF52970","Account":"rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE","PreviousTxnID":"D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A","PreviousTxnLgrSeq":31179,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000000"},{"LedgerEntryType":"AccountRoot","index":"23A6FCA0449A1D86CD71CAFB77A32BFA476330F2115649CD20D2C463A545B507","Account":"rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG","PreviousTxnID":"19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA","PreviousTxnLgrSeq":17698,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"500000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714","F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06"],"Owner":"rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6","index":"23E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF","RootIndex":"23E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF","Flags":0},{"HighLimit":{"issuer":"rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"HighNode":"0000000000000000","index":"25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766","LowNode":"0000000000000000","PreviousTxnID":"54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA","PreviousTxnLgrSeq":20183,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"HighLimit":{"issuer":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","value":"60000","currency":"JPY"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"0","currency":"JPY"},"HighNode":"0000000000000000","index":"263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8","LowNode":"0000000000000000","PreviousTxnID":"A5C133CE96EEE6769F98A24B476A2E4B7B235C64C70527D8992A54D7A9625264","PreviousTxnLgrSeq":17771,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"JPY"}},{"LedgerEntryType":"AccountRoot","index":"269B7A69D9515289BBBC219F40AE3D95CACA122666CC0DE9C58ABB9828EDC748","Account":"rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo","PreviousTxnID":"64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5","PreviousTxnLgrSeq":2972,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"9100000000"},{"LedgerEntryType":"AccountRoot","index":"26AE15E5D0A61A7639D3370DB32BC14E9C50E9297D62D0924C2B7E98F5FBDBDA","Account":"rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK","PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"159999999990"},{"HighLimit":{"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo","value":"10","currency":"USD"},"HighNode":"0000000000000000","index":"26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873","LowNode":"0000000000000000","PreviousTxnID":"2E504E650BEE8920BF979ADBE6236C6C3F239FA2B37F22741DCFAF245091115D","PreviousTxnLgrSeq":16676,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"26EF6622D710EFE9888607A5883587AFAFB769342E3025AFB7EF08252DC5AAF9","Account":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","PreviousTxnID":"4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6","PreviousTxnLgrSeq":17841,"OwnerCount":6,"Flags":0,"Sequence":11,"Balance":"5999999900"},{"LedgerEntryType":"DirectoryNode","Indexes":["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"],"Owner":"rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8","index":"289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816","RootIndex":"289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816","Flags":0},{"LedgerEntryType":"AccountRoot","index":"28DAA09336D24E4590CA8C142420DDADAB78E7A8AA2BE79598B582A427B08D38","Account":"rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th","PreviousTxnID":"12B9558B22BB2DF05643B745389145A2E12A07CD9AD6AB7F653A4B24DC50B2E0","PreviousTxnLgrSeq":16,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"20300000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C","ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"28E3BF81845501D2901A543A1F61945E9C897611725E3F0D3653606445952B46","IndexPrevious":"0000000000000003","IndexNext":"0000000000000004","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"AccountRoot","index":"29EAD07C4935276D64EC18BE2D33CCDF04819F73BCB2F9E1E63389DE1D90E901","Account":"rnT9PFSfAnWyj2fd7D5TCoCyCYbK4n356A","PreviousTxnID":"7C27C4820F6E4BA7B0698253A38410EB68D82B5433EA320848677F9B1180B447","PreviousTxnLgrSeq":24182,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"2A7D9A80B55D8E553D1E83697A836806F479F144040AC2C2C7C02CB61E7BAE5C","Account":"rEyhgkRqGdCK7nXtfmADrqWYGT6rSsYYEZ","PreviousTxnID":"1EC7E89A17180B5DBA0B15709B616CB2CD703DC54702EB5EDCB1B95F3526AAC3","PreviousTxnLgrSeq":14804,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"2AFFF572EE9C1E1FD8E58571958D4B28271B36468555EDA51C3E562583454DE6","Account":"rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA","PreviousTxnID":"54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA","PreviousTxnLgrSeq":20183,"OwnerCount":0,"Flags":0,"Sequence":4,"Balance":"4998999999970"},{"LedgerEntryType":"AccountRoot","index":"2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8","Account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","PreviousTxnID":"4EF16211BE5869C19E010B639568AA335DB9D9C7D02AC952A97E314A9C04743A","PreviousTxnLgrSeq":12718,"OwnerCount":0,"Flags":0,"Sequence":47,"Balance":"200999540"},{"LedgerEntryType":"AccountRoot","index":"2B8FE9A40BA54A49D90089C4C9A4A61A732839E1D764ADD9E1CF91591BBF464D","Account":"rhWcbzUj9SVJocfHGLn58VYzXvoVnsU44u","PreviousTxnID":"2C41F6108DF7234FFA6CCE96079196CF0F0B86E988993ECC8BAD6B61F0FAEFAE","PreviousTxnLgrSeq":3748,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"60000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A"],"Owner":"rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB","index":"2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582","RootIndex":"2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582","Flags":0},{"HighLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"1","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0","currency":"BTC"},"index":"2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D","PreviousTxnID":"0C3BB479DBDF48DFC99792E46DEE584545F365D04351D57480A0FBD4543980EC","PreviousTxnLgrSeq":247,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"DirectoryNode","Indexes":["5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719"],"index":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727","TakerGetsIssuer":"0000000000000000000000000000000000000000","ExchangeRate":"4F0415EB4EA0C727","TakerPaysIssuer":"2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08","RootIndex":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727","TakerPaysCurrency":"0000000000000000000000005553440000000000","Flags":0,"TakerGetsCurrency":"0000000000000000000000000000000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46"],"index":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000","TakerGetsIssuer":"0000000000000000000000000000000000000000","ExchangeRate":"5003BAF82D03A000","TakerPaysIssuer":"2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08","RootIndex":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000","TakerPaysCurrency":"0000000000000000000000005553440000000000","Flags":0,"TakerGetsCurrency":"0000000000000000000000000000000000000000"},{"LedgerEntryType":"AccountRoot","index":"2FFF7F5618D7B6552E41C4E85C52199C8DCD00F956DD9FFCDDBBB3A577BDE203","Account":"rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i","PreviousTxnID":"1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44","PreviousTxnLgrSeq":8897,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"370000000"},{"LedgerEntryType":"AccountRoot","index":"3079F5FC3E6E060FE52801E076792BB37547F0A7C2564197863D843C2515E46F","Account":"rJFGHvCtpPrftTmeNAs8bYy5xUeTaxCD5t","PreviousTxnID":"07F84B7AF363F23B822105078EBE49CC18E846B23697A3652294B2CCD333ACCF","PreviousTxnLgrSeq":21,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"1","currency":"BTC"},"index":"353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5","PreviousTxnID":"38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4","PreviousTxnLgrSeq":2948,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"HighLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"10","currency":"USD"},"index":"35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC","PreviousTxnID":"D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA","PreviousTxnLgrSeq":4174,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06","B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93"],"Owner":"rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7","index":"3811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F6","RootIndex":"3811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F6","Flags":0},{"LedgerEntryType":"AccountRoot","index":"38C03D6A074E46391FAE5918C0D7925D6D59949DDA5D349FA62A985DA250EA36","Account":"rNSnpURu2o7mD9JPjaLsdUw2HEMx5xHzd","PreviousTxnID":"DA64AD82376A8162070421BBB7644282F0B012779A0DECA1FC2EF01285E9F7A0","PreviousTxnLgrSeq":28,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"3A1D03661A08E69C2084FD210FE3FF052320792AE646FDD6BA3C806E273E3700","Account":"rHTxKLzRbniScyQFGMb3NodmxA848W8dKM","PreviousTxnID":"D4AFFB56DCCCB4394A067BF61EA8084E53317392732A27D021FBB6B2ED4B19B9","PreviousTxnLgrSeq":76,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"500000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB","D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE"],"Owner":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","index":"3AFECDA9A7036375FC5B5F86CBFF23EBF62252E2E1613B6798F94726E71BFEC2","IndexPrevious":"0000000000000001","IndexNext":"0000000000000002","RootIndex":"98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D","Flags":0},{"LedgerEntryType":"AccountRoot","index":"3B7FE3DCBAFD6C843FA8821A433C8B7A8BBE3B3E5541358DEFC292D9A1DB5DF7","Account":"rHDcKZgR7JDGQEe9r13UZkryEVPytV6L6F","PreviousTxnID":"62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012","PreviousTxnLgrSeq":26946,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"100000000000000"},{"LedgerEntryType":"AccountRoot","index":"3C0CD0B3DF9D4DD1BA4E60D8806ED83FCFCFCB07A4EA352E5838610F272F0ABD","Account":"rNWzcdSkXL28MeKaPwrvR3i7yU6XoqCiZc","PreviousTxnID":"4D2FA912FFA328BC36A0804E1CC9FB4A54689B1419F9D22188DA59E739578E79","PreviousTxnLgrSeq":8315,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"AccountRoot","index":"3E537F745F12CF4083F4C43439D10B680CE913CCC064655FA8E70E76683C439A","Account":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","PreviousTxnID":"0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24","PreviousTxnLgrSeq":240,"OwnerCount":12,"Flags":0,"Sequence":14,"Balance":"5024999870"},{"LedgerEntryType":"AccountRoot","index":"3EBDF5D8E6116FFFCF5CC0F3245C88118A42243097BD7E215D663720B396A8CC","Account":"rUZRZ2b4NyCxjHSQKiYnpBuCWkKwDWTjxw","PreviousTxnID":"D70ACED6430B917DBFD98F92ECC1B7222C41E0283BC5854CC064EB01288889BF","PreviousTxnLgrSeq":32,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"],"Owner":"r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG","index":"3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E","RootIndex":"3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5","E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714"],"Owner":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","index":"3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9","IndexPrevious":"0000000000000001","IndexNext":"0000000000000001","RootIndex":"3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997"],"Owner":"rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8","index":"4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01","RootIndex":"4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01","Flags":0},{"HighLimit":{"issuer":"rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"1","currency":"BTC"},"index":"42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C","PreviousTxnID":"64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5","PreviousTxnLgrSeq":2972,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"433E8FD49EC8DC993D448FB68218E0E57C46B019D49689D87C5C7C7865BE5669","Account":"rfitr7nL7MX85LLKJce7E3ATQjSiyUPDfj","PreviousTxnID":"D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31","PreviousTxnLgrSeq":26917,"OwnerCount":0,"Flags":0,"Sequence":2,"Balance":"9998999990"},{"LedgerEntryType":"DirectoryNode","Indexes":["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6","4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","IndexPrevious":"0000000000000005","IndexNext":"0000000000000001","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"HighLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"3","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS","value":"0","currency":"BTC"},"index":"44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01","PreviousTxnID":"93DDD4D2532AB1BFC2A18FB2E32542A24EA353AEDF482520792F8BCDEAA77E87","PreviousTxnLgrSeq":10103,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"DirectoryNode","Indexes":["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C","AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"451F831E71B27416D2E6FFDC40C883E70CA5602E0325A8D771B2863379AC3144","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766"],"Owner":"rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA","index":"48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D","RootIndex":"48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D","Flags":0},{"LedgerEntryType":"AccountRoot","index":"4A94479428D5C50913BF1BE1522B09C558AC17D4AAFD4B8954173BBC2E5ED6D1","Account":"rUf6pynZ8ucVj1jC9bKExQ7mb9sQFooTPK","PreviousTxnID":"66E8E26B5D80658B19D772E9CA701F5E6101A080DA6C45B386521EE2191315EE","PreviousTxnLgrSeq":3739,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"100000000000000"},{"LedgerEntryType":"AccountRoot","index":"4B2124F3A6A259DB7C7E4F479B0FCED29FD7813E8D411FDB2F030FD96F790D10","Account":"r49pCti5xm7WVNceBaiz7vozvE9zUGq8z2","PreviousTxnID":"4FD7B01EF2A4D4A34336DAD124D774990DBBDD097E2A4DD8E8FB992C7642DDA1","PreviousTxnLgrSeq":33,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"2000000000"},{"LedgerEntryType":"AccountRoot","index":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","PreviousTxnID":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","PreviousTxnLgrSeq":38129,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489","571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"],"Owner":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","index":"4E166141B72DC6C5A778B0E31453AC118DD6CE4E9F485E6A1AC0FAC08D33EABC","RootIndex":"3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5"],"Owner":"rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK","index":"4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD","RootIndex":"4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD","Flags":0},{"LedgerEntryType":"AccountRoot","index":"4F45809C0AFAB3F63E21A994E3AE928E380B0F4E6C2E6B339C6D2B0920AF2AC5","Account":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","PreviousTxnID":"1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44","PreviousTxnLgrSeq":8897,"OwnerCount":3,"Flags":0,"Sequence":4,"Balance":"8519999970"},{"LedgerEntryType":"AccountRoot","index":"4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05","Account":"r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59","PreviousTxnID":"B24159F8552C355D35E43623F0E5AD965ADBF034D482421529E2703904E1EC09","PreviousTxnLgrSeq":16154,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0.25","currency":"BTC"},"index":"4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454","PreviousTxnID":"DFAC2C5FBD6C6DF48E65345F7926A5F158D62C31151E9A982FDFF65BC8627B42","PreviousTxnLgrSeq":152,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"500F730BA32B665BA7BE1C06E455D4717412375C6C4C1EA612B1201AEAA6CA28","Account":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x","PreviousTxnID":"1B91A44428CA0752C4111A528AB32593852A83AB372883A46A8929FF0F06A899","PreviousTxnLgrSeq":18585,"OwnerCount":2,"Flags":0,"Sequence":32,"Balance":"9972999690"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","value":"0","currency":"USD"},"index":"52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0","PreviousTxnID":"90931F239C10EA28D263A3E09A5817818B80A8E2501930F413455CDA7D586481","PreviousTxnLgrSeq":225,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5","72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"53F07B5C0CF6BB28F30A43E48164BA4CD0C9CF6B2917DDC2A8DCD495813734AB","IndexPrevious":"0000000000000004","IndexNext":"0000000000000005","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"LedgerEntryType":"AccountRoot","index":"55973F9F8482F1D15EF0F5F124379EF40E3B0E5FA220A187759239D1C2E03A6A","Account":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","PreviousTxnID":"2E30F12CCD06E57502C5C9E834CA8834935B7DE14C79DA9ABE72E9D508BCBCB1","PreviousTxnLgrSeq":32301,"OwnerCount":5,"Flags":0,"Sequence":18,"Balance":"9499999830"},{"LedgerEntryType":"AccountRoot","index":"562A9A3B64BD963D59504746DDC0D89797813915C4C338633C0DFFEA2BEFDA0D","Account":"rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY","PreviousTxnID":"3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253","PreviousTxnLgrSeq":20179,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"50000000000000"},{"LedgerEntryType":"AccountRoot","index":"563B1358AF98D857FFBFDBE5DB8C9D8B141E14B8420BEB0DDEEA9F2F23777DEF","Account":"rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA","PreviousTxnID":"45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36","PreviousTxnLgrSeq":8904,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"369999990"},{"LedgerEntryType":"AccountRoot","index":"567F7B106FFFD40D2328C74386003D9317A8CB3B0C9676225A37BF531DC32707","Account":"rauPN85FeNYLBpHgJJFH6g9fYUWBmJKKhs","PreviousTxnID":"4EFE780DF3B843610B1F045EC6C0D921D5EE1A2225ADD558946AD5149170BB3D","PreviousTxnLgrSeq":39,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"5686CB978E4B8978EB89B34F2A8C859DDDFAB7B592AAAA2B15024D3452F6306B","Account":"rEMqTpu21XNk62QjTgVXKDig5HUpNnHvij","PreviousTxnID":"126733220B5DDAD7854EF9F763D65BCBC1BBD61FD1FEEEF9CD7356037162C33F","PreviousTxnLgrSeq":41,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i","value":"0","currency":"USD"},"index":"571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B","PreviousTxnID":"1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44","PreviousTxnLgrSeq":8897,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"5967EA83F1EC2E3784FD3723ACD074F12717373856DFF973980E265B86BF31BD","Account":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","PreviousTxnID":"9C9AF3AC76FC4626D86305D1D6082944D1E56EC92E3ECEC07503E3B26BF233B2","PreviousTxnLgrSeq":270,"OwnerCount":5,"Flags":0,"Sequence":7,"Balance":"4999999940"},{"LedgerEntryType":"DirectoryNode","Indexes":["9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"],"Owner":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","index":"5983E0F274D173834B3B1E9553D39685201044666F7A0C8F59CB59A375737143","RootIndex":"98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D","Flags":0},{"LedgerEntryType":"AccountRoot","index":"5A08F340DE612A2F2B453F90D5B75826CBC1573B97C57DBC8EABF58572A8572B","Account":"rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va","PreviousTxnID":"F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D","PreviousTxnLgrSeq":23260,"OwnerCount":2,"Flags":0,"Sequence":5,"Balance":"499999960"},{"LedgerEntryType":"AccountRoot","index":"5AA4DC5C878FC006B5B3B72E5E5EEE0E8817C542C4EB6B3A8FFA3D0329A634FF","Account":"rDsDR1pFaY8Ythr8px4N98bSueixyrKvPx","PreviousTxnID":"FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389","PreviousTxnLgrSeq":7989,"OwnerCount":0,"Flags":0,"Sequence":4,"Balance":"209999970"},{"LedgerEntryType":"Offer","TakerPays":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"31.5","currency":"USD"},"index":"5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46","BookNode":"0000000000000000","TakerGets":"3000000","Account":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","PreviousTxnID":"15955F0DCBF3237CE8F5ACAB92C81B4368857AF2E9BD2BC3D0C1D9CEA26F45BA","OwnerNode":"0000000000000000","PreviousTxnLgrSeq":17826,"BookDirectory":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000","Flags":0,"Sequence":8},{"LedgerEntryType":"AccountRoot","index":"5CCC62B054636420176B98A22B587EEC4B05B45848E56804633F845BA23F307A","Account":"rnCiWCUZXAHPpEjLY1gCjtbuc9jM1jq8FD","PreviousTxnID":"152DB308576D51A37ADF51D121BFE1B5BB0EDD15AC22F1D45C36CAF8C88A318B","PreviousTxnLgrSeq":46,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000"},{"HighLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"50","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS","value":"0","currency":"USD"},"index":"5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515","PreviousTxnID":"BBE44659984409F29AF04F9422A2026D4A4D4343F80F53337BF5086555A1FD07","PreviousTxnLgrSeq":10092,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7","35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"5CD820D062D59330F216B85D1ED26337454217E7BF3D0584450F371FA22BCE4B","IndexPrevious":"0000000000000002","IndexNext":"0000000000000003","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"LedgerEntryType":"AccountRoot","index":"5E5B7A5F89CD4D9708BDE0E687CF76E9B3C167B7E44A34FD7A66F351572BF03F","Account":"rKdH2TKVGjoJkrE8zQKosL2PCvG2LcPzs5","PreviousTxnID":"64F24DBD7EEBAF80F204C70EF972EC884EF4192F0D9D579588F5DA740D7199F6","PreviousTxnLgrSeq":48,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"2000000000"},{"LedgerEntryType":"Offer","TakerPays":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"2","currency":"USD"},"index":"5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719","BookNode":"0000000000000000","TakerGets":"1739130","Account":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","PreviousTxnID":"433789526B3A7A57B6402A867815A44F1F12800E552E581FA38EC6360471E5A4","OwnerNode":"0000000000000000","PreviousTxnLgrSeq":17819,"BookDirectory":"2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727","Flags":0,"Sequence":7},{"LedgerEntryType":"Offer","TakerPays":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"1320","currency":"JPY"},"index":"600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C","BookNode":"0000000000000000","TakerGets":{"issuer":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","value":"110","currency":"USD"},"Account":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","PreviousTxnID":"DAB224E1847C8F0D69F77F53F564CCCABF25BE502128B34D772B1A8BB91E613C","OwnerNode":"0000000000000000","PreviousTxnLgrSeq":17835,"BookDirectory":"62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000","Flags":0,"Sequence":9},{"LedgerEntryType":"AccountRoot","index":"6231A685D1DD70F657430AF46600A6FA9822104A4E0CCF93764D4BFA9FE82820","Account":"rDngjhgeQZj9FNtW8adgHvdpMJtSBMymPe","PreviousTxnID":"C3157F699F23C4ECBA78442D68DDCAB29AE1C54C3EC9302959939C4B34913BE8","PreviousTxnLgrSeq":49,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"CAD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0","currency":"CAD"},"index":"6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7","PreviousTxnID":"0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24","PreviousTxnLgrSeq":240,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"CAD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"],"index":"62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000","TakerGetsIssuer":"62FE474693228F7F9ED1C5EFADB3B6555FBEAFBE","ExchangeRate":"56044364C5BB0000","TakerPaysIssuer":"2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08","RootIndex":"62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000","TakerPaysCurrency":"0000000000000000000000004A50590000000000","Flags":0,"TakerGetsCurrency":"0000000000000000000000005553440000000000"},{"LedgerEntryType":"AccountRoot","index":"63923E8ED8E80378257D0EAA933C1CADBC000FB863F873258B49AA4447848461","Account":"rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6","PreviousTxnID":"8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4","PreviousTxnLgrSeq":8901,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"369999990"},{"LedgerEntryType":"AccountRoot","index":"651761F044FC77E88AA7522EC0C1116364DDAB8B0B30F742302150EF56FA0F7F","Account":"rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8","PreviousTxnID":"A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420","PreviousTxnLgrSeq":2026,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"9999999990"},{"HighLimit":{"issuer":"rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"HighNode":"0000000000000000","index":"65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E","LowNode":"0000000000000000","PreviousTxnID":"D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A","PreviousTxnLgrSeq":31179,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"656BA6034DAAF6D22B4CC6BB376DEEC73B308D4B1E29EC81F82F21DDF5C62248","Account":"ramPgJkA1LSLevMg2Yrs1jWbqPTsSbbYHQ","PreviousTxnID":"523944DE44018CB5D3F2BB38FE0F54BF3953669328CEF1CF4751E91034B553FE","PreviousTxnLgrSeq":79,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"AccountRoot","index":"6782BDC4CB8FA8DDC4DE5298FD12DD5C6EC02E74A6EC8C7E1C1F965C018D66A5","Account":"rsjB6kHDBDUw7iB5A1EVDK1WmgmR6yFKpB","PreviousTxnID":"D994F257D0E357601AE60B58D7066906B6112D49771AD8F0A4B27F59C74A4415","PreviousTxnLgrSeq":3732,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000000000"},{"LedgerEntryType":"AccountRoot","index":"67FAC013CD4FB865C1844F749C0C6D9A3B637DAC4B7F092D6A4C46517B722D22","Account":"rnj8sNUBCw3J6sSstY9QDDoncnijFwH7Cs","PreviousTxnID":"4B03D5A4EEFCAF8ADB8488E9FD767A69C6B5AC3020E8FF2128A8CBB8A4BA0AFF","PreviousTxnLgrSeq":3753,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"60000000000000"},{"LedgerEntryType":"LedgerHashes","index":"692ECE2D61FD5074F298DC168177CA6E17B7282B9630E606AE519D7FE32B5940","LastLedgerSequence":37888,"Flags":0,"Hashes":["46CA85D119A4FDF7644339663A813131C791BD21472BB85C526E9E4072F87ABA","30E34F73546C514C1BD389E1A71FBC266DCED3FC1DB7A186F3F0FCF117484528","4EB7F83E4AE050D7C46744FC40C7C506E2D2468F520A1CF50325406231AB7BA0","D7349AEAE4337A11FDF98A60F01CEDD7CA38CE8835FE66CCA2E4B227928A2AF5","AA4CD783DE0238A741BE8C0FEFCBC37E8A07C75195919F617749D02ED8648581","9AB0D5C6ED47FBE7513253A012431D5BDEE6E9FE19D6E39A537C72212FDCBA53","BF4836310428AE05209D703DB7BA805DBD309959DDFB1A013666CADFB3B02C24","20D40412CA443B8972F7EFBD79D5ABA60A68744C75689A75050ECDE3106AE60F","E1A81A0AC6B45B488E4D2EEA57E9D04BBFB078B4B72837C8754599D25C4C8D3B","188FC5B7DC6F0CE992BA19ED4405BA8B3399FA69485CDEDE42F1BED9E4355447","EA8C6297E23798A28D4D03782CFF274C45832141D2A084C6D550251D40C6F5E3","B45FD83C30ACB19688E9F482C2BC5EA99242431DDFC761266FCE88FD5FFB4B22","142F2DC1D72345824169FC14971E40154268A393AC0CEC260AAB171E77992218","A464B55B61046CED55778A3F23AB49908EDC310223E74F4EFFAE195602655CDA","E1532980D3BAA96CBE31A35DA8D85C4187DD2DC9285168D0BEFAB23AB7AFCA6C","E57645836A7238265D735DCC3318446B513D95405759044EE367DA3933F902EB","71BCE9D7C1CFFE3E8843FF25A3DAD31384AB561A91F4A0F074F5210F5E6BCA77","03FD3FF1D27D5E4E9768B03A9438DC39827F34E559A82FD8FE3E0894ADF122A0","4E1F327BA0FAB0536C023A36ADC9226411FF4C7854CB73BA7230484D3B26A4FD","DF40D6608787FFB9B9324C3E40388500CAF4B3CFC4C1857A7806C421D86787B4","0A80A82CE9A46DBFA6423FFC1D6B0FE0E05ECA4DC379D4A24E5AB78EED5D8D54","E439B3FEF555EA03AFB0D518942C42EB546934B8DD57D8C531EA1A6EDCEF3D0E","2153861CFA542E2AE593B38F1793268138D0EB462E21D45F9A40A84A12F42D19","E1025986FB51465C5226BFF003F5C03D25C8C2D37A82D8A389EF536CF18F5815","0EF09ED9B4651FA200C7CFA76186B7F418B2F3C4838EEBC34AF679AC83F04DA5","E0798890BD8C632C9B184BAC912129A000C21D9C261238CFFD49B85231F8691E","0B666FF1E19633C145695FB01C8FC10EA5F51CB230ABD781F6306334D83DD4BC","BA16AECB9E2CF8D68D31675C4B17A7D5A3E12ABAB9C47EA48942FBEC8BE574D5","41EA17AFDD8A096C2C37AEB30D6C840E394E9B33F1A23B46A6E5A0B458E602E7","9B359B65D509275EF1F8F97C90CCA7F1538689968C94BA5F93353E57EB1B4DEF","8CEA4D27D9DAF3158A0DBB68FE7FB78CD9A01E880070EE5AD3F7C172B860F0CD","C80FD9750847F44BBFE0A36A6ADC1653F48EDA3DFF515ED45C5D1DB455686138","BE25E0085DDB6A18232448CE2CBFC4D9DADBC2613B026A334FE234811DCC2DCF","08A08EA0C5D1E13BCD5F7032C1E27F0856EA10BDCDC163DF0FB396FE2CABA31B","A68967254F794A6B6ADCF83A7FFA225276F3ADF81E23E2E9DBB48B103F4F287A","D901F12F3B934543752F66F62DE2F70261499879611F3536C4C9F38CFED34FA2","CF03209B2601483CCE4A08D000CE4B51B851CE8AC0E426675987BE5CF803C18C","BA6878132CFDF8C68056875B00E33EF08FCF7BEA2A62193C36DE3B1875EF3B9D","2A566045F7A7A243BAC56BE8EC924F02339E3C76F8DC7E046F7C11AA8C342B40","4AF051B5585F6222321E5F5B850353C03E0D63DAF5E143040471B444ABB72825","4A97A57376069E1257020D5501112A14CC01E9D0F05100C957C7BEDE339E50F8","37C67F8F6D16F25E5D4667934137D34723750B5D9FE83166A7D6D76B36C8C179","707E9AF5FBFB4F9C49CF86A9574F5D92E2A116A33BC9DE99718880289A0788D9","B42F73034086D2F0EBC448F712C593A03C4BEBFB8744D3BAD3E09A20F01828A3","0A2F54078737CFB3DC5926C59953D554A8694EF61B3636DAC92EBD43388889E2","70924BD1A23B8E5507FE9926CB313EA8B1DE0448A56745323431406CA16274FD","05575230980F40E49E56A104C14F1E782D1BEF983698F5D362B5F07DE0D428E8","FB1C5932BE70A69CCF6DBA76107FAA3BA1007ED13DFD1AAB17FC425A10EB1581","25FC22191B032F57E2FA33BE3479C2BDEA11CF9E2E2EFF708B27A87B1B523A89","211A029A97B7F8B3BBCA0E522BDF59E38E9A31D81BE9E992D29DE8F2D4E22A4F","3D854A51048D99BABF0007FBF7B689E3E098C30203BF6D1DA3D5E331EC14DD98","22393FDC141993373E998910AEBCC3A325208E6C2F5AF5F0EA89AF8E707035BB","48F51EB63247C8444E30FBF1C96C82732078EF017FD24E50F153701762D1C73C","1933B26C54C13B95D4F5BB231C5C6C815F1CC549BB566176C69685FAB89B2D30","18B0E6978BDA0F820ECCC2812D3BCBA26B5FCD82162BE4ECFBB2B37F4202022C","AE268627782C85AE0B585DEBB70A360A25325163E052DEFC778B12D6F5F3140D","A9D9251250BEA2908137E2BF02B5265489682CC0767ABDDEFEF2081AA400BE22","E3D86A55F1C1247128CBDD92DCD6825ABA2B1A0CF11E708D4B7A095691FA9212","66ACAE0C1C0131C3C3E44F97EE718CF06D477745BBC5C1E62B5FAA1E64755C40","64424CDBB7213281B55264AC5EDDBF8E3C08DC9F91AC522BC27F54E6927AEBF5","E99D194A57372231B580720BFF3FBF97C9012E0FE1F24B9B8B1D4B3F712E0FFD","28D45AD772BB438DB55ADC3F3E10A661C2386D530E7B818D66705830E642BACF","F4BD92C5D43BD66D9C88CD8F7155CD9D4239D4BFDEAE39A59D508C55E94D92C9","BB4569ABCAE972A58BBE235AA15804A1A5C338A88D58105EE156E691379FF6D6","700B19B81823E8F5772800F7E43049733D5B0704DD2D1FE381D698BB80DD7261","9EA049B105956ECD1848EFDBF1BA5AC77200254D3B200B59A520216BF52F8B33","E037EF16B6EC5247FF05EE5F2D3541E4F7DDB584FDB54369D89ED8C4F169A1BA","FB5B4ACAF66451AD44AFC25E52A8883AD8F7C2D92A399BD06728AB949A0C2543","28416DC35EC84994E022398FE3D33AA5ECFB32402F3ECE8AE5AD44795653D80F","9D65AA309D29A33CC11CF9A862764981A66ECAB7CD37857F7D088AF0E670117C","04855D0B5B7C7BF3BF670C2E2A623AF02AABE2F1DAC85B81B63D7BB980FAE348","819D06F863296E89D4B3D48E14A5B227EC89053F8CC9FE15029E22C34C912B92","7195B5FA6F039200B3F9A1C9E831502C9AA22794D8CEF4C35F72399B0C4B6F42","D17CFB13B3657BED7CB506DB48258ED0DC0ABE9B6D04C75030DF208BE07EECA0","8930F9420CF861AD268B206BFCAA3BAB1D28906E43B6C4F0297D1D6579D58109","131945F850C00D65D13712F64B41B1DFD7D6649AD78B3ADDCDC0AB51FB0A2FC2","811B87B783CD76B9E612B867B355FB8CC4ABDAE9FA302C532733C41B52AB5FFE","439CE2133E0C5DF12A0DB86AFF23D2D0CE8ADFEABDF2E2F3F568D58DA7A1C277","8CEC9F269F28CD00FE9B4811F841BEE5E3937AC81EA30D17207CEEC9832091FB","2EB319E8D384357255F300CC78E82FF7ECF84949A07D7043AE67645DD0D1708A","DC6F10FD8B4E1BAA925BD1919BE70DF251B192B72D5CBF1BD42C69B5F9D9E33A","7B2B336FB5149DB963FC0C84EEBD4271B7DC33A79FACCDB9CD3C98F821B8C11C","5F8B5CF6AEE7ADF8FA23122E2AF6BBAD77E50D077483B545A9B6EBF6ECF13FC5","0C43B20F1A457970C8CEFAC5C1642EA8996BBD70DD2109AAD84E4D33CD1A97F3","777E49B89E8C2D06ADF2F36817BB029F52A03469B71821F6EF77B6907611486B","D91A0474F4B64E36D374C2AF78ADF85BA5844EDF4E72056944015B3349532A29","77B609A5BC8BD805D581B06C2423E90C618C68484166632702DB08B0184C3B26","05E41DCF6ED8D6154EF0D6AC8FD7302561E69DB1A8938C0AF9CC947343D80DED","6C3AEB3E66F133591E6D20412B1816EAED5AF5643CB51D06188D36294AA9758C","DD76DE696BDFEC3F18EAA16C17B78E9C8C5B56FA0FEB224B579A589C983F549C","01502B404586D235FBB5FECB8D1CDE64F865AA1DA2A5EC877374DE717FEBF4A0","FAB3679AE0D51A0BCB4AF004228AF5DB6DBD42CD1B0415BE5A83D282F6B448A1","C7E8C01A3F5D0756F393CE2D1A14073EA0E4126D0170E04FE2F9CB97EF3A3C86","2A6419BD4F9111CC03F4B0EB459B902B69F0A685FCB20E5ACAE24903113FF218","6BF67DCAC27D3E57F3B85FECDC1C6E6C70CE26EF27136EF38C45E6794BE9A40F","2FD59B8594521D4F2DA9004B493BFA87C387694111C08BDFD66E69AEE4752BCF","887647702EBA5D91A05A5FAAF36A4793CF8B6292612A96539F80FEB5D67A6CAB","B613E7A7A119E99DFF72B7B6F67906B211F95FF679686F65EDF5E32047FEBC60","C010B145685BCBD6CF1CED7E42E8950910B9DD01D0D72BBE0EA9A52464386EC0","4564B180267F9DE53016E25E8D8AA20F9ACCAC4E76BAE60BACC8ACA70E766DD1","3CB16E7A33032CA80E0F935665304CEC1E61EE9BBB4B7A51E4B2708E6E7FAB7E","96BF360D0FE736D520582AE5574A9FB6D482810F37B12504C7754FB9B0368D10","F116AB72EBE3F85B7715599C6F88165550F88948883D293326D7A3A37607AD7F","338BFAD9143B14AACDF99F0F16C9819585903EE264DFCA996FC0E29644EB2616","4B7EB8D620A38925EB26EB7BFE1D0D8A9F7A3F542CA79F25443C051349F75597","D2F7152FC9E0B243A0AA33B1DF2B8AD0229D6BA08129A5E1BE79EF339017234E","3EA85163CFA860E378792CC9C0F97B7B6D1A67A3E10A1D19D506EF4A07784CE9","BBC59E15FEB70E5BA51B37DEADE73F386F3F6C32BF01E964C21ADEA961156A05","A783B441DABD6E8FB82617396E676039714CDD55530AEFE9FA1950DDFB12D19C","0983655D0A7A0A2EA9F47F4621098B62BD2350E3721F6126D852E14628F75B49","5E772F93AB27ED7ABC015E65DAC1636C4BEE65161B0C365E54C7B4E7253D085A","73850E9B09C456566B1233F7E3E99A6C8A8DAC815351CAA8647733AFCDA89242","EB2E44652F1D48125B2B1D765EEC7E666CD61774A09DC5062332975B1E5BB9CE","B067B4B47A15BC454EAF10F1528CDA034050E14ED6B4C7B8A69152252EB7EC59","61D7F81182F42A97B32AE2CA5FF818C6D6BD1252822C9DE96412CF9C44C26E52","84BAF99B7C240088590D793FB2AB3E0CFD7EC8A22771D78870FEAF902FBCA3CA","47ED82D33D08A086409370EE11344E1429DC1072D053FA84C5047186E09E9415","2E8A8D8C7DB6156C707260A1B9C80B79C7F2916C52267925A04D24B91BCDA571","89ADAF9ECA28CEB75C9DFAD092A6028FB6F9EC8B0AB1816B7446881E59BF1E5A","D6A2446D0A74397534CDCB9F6B27C3846A43914FF88C1487878A608B0AF97361","02EB8D561A1FB6AD0443C7EA50978129BE3013E627696E35F4A86AA2664EA6C7","60D8452D3D1329802051FF7D64750EF89D0FA7F52407D27DCAAD4FC9866AB3C6","48A6817C81ADD8E803604C3A907BB5B98D1545FED8E69542EB3CF8FD5DDE9564","16564946C4C731287922FA4E1E7E8F619F0A4F1BACE642D8D9C914D0A992C3F0","C59D15488844223AC052BB01A3A547B2C378E11D1DBBC037F1A924A58BB3A7A5","CC2E8827C0FCAB29E90F466E22AAA9E54C95D214517AE6824361CF6C4B1A1DA9","43E701475E1A25107B4585645A83CD942B8644C65111193DABC1D148C4CF6E18","2F29FEEFF9D59C9DFE325A86C127677EB619B69D8337A6924DC99541199F2880","95713AB9878E9CC9F459ED06E2E8AE08B3AA7059690AB7ABE9AF5E6B03F974C5","B9761DF3B6A17C9223F17619A31CC7E751CA43F79FF97517A0379F9A0970BDD5","D23B27C92B27A8349B9DC838C1060445D4A5F11036A1ECB731B4F1A8A2FEE68A","2A9230932745154A632BE6E8BC02BDA70ACC63BA35CD5D9CB7FE8037C5E17B5A","5EB24E22E303BAB86456FC00C414F274C138C4809B2C4BB1A60B824F22D13E49","D8212A0EDCACC94A5DD9BA8862DEA437206E1D6D98A080FA6FC81AE907FE5263","2DF6D2E2D633407B98809F32B1EB0A4145385F9F81CE5F7B0BC2E1E6B0F809C9","83C1EECD541CDED8F7DCA5118B402156AC50F5130CC55E8A34740EF3BCEF445D","E3DD4311EC37E750D62B5AA6BEBB6007D7FE652155B2B8CA52B59DC58BDF5E7F","1CFDBAB1465C114335BCE962621B3B9F3E464817F7403031FB5558A2B4A514E9","A35860460AD1096EBCBFF7E8C0A7086594C18BC0AA5F7CB23C1E40FF22FC133F","09FE0839286B47089EA34D465C2089EC205B40604EE51725E697035DE58134B6","A3CC048DB8E7F433B86C311D6226EA64BE2BA0137B818EF35BE98B3E900DA88A","DB764B3E83DEE68022BD886D5CC1276B31FBBBEDA3186E5E1BDE2EEC1B8E8C9E","83485A81ECBA2E8E2EF0B6A1DA4D730D863E32E2CA46FBB8415E9621799984F8","269DC791F56AACAEF6CEA04C6C99450345D3D692A2F74E38B9CC161C182BB1BC","23FBE8EE73A47376CD8799610ADA8509539B480BE3D9E280DB83CF2AF6DC9DB5","38E7AB66E8C93173DE7373DA4A616E458DF4196E140C8EFAABDF21B7D4BE9741","FB0EA9CF94A19B0980A109E07D60FC009042940D79EB7A6C611FEEBD4E59049A","AB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7"],"FirstLedgerSequence":256},{"LedgerEntryType":"AccountRoot","index":"6A920AE3EF6A0984853EEECB8AE78FD7532537BB895118DE44C6257DB1792ECE","Account":"rB59DESmVnTwXd2SCy1G4ReVkP5UM7ZYcN","PreviousTxnID":"7B2A63FEEDB3A8ECCC0FF2A342C677804E75DCC525B1447AB36406AB0E0CFE48","PreviousTxnLgrSeq":3743,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"150000000000000"},{"HighLimit":{"issuer":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","value":"666","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"100","currency":"USD"},"HighNode":"0000000000000000","index":"6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28","LowNode":"0000000000000000","PreviousTxnID":"4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6","PreviousTxnLgrSeq":17841,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"HighLimit":{"issuer":"rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8","value":"10","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","value":"0","currency":"BTC"},"HighNode":"0000000000000000","index":"6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997","LowNode":"0000000000000000","PreviousTxnID":"865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946","PreviousTxnLgrSeq":16029,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"6F30F23BE3EAB1B16D7E849AEA41709A26A8C62E28F359A289C7EE1521FD9A56","Account":"r9ssnjg97d86PxMrjVsCAX1xE9qg8czZTu","PreviousTxnID":"217DF9EC25E736AF6D6A5F5DEECCD8F1E2B1CFDA65723AB6CC75D8C53D3CA98B","PreviousTxnLgrSeq":8412,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"200000000000000"},{"LedgerEntryType":"AccountRoot","index":"70FDAD46D803227A293CDE1092E0F3173B4C97B0FB3E8498FEEEE7CB6814B0EA","Account":"rEJkrunCP8hpvk4ijxUgEWnxCE6iUiXxc2","PreviousTxnID":"83F0BFD13373B83B76BDD3CB47F705791E57B43DB6D00675F9AB0C5B75698BAC","PreviousTxnLgrSeq":54,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"10","currency":"BTC"},"index":"72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B","PreviousTxnID":"7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4","PreviousTxnLgrSeq":2967,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"DirectoryNode","Indexes":["AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"],"Owner":"rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je","index":"72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F","RootIndex":"72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F","Flags":0},{"HighLimit":{"issuer":"r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"0","currency":"USD"},"index":"73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F","PreviousTxnID":"AAC46BD97B75B21F81B73BE6F81DF13AE4F9E83B6BD8C290894A095878158DEB","PreviousTxnLgrSeq":27420,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"-1","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"758CB508F8721051EE188E4C354B7DC7B2EE402D3F8ACBBEBF5B1C38C11D9809","Account":"rLCAUzFMzKzcyRLa1B4LRqEMsUkYXX1LAs","PreviousTxnID":"5D4529121A6F29A1390730EBF6C6DEF542A6B6B852786A4B75388DA0067EAEE4","PreviousTxnLgrSeq":56,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454","6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997","26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873","E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610"],"Owner":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","index":"77F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F5","RootIndex":"77F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F5","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01","7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"],"Owner":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","index":"7C05004778BF5486985FDE0E2B49AA7DC0C775BCE20BD9644CBA272AA03CE30E","RootIndex":"8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4","Flags":0},{"LedgerEntryType":"AccountRoot","index":"7C3EF741E995934CE4AF789E5A1C2635D9B11A2C32C3FC180AC8D64862CCD4C5","Account":"r4cmKj1gK9EcNggeHMy1eqWakPBicwp69R","PreviousTxnID":"66A8F5C59CC1C77A647CFFEE2B2CA3755E44EC02BA3BC9FDEE4A4403747B5B35","PreviousTxnLgrSeq":57,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469","35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC"],"Owner":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","index":"7CF07AD2891A664E9AAAC5A675E0241C2AD81B4D7197DCAAF83F9F4B7D4205E2","IndexPrevious":"0000000000000001","IndexNext":"0000000000000002","RootIndex":"1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C","Flags":0},{"HighLimit":{"issuer":"rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"0","currency":"USD"},"HighNode":"0000000000000000","index":"7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619","LowNode":"0000000000000003","PreviousTxnID":"A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C","PreviousTxnLgrSeq":32359,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"-1","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C"],"Owner":"rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo","index":"80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219","RootIndex":"80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219","Flags":0},{"LedgerEntryType":"AccountRoot","index":"842189307F8DF99FFC3599F850E3B19AD95326230349C42435C19A08CFF0DD2D","Account":"rHSTEtAcRZBg1SjcR4KKNQzJKF3y86MNxT","PreviousTxnID":"FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389","PreviousTxnLgrSeq":7989,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"19790000000"},{"LedgerEntryType":"AccountRoot","index":"8494EFE5E376B51716EE12EE6ABAD501940D3119400EFB349ADC94392CBCE782","Account":"rnNPCm97TBMPprUGbfwqp1VpkfHUqMeUm7","PreviousTxnID":"F26CE2140F7B9F9A0D9E17919F7E0DA9040FB5312D155E6CDA1FEDDD3FFB6F4D","PreviousTxnLgrSeq":60,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"854439EC87B9DD8B2D5D944D017A5027A956AE9F4969A439B81709F9D515EAEF","Account":"rwZpVacRQHYArgN3NzUfuKEcRDfbdvqGMi","PreviousTxnID":"9D02BD8906820772FCF8A413A6BF603603A5489DE1CFE7775FDCF3691A473B64","PreviousTxnLgrSeq":61,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"10","currency":"CAD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0","currency":"CAD"},"index":"85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC","PreviousTxnID":"E816716B912B1476D4DE80C872A52D148F1B0791EA7A2CEF1AF5632451FECCAD","PreviousTxnLgrSeq":246,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"CAD"}},{"LedgerEntryType":"AccountRoot","index":"8991D79F42029DE8CE26503540BD533DB50E4B1D59FC838870562CB484A18084","Account":"rHrSTVSjMsZKeZMenkpeLgHGvY5svPkRvR","PreviousTxnID":"E6FB5CDEC11A45AF7CD9B81E8B7A5D1E85A42B8DCD9D741786588214D82E0A8A","PreviousTxnLgrSeq":3759,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x","value":"10","currency":"USD"},"HighNode":"0000000000000000","index":"8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C","LowNode":"0000000000000000","PreviousTxnID":"B9EB652FCC0BEA72F8FDDDC5A8355938084E48E6CAA4744E09E5023D64D0199E","PreviousTxnLgrSeq":12647,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"8A43C256DEAAE94678596EF0C3019B1604788EDA72B7BA49BDCBD92D2ABB51FB","Account":"rfCXAzsmsnqDvyQj2TxDszTsbVj5cRTXGM","PreviousTxnID":"10C5A4DCEF6078D1DCD654DAB48F77A7073D32981CD514669CCEFA5F409852CA","PreviousTxnLgrSeq":31798,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"],"Owner":"rsQP8f9fLtd58hwjEArJz2evtrKULnCNif","index":"8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A","RootIndex":"8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B","C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C","25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766","9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09","E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610","65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"],"Owner":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","index":"8BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A4509","RootIndex":"8BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A4509","Flags":0},{"LedgerEntryType":"AccountRoot","index":"8BE1B6A852524F4FA4B0DD3CBED23EEBEC3036C434E41F5D4A65BC622417FD52","Account":"rfpQtAXgPpHNzfnAYykgT6aWa94xvTEYce","PreviousTxnID":"0C5C64EDBB27641A83F5DD135CD3ADFE86D311D3F466BACFEBB69EB8E8D8E60F","PreviousTxnLgrSeq":62,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB","CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"8C389355DAEAE9EFFCBAFB78CE989EE2A6AA3B5FB0CB10577D653021F8FF0DF5","IndexPrevious":"0000000000000004","IndexNext":"0000000000000005","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036","F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836"],"Owner":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","index":"8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4","IndexPrevious":"0000000000000003","IndexNext":"0000000000000001","RootIndex":"8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4","Flags":0},{"LedgerEntryType":"AccountRoot","index":"903EDF349E819F46C97F4BF5E0BE8CE7522A127A5ED3B262BFBE75AE151A9219","Account":"rGRGYWLmSvPuhKm4rQV287PpJUgTB1VeD7","PreviousTxnID":"EE8B75C4A4C54F61F1A3EE0D0BB9A712FCE18D5DFB0B8973F232EEED301ACD84","PreviousTxnLgrSeq":85,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000000000"},{"HighLimit":{"issuer":"rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG","value":"1","currency":"MEA"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ","value":"0","currency":"MEA"},"index":"908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB","PreviousTxnID":"C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F","PreviousTxnLgrSeq":10066,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"-1","currency":"MEA"}},{"LedgerEntryType":"DirectoryNode","Indexes":["6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28","A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00","263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8","5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719","5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46","600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"],"Owner":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","index":"90F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD","RootIndex":"90F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD","Flags":0},{"LedgerEntryType":"AccountRoot","index":"910007F4231904B85917A2593E4A921A46BC539D4445E2B19DCD7B01619BB193","Account":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","PreviousTxnID":"21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5","PreviousTxnLgrSeq":8985,"OwnerCount":2,"Flags":0,"Sequence":5,"Balance":"10199999960"},{"LedgerEntryType":"AccountRoot","index":"93FA2164DCFA6C2171BE2F2B865C5D4FBE16BF53FB4D02C437D804F84FA996A8","Account":"r4U5AcSVABL6Ym85jB94KYnURnzkRDqh1Y","PreviousTxnID":"024FF4B5506ABC1359DBFF40F783911D0E5547D29BDD857B9D8D78861CFC6BE7","PreviousTxnLgrSeq":65,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"958D39AEF473EC597F0036498CCE98077E634770DB1A6AFFB0E0709D925CE8EC","Account":"rHzWtXTBrArrGoLDixQAgcSD2dBisM19fF","PreviousTxnID":"CBF0F1AC96D1E0AA8EBA6685E085CD389D83E60BA19F141618BFFA022165EDA2","PreviousTxnLgrSeq":14186,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"96515A9154A54A289F5FA6BBAE3BB8F1D24416A39902635C9913FF3A04214670","Account":"r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3","PreviousTxnID":"47F959E260E8EEBA242DF638229E3298C8988FEAC77041D7D419C6ED835EF4A8","PreviousTxnLgrSeq":10067,"OwnerCount":2,"Flags":0,"Sequence":5,"Balance":"9999999960"},{"LedgerEntryType":"AccountRoot","index":"968402B6C7B9F5347F56336B37896FB630D48C1BDFB3DB47596D72748546B26A","Account":"r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K","PreviousTxnID":"AE5929DE1626787EF84680B4B9741D793E3294CC8DFE5C03B5C911AF7C39AD8C","PreviousTxnLgrSeq":3055,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198","52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0"],"Owner":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","index":"98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D","IndexPrevious":"0000000000000002","IndexNext":"0000000000000001","RootIndex":"98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D","Flags":0},{"LedgerEntryType":"AccountRoot","index":"98301566DDDB7E612507A1E4C2EA47CDC76F4272F5C27C6E6293485951C67FC9","Account":"rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd","PreviousTxnID":"A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C","PreviousTxnLgrSeq":32359,"OwnerCount":1,"Flags":0,"Sequence":3,"Balance":"499999980"},{"LedgerEntryType":"AccountRoot","index":"985FDD50290AC5C3D37C1B78403ACBADD552C1CDDAA92746E9A03A762A47AF67","Account":"r2oU84CFuT4MgmrDejBaoyHNvovpMSPiA","PreviousTxnID":"4C6DC2D608C3B0781856F42042CD33B6053FB46C673A057FB192AB4319967A0C","PreviousTxnLgrSeq":10043,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"987C0B2447A0D2A124CE8B7CAC4FC46537AB7E857256A694DDB079BC84D4771F","Account":"rPFPa8AjKofbPiYNtYqSWxYA4A9Eqrf9jG","PreviousTxnID":"8439B6029A9E670D0980088928C3EE35A6C7B1D851F73E68FA7607E9C173AFA8","PreviousTxnLgrSeq":26718,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52","5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515"],"index":"99CB152A0161D86EBA32B99F2E51024D1B4BCD9BD0CF95D3F13D90D9949135DB","IndexPrevious":"0000000000000001","IndexNext":"0000000000000002","TakerGetsIssuer":"58C742CF55C456DE367686CB9CED83750BD24979","ExchangeRate":"531AA535D3D0C000","TakerPaysIssuer":"E8ACFC6B5EF4EA0601241525375162F43C2FF285","RootIndex":"8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4","TakerPaysCurrency":"0000000000000000000000004254430000000000","Flags":0,"TakerGetsCurrency":"0000000000000000000000005553440000000000"},{"LedgerEntryType":"AccountRoot","index":"99E5F76AB42624DE2DD8A3C2C0DFF43E4F99240C6366A29E8D33DE7A60479A8D","Account":"rp1xKo4CWEzTuT2CmfHnYntKeZSf21KqKq","PreviousTxnID":"059D2DCA15ACF2DC3873C2A1ACF9E9309C4574FFC8DA0CEEAB6DCC746A027157","PreviousTxnLgrSeq":66,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000"},{"LedgerEntryType":"AccountRoot","index":"9A3F4F80EBFE19B3F965B9ECF875A1827453A242FD50CD3DC240E842D210FB38","Account":"rGow3MKvbQJvuzPPP4vEoohGmLLZ5jXtcC","PreviousTxnID":"1AC83C3910B20C2A8D7D9A14772F78A8F8CA87632F3EEA8EE2C9731937CF7292","PreviousTxnLgrSeq":26714,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"50000000000000"},{"LedgerEntryType":"AccountRoot","index":"9A47A6ECF2D1F6BAB6F325EB8BB5FD891269D239EDA523672F8E91A40CA7010B","Account":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","PreviousTxnID":"38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4","PreviousTxnLgrSeq":2948,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"325000000"},{"HighLimit":{"issuer":"rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"HighNode":"0000000000000000","index":"9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09","LowNode":"0000000000000000","PreviousTxnID":"3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253","PreviousTxnLgrSeq":20179,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"9B242A0D59328CE964FFFBFF7D3BBF8B024F9CB1A212923727B42F24ADC93930","Account":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","PreviousTxnID":"D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A","PreviousTxnLgrSeq":31179,"OwnerCount":6,"Flags":0,"Sequence":60,"Balance":"8188999999999410"},{"HighLimit":{"issuer":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","value":"2","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"1","currency":"BTC"},"index":"9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB","PreviousTxnID":"F7A5BF798499FF7862D2E5F65798673AADB6E4248D057FE100DF9DFC98A7DED6","PreviousTxnLgrSeq":8978,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","value":"0","currency":"USD"},"index":"9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C","PreviousTxnID":"189DB8A6DB5160CFBD62AB7A21AFC5F4246E704A1A1B4B1DB5E23F7F4600D37E","PreviousTxnLgrSeq":232,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"9D7DC8910AB995F4E5F55776DCA326BBF0B47312A23DE48901B290598F9D2C1F","Account":"rUvEG9ahtFRcdZHi3nnJeFcJWhwXQoEkbi","PreviousTxnID":"DA52CF235F41B229158DB77302966E7AB04B1DFE05E3B5F4E381BC9A19FE2A30","PreviousTxnLgrSeq":250,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"50000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6"],"Owner":"rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th","index":"A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683","RootIndex":"A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683","Flags":0},{"LedgerEntryType":"AccountRoot","index":"A175FC9A6C4D0AD3D034E57BD873AF33E2BFE9DE1CD39F85E1C066D8B165CC4F","Account":"r3WjZU5LKLmjh8ff1q2RiaPLcUJeSU414x","PreviousTxnID":"8E78494EFF840F90FEAD186E3A4374D8A82F48B512EA105B415ED0705E59B112","PreviousTxnLgrSeq":26708,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"CAD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","value":"20","currency":"CAD"},"index":"A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB","PreviousTxnID":"21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5","PreviousTxnLgrSeq":8985,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"CAD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"],"Owner":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH","index":"A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010","RootIndex":"A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010","Flags":0},{"HighLimit":{"issuer":"rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j","value":"33","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"0","currency":"BTC"},"HighNode":"0000000000000000","index":"A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00","LowNode":"0000000000000000","PreviousTxnID":"D0D1DC6636198949642D9125B5EEC51FF6AC02A47D32387CBB6AAB346FB3AFE3","PreviousTxnLgrSeq":17769,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"A7CC9FE3F766F2DDE36D5530A0948C3BCB4DDB34D21B726091404E589D48AD07","Account":"rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE","PreviousTxnID":"070E052D8D38BCE690A69A25D164569315A20E29F07C9279E2F1231F4B971711","PreviousTxnLgrSeq":23230,"OwnerCount":0,"Flags":0,"Sequence":12,"Balance":"199999890"},{"LedgerEntryType":"DirectoryNode","Indexes":["116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"],"Owner":"rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE","index":"A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3","RootIndex":"A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3","Flags":0},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"5","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","value":"0","currency":"BTC"},"index":"A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198","PreviousTxnID":"058EC111AAF1F21207A3D87FC2AB7F841B02D95F73A37423F3119FDA65C031F7","PreviousTxnLgrSeq":224,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"DirectoryNode","Indexes":["72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"],"Owner":"rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN","index":"AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038","RootIndex":"AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038","Flags":0},{"HighLimit":{"issuer":"rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"0.5","currency":"BTC"},"index":"AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8","PreviousTxnID":"99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360","PreviousTxnLgrSeq":4156,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"AC1B67084F84839A3158A4E38618218BF9016047B1EE435AECD4B02226AB2105","Account":"rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo","PreviousTxnID":"D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31","PreviousTxnLgrSeq":26917,"OwnerCount":1,"Flags":0,"Sequence":7,"Balance":"10000999940"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"0","currency":"USD"},"index":"AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF","PreviousTxnID":"9A9C9267E11734F53C6B25308F03B4F99ECD3CA4CCF330C94BD94F01EFC0E0C5","PreviousTxnLgrSeq":219,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB","E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"ACC565A48442F1648D540A6981FA2C5E10AF5FBB2429EABF5FDD3E79FC86B65D","IndexPrevious":"0000000000000002","IndexNext":"0000000000000003","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"AccountRoot","index":"AD03851218E2ABA52029946E24F17B825EBFD5B51A896FAA20F773DB2944E6EB","Account":"rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS","PreviousTxnID":"FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262","PreviousTxnLgrSeq":31802,"OwnerCount":0,"Flags":0,"Sequence":14,"Balance":"49999999870"},{"LedgerEntryType":"AccountRoot","index":"ADC26991F3E88C9297884EDD33883EAE298713EDA00FEC7417F11A25DF07197C","Account":"rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy","PreviousTxnID":"7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4","PreviousTxnLgrSeq":26713,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F","6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"ADF9E1A2C883AEB29AD5FFF4A6496FF9EA148A4416701C1CF70A0D2186BF4544","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"AccountRoot","index":"AEDBD394A0815064A73C26F92E2574A6C633117F4F32DCA84DE19E6CA5E11AE1","Account":"rVehB9r1dWghqrzJxY2y8qTiKxMgHFtQh","PreviousTxnID":"17C00ADB90EE2F481FEE456FF0AFD5A991D1C13D364ED48549680646F4BBE3FF","PreviousTxnLgrSeq":70,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A","116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"],"Owner":"rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va","index":"AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE14","RootIndex":"AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE14","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE","9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"],"Owner":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","index":"AF3D293F1218B1532499D0E3DA14B73C27DBCB5342C34864B150BD657100CD42","RootIndex":"1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C","Flags":0},{"HighLimit":{"issuer":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA","value":"0","currency":"USD"},"index":"B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489","PreviousTxnID":"1DA779A65D0FAA515C2B463E353DC249EBF9A9258AF0ED668F478CF8185FDFD6","PreviousTxnLgrSeq":8896,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"B2DC564CA75F1E3AECDD91BCE01CAAFCFC01FBC8D8BAA791F8F7F98444EB7D8E","Account":"rDa8TxBdCfokqZyyYEpGMsiKziraLtyPe8","PreviousTxnID":"C10DFDB026BBB12AC419EC8653AEB659C896FD5398F95F90FDADCBC256AA927C","PreviousTxnLgrSeq":14422,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"5001000000000"},{"LedgerEntryType":"AccountRoot","index":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","PreviousTxnID":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","PreviousTxnLgrSeq":38129,"OwnerCount":0,"Flags":0,"Sequence":63,"Balance":"981481999380"},{"LedgerEntryType":"AccountRoot","index":"B43FDD296AD9E5B073219411940774D1FF1E73C7BAFC2858293802EDC0E3C847","Account":"rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB","PreviousTxnID":"6C2C3126A945E8371F973DAC3DF4E899C2BC8AAC51DE6748E873BBE63FCD7607","PreviousTxnLgrSeq":23194,"OwnerCount":1,"Flags":0,"Sequence":3,"Balance":"1009999980"},{"LedgerEntryType":"LedgerHashes","index":"B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B","LastLedgerSequence":38128,"Flags":0,"Hashes":["056D7738851FBD18F97540878F241406CD9500C09FA122276F76EDAC1E1D2CAC","ECC95BC5EB4C803BB1366ED330DB5B9147AD226C2F3FED211E90DE6CC0F71352","509B11298E12037FCEF95D23CB114F2D915CF10517C6AD1BC3167FCE1DC7BDED","6F9F019AF5B8E05139FE9CEE935CDC23CF20DBCF9F1158E1E768ABDD69F4A0A1","A2C7F4879262338CC3DFE555F95BDEAE83D7D794AA366E0F4763517BC97CE699","D6FF9995F80CF77C328078F683131701DCC785432BA2667714E631B63925C9CB","96E2641030BE3125203138BFB5462F6FC92301A7FEDFA4E9BE1524C88EC51868","0EADB49F36BD52EFC108C5A391BB6BB476ED49567890E6905F34E33DEE148BD2","52E148694FFF4EEB299200479B890AC44391EFA22A8B8457A284531324A7ADE0","96FD3D3F92D86A80587412830744FCE541D784D3B8D7A02370BF69CCC766247B","A1DBD3008FC62317DCC4032DB4A977EBB6FCAB97DF52707D37B8095927A007E7","E2CBE8FAFA93037CD348B557D38C522E089C2FE3630D28456393A6107B1A0318","718908DB484B0240B13658A74B9C37AC5EC598259CF53EC60FA572EE5C1F498B","CF4382954F0BAF03E4F41FE36F8AD27420A617DE2B83FF0E8C0A64FC657C0116","F08A893C5F6BD8357E91AAEF0A5FE43CAD434ABAC2C50E12D0D1A2E8FD6AA50F","AB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7","E9AE4FCD90FCB2EC3ACDC586FF0745F088589FF3ED2304C2207A9AC90C53281D","7E62332FDAB4CC24C84F65EFF2C56E2DFF46FAF06F1C2D06097DB371BDA055BA","5DA7F596B35B93F3744C24FC24D38EB1F7C1DEE0B82D623BBABB3C7B755E84F4","DB1815DC49AEC22B8D113A31C49F21E2C2E16AF90382782DB88FED3314A5852F","5D325E10EC62FEEC8A81DEA67B9F6C063CC1C6AC4D9B3D50ECCF0871D7C1F77D","35F2C0C7481F746806534FE07AD0079113BE3E66950E6C8E6F4EC936D0FA0A67","98690C9DA76E98D1AC64016FB22409305CA8FA80DB017F21D320735FCFA5E5C2","527BA3AD471083EDBADF1E16D0AAE66C523A2CA046269F5C247A0D0CF79B49D0","D5425FF294972BE11A257450D0D50BF13B921468FB3CEB97F3CF72934C5D0E55","9B7C77B98A5F5123977EEFE8D8379E8B452EADA4C53118307D166BABFB1F67BF","33D66153DFB3A5303D33D02944740E7357E9E0215B97B8BBE413174353B18145","17A5E7A6F002129A90068D1C7B70EBB9FFCA5E2F5E265DAC1042C5E0270C3615","3DD7AE830D991E6E3D8A7CC9D01C19D1C08CC8CCEBF867125D4CB453C5037803","6B39622CD91CE6080C4233730E5E67AAA4F374ECFC9C9FB227DF182E3A59DC44","55C43A1AE5F2F70ACEB0FA9CF4EF7C2CA9C1B3EA55D6FD2F79AA170F8BC2EDF3","94865D4CA990E82D2B5D3166AEC38DFE10E4EB6B52CFD17326591056D5DEAF68","D34B27A33D0E9C7897AF7FE64136986EA66094796144F4ECD42ECDD517A51FAF","A741432A6BDD7803DDEECD58344D760404FDEC50ADA38CA9E68AC8D1AEAAC445","EFA19B907FAA27C601659A82F0F26B94AC040F88E4F7B9A684BBAE8162E3C34A","D7D533B00FC59F9858D886DBFF337B6D03ABFA325397F0A522266D7837381D58","C10E1A8F1D0C6E37DBCB88D98BD6F380BB62E335ECA96CA364B8D4C6EC9EC9ED","1FE534EB25642A007EF9F970E0CD3B8C0C9999C37BA970389238F320764EF6B1","D43B5A8D55553D40B5A98E7EA0DD650EBAB18EDA2CD6BE11EC8B21CC330CC1B7","5D843AC4F2D4A3ADB8485275D344D4A87BC7956F6CED377B361FB2C31EB43930","2C784EF08739DBDE46ED4DF42941B01591757AFCD176D9FF18C29D1FCC99F076","7B1B767F8BD9882AEE899E3102433B8CAE6375564A624D4C94883CFBD0776A8E","A3CBFB78A3255C4A679C42CBDEB5387D1460DE5E53FB82B1D2EFECB41ECD1A9F","0188EB6FF2CBE5599599C2E963BADE3B22BD3CD39C76D59CB0FCCA2FBAD9CA3D","7F45DBB723564112648198DE968DA7F517789D8F8C7D2C787EAA9A7BDC7FA5DB","92EC7B02E82D4FC924A2CF62A13DB68035BD27B29ABA7E02872A2E3364691B5B","2B9A177AA5092513DD872484C34393462531304E65C3D12E9208C430502953AE","08E7DE50D3CC7950D189648CAE50320FDDF9E28B3B7382A84EC2F2C750F69BA9","7392B6F3FBB2FE83679AADAF8BE84A3352A1041B87F5DAAAA04D58D02470D41E","E11403585E6FB5DE6192C919E10F81107BC5B5715684E15D8A4394DC59E9B43D","9774DCC8E937CC57B3517D25409831FF31C48E4028C4E25FB5B15D51051A8215","B3255E243A7F7D7DE9022C5F61D58702E99D574EC46219CC2C615BCE173AD429","E6871C2A2DA2E41C9D7F7FA5250B2A4650F37446463A85E88A18922C8F1F9060","7D597E3A3EBD5F498C45106C21526E67A1491CA7EC83536C14815038FF8ADFC9","6FD6D6060009BE5D2FC0C04F2B78224F322311993F2A2B135B0E4CE49C02B50C","1F99F6D38DB112CA3AAB7984F57EDD6C1946820FA96271EC1E7084233D5034D9","028B140ECEA84849D936E2F2C6120C8B13CBC4B97C8840C6F62491B619F9928A","954EF6772EB72B74F4ABF5A377398EF4B83EBB1DC14753F40B24CBF2E458347A","B6ECB4F5CAE7671E9442EF45AE118A2FB668DAA1D4DB7784D120BFDC40355B5A","A05A877C96CD89FA4F32C9E0B0844F5C3A3D5621F9A6C1C1E32D7440A5D4C59D","A58C28C144DCBF337DDAB2CEB1398C523A1D27CA237AA31AC7AF2DA24A2AFA4E","85DAF7919222E8825BA3B75F0565B2576753FD121EFF68DA6CEC721AF88A9C87","21DD00E5922193FF0EDACCFA861C3895C69D5B4078363228FDF2FB79369A88B5","F400334A708DF3F512634F61D783ED5F5869513EAD4A6FEE0C3F3EF2FD063FBC","BC5F6F7EBB4F2FD246934700F320DF96EC29E2BAD58955C8BED79FE88C893CFA","2229B8ACA74DC538B69EECBC9890505704544BFA19770E9B276D5657C8869FA0","C5FF54EC678FEB98484F59040412045651E7E8776BB3933F3664BDD4442B0DCA","FDCED05409F5F2F0E1C7F9B590286332CBAACC8CFDE9FB65C92C6885A3A09E63","478395B56880BD65DCA3356EC96CEBDBEB9EECFA35484B51EE543C66A8D0E06F","277281C5F3F61893980CAFCCCF3A595F50D03E275345E81D47AD19F565679592","4534E16B6AF3F930610C0C98DA713ED5A77738E1C187295163ADCDF50DFAFC5B","6DAF4401FBFFB4E6BA792DBD76DCE26E691B784BD7A27ABAA23B27538A935258","2E055CEE9A4B996818C1FCC3954AC9E3FF5A904984D3844685BF08A51E8A5320","65745C1C30EC71476511A325E61A72622A61AFE77689D4267C37B0522005008F","EFD4A2DEB0C071ECF5B7007D67935486DCC1BB0C21EC54D194538F8F96C6CCEE","433BB3C65E7DCCB6A2C29BA7BE979747FF26C2C5C3DC1261840ED5A931AEA046","80284791B7C98765E879D4F9653983E5A66815F094255E1C27F7C7327BC884C1","9BC36C37D41BB45D9E6F0DD32171B1E03153A51C60BEE164A8BC18DA7D46030D","E3210646F17D30B1C33AA82B3A911E8204FB37CA441C5D6A05DB693B5CEF6BA6","847A6F1088D3B30F93E898220F0805AD342EB1CE2E1B79D0E74C533F3354E215","7FC9F9EB4DDE0E2B78044F95EC0BFD850AA7E1ECCB038BB724CA0BDA92F17A37","FB06BF2E7943B107D958717068E0F0ABCA3844C24069CB9B651036E527924420","2FB2EC022BBE9115CB1B5C9FFCFAB714D5D9D107359AC9FE6EDD4C5AA30C8F3B","CD0C1292EA381B96F2163BA3F2C7BCD1BB6737557D6D773D6473B321069F198C","A32CEEB91982EDD48C975E14D1B6BB6F9D89E50401EBBE44B859F92BAED3F371","2F39EC62D4D31C3B5CBABA20B760F211848D2B91DBC81093E65476CB2A3993F3","65DBEE85C7180F9C5C9DE1484BEC463129DD9F3D8423EE5F71C695B9D3BE884F","38C573238771A20912C888D0F5E78F605802D3284F0BC44A88312AE9AFA05444","194A8C0FBE4C67873DE00943C6BFE46BF0BADC0E599193B9B280B3E4A8936415","2236B2EC26A12C3507BBB73000F45C66D99EAB36C71CCE074406B3DE2AAB5522","9C3EDBBC3C5A18E4700DE363D5E6B62872911EB287BC72F28C294BBD867A6792","F50EE5B0BF99D86609240B360F841748C207B167D8DD883119D212738690AF08","3C1200A655E50C8CED5E050131508AE11239B9A54964487AC1A4C37D00EB65D2","41D53788A52018C2E64631486C47F33E0BD18F175790D5A75CD7104AC4B940BF","B007D8BCCC5395A11AD09B2E082A47E89A9452F26C1448A7D2F9477EBF007A53","836BF05E781C00092A1182FE8CF481F51086BE939CA03BE98108FBB70F20C703","ACC725A403B511FA46DC93B469682F0720773F7795A7D502793BFF4C14EA367E","45014AED8A6657B0B6CA7C8C90EA27561F5B1200D296FEF2B8D72821E4B2C7CF","7EE683A29CF5D00B9BD9D0FA0D33220B1267F5F2B4AB068052EB3B437CF10403","DA941B01177D7B99719DB51139CC95C818A196B4F651F274951B323BFDDD04E4","766DDDF1D677B72F5D9DACD348C4E9CEC9155A4C7C1DC1200097D936010A521A","FFBADD2699D37CCB574C7B497A213C9E1BA6BB137BEEFC18149959A01EA1B20E","AF970E1C31EE2D50FC8A6116AEEAF7E076AA0F532532E7E00F2FB1C97766F2EA","4C621E3E6E7EA2D537C4BC16289C851F45385772054EB8E480FA8FF4F1C73B15","B1D4BCFEDCA38B86CA12D5253407DA51DB84F52E173F9F50CD4C33A029B1F626","5B67070DA3D5B5922AF42B8525F41B70B0D500CB11E0A9A65FF7979855A327A0","74EB669791E0AC9FC44DF8782E97276EB844936BB8BA7EF16D52E02BB4DB0340","C9F915B255DF51D876B1F3B50FBB73D5BD029DD6607D7AB223CAF21AD8D1BAD0","D0FDA0029952FE27437F1B2BCB376FF19D29E0C43BBB3FD38122EB4D193AB6E7","D96F7DA38C84044720A5D25CFABF3B83377A46B6F5EE32EB37EAB9628F4797E5","00E42FAC740E896D8696AC2C6C7C6CB6AC3C66DCACE88987B59B1CB7A0E4AA12","757BC03F5D14ED09D6CD4CB8CA51EB1BBE2250FB941465D037C733BC88E978C3","9B6355A007386E66E8868C50A6CB2C2FE73360E47B083BCAFD9A692B6BFEBA01","683DBFC2F170B7E740D423D9728969E1313E9C9BB24424A849C045206AAE3B54","57747904177BBE8EB93F869D1A0234E54EE9492C15CB796B66703C0F7BA49D87","BD0DF2C0CA450FF2CB0983602C0F31837F14D18DC238C0291BE45BAB61F9CC51","5869B6B0308C04A2EA597A51EDE1F919AD42C34744E32A12D46D8972EE7E44B6","3E5EE63B300CF7B5D433DCC4EDB982796A3B68C23EFB1DB8164C74A9A21B1AEF","0A56ABC0632AE52285B8B270C483C7C5EFC9C290A2F6F2B7E4D7486102E722CC","9664AE6C47D7FE35ECFF08919EF30B2876520B947935D00CAFBDEB2B8ED1A626","F8EBA8D7BD0F9767AF2FFC62F5A64831AF9858C6AF7D4220127F39B8508389B7","3BAF31CB0C3193D8F2B9DB44C2168DD2A0E2632A38F4A2317900C8E0199D5410","E3D8B355232E53F0F29ADB4A0D2BECAA0ABDB9C4F76C7B49D5133332C2C06D92","B690626D0D6B54FAB461C4A36736F8BDF95364DBC4D594735E226649EB05458A","D604B587E6C0F3C7DF04C44C99AF993AD21526AE686FC3365901DA8999C42CA4","CC833B6CDDF9F38779913AA285EE0104F3E283170CA0FC78F2653FC1D3666C10","AB0FE6B44818EFE913618BC30EF7E62D22829B10F0EC84F14B8DEBD5F2554E57","352057AB9D4436946106493CD78CDC9BA9F9C28AC08364305E41D4891A6818ED","5CB8851EBCF0A410D083BE68895CA36F7C334C28A84C2EF75CF365815DB0C5DA","29E3EDBB46B9719E07B484622F17B7158503E842F3EB7700BD2EA056F77C2308","BCDEB868158A277F40C954E9E22D2D206265BBCC4FCBC900A5312247DCA03612","8D0A8F6725393E747E5D63792F6528D17DEFB88A250528B6E09C3961809EC40A","BF6E35F6ABB9F0FC1E5BBACA8E94CB6A339BB039D724A4FBF5BADCF6E0A49853","B33797E9EF0D5AD3741AAAA4070731259DD46F3510B2BAA53CA03EF0C7EC2D79","3A8EA13651B67041E43954FD0D2BCFBE54B2D4BF5F2436A58E747AB9C5977EE0","029CE8F49B3A8881D3A80A996DBE4CB6DE93C8AA6C495C6702981E16D4A483E4","C74BB06CC28ABEB79EDED2A5343D52FF75E1653E98185C7398277E9B64861DAF","FFE0B50B26ACD98C9183D0CD16FE210F7E9A77F7313F630A9F372924DBCA02CF","84210BA9CB5E648F4C8F21D9CC2CBE72D683DFC30735D578604D2EED6338C258","BF565F30320F5CE89215D1BBD028DFD315981F7420672F84D0CF35A6D02CA4D2","EE3931DC193ADD06318BC435076C056004CF40390A2F762D5E203AE991B49F0A","DAD787389406BC027778E6B66D8B8ADF6E68045675AA3D0BCB859422280AEAE5","BB17C736E651C2DE1C59662CC592305814B5D25C69D501D13E07F0BF82526FE2","681664E8F719528ACCD0785BDA00CE60001066F8E7EAF25B74C3E406E6E88E2C","363BEB0B3FE8796719E0D0F35AF6B1382977A60BB5275642CC09CE9B54B3D4FB","6B90F34E96C9EA29C7C19667A41475FFA614846434D56A4D224E5102EFE617DE","0A3B8524535CACAE5B2C4B05DCBA6AE54802C4B6B20977608014426CA0E4EC14","AA3FDFA1D9B1FFC9B2CC9CDCFFA798B6A46CCCA472B6BB700E8C4F4150208BDA","D37478A894C201DEA05937B7B508AE8B3C32A02CB916439DBCE58CA63DABB611","C544CA7BC3FABFCA577DDD94C15A9F9A82DFE9959B5D19301D28E08546249B94","8EA79E7324A5E4B8B02304C9208609C2A36D3F70EF8115743167E7EA1039C473","3D7D907BB2018976D740C4383C938DCFACFC397F21653C8D73A57FB7573C7FAB","2420437C6E283036F6AC8B729F238CBCC61FEC0EB5CB95EF8741BCBD27236F7B","ABE8DD45041E6CE9941A9F5C4D826C9A7FA04E6122418C47D4306E4C8883052C","44AF37B03CAE2C0CCDA926CE080A86FDDD7BBFA79934FF895B0AEEF492000C7E","DAE27EE7A656B511EACB20E92D69E6F1D307FC9314F87DE9282E791413F81879","1AABA4FF5129DB2C93EE68F0AF326FABCB85AA07AADB6793BBEA4F59D354E862","E3823E89F56FDF1496C4D2D310130DE1DE3F9959F9C30D27C16E59FE80F0BBC2","FF93D4D2FC97084ACDEE0289EA8915C5A27492594447875D8A4FD54E7AA10AC1","AB16A156ED2871C2B89FB847E907F5361C89D503254D8D3D9497E8D446BB4039","82202D0F004CF5B8686AB36F47F27FA6F4866D4B90DB81D8E3BBD239AC8800C2","62718EAD1DCF7A8A193C6C9EC936EBE963E1D24EEE35BF0F061E7BCF1D35DA97","818F83781C351B3CCA2D06D47798102486F33D335C0218D6FF2BA1312C969EA4","106794773A59BC5596A3595BBC1693AB10BE7AED59096E9288F658CB7C8877D0","0E08E0E28ED9F53A0711384A13967FAA980AEE5C6812EC6D3B78AFE8B385BB34","3F5D97056B31D3A07B02BF02FACBFC8DDE93EFD28BBAFA00DB0EBF0F98EBA436","D633C7EC029ACCAD3C10BA420CE53BEA14245DC2A30A79BE43A305EB603E7805","06208009FDCE2B64F4831436EFAF7F5A98B20D5676695C84B108A4B67872A70C","38916704F7644B384A60794142A8C6CE6159B72A7137BF32EBA473C05E0DFD60","2D4FD632B4E6E14EE35B90C961E87FD85A0D79FB729D33378C0DFE46C772C7C2","41540A573C18FDEF97B591947988C9D6C9C1EAABB21144860D171A235F4A2C9F","311D7BC3CAB11E9419E2EF09B145367D077BC65C20AA4B0728DE4D720CDBFA21","27E545F29FFC264332865B962F6CEFEC9AC1EC453FE7C8541715E078EDC66774","F9987E4FF2104405763F827F7A04C02684033EF0881A55218FDCD75749A7E5E4","A6214893E710016BC81C46D6A93911F0C68FA129C593DA258AEC0292B3FDBF94","B220D8A682F7476A00ACA23FEA85D627C05B56260AE0CBBA664AB4CD582AF997","F77A0EFD9E7EE75FDFD6C262BB1366FF411E7957317696F9FEA3FA77DEEBFA26","93D2C1D57BAA64CB43874EDEC4119D4436E0154B34DAF7166A2ACA9B4F5EA62E","405FDC9C170BC06539BC5AFD5950598633A2270F3EBF7A583C84685CCD787E97","E1F9BB6567AA7AB0572AB0244B88A784967DA23BB624952A9EA0C7C388789CD5","DE174A6E0F0CC6001BC6FCC4A7B8A35B76709F373E236D3D100F777099A42263","CB49FEE9896E83955A9CC87EFE254C825F25F0631760A52F8864F5A286C87877","63ADA89CE5200E765E47D3C9C7BA606162D60DF71A3091894A27C850B05B33B9","F7CF8DCDAD6358E0B353C083CC3922C81B4DAF4A175574C1184F530ED6C3185C","9524C4905778C2B780970F8FBDA80B6D1C79FF2B9989A6368245640D92AE1A56","7D56DFE71C719AF4F92720101BF381A6121F8C5944E36495CFA22998367D8E16","8EABA03CB34535E807584491F439E5E622BC54729DFD0073F9AFB55641CAAC1D","E5F0AAF0568F1319BED1A6E6234A6B6BEFBC5BCB6F39C07A8B794F84CF3F1873","2593E9D9F33326FE921325B30D39F26EFD93739D4D3D46B29FA77C21FFD415C5","2B595D8B7FD494D2EED53D929006910031144ED21F25ADDEC1F83D2CAD96445B","6C4100EB1A3F77DE533167E459BE7240987F26BE436C05D7501AE3B47AF91AA8","0AB0905CED76219D208D262183168A84758ACCAC0173312BDFEECFEAB63748FF","8B922D41A15207167D290656E1FE29EE1689F6D24AD0D3935F81902106C78EF5","CC5FE2AFEEB9C20062970886FD6B6F92E309240AC25A8794E13D1FE433ECF814","00230C6241689491572F2BE8BD1ADA201C755AA09FBD58B3F01C2EA9F6C38FBC","30B14D0B82D30352B920416D821BE00C391A807013F678C07866B595A9AE738A","8D92FB2055B39D6FF7682B02B592A670E0A0D908AC27270137D3DDBD0FF8AC0F","4FFA9DB1383819C6CE28196ED5F3EDBE7A1FA94445E00C672AAC61BD41336794","C6C0190BEBD34311C076BD9686BA0B1D7A043184FC37F379563ABE97A1CB7ED1","E0E1101D1D35DFFD64054C91CD82925FA434C8BCBE05600DFC73AFE56518FE04","9B578D75BCF9C41E6F5C87BE54F76A1AE329C129D1D4FD219150B76BC704C4BD","A02A86CB74ED364942FD0F3599F953BD646FA6025D5DC090C8900CADC94983F5","CE315FD3F9DA2FBC43455441E5B9F43B2A852FF539818BC4D1004677EFF67EB2","6942E57B59A1C816DD7B023974A820CF39E5111E323B64714B71E513F32D4ADF","C4020F18B45515E28DC63AEE2C3E803F3CDE5BB52DC5290D95D701A57BCC2E1A","E4D627BF109801536717DCA33D1B393736F34BD413067C576A78240A96ABC7F1","44501F1D58899F7E6C3A846436427DA09D0958A11EF83A5E9741752B9534B1EF","64034F640E653A0558B25C5B457271A496CFE0F624763DA87362626396F4BBDC","DDA1988F4B0022213D725ACF50E26ED43257EDAA080E8DBAE8A6DFC1683CEFCB","B1312083CAC0826CD72F17F122E8F4F53E9C4266CD2D0D10C94876CE38FDBE91","4590BDAE1C9E21661FC7A65FEAEEE951A73F695BDF8CA0E82FF811CD588D4769","495651FDD51FE5F200713A5F9AE81B5F7089066F14642FC492CBE6568AE81B32","1B8C44C9BDA8AACCD0E6F2B123749CEA414AA3D569135EF8FDDB60B23A43C3F2","A36AD1FBF7F0617DBBF4C10B01906A17BA83657B604945A57AF17E79FAA5ADBB","B2B14726E4F2C84130D098109E4D8723BAFC4A9F08384553EC904B5A7798C9C8","A1A71AF0E102EBD7DD93D412CE63E386D7221BEAB9770C22BBBC051EADE759A4","4C6622A0F8D2105573CD2A6494C9B983FEE0D3B02977639EE575BCD2F4EF3D41","93B79BAF0D3163D935066393FEF8C2EB5543B5DCFA8FE465F85E396982E19773","3FE4FB9171E4649CCA3D59A391548265046059BE3788B3FF39CBF92FA677048E","0DF5E7953DF0FEE769AC70228E9513CF6B1F4EBD86A1A64C6ADCCD0E66005871","FE43B8F38E62A4757616C70CEE02EB2FCF9F45E4E1A43EE4C8022ABDB97333B1","C891795E8244A5EA1D43139906E5CD6D9FEC177EB3D5CFD598B99599C0FCB843","6D81C724EDEA609E5C5572369DCC7FD1D0986C7B82B42CC6E2D1E80A3FE8F9F9","6F400AA10A6BFF484F5E07D6D697152E35E3CEB3FE0ED9886E1607B77B1048D8","F3BBE219C82DF2CC1800393EAD3D929299BC75BACDF70380C6C6067A33238D11","A28E4ED96F099C0CE07707FECB985D4828EC48795D365B78DFABEC653071C0BF","745538F694DC743AB6E9F0CF0C05833E57F6600D3DB3F247FC45C0224AD521A6","CFDE6DFA90BD8F64F8649ABD6D4EE608BC3F50B42C37CE5708EF1A815211623D","D2503BCFCD803762316DFEE6AD32D56CAAC1D96CB58677E893DE386D9B512AD3","E4EF842488E8CD8C7AB209282D213329D2BC80AD3C1D8676AE7BC1A85B4564A9","5568508C40782DDC028E42FEEB78F67E5C188BD35098CC58CCDD43FB4BA51AB4","7EE1AC2A77EB0862FC5E6CA4319F95AA960679B572A476F8282C38F1C2823D36","39C7CD3568BF877D40754C585A6A4A0CA1A57F3B8CB144A01CA1DE18E4489F85","F3265799D576F322295A6229A705D212BB25C82B639A47D037B0817B883475D0","C8EFBBA6764313900DCA6EEB64B195D25F089224B8DB461B306D461A6966856C","C290527E7C357B2E5A0F9178C6BE1B0B566FD513C814F27A664A62827DC63465","8A6CCC84998154349F6080B21AB1FF1BDAF9D9C7B24984BA5E6CD06BEDD7BA7A","ACD9E8F6BAE1913EAAD4B52F5FEFDB3F6C69317C36658749AF39120810F566C9","0927A201F9281C4D652EC4DD0676A179C1B731B59FE062D6BE1198AA1483E41C","38D24962B4DDB2711539404CBDD97A7393EAEC52A81E03FEB7D159D9290996BC","5BFE6AA81E2AF93E3A066F2D7818A40E51FEDF35CE848023BE3330D52484130D","7739C48A8EBAEFCF19F631FC06BB3C7FB5E7F00462BD6D58F5C1027B0BCDEB59","4FC1B97A8D4E414A0B982E3251A62419396A9D1FA8114A1A777BFD8A6CE15D9E","A895737B7B3EBEFAD289AA36873E7F11EBE74D4A014B1AF8EBDC159803B91106","3A0E7A191BDB5F7E7F0A55F69C60BBFC262521134E71198C7EDF1465F294FDB5","18A9C02DEBCF75B1A24EA924059630B6634467C5AD6CCBEDB0077EF9AFFFEE69","5C90FC5FD33F9DDED79B78540D5FF1D4C9B2A18D2AFD5D3E0A2E7FF5F00A0555","4B63D5CB16236D4307C1DA72CD51DCCD1F8D454256BE6361F3B848C4423F56AA","A6117797578DA5047D9C500F56FC1CD3BFCE0CB052F6EB6BC5D6BD932C29F2BB","50ABE7AB7DCF1ACA12EB06E38C2B3B2C54B753A05B81F3B5E18CDE1F164F3FFC","A49DD813109E8BDC408360E80BFD9CF945501BA3152FDAB719B2989946560145","910EC78E8775AC2925611B580E043098816E2D8391ECF6C7333D1D31FDEF1BEF","BB364250F2E73783579D3229A75B98B91582933D402914C2FFA2A95F8D358BC7","7E1F64DC0B37DAFF2738A915E049D5240499E46920B92564B532C67873CCFCFC","FE96806BDB98DDB651A4C9C80749C79215ED8ED26BEDD10E49AB91631CCAB5A6","3401E5B2E5D3A53EB0891088A5F2D9364BBB6CE5B37A337D2C0660DAF9C4175E"],"FirstLedgerSequence":2},{"LedgerEntryType":"AccountRoot","index":"B56A1635B519A4ADD78176434543F36064414CDA88F05BF8C005F5FE000E9C6C","Account":"rsQP8f9fLtd58hwjEArJz2evtrKULnCNif","PreviousTxnID":"83124A90968261C4EC33F29A5F1D2B2941AC7A52D74639C1F8B94E36C13FA3F9","PreviousTxnLgrSeq":71,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"B5C9E9C4DEBB62335A724966E71A6FB40943D363DC76E0C11DD748A6B7D31BDE","Account":"rMkq9vs7zfJyQSPPkS2JgD8hXpDR5djrTA","PreviousTxnID":"BFB2829F8C2549B420539853A3A03A6F29803D6E885465F11E6BBED711DD013A","PreviousTxnLgrSeq":89,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"B6C70618B38DD91E494F966424E444906CF485DC2953FEFF1DC1C012FD87CD0B","Account":"rBQQwVbHrkf8TEcW4h4MtE6EUyPQedmtof","PreviousTxnID":"1EE8602B929B4690E2F3D318AFA25F5248607F82831930EB3280690F66F98147","PreviousTxnLgrSeq":237,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"50000000000000"},{"LedgerEntryType":"AccountRoot","index":"B6DFCE9192DB869545C42908C097D41F0FF64530D657D5B2A29901D06D730CDF","Account":"r4q1ujKY4hwBpgFNFx43629f2LuViU4LfA","PreviousTxnID":"F00540C7D38779DEEE08CA90584D3A3D5A43E3ADAA97902B1541DD84D31D3CA7","PreviousTxnLgrSeq":14310,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"B70039BE02BF3A156A24463C27E9672D46476D1E3C4870808374854AE16B1935","Account":"rhDfLV1hUCanViHnjJaq3gF1R2mo6PDCSC","PreviousTxnID":"4D4C38E4A5BD7D7864F7C28CAD712D6CD1E85804C7645ABF6F4C5B2FE5472035","PreviousTxnLgrSeq":90,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"B722F9C6787A7019B41962696E9E0484E05F2638C0A7FC771601A8C24A2D3191","Account":"rppWupV826yJUFd2zcpRGSjQHnAHXqe7Ny","PreviousTxnID":"77A1280E1103759D7C77C6B4F4759AF005AFC58F84988C1893A74D47E3E0568A","PreviousTxnLgrSeq":8410,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"200000000000000"},{"LedgerEntryType":"AccountRoot","index":"B77F72D5F6FB2B618878DF60444456C14853E14689143CD3A453A7773C136196","Account":"r43ksW5oFnW7FMjQXDqpYGJfUwmLan9dGo","PreviousTxnID":"663F8A73611629DCE63205AEA8C698770607CE929E1D015407D8D352E9DCEF8E","PreviousTxnLgrSeq":26710,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA","value":"7","currency":"USD"},"index":"B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93","PreviousTxnID":"45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36","PreviousTxnLgrSeq":8904,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"B85B7C02547D98381DEAFF843DB507F595794C6A28805279B6F3CD5DDC32AD25","Account":"rDy7Um1PmjPgkyhJzUWo1G8pzcDan9drox","PreviousTxnID":"7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B","PreviousTxnLgrSeq":23095,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"200000000"},{"HighLimit":{"issuer":"rsQP8f9fLtd58hwjEArJz2evtrKULnCNif","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8","value":"5000","currency":"USD"},"index":"BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD","PreviousTxnID":"A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420","PreviousTxnLgrSeq":2026,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"BC1D404334842AB9252EC0D49BFB903518E4B91FAB452CB96ECE3F95D080063A","Account":"rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8","PreviousTxnID":"865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946","PreviousTxnLgrSeq":16029,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"9999999990"},{"LedgerEntryType":"AccountRoot","index":"BC9BA84DC5EF557460CE0672636EEE49279C5F93B02D1A026BA373548EAC19A9","Account":"rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je","PreviousTxnID":"99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360","PreviousTxnLgrSeq":4156,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10300000000"},{"LedgerEntryType":"AccountRoot","index":"C13E84A1C017CFF22775AA0D2D8197C8319F30540AFE90B8706A1F80A63868DF","Account":"rsRpe4UHx6HB32kJJ3FjB6Q1wUdY2wi3xi","PreviousTxnID":"D99B7B1D66C09166319920116CAAE2B7209FB1C44C352EAA18862EA0D49D68D3","PreviousTxnLgrSeq":3751,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"40000000000000"},{"HighLimit":{"issuer":"rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","value":"300","currency":"USD"},"HighNode":"0000000000000000","index":"C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C","LowNode":"0000000000000000","PreviousTxnID":"19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA","PreviousTxnLgrSeq":17698,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"C34C3BA82CD0770EF8FA4636E6A2C14B1D93989D4B05F1865B0C35595FA02EB2","Account":"rwDWD2WoU7npQKKeYd6tyiLkmr7DuyRgsz","PreviousTxnID":"3FAF5E34874473A4D9707124DA8A4D6AF6820EBA718F588A07B9C021CC5CAF01","PreviousTxnLgrSeq":93,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"C41A8E9022F725544C52778DD13858007330C5A87C17FB38D46F69470EF79D34","Account":"rDCJ39V8yW39Ar3Pod7umxnrp24jATE1rt","PreviousTxnID":"30DF2860F25D582699D4C802C7650A65DC54A07FA0D60ACCEB9A7A66B4454D5A","PreviousTxnLgrSeq":3745,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"150000000000000"},{"LedgerEntryType":"AccountRoot","index":"C46FA8C75CA1CAF38F76EF7D9259356CA8D50824A9CD25C383FBB788A9CC0848","Account":"rf7phSp1ABzXhBvEwgSA7nRzWv2F7K5VM7","PreviousTxnID":"BEF9DFDEA6B289FF343E83734A125D87C3B60E6007D1C3A499DA47CE1F909FFD","PreviousTxnLgrSeq":3741,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"150000000000000"},{"LedgerEntryType":"AccountRoot","index":"C64C17E27388ED04D589D5537B205271B903C1518810602D50AD229FF74F11C5","Account":"rwoE5PxARitChLgu6VrMxWBHN7j11Jt18x","PreviousTxnID":"3F8E7146B8BF4A208C01135EF1688E38FE4D2EB72DCEC472330B278660F5C251","PreviousTxnLgrSeq":26719,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"HighNode":"0000000000000000","index":"C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C","LowNode":"0000000000000000","PreviousTxnID":"4E4AAF8C25F0A436FECEA7D1CB8C36FCE33F1117B81B712B9CF30B400C226C3F","PreviousTxnLgrSeq":20192,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515","44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01"],"Owner":"rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS","index":"C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D8","RootIndex":"C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D8","Flags":0},{"LedgerEntryType":"AccountRoot","index":"C9E579804A293533C8EBF937E03B218C93DC0759BC7B981317BCBF7803A53E6A","Account":"rnxyvrF2mUhK6HubgPxUfWExERAwZXMhVL","PreviousTxnID":"189228C5636A8B16F1A811F0533953E71F2B8B1009D343888B72A23A83FAFB3F","PreviousTxnLgrSeq":95,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"300000000"},{"LedgerEntryType":"AccountRoot","index":"CA3461C9D58B392B65F79DDF2123CD044BF6F5A509C84BC270095DA7E7C05212","Account":"rKMhQik9qdyq8TDCYT92xPPRnFtuq8wvQK","PreviousTxnID":"5014D1C3606B264324998AB36403FFD4A70F1E942F7586EA217DBE9336F962DA","PreviousTxnLgrSeq":262,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"50000000000000"},{"LedgerEntryType":"AccountRoot","index":"CAD1774019DB0172B149BBAEAF746B8A0D3F082A38F6DC0869CFC5F4C166E053","Account":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","PreviousTxnID":"D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA","PreviousTxnLgrSeq":4174,"OwnerCount":8,"Flags":0,"Sequence":9,"Balance":"8249999920"},{"HighLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy","value":"0","currency":"USD"},"HighNode":"0000000000000000","index":"CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B","LowNode":"0000000000000000","PreviousTxnID":"7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4","PreviousTxnLgrSeq":26713,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF","10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"CB6B7AB6301045878E53C56A40E95DE910CC2D3CCE35F1984BDA2142E786C23B","IndexPrevious":"0000000000000001","IndexNext":"0000000000000002","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"HighLimit":{"issuer":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x","value":"1","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH","value":"1","currency":"USD"},"HighNode":"0000000000000000","index":"CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488","LowNode":"0000000000000000","PreviousTxnID":"3B76C257B746C298DCD945AD900B05A17BA44C74E298A1B70C75A89AD588D006","PreviousTxnLgrSeq":17759,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"CD3BF1524B464476BF3D5348DB2E1DA8870FBC1D160F25BC3F55BCE7742617CF","Account":"rMNKtUq5Z5TB5C4MJnwzUZ3YP7qmMGog3y","PreviousTxnID":"D156CB5A5736E5B4383DEF61D4E4F934442077A4B4E291903A4B082E7E48FD42","PreviousTxnLgrSeq":3761,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"1","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"1","currency":"BTC"},"index":"CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF","PreviousTxnID":"3319CF0238A16958E2F5B26CFB90B05A2B16A290B933F105F66929DA16A09E6E","PreviousTxnLgrSeq":2953,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"1","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","value":"0","currency":"BTC"},"index":"CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB","PreviousTxnID":"DEEB01071843D07939A19BD97128604F2B788C744D01AF82D631DF5023F4C7C0","PreviousTxnLgrSeq":234,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"DirectoryNode","Indexes":["AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF","142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5"],"Owner":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","index":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","IndexPrevious":"0000000000000005","IndexNext":"0000000000000001","RootIndex":"D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3","Flags":0},{"LedgerEntryType":"Offer","TakerPays":{"issuer":"r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3","value":"7.5","currency":"BTC"},"index":"D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52","BookNode":"0000000000000000","TakerGets":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"100","currency":"USD"},"Account":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","PreviousTxnID":"58BF1AC5F8ADDB088913149E0440EF41430F2E62A0BE200674F6F5F28979F1F8","OwnerNode":"0000000000000001","PreviousTxnLgrSeq":10084,"BookDirectory":"F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000","Flags":0,"Sequence":6},{"LedgerEntryType":"AccountRoot","index":"D20CBC7D5DA3644EC561E45B3D336331784F5A63201CFBFCC62A0CEE7F8BAC46","Account":"rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN","PreviousTxnID":"7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4","PreviousTxnLgrSeq":2967,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10600000000"},{"HighLimit":{"issuer":"rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr","value":"0","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"10","currency":"USD"},"index":"D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE","PreviousTxnID":"9C88635839AF1B4142FC8A03E733DCB62ADAE7D2407F13365A05B94A5A153D59","PreviousTxnLgrSeq":268,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC","2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D"],"Owner":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","index":"D350820B8600CB920A94752BBE3EABA576DA9114BDD1A5172F456DEDAADFD588","IndexPrevious":"0000000000000003","IndexNext":"0000000000000004","RootIndex":"433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C"],"Owner":"rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG","index":"D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D","RootIndex":"D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D","Flags":0},{"LedgerEntryType":"DirectoryNode","Indexes":["9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09"],"Owner":"rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY","index":"D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40","RootIndex":"D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40","Flags":0},{"LedgerEntryType":"AccountRoot","index":"D5C0394AE3F32F2AFD3944D3DAF098B45E3E9AA4E1B79705AA7B0D8B8ADE9A09","Account":"rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG","PreviousTxnID":"AF65070E6664E619813067C49BC64CBDB9A7543042DA7741DA5446859BDD782C","PreviousTxnLgrSeq":10065,"OwnerCount":1,"Flags":0,"Sequence":2,"Balance":"10099999990"},{"LedgerEntryType":"DirectoryNode","Indexes":["8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C","C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C"],"Owner":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","index":"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204","RootIndex":"D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204","Flags":0},{"LedgerEntryType":"AccountRoot","index":"DA4F3B321AAE1BF8D86DF8B38D2FFC299B1661E98AADFE84827E5E9F91BF7F92","Account":"rBrspBLnwBRXEeszToxcDUHs4GbWtGrhdE","PreviousTxnID":"972A6B3107761A267F54B48A337B5145BC59A565E9E36E970525877CB053678C","PreviousTxnLgrSeq":101,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"DAF4D79959E97DFCFEF629F8FFFCD9B207FAD2FBCBA50C6C6A9F93DE5F5381FD","Account":"rLebJGqYffmcTbFwBzWJRiv5fo2ccmmvsB","PreviousTxnID":"458F1F8CC965A0677BC7B0761AFE57D47845B501B9E5293C49736A100E2E9292","PreviousTxnLgrSeq":14190,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"AccountRoot","index":"DBF319518AA2F60C4D5C2A551C684B5FC6545AD9D0828B18B0F98E635A83FDEF","Account":"rPWyiv5PXyKWitakbaKne4cnCQppRvDc5B","PreviousTxnID":"2DA2B33FFAE8CDCC011C86E52904A665256AD3F9D0A1D85A6637C461925E3FB0","PreviousTxnLgrSeq":102,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"],"Owner":"rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ","index":"DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95","RootIndex":"DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95","Flags":0},{"LedgerEntryType":"AccountRoot","index":"DD569B66956B3A5E77342842310B1AD46A630D7619270DB590E57E1CAA715254","Account":"rUzSNPtxrmeSTpnjsvaTuQvF2SQFPFSvLn","PreviousTxnID":"8D247FF7A5195A888A36C0CA56DD2B70C2AB5BBD04F3045CD3B9CAF34BBF8143","PreviousTxnLgrSeq":87,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000000000"},{"LedgerEntryType":"AccountRoot","index":"E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06","Account":"r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH","PreviousTxnID":"821706FDED3BED3D146CED9896683E2D4131B0D1238F44ED53C5C40E07DD659A","PreviousTxnLgrSeq":17810,"OwnerCount":1,"Flags":0,"Sequence":9,"Balance":"10026999920"},{"LedgerEntryType":"AccountRoot","index":"E0F113B5599EA1063441FDB168DF3C5B3007006616B22C00B6FA2909410F0F05","Account":"rMNzmamctjEDqgwyBKbYfEzHbMeSkLQfaS","PreviousTxnID":"81066DCA6C77C2C8A2F39EB03DCC720652AA0FA0EDF6E99A92202ACB5414A1B5","PreviousTxnLgrSeq":104,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"20000000000"},{"LedgerEntryType":"AccountRoot","index":"E1367C3A60F307BD7DBC25AF597CF263F1FB9EF53AB99BEDE400DA036D7B3EC0","Account":"rHWKKygGWPon9WSj4SzTH7vS4ict1QWKo9","PreviousTxnID":"711B2ED1072F60EA84B05BA99C594D56BB10701BD83BBA68EC0D55CD4C4FDC50","PreviousTxnLgrSeq":105,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"CAD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa","value":"0","currency":"CAD"},"index":"E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469","PreviousTxnID":"AED7737870A63125C3255323624846181E422B8E6E5CB7F1740EB364B89AC1F0","PreviousTxnLgrSeq":227,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"CAD"}},{"HighLimit":{"issuer":"rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7","value":"10","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6","value":"0","currency":"USD"},"index":"E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714","PreviousTxnID":"EB662576200A6F79B29F58B4C08605A391151199A551D0B2A7231013FD722D9C","PreviousTxnLgrSeq":8895,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C","ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649"],"Owner":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","index":"E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29","IndexPrevious":"0000000000000001","IndexNext":"0000000000000001","RootIndex":"E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29","Flags":0},{"LedgerEntryType":"AccountRoot","index":"E24CA7AA2986E315B2040BE02BA1675AA7C62EC84B89D578E4AD41BCB70792FE","Account":"rLp9pST1aAndXTeUYFkpLtkmtZVNcMs2Hc","PreviousTxnID":"6F4331FB011A35EDBD5B17BF5D09764E9F5AA21984F7DDEB1C79E72E684BAD35","PreviousTxnLgrSeq":23085,"OwnerCount":0,"Flags":0,"Sequence":15,"Balance":"8287999860"},{"LedgerEntryType":"AccountRoot","index":"E26A66EC405C7904BECB1B9F9F36D48EFDA028D359BAE5C9E09930A0D0E0670A","Account":"rBqCdAqw7jLH3EDx1Gkw4gUAbFqF7Gap4c","PreviousTxnID":"94057E3093D47E7A5286F1ABBF11780FBE644AE9DE530C15B1EDCF512AAC42EA","PreviousTxnLgrSeq":106,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"2000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"],"Owner":"rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE","index":"E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED","RootIndex":"E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED","Flags":0},{"LedgerEntryType":"AccountRoot","index":"E36E1BF26FCC532262D72FDC0BC45DC17DFBE1F94F4EA95AF3A7F999E99B7CC5","Account":"rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E","PreviousTxnID":"DE5907B8533B8D3C40D1BA268D54E34D74F03348DAB54837F0000F9182A6BE03","PreviousTxnLgrSeq":17155,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"HighLimit":{"issuer":"rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th","value":"0","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm","value":"25","currency":"BTC"},"index":"E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6","PreviousTxnID":"981BC0B7C0BD6686453A9DC15A98E32E77834B55CA5D177916C03A09F8B89639","PreviousTxnLgrSeq":147,"Flags":65536,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"E4C4F5D8E10B695980CCA35DCCB9D9A04ADF45A699353445FD85ABB0037E95BC","Account":"rNRG8YAUqgsqoE5HSNPHTYqEGoKzMd7DJr","PreviousTxnID":"48632A870D75AD35F30022A6E1406DE55D7807ACED8376BB9B6A99FCAD7242C6","PreviousTxnLgrSeq":3734,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"1000000000000000"},{"HighLimit":{"issuer":"rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY","value":"1000","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","value":"0","currency":"USD"},"HighNode":"0000000000000000","index":"E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610","LowNode":"0000000000000000","PreviousTxnID":"782876BCD6E5A40816DA9C300D06BF1736E7938CDF72C3A5F65AD50EABB956EB","PreviousTxnLgrSeq":29191,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"EA13D588EF30B16968191F829759D4421560AECBB813DC697755D5F7B097F2FB","Account":"r8TR1AeB1RDQFabM6i8UoFsRF5basqoHJ","PreviousTxnID":"F85D6E7FBA9FEB513B4A3FD80A5EB8A7245A0D93F3BDB86DC0D00CAD928C7F20","PreviousTxnLgrSeq":150,"OwnerCount":0,"Flags":0,"Sequence":3,"Balance":"79997608218999980"},{"LedgerEntryType":"AccountRoot","index":"EC271FCA6E852325AECA6FA006281197BD6F22F0D2CF8C12F1D202C6D4BEED65","Account":"rpWrw1a5rQjZba1VySn2jichsPuB4GVnoC","PreviousTxnID":"EC842B3F83593784A904FB1C43FF0677DEE59399E11286D426A52A1976856AB8","PreviousTxnLgrSeq":3757,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"20000000000000"},{"HighLimit":{"issuer":"rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui","value":"10","currency":"CAD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","value":"0","currency":"CAD"},"index":"ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649","PreviousTxnID":"F859E3DE1B110C73CABAB950FEB0D734DE68B3E6028AC831A5E3EA65271953FD","PreviousTxnLgrSeq":233,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"CAD"}},{"LedgerEntryType":"AccountRoot","index":"EE6239275CA2A4C1C01DB5B9E120B4C4C90C75632E2D7F524B14D7C66C12A38D","Account":"rJQx7JpaHUBgk7C56T2MeEAu1JZcxDekgH","PreviousTxnID":"7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B","PreviousTxnLgrSeq":23095,"OwnerCount":0,"Flags":0,"Sequence":2,"Balance":"9799999990"},{"LedgerEntryType":"AccountRoot","index":"EEA859A9C2C1E4ABB134AF2B2139F0428A4621135AF3FE116741430F8F065B8E","Account":"rBnmYPdB5ModK8NyDUad1mxuQjHVp6tAbk","PreviousTxnID":"898B68513DA6B1680A114474E0327C076FDA4F1280721657FF639AAAD60669B1","PreviousTxnLgrSeq":7919,"OwnerCount":0,"Flags":0,"Sequence":5,"Balance":"9999999960"},{"LedgerEntryType":"AccountRoot","index":"F081FD465FFE6BC322274F2CC89E14FE3C8E1CB41A877AC6E348CBBBB5FFAA1A","Account":"rGqM8S5GnGwiEdZ6QRm1GThiTAa89tS86E","PreviousTxnID":"7E9190820F32DF1CAE924C9257B610F46003794229030F314E2075E4101B09DF","PreviousTxnLgrSeq":26715,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"],"Owner":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","index":"F0A39AF318742B6E1ADC02A5ED3380680445AAD116468DC0CCCE21D34617AE45","IndexPrevious":"0000000000000002","IndexNext":"0000000000000003","RootIndex":"8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4","Flags":0},{"LedgerEntryType":"AccountRoot","index":"F0F957EC17434D364BF0D48AC7B10065BFCFC4FEFC54265C2C5898C0450D85D9","Account":"rJZCJ2jcohxtTzssBPeTGHLstMNEj5D96n","PreviousTxnID":"60CA81BF12767F5E9159DFDA983525E2B45776567ACA83D19FDBC28353F25D9F","PreviousTxnLgrSeq":110,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10600000000"},{"LedgerEntryType":"AccountRoot","index":"F2201CF519F4978896F8CAC11127C12039CF46E14FE59FF40588E9A8ACA8A370","Account":"rJYMACXJd1eejwzZA53VncYmiK2kZSBxyD","PreviousTxnID":"62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012","PreviousTxnLgrSeq":26946,"OwnerCount":0,"Flags":0,"Sequence":17,"Balance":"5919999799999840"},{"LedgerEntryType":"DirectoryNode","Indexes":["CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB","353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5"],"Owner":"rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj","index":"F3AC72A7F800A27E820B4647451A2A45C287CFF044AE4D85830EBE79848905E6","RootIndex":"E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29","Flags":0},{"LedgerEntryType":"AccountRoot","index":"F540F7747EBCE3B5BE3FD25BF9AE21DF3495E61121E792051FB9D07F637C4C76","Account":"rLBwqTG5ErivwPXGaAGLQzJ2rr7ZTpjMx7","PreviousTxnID":"AFD4F8E6EAB0CBE97A842576D6CEB158A54B209B6C28E5106E8445F0C599EF53","PreviousTxnLgrSeq":26721,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"AccountRoot","index":"F56EC170A2F2F3B3A001D370C300AB7BD998393DB7F84FD008999CBFAB9EF4DE","Account":"rhuCtPvq6jJeYF1S7aEmAcE5iM8LstSrrP","PreviousTxnID":"256238C32D954F1DBE93C7FDF50D24226238DB495ED6A3205803915A27A138C2","PreviousTxnLgrSeq":26723,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"HighLimit":{"issuer":"rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB","value":"20","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va","value":"20","currency":"USD"},"HighNode":"0000000000000000","index":"F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A","LowNode":"0000000000000000","PreviousTxnID":"F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D","PreviousTxnLgrSeq":23260,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"DirectoryNode","Indexes":["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52"],"index":"F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000","TakerGetsIssuer":"58C742CF55C456DE367686CB9CED83750BD24979","ExchangeRate":"531AA535D3D0C000","TakerPaysIssuer":"E8ACFC6B5EF4EA0601241525375162F43C2FF285","RootIndex":"F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000","TakerPaysCurrency":"0000000000000000000000004254430000000000","Flags":0,"TakerGetsCurrency":"0000000000000000000000005553440000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036","F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836"],"Owner":"r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3","index":"F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E","RootIndex":"F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E","Flags":0},{"HighLimit":{"issuer":"rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6","value":"7","currency":"USD"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7","value":"0","currency":"USD"},"index":"F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06","PreviousTxnID":"8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4","PreviousTxnLgrSeq":8901,"Flags":131072,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"USD"}},{"LedgerEntryType":"AccountRoot","index":"F8FCC7CB74B33ABFDE9DF1A9EF57E37BB4C899848E64C51670ABFF540BF5091A","Account":"r4HabKLiKYtCbwnGG3Ev4HqncmXWsCtF9F","PreviousTxnID":"6B10BDDABEB8C1D5F8E0CD7A54C08FEAD32260BDFFAC9692EE79B95E6E022A27","PreviousTxnLgrSeq":229,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B"],"Owner":"rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy","index":"F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3","RootIndex":"F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3","Flags":0},{"HighLimit":{"issuer":"r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3","value":"50","currency":"BTC"},"LedgerEntryType":"RippleState","LowLimit":{"issuer":"r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx","value":"50","currency":"BTC"},"index":"F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836","PreviousTxnID":"FE8A112AD2C27440245F120388EB00C8208833B3737A6DE6CB8D3AF3840ECEAD","PreviousTxnLgrSeq":10050,"Flags":196608,"Balance":{"issuer":"rrrrrrrrrrrrrrrrrrrrBZbvji","value":"0","currency":"BTC"}},{"LedgerEntryType":"AccountRoot","index":"FD29ED56F11AB5951A73EBC80F6349C18BEADB88D278CAE48C6404CEDF3847B7","Account":"rKHD6m92oprEVdi1FwGfTzxbgKt8eQfUYL","PreviousTxnID":"F1414803262CA34694E60B7D1EFBD6F7400966BFE1C7EEF2C564599730D792CC","PreviousTxnLgrSeq":111,"OwnerCount":0,"Flags":0,"Sequence":1,"Balance":"10000000000"},{"LedgerEntryType":"DirectoryNode","Indexes":["8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C","CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"],"Owner":"rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x","index":"FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE","RootIndex":"FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE","Flags":0},{"LedgerEntryType":"AccountRoot","index":"FE0F0FA0BFF65D7A239700B3446BD43D3CF5069C69E57F2CDACE69B5443642EE","Account":"rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy","PreviousTxnID":"0A7E6FD67D2EB7B7AD0E10DAC33B595B26E8E0DFD9F06183FB430A46779B6634","PreviousTxnLgrSeq":17842,"OwnerCount":2,"Flags":0,"Sequence":9,"Balance":"3499999920"},{"LedgerEntryType":"DirectoryNode","Indexes":["B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489","B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93"],"Owner":"rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA","index":"FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C","RootIndex":"FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C","Flags":0}], "account_hash":"2C23D15B6B549123FB351E4B5CDE81C564318EB845449CD43C3EA7953C4DB452","close_time":410424200,"close_time_human":"2013-Jan-02 06:43:20","close_time_resolution":10,"closed":true,"hash":"E6DB7365949BF9814D76BCC730B01818EB9136A89DB224F3F9F5AAE4569D758E","ledger_hash":"E6DB7365949BF9814D76BCC730B01818EB9136A89DB224F3F9F5AAE4569D758E","ledger_index":"38129","parent_hash":"3401E5B2E5D3A53EB0891088A5F2D9364BBB6CE5B37A337D2C0660DAF9C4175E","seqNum":"38129","totalCoins":"99999999999996310","total_coins":"99999999999996310","transaction_hash":"DB83BF807416C5B3499A73130F843CF615AB8E797D79FE7D330ADF1BFA93951A","transactions":[{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Amount":"10000000000","Destination":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Fee":"10","Flags":0,"Sequence":62,"SigningPubKey":"034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E","TransactionType":"Payment","TxnSignature":"3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639","hash":"3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF","metaData":{"AffectedNodes":[{"CreatedNode":{"LedgerEntryType":"AccountRoot","LedgerIndex":"4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E","NewFields":{"Account":"rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj","Balance":"10000000000","Sequence":1}}},{"ModifiedNode":{"FinalFields":{"Account":"r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV","Balance":"981481999380","Flags":0,"OwnerCount":0,"Sequence":63},"LedgerEntryType":"AccountRoot","LedgerIndex":"B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A","PreviousFields":{"Balance":"991481999390","Sequence":62},"PreviousTxnID":"2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F","PreviousTxnLgrSeq":31317}}],"TransactionIndex":0,"TransactionResult":"tesSUCCESS"}}]} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/ledger-full-40000.json b/packages/ripple-binary-codec/test/fixtures/ledger-full-40000.json new file mode 100644 index 00000000..406d8385 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/ledger-full-40000.json @@ -0,0 +1 @@ +{"close_flags": 0, "parent_close_time": 410459110, "close_time_resolution": 10, "ledger_hash": "16BB8E41DD96D643BC72E1981865C5D76B990464E2EA151FEAC16CDF1AE29388", "close_time": 410459130, "hash": "16BB8E41DD96D643BC72E1981865C5D76B990464E2EA151FEAC16CDF1AE29388", "ledger_index": "40000", "transactions": [], "seqNum": "40000", "transaction_hash": "0000000000000000000000000000000000000000000000000000000000000000", "accountState": [{"OwnerCount": 0, "index": "02CE52E3E46AD340B1C7900F86AFB959AE0C246916E3463905EDD61DE26FFFDD", "Account": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7", "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8901, "Balance": "370000000"}, {"OwnerCount": 0, "index": "032D4205B5D7DCEC8A4E56851C44555F6DC7D410AA823AE140C78674B8734DBF", "Account": "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", "PreviousTxnID": "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 7, "Balance": "10000000000"}, {"index": "059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6", "LedgerEntryType": "DirectoryNode", "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"], "Flags": 0, "RootIndex": "059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6", "Owner": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG"}, {"OwnerCount": 0, "index": "0759D1C1AF5C5C2251041D89AA5F0BED1F5862B81C871CB22EBAD2791BAB4429", "Account": "rpGaCyHRYbgKhErgFih3RdjJqXDsYBouz3", "PreviousTxnID": "B6632D6376A2D9319F20A1C6DCCB486432D1E4A79951229D4C3DE2946F51D566", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26725, "Balance": "10000000000000"}, {"OwnerCount": 0, "index": "08A35A2FF113218BEE04FC88497423D6DB4DB0CE449D0EDE52116ED7346E06A4", "Account": "rUnFEsHjxqTswbivzL2DNHBb34rhAgZZZK", "PreviousTxnID": "0735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E5", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "093DB18D8C4149E47B18BB66FF32707D1DE48558D130A7C3CA6726D20C89BA69", "Account": "r4mscDrVMQz2on2px31aV5e5ouHeRPn8oy", "PreviousTxnID": "FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31802, "Balance": "10000000000"}, {"index": "0A00840157CD29095E4C1B36D531DD24724CB671FDC8849F0C793EEB9FEC271E", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000002", "Indexes": ["A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198", "52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"index": "0AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C", "LedgerEntryType": "DirectoryNode", "Indexes": ["6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28", "263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8", "C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C", "A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00"], "Flags": 0, "RootIndex": "0AC869678D387BF526DA37F0C4B8B6BE049E57322EFB53E2C5D7D7A854DA829C", "Owner": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, {"OwnerCount": 0, "index": "0CDD052C146A8C41332FA75348FAD0F09C095D6D75AEB1B745F12F08693BCFF3", "Account": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ", "PreviousTxnID": "C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10066, "Balance": "199999990"}, {"index": "10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F", "LedgerEntryType": "RippleState", "PreviousTxnID": "C6A2521BBCCF13282C4FFEBC00D47BBA18C6CE5F5E4E0EFC3E3FCE364BAFC6B8", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 131072, "PreviousTxnLgrSeq": 239, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"HighNode": "0000000000000000", "index": "116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747", "LedgerEntryType": "RippleState", "PreviousTxnID": "BDBDD6CCF2F8211B41072BC37E934D2270F58EA5D5F44F7CA8483CF348B9377B", "HighLimit": {"currency": "EUR", "value": "0", "issuer": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "EUR", "value": "20", "issuer": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va"}, "Flags": 65536, "PreviousTxnLgrSeq": 23161, "Balance": {"currency": "EUR", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "11AE1AD4EDD8AB9FBB5633CF2BBC839F8DC2925694899AB7FD867CB916E2FE51", "Account": "rLCvFaWk9WkJCCyg9Byvwbe9gxn1pnMLWL", "PreviousTxnID": "5D2CC18F142044F1D792DC33D82218665359979ECFD5CD29211CC9CD6704F88C", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 9, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "123844B6D8A1C962D9550B458148446BBED40FE76FEFCDC9EAE4EE28CF4035F6", "Account": "rLzpfV5BFjUmBs8Et75Wurddg4CCXFLDFU", "PreviousTxnID": "FB7889B08F6B6413E37A3FBDDA421323B2E00EC2FDDFCE7A9035A2E12CA776E8", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8836, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "1339FDDB2A22B6E1A58B9FF4CF2F82B2DE1D573FD1E86D269575E7962764E32B", "Account": "rKZig5RFv5yWAqMi9PtC5akkGpNtn3pz8A", "PreviousTxnID": "1CE378FA7D55A2F000943FBB4EE60233AECC75CDE3F2845F0B603165968D9CB4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8281, "Balance": "10000000000000"}, {"index": "135865FC9FD50B9D4A60014354B6CD773933F9B7D7C3F95A2B25473A8855B3E1", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000002", "IndexNext": "0000000000000003", "Indexes": ["85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC", "2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D"], "Flags": 0, "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, {"OwnerCount": 0, "index": "13AC6889F24D27C2CFE8BEA4F2015A40B321D556C332695EF32C43A0DFAA0A7C", "Account": "rLeRkwDgbPVeSakJ2uXC2eqR8NLWMvU3kN", "PreviousTxnID": "F2BA48100AAEA92FAA28718F2F3E50452D7069696FAE781FE5043552593F95A5", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3755, "Balance": "40000000000000"}, {"index": "142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5", "LedgerEntryType": "RippleState", "PreviousTxnID": "7B4DEC82CF3BE513DA95C57282FBD0659E4E352BF59FA04C6C819E4BBD7CFFC5", "HighLimit": {"currency": "BTC", "value": "5", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "Flags": 131072, "PreviousTxnLgrSeq": 222, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "14F1FE0D1CAC489EDB11AC3ACA089FA46CC156B63B442F28681C685D871B4CED", "Account": "rUy6q3TxE4iuVWMpzycrQfD5uZok51g1cq", "PreviousTxnID": "61055B0F50077E654D61666A1A58E24C9B4FB4C2541AC09E2CA1F850C57E0C7B", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 24230, "Balance": "10000000000"}, {"index": "1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5", "LedgerEntryType": "RippleState", "PreviousTxnID": "3906085AB9862A404113E9B17BF00E796D8A80ED2B1066212AB4F00A7D7BCD1D", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, "LowLimit": {"currency": "USD", "value": "25", "issuer": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK"}, "Flags": 65536, "PreviousTxnLgrSeq": 8893, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036", "LedgerEntryType": "RippleState", "PreviousTxnID": "7AE0C1DBADD06E4150AB00E94BD5AD41A3D1E5FC852C8A6922B5EFD2E812709E", "HighLimit": {"currency": "USD", "value": "50", "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3"}, "LowLimit": {"currency": "USD", "value": "50", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "Flags": 196608, "PreviousTxnLgrSeq": 10074, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B", "LedgerEntryType": "DirectoryNode", "Indexes": ["571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"], "Flags": 0, "RootIndex": "17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B", "Owner": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i"}, {"OwnerCount": 0, "index": "189421C25E1A4E2EF76706DABD5BAB665350A4C2C21EA7F60C90BEB2782B3CCE", "Account": "r43mpEMKY1cVUX8k6zKXnRhZMEyPU9aHzR", "PreviousTxnID": "2748D2555190DD2CC803E616C5276E299841DA53FB15AA9EFBEA1003549F7DD1", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3736, "Balance": "200000000000000"}, {"OwnerCount": 0, "index": "18CCCF5B17E8249F29E063E0DD4CDDD456A735D32F84BEEDFA28DBC395208132", "Account": "rMwNkcpvcJucoWbFW89EGT6TfZyGUkaGso", "PreviousTxnID": "26B0EFCF1501118BD60F2BCD075E18865D8660B18C6581A8DDD626FA30976257", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10, "Balance": "10000000000"}, {"OwnerCount": 1, "index": "1A2655AF29E0F2A67B1AB9ADBA8E20BB519643E501B6C1D1F260A37CE551DA43", "Account": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG", "PreviousTxnID": "C26F87CB499395AC8CD2DEDB7E944F4F16CEE07ECA0B481F9E2536450B7CC0DA", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10128, "Balance": "9999999990"}, {"index": "1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1", "LedgerEntryType": "DirectoryNode", "Indexes": ["26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873"], "Flags": 0, "RootIndex": "1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1", "Owner": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo"}, {"OwnerCount": 0, "index": "1D244513C5E50ADD3E8FD609F59EA5C9025084BC4AC6323A7379D3DB612485BF", "Account": "r3AthBf5eW4b9ujLoXNHFeeEJsK3PtJDea", "PreviousTxnID": "DA77B52C935CB91BE7E5D62FC3D1443A4861944944B4BD097F9210320C0AD859", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26706, "Balance": "10000000000000"}, {"OwnerCount": 0, "index": "1D8325B5042AB6516C770CADB520AF2EFD6651C3E19F9447302B3F0A64A58B1B", "Account": "rHC5QwZvGxyhC75StiJwZCrfnHhtSWrr8Y", "PreviousTxnID": "16112AA178A920DA89B5F8D9DFCBA3487A767BD612AE4AF60B214A2136F7BEF5", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 12, "Balance": "2000000000"}, {"OwnerCount": 0, "index": "1DE259DB4EC17712E018546C9C749C1EE95CD24749E69AF914A53A066FD4D751", "Account": "rPhMwMcn8ewJiM6NnP6xrm9NZBbKZ57kw1", "PreviousTxnID": "D51FCBB193C8B1B3B981F894E0535FD58478B1146ECCC35DB462FE0C1A6B6CB6", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26800, "Balance": "10000000000"}, {"index": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000003", "IndexNext": "0000000000000001", "Indexes": ["AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF", "142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5"], "Flags": 0, "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, {"index": "1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4", "LedgerEntryType": "DirectoryNode", "Indexes": ["7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"], "Flags": 0, "RootIndex": "1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4", "Owner": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd"}, {"OwnerCount": 0, "index": "202A624CC0A77BA877355FD55E080421BE5DE05D57E1FABCE8660D519CF52970", "Account": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE", "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31179, "Balance": "1000000000000"}, {"OwnerCount": 0, "index": "23A6FCA0449A1D86CD71CAFB77A32BFA476330F2115649CD20D2C463A545B507", "Account": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG", "PreviousTxnID": "19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 17698, "Balance": "500000000"}, {"index": "23E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF", "LedgerEntryType": "DirectoryNode", "Indexes": ["E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714", "F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06"], "Flags": 0, "RootIndex": "23E4C9FB1A108E7A4A188E13C3735432DDF7E104296DA2E493E3B0634CD529FF", "Owner": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6"}, {"HighNode": "0000000000000000", "index": "25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766", "LedgerEntryType": "RippleState", "PreviousTxnID": "54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "Flags": 65536, "PreviousTxnLgrSeq": 20183, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"HighNode": "0000000000000000", "index": "263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8", "LedgerEntryType": "RippleState", "PreviousTxnID": "A5C133CE96EEE6769F98A24B476A2E4B7B235C64C70527D8992A54D7A9625264", "HighLimit": {"currency": "JPY", "value": "60000", "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "JPY", "value": "0", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Flags": 131072, "PreviousTxnLgrSeq": 17771, "Balance": {"currency": "JPY", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "269B7A69D9515289BBBC219F40AE3D95CACA122666CC0DE9C58ABB9828EDC748", "Account": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo", "PreviousTxnID": "64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 2972, "Balance": "9100000000"}, {"OwnerCount": 1, "index": "26AE15E5D0A61A7639D3370DB32BC14E9C50E9297D62D0924C2B7E98F5FBDBDA", "Account": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK", "PreviousTxnID": "2485FDC606352F1B0785DA5DE96FB9DBAF43EB60ECBB01B7F6FA970F512CDA5F", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31317, "Balance": "159999999990"}, {"HighNode": "0000000000000000", "index": "26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873", "LedgerEntryType": "RippleState", "PreviousTxnID": "2E504E650BEE8920BF979ADBE6236C6C3F239FA2B37F22741DCFAF245091115D", "HighLimit": {"currency": "USD", "value": "0", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "10", "issuer": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo"}, "Flags": 65536, "PreviousTxnLgrSeq": 16676, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 6, "index": "26EF6622D710EFE9888607A5883587AFAFB769342E3025AFB7EF08252DC5AAF9", "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", "PreviousTxnID": "4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6", "Sequence": 11, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 17841, "Balance": "5999999900"}, {"index": "289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816", "LedgerEntryType": "DirectoryNode", "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"], "Flags": 0, "RootIndex": "289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816", "Owner": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8"}, {"OwnerCount": 0, "index": "28DAA09336D24E4590CA8C142420DDADAB78E7A8AA2BE79598B582A427B08D38", "Account": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th", "PreviousTxnID": "12B9558B22BB2DF05643B745389145A2E12A07CD9AD6AB7F653A4B24DC50B2E0", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 16, "Balance": "20300000000"}, {"index": "28E3BF81845501D2901A543A1F61945E9C897611725E3F0D3653606445952B46", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000003", "IndexNext": "0000000000000004", "Indexes": ["9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C", "ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"OwnerCount": 0, "index": "29EAD07C4935276D64EC18BE2D33CCDF04819F73BCB2F9E1E63389DE1D90E901", "Account": "rnT9PFSfAnWyj2fd7D5TCoCyCYbK4n356A", "PreviousTxnID": "7C27C4820F6E4BA7B0698253A38410EB68D82B5433EA320848677F9B1180B447", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 24182, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "2A7D9A80B55D8E553D1E83697A836806F479F144040AC2C2C7C02CB61E7BAE5C", "Account": "rEyhgkRqGdCK7nXtfmADrqWYGT6rSsYYEZ", "PreviousTxnID": "1EC7E89A17180B5DBA0B15709B616CB2CD703DC54702EB5EDCB1B95F3526AAC3", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 14804, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "2AFFF572EE9C1E1FD8E58571958D4B28271B36468555EDA51C3E562583454DE6", "Account": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA", "PreviousTxnID": "54FFA99A7418A342392237BA37874EF1B8DF48E9FA9E810C399EEE112CA3E2FA", "Sequence": 4, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 20183, "Balance": "4998999999970"}, {"OwnerCount": 0, "index": "2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8", "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "PreviousTxnID": "4EF16211BE5869C19E010B639568AA335DB9D9C7D02AC952A97E314A9C04743A", "Sequence": 47, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 12718, "Balance": "200999540"}, {"OwnerCount": 0, "index": "2B8FE9A40BA54A49D90089C4C9A4A61A732839E1D764ADD9E1CF91591BBF464D", "Account": "rhWcbzUj9SVJocfHGLn58VYzXvoVnsU44u", "PreviousTxnID": "2C41F6108DF7234FFA6CCE96079196CF0F0B86E988993ECC8BAD6B61F0FAEFAE", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3748, "Balance": "60000000000000"}, {"index": "2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582", "LedgerEntryType": "DirectoryNode", "Indexes": ["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A"], "Flags": 0, "RootIndex": "2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582", "Owner": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB"}, {"index": "2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D", "LedgerEntryType": "RippleState", "PreviousTxnID": "0C3BB479DBDF48DFC99792E46DEE584545F365D04351D57480A0FBD4543980EC", "HighLimit": {"currency": "BTC", "value": "1", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 131072, "PreviousTxnLgrSeq": 247, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", "LedgerEntryType": "DirectoryNode", "TakerGetsIssuer": "0000000000000000000000000000000000000000", "TakerPaysCurrency": "0000000000000000000000005553440000000000", "ExchangeRate": "4F0415EB4EA0C727", "Indexes": ["5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719"], "TakerGetsCurrency": "0000000000000000000000000000000000000000", "Flags": 0, "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08"}, {"index": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", "LedgerEntryType": "DirectoryNode", "TakerGetsIssuer": "0000000000000000000000000000000000000000", "TakerPaysCurrency": "0000000000000000000000005553440000000000", "ExchangeRate": "5003BAF82D03A000", "Indexes": ["5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46"], "TakerGetsCurrency": "0000000000000000000000000000000000000000", "Flags": 0, "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08"}, {"OwnerCount": 0, "index": "2FFF7F5618D7B6552E41C4E85C52199C8DCD00F956DD9FFCDDBBB3A577BDE203", "Account": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i", "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8897, "Balance": "370000000"}, {"OwnerCount": 0, "index": "3079F5FC3E6E060FE52801E076792BB37547F0A7C2564197863D843C2515E46F", "Account": "rJFGHvCtpPrftTmeNAs8bYy5xUeTaxCD5t", "PreviousTxnID": "07F84B7AF363F23B822105078EBE49CC18E846B23697A3652294B2CCD333ACCF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 21, "Balance": "10000000000"}, {"index": "353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5", "LedgerEntryType": "RippleState", "PreviousTxnID": "38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, "LowLimit": {"currency": "BTC", "value": "1", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 2948, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC", "LedgerEntryType": "RippleState", "PreviousTxnID": "D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "LowLimit": {"currency": "USD", "value": "10", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 196608, "PreviousTxnLgrSeq": 4174, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "3811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F6", "LedgerEntryType": "DirectoryNode", "Indexes": ["F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06", "B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93"], "Flags": 0, "RootIndex": "3811BC6A986CEBA5E5268A5F58800DA3A6611AC2A90155C1EA745A41E9A217F6", "Owner": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7"}, {"OwnerCount": 0, "index": "38C03D6A074E46391FAE5918C0D7925D6D59949DDA5D349FA62A985DA250EA36", "Account": "rNSnpURu2o7mD9JPjaLsdUw2HEMx5xHzd", "PreviousTxnID": "DA64AD82376A8162070421BBB7644282F0B012779A0DECA1FC2EF01285E9F7A0", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 28, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "3A1D03661A08E69C2084FD210FE3FF052320792AE646FDD6BA3C806E273E3700", "Account": "rHTxKLzRbniScyQFGMb3NodmxA848W8dKM", "PreviousTxnID": "D4AFFB56DCCCB4394A067BF61EA8084E53317392732A27D021FBB6B2ED4B19B9", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 76, "Balance": "500000000000"}, {"index": "3AFECDA9A7036375FC5B5F86CBFF23EBF62252E2E1613B6798F94726E71BFEC2", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000002", "Indexes": ["A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB", "D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE"], "Flags": 0, "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, {"OwnerCount": 0, "index": "3B7FE3DCBAFD6C843FA8821A433C8B7A8BBE3B3E5541358DEFC292D9A1DB5DF7", "Account": "rHDcKZgR7JDGQEe9r13UZkryEVPytV6L6F", "PreviousTxnID": "62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26946, "Balance": "100000000000000"}, {"OwnerCount": 0, "index": "3C0CD0B3DF9D4DD1BA4E60D8806ED83FCFCFCB07A4EA352E5838610F272F0ABD", "Account": "rNWzcdSkXL28MeKaPwrvR3i7yU6XoqCiZc", "PreviousTxnID": "4D2FA912FFA328BC36A0804E1CC9FB4A54689B1419F9D22188DA59E739578E79", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8315, "Balance": "10000000000000"}, {"OwnerCount": 12, "index": "3E537F745F12CF4083F4C43439D10B680CE913CCC064655FA8E70E76683C439A", "Account": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui", "PreviousTxnID": "0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24", "Sequence": 14, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 240, "Balance": "5024999870"}, {"OwnerCount": 0, "index": "3EBDF5D8E6116FFFCF5CC0F3245C88118A42243097BD7E215D663720B396A8CC", "Account": "rUZRZ2b4NyCxjHSQKiYnpBuCWkKwDWTjxw", "PreviousTxnID": "D70ACED6430B917DBFD98F92ECC1B7222C41E0283BC5854CC064EB01288889BF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 32, "Balance": "10000000000"}, {"index": "3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E", "LedgerEntryType": "DirectoryNode", "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"], "Flags": 0, "RootIndex": "3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E", "Owner": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG"}, {"index": "3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000001", "Indexes": ["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5", "E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714"], "Flags": 0, "RootIndex": "3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9", "Owner": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, {"index": "4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01", "LedgerEntryType": "DirectoryNode", "Indexes": ["6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997"], "Flags": 0, "RootIndex": "4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01", "Owner": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8"}, {"index": "42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C", "LedgerEntryType": "RippleState", "PreviousTxnID": "64EFAD0087AD213CA25ABEA801E34E4719BF21A175A886EC9FD689E8424560B5", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo"}, "LowLimit": {"currency": "BTC", "value": "1", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 2972, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "433E8FD49EC8DC993D448FB68218E0E57C46B019D49689D87C5C7C7865BE5669", "Account": "rfitr7nL7MX85LLKJce7E3ATQjSiyUPDfj", "PreviousTxnID": "D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26917, "Balance": "9998999990"}, {"index": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000005", "IndexNext": "0000000000000001", "Indexes": ["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6", "4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"index": "44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01", "LedgerEntryType": "RippleState", "PreviousTxnID": "93DDD4D2532AB1BFC2A18FB2E32542A24EA353AEDF482520792F8BCDEAA77E87", "HighLimit": {"currency": "BTC", "value": "3", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS"}, "Flags": 131072, "PreviousTxnLgrSeq": 10103, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "451F831E71B27416D2E6FFDC40C883E70CA5602E0325A8D771B2863379AC3144", "LedgerEntryType": "DirectoryNode", "Indexes": ["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C", "AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"index": "48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D", "LedgerEntryType": "DirectoryNode", "Indexes": ["25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766"], "Flags": 0, "RootIndex": "48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D", "Owner": "rPrz9m9yaXT94nWbqEG2SSe9kdU4Jo1CxA"}, {"OwnerCount": 0, "index": "4A94479428D5C50913BF1BE1522B09C558AC17D4AAFD4B8954173BBC2E5ED6D1", "Account": "rUf6pynZ8ucVj1jC9bKExQ7mb9sQFooTPK", "PreviousTxnID": "66E8E26B5D80658B19D772E9CA701F5E6101A080DA6C45B386521EE2191315EE", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3739, "Balance": "100000000000000"}, {"OwnerCount": 0, "index": "4B2124F3A6A259DB7C7E4F479B0FCED29FD7813E8D411FDB2F030FD96F790D10", "Account": "r49pCti5xm7WVNceBaiz7vozvE9zUGq8z2", "PreviousTxnID": "4FD7B01EF2A4D4A34336DAD124D774990DBBDD097E2A4DD8E8FB992C7642DDA1", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 33, "Balance": "2000000000"}, {"OwnerCount": 0, "index": "4C6ACBD635B0F07101F7FA25871B0925F8836155462152172755845CE691C49E", "Account": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", "PreviousTxnID": "3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 38129, "Balance": "10000000000"}, {"index": "4E166141B72DC6C5A778B0E31453AC118DD6CE4E9F485E6A1AC0FAC08D33EABC", "LedgerEntryType": "DirectoryNode", "Indexes": ["B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489", "571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"], "Flags": 0, "RootIndex": "3F491053BB45B0B08D9F0CBE85C29206483E7FA9CE889E1D248108565711F0A9", "Owner": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, {"index": "4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD", "LedgerEntryType": "DirectoryNode", "Indexes": ["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5"], "Flags": 0, "RootIndex": "4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD", "Owner": "rnp8kFTTm6KW8wsbgczfmv56kWXghPSWbK"}, {"OwnerCount": 3, "index": "4F45809C0AFAB3F63E21A994E3AE928E380B0F4E6C2E6B339C6D2B0920AF2AC5", "Account": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7", "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", "Sequence": 4, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8897, "Balance": "8519999970"}, {"OwnerCount": 0, "index": "4F83A2CF7E70F77F79A307E6A472BFC2585B806A70833CCD1C26105BAE0D6E05", "Account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59", "PreviousTxnID": "B24159F8552C355D35E43623F0E5AD965ADBF034D482421529E2703904E1EC09", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 16154, "Balance": "10000000000"}, {"index": "4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454", "LedgerEntryType": "RippleState", "PreviousTxnID": "DFAC2C5FBD6C6DF48E65345F7926A5F158D62C31151E9A982FDFF65BC8627B42", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"}, "LowLimit": {"currency": "BTC", "value": "0.25", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 152, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 2, "index": "500F730BA32B665BA7BE1C06E455D4717412375C6C4C1EA612B1201AEAA6CA28", "Account": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x", "PreviousTxnID": "1B91A44428CA0752C4111A528AB32593852A83AB372883A46A8929FF0F06A899", "Sequence": 32, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 18585, "Balance": "9972999690"}, {"index": "52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0", "LedgerEntryType": "RippleState", "PreviousTxnID": "90931F239C10EA28D263A3E09A5817818B80A8E2501930F413455CDA7D586481", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, "Flags": 131072, "PreviousTxnLgrSeq": 225, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "53F07B5C0CF6BB28F30A43E48164BA4CD0C9CF6B2917DDC2A8DCD495813734AB", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000004", "IndexNext": "0000000000000005", "Indexes": ["353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5", "72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"OwnerCount": 5, "index": "55973F9F8482F1D15EF0F5F124379EF40E3B0E5FA220A187759239D1C2E03A6A", "Account": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", "PreviousTxnID": "2E30F12CCD06E57502C5C9E834CA8834935B7DE14C79DA9ABE72E9D508BCBCB1", "Sequence": 18, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 32301, "Balance": "9499999830"}, {"OwnerCount": 0, "index": "562A9A3B64BD963D59504746DDC0D89797813915C4C338633C0DFFEA2BEFDA0D", "Account": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY", "PreviousTxnID": "3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 20179, "Balance": "50000000000000"}, {"OwnerCount": 1, "index": "563B1358AF98D857FFBFDBE5DB8C9D8B141E14B8420BEB0DDEEA9F2F23777DEF", "Account": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA", "PreviousTxnID": "45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8904, "Balance": "369999990"}, {"OwnerCount": 0, "index": "567F7B106FFFD40D2328C74386003D9317A8CB3B0C9676225A37BF531DC32707", "Account": "rauPN85FeNYLBpHgJJFH6g9fYUWBmJKKhs", "PreviousTxnID": "4EFE780DF3B843610B1F045EC6C0D921D5EE1A2225ADD558946AD5149170BB3D", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 39, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "5686CB978E4B8978EB89B34F2A8C859DDDFAB7B592AAAA2B15024D3452F6306B", "Account": "rEMqTpu21XNk62QjTgVXKDig5HUpNnHvij", "PreviousTxnID": "126733220B5DDAD7854EF9F763D65BCBC1BBD61FD1FEEEF9CD7356037162C33F", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 41, "Balance": "10000000000"}, {"index": "571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B", "LedgerEntryType": "RippleState", "PreviousTxnID": "1A9B9C5537F2BD2C221B34AA61B30E076F0DDC74931327DE6B6B727270672F44", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rEUXZtdhEtCDPxJ3MAgLNMQpq4ASgjrV6i"}, "Flags": 131072, "PreviousTxnLgrSeq": 8897, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 5, "index": "5967EA83F1EC2E3784FD3723ACD074F12717373856DFF973980E265B86BF31BD", "Account": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa", "PreviousTxnID": "9C9AF3AC76FC4626D86305D1D6082944D1E56EC92E3ECEC07503E3B26BF233B2", "Sequence": 7, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 270, "Balance": "4999999940"}, {"index": "5983E0F274D173834B3B1E9553D39685201044666F7A0C8F59CB59A375737143", "LedgerEntryType": "DirectoryNode", "Indexes": ["9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"], "Flags": 0, "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, {"OwnerCount": 2, "index": "5A08F340DE612A2F2B453F90D5B75826CBC1573B97C57DBC8EABF58572A8572B", "Account": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va", "PreviousTxnID": "F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D", "Sequence": 5, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23260, "Balance": "499999960"}, {"OwnerCount": 0, "index": "5AA4DC5C878FC006B5B3B72E5E5EEE0E8817C542C4EB6B3A8FFA3D0329A634FF", "Account": "rDsDR1pFaY8Ythr8px4N98bSueixyrKvPx", "PreviousTxnID": "FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389", "Sequence": 4, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 7989, "Balance": "209999970"}, {"index": "5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46", "LedgerEntryType": "Offer", "PreviousTxnID": "15955F0DCBF3237CE8F5ACAB92C81B4368857AF2E9BD2BC3D0C1D9CEA26F45BA", "BookNode": "0000000000000000", "TakerPays": {"currency": "USD", "value": "31.5", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Sequence": 8, "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", "OwnerNode": "0000000000000000", "BookDirectory": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", "TakerGets": "3000000", "Flags": 0, "PreviousTxnLgrSeq": 17826}, {"OwnerCount": 0, "index": "5CCC62B054636420176B98A22B587EEC4B05B45848E56804633F845BA23F307A", "Account": "rnCiWCUZXAHPpEjLY1gCjtbuc9jM1jq8FD", "PreviousTxnID": "152DB308576D51A37ADF51D121BFE1B5BB0EDD15AC22F1D45C36CAF8C88A318B", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 46, "Balance": "1000000000"}, {"index": "5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515", "LedgerEntryType": "RippleState", "PreviousTxnID": "BBE44659984409F29AF04F9422A2026D4A4D4343F80F53337BF5086555A1FD07", "HighLimit": {"currency": "USD", "value": "50", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS"}, "Flags": 131072, "PreviousTxnLgrSeq": 10092, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "5CD820D062D59330F216B85D1ED26337454217E7BF3D0584450F371FA22BCE4B", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000002", "IndexNext": "0000000000000003", "Indexes": ["6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7", "35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"OwnerCount": 0, "index": "5E5B7A5F89CD4D9708BDE0E687CF76E9B3C167B7E44A34FD7A66F351572BF03F", "Account": "rKdH2TKVGjoJkrE8zQKosL2PCvG2LcPzs5", "PreviousTxnID": "64F24DBD7EEBAF80F204C70EF972EC884EF4192F0D9D579588F5DA740D7199F6", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 48, "Balance": "2000000000"}, {"index": "5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719", "LedgerEntryType": "Offer", "PreviousTxnID": "433789526B3A7A57B6402A867815A44F1F12800E552E581FA38EC6360471E5A4", "BookNode": "0000000000000000", "TakerPays": {"currency": "USD", "value": "2", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Sequence": 7, "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", "OwnerNode": "0000000000000000", "BookDirectory": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", "TakerGets": "1739130", "Flags": 0, "PreviousTxnLgrSeq": 17819}, {"index": "600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C", "LedgerEntryType": "Offer", "PreviousTxnID": "DAB224E1847C8F0D69F77F53F564CCCABF25BE502128B34D772B1A8BB91E613C", "BookNode": "0000000000000000", "TakerPays": {"currency": "JPY", "value": "1320", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Sequence": 9, "Account": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j", "OwnerNode": "0000000000000000", "BookDirectory": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", "TakerGets": {"currency": "USD", "value": "110", "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j"}, "Flags": 0, "PreviousTxnLgrSeq": 17835}, {"OwnerCount": 0, "index": "6231A685D1DD70F657430AF46600A6FA9822104A4E0CCF93764D4BFA9FE82820", "Account": "rDngjhgeQZj9FNtW8adgHvdpMJtSBMymPe", "PreviousTxnID": "C3157F699F23C4ECBA78442D68DDCAB29AE1C54C3EC9302959939C4B34913BE8", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 49, "Balance": "10000000000"}, {"index": "6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7", "LedgerEntryType": "RippleState", "PreviousTxnID": "0C164A054712296CB0946EEC6F3BF43DFE94662DA03238AABF4C1B13C32DAC24", "HighLimit": {"currency": "CAD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "CAD", "value": "0", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 131072, "PreviousTxnLgrSeq": 240, "Balance": {"currency": "CAD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", "LedgerEntryType": "DirectoryNode", "TakerGetsIssuer": "62FE474693228F7F9ED1C5EFADB3B6555FBEAFBE", "TakerPaysCurrency": "0000000000000000000000004A50590000000000", "ExchangeRate": "56044364C5BB0000", "Indexes": ["600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"], "TakerGetsCurrency": "0000000000000000000000005553440000000000", "Flags": 0, "RootIndex": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08"}, {"OwnerCount": 1, "index": "63923E8ED8E80378257D0EAA933C1CADBC000FB863F873258B49AA4447848461", "Account": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6", "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8901, "Balance": "369999990"}, {"OwnerCount": 1, "index": "651761F044FC77E88AA7522EC0C1116364DDAB8B0B30F742302150EF56FA0F7F", "Account": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8", "PreviousTxnID": "A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 2026, "Balance": "9999999990"}, {"HighNode": "0000000000000000", "index": "65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E", "LedgerEntryType": "RippleState", "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "Flags": 65536, "PreviousTxnLgrSeq": 31179, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "656BA6034DAAF6D22B4CC6BB376DEEC73B308D4B1E29EC81F82F21DDF5C62248", "Account": "ramPgJkA1LSLevMg2Yrs1jWbqPTsSbbYHQ", "PreviousTxnID": "523944DE44018CB5D3F2BB38FE0F54BF3953669328CEF1CF4751E91034B553FE", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 79, "Balance": "10000000000000"}, {"OwnerCount": 0, "index": "6782BDC4CB8FA8DDC4DE5298FD12DD5C6EC02E74A6EC8C7E1C1F965C018D66A5", "Account": "rsjB6kHDBDUw7iB5A1EVDK1WmgmR6yFKpB", "PreviousTxnID": "D994F257D0E357601AE60B58D7066906B6112D49771AD8F0A4B27F59C74A4415", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3732, "Balance": "1000000000000000"}, {"OwnerCount": 0, "index": "67FAC013CD4FB865C1844F749C0C6D9A3B637DAC4B7F092D6A4C46517B722D22", "Account": "rnj8sNUBCw3J6sSstY9QDDoncnijFwH7Cs", "PreviousTxnID": "4B03D5A4EEFCAF8ADB8488E9FD767A69C6B5AC3020E8FF2128A8CBB8A4BA0AFF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3753, "Balance": "60000000000000"}, {"index": "692ECE2D61FD5074F298DC168177CA6E17B7282B9630E606AE519D7FE32B5940", "LedgerEntryType": "LedgerHashes", "LastLedgerSequence": 39936, "Flags": 0, "FirstLedgerSequence": 256, "Hashes": ["46CA85D119A4FDF7644339663A813131C791BD21472BB85C526E9E4072F87ABA", "30E34F73546C514C1BD389E1A71FBC266DCED3FC1DB7A186F3F0FCF117484528", "4EB7F83E4AE050D7C46744FC40C7C506E2D2468F520A1CF50325406231AB7BA0", "D7349AEAE4337A11FDF98A60F01CEDD7CA38CE8835FE66CCA2E4B227928A2AF5", "AA4CD783DE0238A741BE8C0FEFCBC37E8A07C75195919F617749D02ED8648581", "9AB0D5C6ED47FBE7513253A012431D5BDEE6E9FE19D6E39A537C72212FDCBA53", "BF4836310428AE05209D703DB7BA805DBD309959DDFB1A013666CADFB3B02C24", "20D40412CA443B8972F7EFBD79D5ABA60A68744C75689A75050ECDE3106AE60F", "E1A81A0AC6B45B488E4D2EEA57E9D04BBFB078B4B72837C8754599D25C4C8D3B", "188FC5B7DC6F0CE992BA19ED4405BA8B3399FA69485CDEDE42F1BED9E4355447", "EA8C6297E23798A28D4D03782CFF274C45832141D2A084C6D550251D40C6F5E3", "B45FD83C30ACB19688E9F482C2BC5EA99242431DDFC761266FCE88FD5FFB4B22", "142F2DC1D72345824169FC14971E40154268A393AC0CEC260AAB171E77992218", "A464B55B61046CED55778A3F23AB49908EDC310223E74F4EFFAE195602655CDA", "E1532980D3BAA96CBE31A35DA8D85C4187DD2DC9285168D0BEFAB23AB7AFCA6C", "E57645836A7238265D735DCC3318446B513D95405759044EE367DA3933F902EB", "71BCE9D7C1CFFE3E8843FF25A3DAD31384AB561A91F4A0F074F5210F5E6BCA77", "03FD3FF1D27D5E4E9768B03A9438DC39827F34E559A82FD8FE3E0894ADF122A0", "4E1F327BA0FAB0536C023A36ADC9226411FF4C7854CB73BA7230484D3B26A4FD", "DF40D6608787FFB9B9324C3E40388500CAF4B3CFC4C1857A7806C421D86787B4", "0A80A82CE9A46DBFA6423FFC1D6B0FE0E05ECA4DC379D4A24E5AB78EED5D8D54", "E439B3FEF555EA03AFB0D518942C42EB546934B8DD57D8C531EA1A6EDCEF3D0E", "2153861CFA542E2AE593B38F1793268138D0EB462E21D45F9A40A84A12F42D19", "E1025986FB51465C5226BFF003F5C03D25C8C2D37A82D8A389EF536CF18F5815", "0EF09ED9B4651FA200C7CFA76186B7F418B2F3C4838EEBC34AF679AC83F04DA5", "E0798890BD8C632C9B184BAC912129A000C21D9C261238CFFD49B85231F8691E", "0B666FF1E19633C145695FB01C8FC10EA5F51CB230ABD781F6306334D83DD4BC", "BA16AECB9E2CF8D68D31675C4B17A7D5A3E12ABAB9C47EA48942FBEC8BE574D5", "41EA17AFDD8A096C2C37AEB30D6C840E394E9B33F1A23B46A6E5A0B458E602E7", "9B359B65D509275EF1F8F97C90CCA7F1538689968C94BA5F93353E57EB1B4DEF", "8CEA4D27D9DAF3158A0DBB68FE7FB78CD9A01E880070EE5AD3F7C172B860F0CD", "C80FD9750847F44BBFE0A36A6ADC1653F48EDA3DFF515ED45C5D1DB455686138", "BE25E0085DDB6A18232448CE2CBFC4D9DADBC2613B026A334FE234811DCC2DCF", "08A08EA0C5D1E13BCD5F7032C1E27F0856EA10BDCDC163DF0FB396FE2CABA31B", "A68967254F794A6B6ADCF83A7FFA225276F3ADF81E23E2E9DBB48B103F4F287A", "D901F12F3B934543752F66F62DE2F70261499879611F3536C4C9F38CFED34FA2", "CF03209B2601483CCE4A08D000CE4B51B851CE8AC0E426675987BE5CF803C18C", "BA6878132CFDF8C68056875B00E33EF08FCF7BEA2A62193C36DE3B1875EF3B9D", "2A566045F7A7A243BAC56BE8EC924F02339E3C76F8DC7E046F7C11AA8C342B40", "4AF051B5585F6222321E5F5B850353C03E0D63DAF5E143040471B444ABB72825", "4A97A57376069E1257020D5501112A14CC01E9D0F05100C957C7BEDE339E50F8", "37C67F8F6D16F25E5D4667934137D34723750B5D9FE83166A7D6D76B36C8C179", "707E9AF5FBFB4F9C49CF86A9574F5D92E2A116A33BC9DE99718880289A0788D9", "B42F73034086D2F0EBC448F712C593A03C4BEBFB8744D3BAD3E09A20F01828A3", "0A2F54078737CFB3DC5926C59953D554A8694EF61B3636DAC92EBD43388889E2", "70924BD1A23B8E5507FE9926CB313EA8B1DE0448A56745323431406CA16274FD", "05575230980F40E49E56A104C14F1E782D1BEF983698F5D362B5F07DE0D428E8", "FB1C5932BE70A69CCF6DBA76107FAA3BA1007ED13DFD1AAB17FC425A10EB1581", "25FC22191B032F57E2FA33BE3479C2BDEA11CF9E2E2EFF708B27A87B1B523A89", "211A029A97B7F8B3BBCA0E522BDF59E38E9A31D81BE9E992D29DE8F2D4E22A4F", "3D854A51048D99BABF0007FBF7B689E3E098C30203BF6D1DA3D5E331EC14DD98", "22393FDC141993373E998910AEBCC3A325208E6C2F5AF5F0EA89AF8E707035BB", "48F51EB63247C8444E30FBF1C96C82732078EF017FD24E50F153701762D1C73C", "1933B26C54C13B95D4F5BB231C5C6C815F1CC549BB566176C69685FAB89B2D30", "18B0E6978BDA0F820ECCC2812D3BCBA26B5FCD82162BE4ECFBB2B37F4202022C", "AE268627782C85AE0B585DEBB70A360A25325163E052DEFC778B12D6F5F3140D", "A9D9251250BEA2908137E2BF02B5265489682CC0767ABDDEFEF2081AA400BE22", "E3D86A55F1C1247128CBDD92DCD6825ABA2B1A0CF11E708D4B7A095691FA9212", "66ACAE0C1C0131C3C3E44F97EE718CF06D477745BBC5C1E62B5FAA1E64755C40", "64424CDBB7213281B55264AC5EDDBF8E3C08DC9F91AC522BC27F54E6927AEBF5", "E99D194A57372231B580720BFF3FBF97C9012E0FE1F24B9B8B1D4B3F712E0FFD", "28D45AD772BB438DB55ADC3F3E10A661C2386D530E7B818D66705830E642BACF", "F4BD92C5D43BD66D9C88CD8F7155CD9D4239D4BFDEAE39A59D508C55E94D92C9", "BB4569ABCAE972A58BBE235AA15804A1A5C338A88D58105EE156E691379FF6D6", "700B19B81823E8F5772800F7E43049733D5B0704DD2D1FE381D698BB80DD7261", "9EA049B105956ECD1848EFDBF1BA5AC77200254D3B200B59A520216BF52F8B33", "E037EF16B6EC5247FF05EE5F2D3541E4F7DDB584FDB54369D89ED8C4F169A1BA", "FB5B4ACAF66451AD44AFC25E52A8883AD8F7C2D92A399BD06728AB949A0C2543", "28416DC35EC84994E022398FE3D33AA5ECFB32402F3ECE8AE5AD44795653D80F", "9D65AA309D29A33CC11CF9A862764981A66ECAB7CD37857F7D088AF0E670117C", "04855D0B5B7C7BF3BF670C2E2A623AF02AABE2F1DAC85B81B63D7BB980FAE348", "819D06F863296E89D4B3D48E14A5B227EC89053F8CC9FE15029E22C34C912B92", "7195B5FA6F039200B3F9A1C9E831502C9AA22794D8CEF4C35F72399B0C4B6F42", "D17CFB13B3657BED7CB506DB48258ED0DC0ABE9B6D04C75030DF208BE07EECA0", "8930F9420CF861AD268B206BFCAA3BAB1D28906E43B6C4F0297D1D6579D58109", "131945F850C00D65D13712F64B41B1DFD7D6649AD78B3ADDCDC0AB51FB0A2FC2", "811B87B783CD76B9E612B867B355FB8CC4ABDAE9FA302C532733C41B52AB5FFE", "439CE2133E0C5DF12A0DB86AFF23D2D0CE8ADFEABDF2E2F3F568D58DA7A1C277", "8CEC9F269F28CD00FE9B4811F841BEE5E3937AC81EA30D17207CEEC9832091FB", "2EB319E8D384357255F300CC78E82FF7ECF84949A07D7043AE67645DD0D1708A", "DC6F10FD8B4E1BAA925BD1919BE70DF251B192B72D5CBF1BD42C69B5F9D9E33A", "7B2B336FB5149DB963FC0C84EEBD4271B7DC33A79FACCDB9CD3C98F821B8C11C", "5F8B5CF6AEE7ADF8FA23122E2AF6BBAD77E50D077483B545A9B6EBF6ECF13FC5", "0C43B20F1A457970C8CEFAC5C1642EA8996BBD70DD2109AAD84E4D33CD1A97F3", "777E49B89E8C2D06ADF2F36817BB029F52A03469B71821F6EF77B6907611486B", "D91A0474F4B64E36D374C2AF78ADF85BA5844EDF4E72056944015B3349532A29", "77B609A5BC8BD805D581B06C2423E90C618C68484166632702DB08B0184C3B26", "05E41DCF6ED8D6154EF0D6AC8FD7302561E69DB1A8938C0AF9CC947343D80DED", "6C3AEB3E66F133591E6D20412B1816EAED5AF5643CB51D06188D36294AA9758C", "DD76DE696BDFEC3F18EAA16C17B78E9C8C5B56FA0FEB224B579A589C983F549C", "01502B404586D235FBB5FECB8D1CDE64F865AA1DA2A5EC877374DE717FEBF4A0", "FAB3679AE0D51A0BCB4AF004228AF5DB6DBD42CD1B0415BE5A83D282F6B448A1", "C7E8C01A3F5D0756F393CE2D1A14073EA0E4126D0170E04FE2F9CB97EF3A3C86", "2A6419BD4F9111CC03F4B0EB459B902B69F0A685FCB20E5ACAE24903113FF218", "6BF67DCAC27D3E57F3B85FECDC1C6E6C70CE26EF27136EF38C45E6794BE9A40F", "2FD59B8594521D4F2DA9004B493BFA87C387694111C08BDFD66E69AEE4752BCF", "887647702EBA5D91A05A5FAAF36A4793CF8B6292612A96539F80FEB5D67A6CAB", "B613E7A7A119E99DFF72B7B6F67906B211F95FF679686F65EDF5E32047FEBC60", "C010B145685BCBD6CF1CED7E42E8950910B9DD01D0D72BBE0EA9A52464386EC0", "4564B180267F9DE53016E25E8D8AA20F9ACCAC4E76BAE60BACC8ACA70E766DD1", "3CB16E7A33032CA80E0F935665304CEC1E61EE9BBB4B7A51E4B2708E6E7FAB7E", "96BF360D0FE736D520582AE5574A9FB6D482810F37B12504C7754FB9B0368D10", "F116AB72EBE3F85B7715599C6F88165550F88948883D293326D7A3A37607AD7F", "338BFAD9143B14AACDF99F0F16C9819585903EE264DFCA996FC0E29644EB2616", "4B7EB8D620A38925EB26EB7BFE1D0D8A9F7A3F542CA79F25443C051349F75597", "D2F7152FC9E0B243A0AA33B1DF2B8AD0229D6BA08129A5E1BE79EF339017234E", "3EA85163CFA860E378792CC9C0F97B7B6D1A67A3E10A1D19D506EF4A07784CE9", "BBC59E15FEB70E5BA51B37DEADE73F386F3F6C32BF01E964C21ADEA961156A05", "A783B441DABD6E8FB82617396E676039714CDD55530AEFE9FA1950DDFB12D19C", "0983655D0A7A0A2EA9F47F4621098B62BD2350E3721F6126D852E14628F75B49", "5E772F93AB27ED7ABC015E65DAC1636C4BEE65161B0C365E54C7B4E7253D085A", "73850E9B09C456566B1233F7E3E99A6C8A8DAC815351CAA8647733AFCDA89242", "EB2E44652F1D48125B2B1D765EEC7E666CD61774A09DC5062332975B1E5BB9CE", "B067B4B47A15BC454EAF10F1528CDA034050E14ED6B4C7B8A69152252EB7EC59", "61D7F81182F42A97B32AE2CA5FF818C6D6BD1252822C9DE96412CF9C44C26E52", "84BAF99B7C240088590D793FB2AB3E0CFD7EC8A22771D78870FEAF902FBCA3CA", "47ED82D33D08A086409370EE11344E1429DC1072D053FA84C5047186E09E9415", "2E8A8D8C7DB6156C707260A1B9C80B79C7F2916C52267925A04D24B91BCDA571", "89ADAF9ECA28CEB75C9DFAD092A6028FB6F9EC8B0AB1816B7446881E59BF1E5A", "D6A2446D0A74397534CDCB9F6B27C3846A43914FF88C1487878A608B0AF97361", "02EB8D561A1FB6AD0443C7EA50978129BE3013E627696E35F4A86AA2664EA6C7", "60D8452D3D1329802051FF7D64750EF89D0FA7F52407D27DCAAD4FC9866AB3C6", "48A6817C81ADD8E803604C3A907BB5B98D1545FED8E69542EB3CF8FD5DDE9564", "16564946C4C731287922FA4E1E7E8F619F0A4F1BACE642D8D9C914D0A992C3F0", "C59D15488844223AC052BB01A3A547B2C378E11D1DBBC037F1A924A58BB3A7A5", "CC2E8827C0FCAB29E90F466E22AAA9E54C95D214517AE6824361CF6C4B1A1DA9", "43E701475E1A25107B4585645A83CD942B8644C65111193DABC1D148C4CF6E18", "2F29FEEFF9D59C9DFE325A86C127677EB619B69D8337A6924DC99541199F2880", "95713AB9878E9CC9F459ED06E2E8AE08B3AA7059690AB7ABE9AF5E6B03F974C5", "B9761DF3B6A17C9223F17619A31CC7E751CA43F79FF97517A0379F9A0970BDD5", "D23B27C92B27A8349B9DC838C1060445D4A5F11036A1ECB731B4F1A8A2FEE68A", "2A9230932745154A632BE6E8BC02BDA70ACC63BA35CD5D9CB7FE8037C5E17B5A", "5EB24E22E303BAB86456FC00C414F274C138C4809B2C4BB1A60B824F22D13E49", "D8212A0EDCACC94A5DD9BA8862DEA437206E1D6D98A080FA6FC81AE907FE5263", "2DF6D2E2D633407B98809F32B1EB0A4145385F9F81CE5F7B0BC2E1E6B0F809C9", "83C1EECD541CDED8F7DCA5118B402156AC50F5130CC55E8A34740EF3BCEF445D", "E3DD4311EC37E750D62B5AA6BEBB6007D7FE652155B2B8CA52B59DC58BDF5E7F", "1CFDBAB1465C114335BCE962621B3B9F3E464817F7403031FB5558A2B4A514E9", "A35860460AD1096EBCBFF7E8C0A7086594C18BC0AA5F7CB23C1E40FF22FC133F", "09FE0839286B47089EA34D465C2089EC205B40604EE51725E697035DE58134B6", "A3CC048DB8E7F433B86C311D6226EA64BE2BA0137B818EF35BE98B3E900DA88A", "DB764B3E83DEE68022BD886D5CC1276B31FBBBEDA3186E5E1BDE2EEC1B8E8C9E", "83485A81ECBA2E8E2EF0B6A1DA4D730D863E32E2CA46FBB8415E9621799984F8", "269DC791F56AACAEF6CEA04C6C99450345D3D692A2F74E38B9CC161C182BB1BC", "23FBE8EE73A47376CD8799610ADA8509539B480BE3D9E280DB83CF2AF6DC9DB5", "38E7AB66E8C93173DE7373DA4A616E458DF4196E140C8EFAABDF21B7D4BE9741", "FB0EA9CF94A19B0980A109E07D60FC009042940D79EB7A6C611FEEBD4E59049A", "AB0FA33B50D992508072E9AB22AA9267A52B220E9A1340A950DCA9884561A6D7", "255332987D4D58D4404C3C9BE59AFF6F05FE51021F04AB8A6AABE50BC35BD5D2", "087E507D4829043BBBD7BD83F27F96651C7530D939EDE7B7BDD3E93F99BBCD52", "1BBAE8DD1BE51A5FB8B0FFDCD1EE7931425B1AD9625D5104D965C7E2E878BDB8", "9AE3B3C617F9F5B4A21F7E3053AACD8DB6BBED7C61C0D99A435F017B92FDE43B", "58F4F86687BB057B5897BB2DA9F242213E9B6D8AB35F704279DF623B8038E33A", "D9805D605BC2D8F3872A80B1824EF922870B5746A6BB60E3035538C18C700D30", "2D7D5F2E67BD06757A3071A2B7D3C365F54F42D4870F9CADD781C1A5945B6092", "EE15773B6C898386E770E3613E28A8BE0D365F933648CA9AC4828AD67C998B71"]}, {"OwnerCount": 0, "index": "6A920AE3EF6A0984853EEECB8AE78FD7532537BB895118DE44C6257DB1792ECE", "Account": "rB59DESmVnTwXd2SCy1G4ReVkP5UM7ZYcN", "PreviousTxnID": "7B2A63FEEDB3A8ECCC0FF2A342C677804E75DCC525B1447AB36406AB0E0CFE48", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3743, "Balance": "150000000000000"}, {"HighNode": "0000000000000000", "index": "6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28", "LedgerEntryType": "RippleState", "PreviousTxnID": "4E690ECBC944A7A3C57DFDC24D7CA1A0BDEFEB916901B7E35CDD4FE7E81848D6", "HighLimit": {"currency": "USD", "value": "666", "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "100", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Flags": 196608, "PreviousTxnLgrSeq": 17841, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"HighNode": "0000000000000000", "index": "6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997", "LedgerEntryType": "RippleState", "PreviousTxnID": "865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946", "HighLimit": {"currency": "BTC", "value": "10", "issuer": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "BTC", "value": "0", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"}, "Flags": 131072, "PreviousTxnLgrSeq": 16029, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "6F30F23BE3EAB1B16D7E849AEA41709A26A8C62E28F359A289C7EE1521FD9A56", "Account": "r9ssnjg97d86PxMrjVsCAX1xE9qg8czZTu", "PreviousTxnID": "217DF9EC25E736AF6D6A5F5DEECCD8F1E2B1CFDA65723AB6CC75D8C53D3CA98B", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8412, "Balance": "200000000000000"}, {"OwnerCount": 0, "index": "70FDAD46D803227A293CDE1092E0F3173B4C97B0FB3E8498FEEEE7CB6814B0EA", "Account": "rEJkrunCP8hpvk4ijxUgEWnxCE6iUiXxc2", "PreviousTxnID": "83F0BFD13373B83B76BDD3CB47F705791E57B43DB6D00675F9AB0C5B75698BAC", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 54, "Balance": "10000000000"}, {"index": "72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B", "LedgerEntryType": "RippleState", "PreviousTxnID": "7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN"}, "LowLimit": {"currency": "BTC", "value": "10", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 2967, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F", "LedgerEntryType": "DirectoryNode", "Indexes": ["AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"], "Flags": 0, "RootIndex": "72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F", "Owner": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je"}, {"index": "73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F", "LedgerEntryType": "RippleState", "PreviousTxnID": "AAC46BD97B75B21F81B73BE6F81DF13AE4F9E83B6BD8C290894A095878158DEB", "HighLimit": {"currency": "USD", "value": "10", "issuer": "r9duXXmUuhSs6JxKpPCSh2tPUg9AGvE2cG"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "Flags": 131072, "PreviousTxnLgrSeq": 27420, "Balance": {"currency": "USD", "value": "-1", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "758CB508F8721051EE188E4C354B7DC7B2EE402D3F8ACBBEBF5B1C38C11D9809", "Account": "rLCAUzFMzKzcyRLa1B4LRqEMsUkYXX1LAs", "PreviousTxnID": "5D4529121A6F29A1390730EBF6C6DEF542A6B6B852786A4B75388DA0067EAEE4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 56, "Balance": "10000000000"}, {"index": "77F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F5", "LedgerEntryType": "DirectoryNode", "Indexes": ["4FFCC3F4D53FD3B5F488C8EB8E5D779F9028130F9160218020DA73CD5E630454", "6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997", "26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873", "E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610"], "Flags": 0, "RootIndex": "77F65EFF930ED7E93C6CC839C421E394D6B1B6A47CEA8A140D63EC9C712F46F5", "Owner": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"}, {"index": "7C05004778BF5486985FDE0E2B49AA7DC0C775BCE20BD9644CBA272AA03CE30E", "LedgerEntryType": "DirectoryNode", "Indexes": ["44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01", "7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"], "Flags": 0, "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, {"OwnerCount": 0, "index": "7C3EF741E995934CE4AF789E5A1C2635D9B11A2C32C3FC180AC8D64862CCD4C5", "Account": "r4cmKj1gK9EcNggeHMy1eqWakPBicwp69R", "PreviousTxnID": "66A8F5C59CC1C77A647CFFEE2B2CA3755E44EC02BA3BC9FDEE4A4403747B5B35", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 57, "Balance": "10000000000"}, {"index": "7CF07AD2891A664E9AAAC5A675E0241C2AD81B4D7197DCAAF83F9F4B7D4205E2", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000002", "Indexes": ["E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469", "35FB1D334ECCD52B94253E7A33BA37C3D845E26F11FDEC08A56527C92907C3AC"], "Flags": 0, "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, {"HighNode": "0000000000000000", "index": "7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619", "LedgerEntryType": "RippleState", "PreviousTxnID": "A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd"}, "LowNode": "0000000000000003", "LowLimit": {"currency": "USD", "value": "0", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "Flags": 131072, "PreviousTxnLgrSeq": 32359, "Balance": {"currency": "USD", "value": "-1", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219", "LedgerEntryType": "DirectoryNode", "Indexes": ["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C"], "Flags": 0, "RootIndex": "80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219", "Owner": "rM1oqKtfh1zgjdAgbFmaRm3btfGBX25xVo"}, {"OwnerCount": 0, "index": "842189307F8DF99FFC3599F850E3B19AD95326230349C42435C19A08CFF0DD2D", "Account": "rHSTEtAcRZBg1SjcR4KKNQzJKF3y86MNxT", "PreviousTxnID": "FE8A433C90ED67E78FB7F8B8DED39E1ECD8DEC17DC748DB3E2671695E141D389", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 7989, "Balance": "19790000000"}, {"OwnerCount": 0, "index": "8494EFE5E376B51716EE12EE6ABAD501940D3119400EFB349ADC94392CBCE782", "Account": "rnNPCm97TBMPprUGbfwqp1VpkfHUqMeUm7", "PreviousTxnID": "F26CE2140F7B9F9A0D9E17919F7E0DA9040FB5312D155E6CDA1FEDDD3FFB6F4D", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 60, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "854439EC87B9DD8B2D5D944D017A5027A956AE9F4969A439B81709F9D515EAEF", "Account": "rwZpVacRQHYArgN3NzUfuKEcRDfbdvqGMi", "PreviousTxnID": "9D02BD8906820772FCF8A413A6BF603603A5489DE1CFE7775FDCF3691A473B64", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 61, "Balance": "10000000000"}, {"index": "85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC", "LedgerEntryType": "RippleState", "PreviousTxnID": "E816716B912B1476D4DE80C872A52D148F1B0791EA7A2CEF1AF5632451FECCAD", "HighLimit": {"currency": "CAD", "value": "10", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "LowLimit": {"currency": "CAD", "value": "0", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 131072, "PreviousTxnLgrSeq": 246, "Balance": {"currency": "CAD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "8991D79F42029DE8CE26503540BD533DB50E4B1D59FC838870562CB484A18084", "Account": "rHrSTVSjMsZKeZMenkpeLgHGvY5svPkRvR", "PreviousTxnID": "E6FB5CDEC11A45AF7CD9B81E8B7A5D1E85A42B8DCD9D741786588214D82E0A8A", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3759, "Balance": "10000000000000"}, {"HighNode": "0000000000000000", "index": "8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C", "LedgerEntryType": "RippleState", "PreviousTxnID": "B9EB652FCC0BEA72F8FDDDC5A8355938084E48E6CAA4744E09E5023D64D0199E", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "10", "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x"}, "Flags": 65536, "PreviousTxnLgrSeq": 12647, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "8A43C256DEAAE94678596EF0C3019B1604788EDA72B7BA49BDCBD92D2ABB51FB", "Account": "rfCXAzsmsnqDvyQj2TxDszTsbVj5cRTXGM", "PreviousTxnID": "10C5A4DCEF6078D1DCD654DAB48F77A7073D32981CD514669CCEFA5F409852CA", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31798, "Balance": "10000000000"}, {"index": "8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A", "LedgerEntryType": "DirectoryNode", "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"], "Flags": 0, "RootIndex": "8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A", "Owner": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif"}, {"index": "8BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A4509", "LedgerEntryType": "DirectoryNode", "Indexes": ["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B", "C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C", "25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766", "9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09", "E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610", "65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"], "Flags": 0, "RootIndex": "8BAA6F346307122FC5527291B4B2E88050CB66E4556360786B535C14BB0A4509", "Owner": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, {"OwnerCount": 0, "index": "8BE1B6A852524F4FA4B0DD3CBED23EEBEC3036C434E41F5D4A65BC622417FD52", "Account": "rfpQtAXgPpHNzfnAYykgT6aWa94xvTEYce", "PreviousTxnID": "0C5C64EDBB27641A83F5DD135CD3ADFE86D311D3F466BACFEBB69EB8E8D8E60F", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 62, "Balance": "10000000000"}, {"index": "8C389355DAEAE9EFFCBAFB78CE989EE2A6AA3B5FB0CB10577D653021F8FF0DF5", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000004", "IndexNext": "0000000000000005", "Indexes": ["CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB", "CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"index": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000003", "IndexNext": "0000000000000001", "Indexes": ["17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036", "F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836"], "Flags": 0, "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, {"OwnerCount": 0, "index": "903EDF349E819F46C97F4BF5E0BE8CE7522A127A5ED3B262BFBE75AE151A9219", "Account": "rGRGYWLmSvPuhKm4rQV287PpJUgTB1VeD7", "PreviousTxnID": "EE8B75C4A4C54F61F1A3EE0D0BB9A712FCE18D5DFB0B8973F232EEED301ACD84", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 85, "Balance": "1000000000000000"}, {"index": "908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB", "LedgerEntryType": "RippleState", "PreviousTxnID": "C7AECAF0E7ABC3868C37343B7F63BAEC317A53867ABD2CA6BAD1F335C1CA4D6F", "HighLimit": {"currency": "MEA", "value": "1", "issuer": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG"}, "LowLimit": {"currency": "MEA", "value": "0", "issuer": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ"}, "Flags": 131072, "PreviousTxnLgrSeq": 10066, "Balance": {"currency": "MEA", "value": "-1", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "90F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD", "LedgerEntryType": "DirectoryNode", "Indexes": ["6BC1677EB8218F6ECB37FB83723ED4FA4C3089D718A45D5F0BB4F4EC553CDF28", "A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00", "263F16D626C701250AD1E9FF56C763132DF4E09B1EF0B2D0A838D265123FBBA8", "5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719", "5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46", "600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"], "Flags": 0, "RootIndex": "90F51238E58E7CA88F9754984B8B2328DCD4A7D699C04092BF58DD40D5660EDD", "Owner": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j"}, {"OwnerCount": 2, "index": "910007F4231904B85917A2593E4A921A46BC539D4445E2B19DCD7B01619BB193", "Account": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr", "PreviousTxnID": "21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5", "Sequence": 5, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8985, "Balance": "10199999960"}, {"OwnerCount": 0, "index": "93FA2164DCFA6C2171BE2F2B865C5D4FBE16BF53FB4D02C437D804F84FA996A8", "Account": "r4U5AcSVABL6Ym85jB94KYnURnzkRDqh1Y", "PreviousTxnID": "024FF4B5506ABC1359DBFF40F783911D0E5547D29BDD857B9D8D78861CFC6BE7", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 65, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "958D39AEF473EC597F0036498CCE98077E634770DB1A6AFFB0E0709D925CE8EC", "Account": "rHzWtXTBrArrGoLDixQAgcSD2dBisM19fF", "PreviousTxnID": "CBF0F1AC96D1E0AA8EBA6685E085CD389D83E60BA19F141618BFFA022165EDA2", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 14186, "Balance": "10000000000"}, {"OwnerCount": 2, "index": "96515A9154A54A289F5FA6BBAE3BB8F1D24416A39902635C9913FF3A04214670", "Account": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3", "PreviousTxnID": "47F959E260E8EEBA242DF638229E3298C8988FEAC77041D7D419C6ED835EF4A8", "Sequence": 5, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10067, "Balance": "9999999960"}, {"OwnerCount": 0, "index": "968402B6C7B9F5347F56336B37896FB630D48C1BDFB3DB47596D72748546B26A", "Account": "r9hEDb4xBGRfBCcX3E4FirDWQBAYtpxC8K", "PreviousTxnID": "AE5929DE1626787EF84680B4B9741D793E3294CC8DFE5C03B5C911AF7C39AD8C", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3055, "Balance": "10000000000"}, {"index": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000002", "IndexNext": "0000000000000001", "Indexes": ["A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198", "52733E959FD0D25A72E188A26BC406768D91285883108AED061121408DAD4AF0"], "Flags": 0, "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", "Owner": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, {"OwnerCount": 1, "index": "98301566DDDB7E612507A1E4C2EA47CDC76F4272F5C27C6E6293485951C67FC9", "Account": "rEA2XzkTXi6sWRzTVQVyUoSX4yJAzNxucd", "PreviousTxnID": "A4152496C7C090B531A5DAD9F1FF8D6D842ECEDFC753D63B77434F35EA43797C", "Sequence": 3, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 32359, "Balance": "499999980"}, {"OwnerCount": 0, "index": "985FDD50290AC5C3D37C1B78403ACBADD552C1CDDAA92746E9A03A762A47AF67", "Account": "r2oU84CFuT4MgmrDejBaoyHNvovpMSPiA", "PreviousTxnID": "4C6DC2D608C3B0781856F42042CD33B6053FB46C673A057FB192AB4319967A0C", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10043, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "987C0B2447A0D2A124CE8B7CAC4FC46537AB7E857256A694DDB079BC84D4771F", "Account": "rPFPa8AjKofbPiYNtYqSWxYA4A9Eqrf9jG", "PreviousTxnID": "8439B6029A9E670D0980088928C3EE35A6C7B1D851F73E68FA7607E9C173AFA8", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26718, "Balance": "10000000000000"}, {"index": "99CB152A0161D86EBA32B99F2E51024D1B4BCD9BD0CF95D3F13D90D9949135DB", "LedgerEntryType": "DirectoryNode", "TakerGetsIssuer": "58C742CF55C456DE367686CB9CED83750BD24979", "IndexPrevious": "0000000000000001", "TakerPaysCurrency": "0000000000000000000000004254430000000000", "ExchangeRate": "531AA535D3D0C000", "IndexNext": "0000000000000002", "Indexes": ["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52", "5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515"], "TakerGetsCurrency": "0000000000000000000000005553440000000000", "Flags": 0, "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", "TakerPaysIssuer": "E8ACFC6B5EF4EA0601241525375162F43C2FF285"}, {"OwnerCount": 0, "index": "99E5F76AB42624DE2DD8A3C2C0DFF43E4F99240C6366A29E8D33DE7A60479A8D", "Account": "rp1xKo4CWEzTuT2CmfHnYntKeZSf21KqKq", "PreviousTxnID": "059D2DCA15ACF2DC3873C2A1ACF9E9309C4574FFC8DA0CEEAB6DCC746A027157", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 66, "Balance": "1000000000"}, {"OwnerCount": 0, "index": "9A3F4F80EBFE19B3F965B9ECF875A1827453A242FD50CD3DC240E842D210FB38", "Account": "rGow3MKvbQJvuzPPP4vEoohGmLLZ5jXtcC", "PreviousTxnID": "1AC83C3910B20C2A8D7D9A14772F78A8F8CA87632F3EEA8EE2C9731937CF7292", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26714, "Balance": "50000000000000"}, {"OwnerCount": 0, "index": "9A47A6ECF2D1F6BAB6F325EB8BB5FD891269D239EDA523672F8E91A40CA7010B", "Account": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj", "PreviousTxnID": "38C911C5DAF1615BAA58B7D2265590DE1DAD40C79B3F7597C47ECE8047E1E4F4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 2948, "Balance": "325000000"}, {"HighNode": "0000000000000000", "index": "9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09", "LedgerEntryType": "RippleState", "PreviousTxnID": "3662FED78877C7E424BEF91C02B9ECA5E02AD3A8638F0A3B89C1EAC6C9CC9253", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "Flags": 65536, "PreviousTxnLgrSeq": 20179, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 6, "index": "9B242A0D59328CE964FFFBFF7D3BBF8B024F9CB1A212923727B42F24ADC93930", "Account": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY", "PreviousTxnID": "D612015F70931DC1CE2D65713408F0C4EE6230911F52E08678898D24C888A43A", "Sequence": 60, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31179, "Balance": "8188999999999410"}, {"index": "9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB", "LedgerEntryType": "RippleState", "PreviousTxnID": "F7A5BF798499FF7862D2E5F65798673AADB6E4248D057FE100DF9DFC98A7DED6", "HighLimit": {"currency": "BTC", "value": "2", "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, "LowLimit": {"currency": "BTC", "value": "1", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "Flags": 196608, "PreviousTxnLgrSeq": 8978, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C", "LedgerEntryType": "RippleState", "PreviousTxnID": "189DB8A6DB5160CFBD62AB7A21AFC5F4246E704A1A1B4B1DB5E23F7F4600D37E", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, "Flags": 131072, "PreviousTxnLgrSeq": 232, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "9D7DC8910AB995F4E5F55776DCA326BBF0B47312A23DE48901B290598F9D2C1F", "Account": "rUvEG9ahtFRcdZHi3nnJeFcJWhwXQoEkbi", "PreviousTxnID": "DA52CF235F41B229158DB77302966E7AB04B1DFE05E3B5F4E381BC9A19FE2A30", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 250, "Balance": "50000000000000"}, {"index": "A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683", "LedgerEntryType": "DirectoryNode", "Indexes": ["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6"], "Flags": 0, "RootIndex": "A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683", "Owner": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th"}, {"OwnerCount": 0, "index": "A175FC9A6C4D0AD3D034E57BD873AF33E2BFE9DE1CD39F85E1C066D8B165CC4F", "Account": "r3WjZU5LKLmjh8ff1q2RiaPLcUJeSU414x", "PreviousTxnID": "8E78494EFF840F90FEAD186E3A4374D8A82F48B512EA105B415ED0705E59B112", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26708, "Balance": "10000000000000"}, {"index": "A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB", "LedgerEntryType": "RippleState", "PreviousTxnID": "21278AF0CC3A3E968367D064C61280B9723E85F8170F67D4FED0D255E92381D5", "HighLimit": {"currency": "CAD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "CAD", "value": "20", "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, "Flags": 196608, "PreviousTxnLgrSeq": 8985, "Balance": {"currency": "CAD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010", "LedgerEntryType": "DirectoryNode", "Indexes": ["CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"], "Flags": 0, "RootIndex": "A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010", "Owner": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH"}, {"HighNode": "0000000000000000", "index": "A5C489C3780C320EC1C2CF5A2E22C2F393F91884DC14D18F5F5BED4EE3AFFE00", "LedgerEntryType": "RippleState", "PreviousTxnID": "D0D1DC6636198949642D9125B5EEC51FF6AC02A47D32387CBB6AAB346FB3AFE3", "HighLimit": {"currency": "BTC", "value": "33", "issuer": "rwpRq4gQrb58N7PRJwYEQaoSui6Xd3FC7j"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Flags": 131072, "PreviousTxnLgrSeq": 17769, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "A7CC9FE3F766F2DDE36D5530A0948C3BCB4DDB34D21B726091404E589D48AD07", "Account": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE", "PreviousTxnID": "070E052D8D38BCE690A69A25D164569315A20E29F07C9279E2F1231F4B971711", "Sequence": 12, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23230, "Balance": "199999890"}, {"index": "A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3", "LedgerEntryType": "DirectoryNode", "Indexes": ["116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"], "Flags": 0, "RootIndex": "A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3", "Owner": "rEWDpTUVU9fZZtzrywAUE6D6UcFzu6hFdE"}, {"index": "A95EB2892EA15C8B7BCDAF6D1A8F1F21791192586EBD66B7DCBEC582BFAAA198", "LedgerEntryType": "RippleState", "PreviousTxnID": "058EC111AAF1F21207A3D87FC2AB7F841B02D95F73A37423F3119FDA65C031F7", "HighLimit": {"currency": "BTC", "value": "5", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, "Flags": 131072, "PreviousTxnLgrSeq": 224, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038", "LedgerEntryType": "DirectoryNode", "Indexes": ["72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"], "Flags": 0, "RootIndex": "AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038", "Owner": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN"}, {"index": "AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8", "LedgerEntryType": "RippleState", "PreviousTxnID": "99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je"}, "LowLimit": {"currency": "BTC", "value": "0.5", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 4156, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 1, "index": "AC1B67084F84839A3158A4E38618218BF9016047B1EE435AECD4B02226AB2105", "Account": "rhdAw3LiEfWWmSrbnZG3udsN7PoWKT56Qo", "PreviousTxnID": "D1DDAEDC74BC308B26BF3112D42F12E0D125F826506E0DB13654AD22115D3C31", "Sequence": 7, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26917, "Balance": "10000999940"}, {"index": "AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF", "LedgerEntryType": "RippleState", "PreviousTxnID": "9A9C9267E11734F53C6B25308F03B4F99ECD3CA4CCF330C94BD94F01EFC0E0C5", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "Flags": 131072, "PreviousTxnLgrSeq": 219, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "ACC565A48442F1648D540A6981FA2C5E10AF5FBB2429EABF5FDD3E79FC86B65D", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000002", "IndexNext": "0000000000000003", "Indexes": ["A2EFB4B11D6FDF01643DEE32792BA65BCCC5A98189A4955EB3C73911DDB648DB", "E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"OwnerCount": 0, "index": "AD03851218E2ABA52029946E24F17B825EBFD5B51A896FAA20F773DB2944E6EB", "Account": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS", "PreviousTxnID": "FBF647E057F5C15EC277246AB843A5EB063646BEF2E3D3914D29456B32903262", "Sequence": 14, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 31802, "Balance": "49999999870"}, {"OwnerCount": 0, "index": "ADC26991F3E88C9297884EDD33883EAE298713EDA00FEC7417F11A25DF07197C", "Account": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy", "PreviousTxnID": "7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26713, "Balance": "10000000000000"}, {"index": "ADF9E1A2C883AEB29AD5FFF4A6496FF9EA148A4416701C1CF70A0D2186BF4544", "LedgerEntryType": "DirectoryNode", "Indexes": ["10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F", "6231CFA6BE243E92EC33050DC23C6E8EC972F22A111D96328873207A7CCCC7C7"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"OwnerCount": 0, "index": "AEDBD394A0815064A73C26F92E2574A6C633117F4F32DCA84DE19E6CA5E11AE1", "Account": "rVehB9r1dWghqrzJxY2y8qTiKxMgHFtQh", "PreviousTxnID": "17C00ADB90EE2F481FEE456FF0AFD5A991D1C13D364ED48549680646F4BBE3FF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 70, "Balance": "10000000000"}, {"index": "AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE14", "LedgerEntryType": "DirectoryNode", "Indexes": ["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A", "116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"], "Flags": 0, "RootIndex": "AF2CDC95233533BAB37A73BED86E950F8A9337F88A972F652762E6CD8E37CE14", "Owner": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va"}, {"index": "AF3D293F1218B1532499D0E3DA14B73C27DBCB5342C34864B150BD657100CD42", "LedgerEntryType": "DirectoryNode", "Indexes": ["D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE", "9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"], "Flags": 0, "RootIndex": "1F71219BA652037B7064FC6E81EABD8F0B54F6AFE703F172E3999F48D0642F1C", "Owner": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, {"index": "B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489", "LedgerEntryType": "RippleState", "PreviousTxnID": "1DA779A65D0FAA515C2B463E353DC249EBF9A9258AF0ED668F478CF8185FDFD6", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA"}, "Flags": 131072, "PreviousTxnLgrSeq": 8896, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "B2DC564CA75F1E3AECDD91BCE01CAAFCFC01FBC8D8BAA791F8F7F98444EB7D8E", "Account": "rDa8TxBdCfokqZyyYEpGMsiKziraLtyPe8", "PreviousTxnID": "C10DFDB026BBB12AC419EC8653AEB659C896FD5398F95F90FDADCBC256AA927C", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 14422, "Balance": "5001000000000"}, {"OwnerCount": 0, "index": "B33FDD5CF3445E1A7F2BE9B06336BEBD73A5E3EE885D3EF93F7E3E2992E46F1A", "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "PreviousTxnID": "3B1A4E1C9BB6A7208EB146BCDB86ECEA6068ED01466D933528CA2B4C64F753EF", "Sequence": 63, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 38129, "Balance": "981481999380"}, {"OwnerCount": 1, "index": "B43FDD296AD9E5B073219411940774D1FF1E73C7BAFC2858293802EDC0E3C847", "Account": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB", "PreviousTxnID": "6C2C3126A945E8371F973DAC3DF4E899C2BC8AAC51DE6748E873BBE63FCD7607", "Sequence": 3, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23194, "Balance": "1009999980"}, {"index": "B4979A36CDC7F3D3D5C31A4EAE2AC7D7209DDA877588B9AFC66799692AB0D66B", "LedgerEntryType": "LedgerHashes", "LastLedgerSequence": 39999, "Flags": 0, "FirstLedgerSequence": 2, "Hashes": ["7AF4DC694B6E70A2C56C79CDA91FF4ADA4B7FC69240BDD178939ED9031EF6573", "8FD3B47C380393C894CE29C8824847CDEA65A23551F6840EC32DCEE63C9C988E", "D64ADD950519348512D3ADF0A915B32FBB488192BFB1E394799DB7F23D4AF29C", "4412E46C883596EB93C94BFE762099BE6365DF325B68F26766D289E4F91419C8", "85B85C8C095E974F18877E5CC5D83224E5446C011D1569348A054AE9525D94CF", "F9D2CC3389EE3621AAE047C939F5C5B348CD07CF68B9D8F767CC80553D3DDF69", "90F02E8F9B76D866CF07616C11A3CCE8DBD03546F359393E865108B1FBB50C0C", "4EE5A3602FB103B41C7A82A7BEC33041D4C62AAA71ACE638E09246E0A266D710", "A54E35E7E37DD50A4BC57CF133A3BD85B152A2A86B562535D14A31C739975A56", "D137E5D95AB49F8D3B3FD9FABFA1E180ABB1F1EFF26CA6AD1D0E5F550EBAB01C", "DC13EEC5665DE919E65879ADB64D516D9B3EDE56445F53B30CFE14368B3AE8BD", "0EB36DA14D1B18775C0143F787976FFF088722565F91C5DCD1A69E6295B5AC28", "2BABD7A23EA438C9F9B4B4E4FBB39AFCC323C3AA90E6D78914BCFDDAB571B847", "53B6174CD4050CC6708D0AC19529936557D50F40C72F8810072F9C621D619E54", "B7B9CAED2E9CDFFE5ACA88B114FA0F612A16953407507DEBDEC375FB2626CBB1", "4C9A9ECEE4C6FA76C5977CC695D125BC4AAD7A74F72993938E21630EB5579786", "E1FCB42D3C8C4EEE582FD88B85D2F96CF191FB5DA69956E9DA1B7A3ED461A04D", "A35F774761006162DCAB1947997EF4938CAAAA26DE95A69AD140553D39E24191", "E5513BC814092D7E900819355B2735FA00ADFE9AE9BD8937A084D49099269A9B", "6C731D012F23B3B4A35E6B6401BF6504377B667BF50F28140175702706170039", "8FFC14175E40EB68AC5868563AA66F0CDECCE5766A19C040FE726447E6EDE11C", "255AB19F8BD86C20A2A6AED898A8389F75EF7D826CA4E650E979F12BDE74C058", "63196D07B2C2FC8840C8883B72E548A6ED672264C2B29A2472A049D644FDBA9B", "C8981A7BAB66579DFD9D6877CBAEF4E7B91CFC1B290676CB614EE50758E7FEB1", "A7D8000A6B1A99666BA14FA9BA9BCE12B93861663C423756D75F9C8A85E63778", "41A65D70B59A7AC0D6BF487901586E3C5C7366EDBB5B221F7592B343F74251A4", "7CC835A4A1DC59A4CC69BCA3649EFEFE735C239D7229CCC9773A7D4EC07E063B", "EAFC38F103A28FDD9D80FEC89F05DB2916ED7837715EF041F962EC3017BBF699", "1086EC410292F5F7E769D65C8DF8B2628B4EE4C67368B98DF22A4468F0C7A486", "94A27CE45536C15CF784E9442F7B868490263C5840C1147DB0473056AA9168C8", "8ADBA8741B7FE6244EB3F0F50F124D1C2138F0F71C9F922EEF033F310526B445", "3E483A136C86E759BB5652A62E430139DB9A7B2A96C2764D256A2ABDC5954B48", "8CA4AC45F987FB270A87854F1FF89D884DC662137D98D9B66A4FD9BAFBF34611", "3F8BB953DEF2D740655FF5F03C2624476DF3B4C171AD72710CBB8CC11B2C7238", "07716BBBC0A8407F38F327CDDFF6C63BC837DAC05F0AEBC24E50287C8767BD03", "C51F7376087BBFC73DF513350575547CCCC44C48D6BB2F16E4FDF72AA533BF93", "CCFFE58ECF70DB0F8BE86EEB9A4240885DBAFAE9A8923E55D4FD511CD3879427", "9B4C7577CC7B767002ECAC8CADAFD13A8711C10E5177FF340AF45BF97F74AF6B", "F16D884D75912E78D0B73D9662268A69261783E544D21BFC417B183510A12C1C", "08D0B41E72B72C72A7BF52311BAEA364C270705C8A9CB4DB66F19188B72B0F43", "2B6A3F90696EA6B87D740865194A496308E545A536CAAD90AFE98C2B3596AF26", "86EBF09A4727AF67AE17D8C099B43C2B50A4F391A8DAB825548AAA73C4C602DA", "943BD0529405B6C71CD86C04CDE057E1D84747AFC4C62DA124D4F72ACE633323", "F6DC388171837D29503EEA5F943143C4B68FED6BA8124CEBE85711D43DA14D19", "CEE7F72C4F1D7DF00DB23831D0B36A65CF40EAE4B2D12E46B3381F5E8B139833", "7DC28D3683E98FFFF1BE85DA46F088D5F31DCF69EA6AF76A48FF50F8F20F3C00", "E70461100B87A6C4706B86DC3BEDB161D3853396524B7B9713B522EE49CA501A", "CF5F53A1109002FB12F024AAD56380FEE813FB8482F5CE49C67AC665A187E0BA", "355EE0CA43AE28664CF31ECDF34DAD3C484FAB342D229C36F9CBBC41FA7A27CE", "DF5BF89A2E9A7DC97E3C95C4B0DDAED62F29C6CEF8755B6B1A5AC0453E947FC2", "B395B77FBFC2B03D92837C4179D397683E59718AC02A5C3826E31BB26C043920", "E7670A56B35A2006CD337CC57139ED2C69F2C9C9CE360E9EC4456BDF6422B97D", "06A540145E651B3DDB8166FCB7090F8910F9084892A4194AD2A306DE298A5E5C", "C6EFACBDF265498E452EDE5FECEF50ECB1B88A26940D3E196D02FEB6C82BE4A1", "8873F625B988B4C6F2A330FB10AA7DF3A1F55091AE51A038512FA64FA838635A", "3DF69529A8DB68BF86BDB403AD2208E4CE48EB650A3DC44C4B064C70F0169D1B", "D3033697366D2B60E403FF92811E9451BDCBBCF6E4F84E24858DE16ED81A7728", "E7FA27A97BA86344864BDCEC677CE77D79A1D7C5B73CE6E8321FE8B92CCE2EFF", "54635CA110C50391920E8E23CF0DA2195997A85A03191549E6F247495848EEC3", "38E61C56133B4AF5ADFAFCA9FC495D415678D2D2518CD90C879729A73A3E290C", "103D4D40D0D81FDEBE3999327FA287DF8893973D7B5124025F1CBA4411E611C5", "A213B72314776D5758CF63DF1DE4D2D4068AB33B62264FFBFB208A0F577D4363", "B81C18181B4811DA11E78003E5D71B279912E154F5C08BD9A4F158995682AB81", "E432D1C471A72CD7F3E536BA63182DBF0FD2F98B336144B7D2558F21D0799E0A", "257EAAAA89CB6DA3A55932DBF407A1491EA0F5767793B25AD97160F9A37C8542", "FCBE8BD7D94D10E80D86332A9978448E80F6D855988F290A0A013BE745811AAD", "93D01044983F0F70CCDDB7DF7A3C51E9E38C81F8DC8065EF4F100882327CF66F", "15EBB4F239855238190B4BBF71489BB9AF3F7FE65DA5B882287874B919C9FDD2", "E0AF649F62E7F89D67C3937567BE8A01D4BA4BDDBA6A6B8B7902A045E3BBEB41", "02E4FB2B9CE7994776A9C99945CFBF402BCD85D07971729B1941B0ED6E064455", "69489BE0D83312E1C0FD3AB55CE449EB097F827350CE2FB527BC23FE34C0B7AB", "3CC74FBDB7775E9DBDF034EFC6EE62DD053754E8910FEFE64CF4C1DCD9F7D812", "313FBBA25EF26FF3CC693E8223E25EFBBF487F71E65058DEE4B28DDBE6E8B187", "67CF30D48478625F079A4BCF67DE647C4A6E9B293E3433940DA9031654C5C4E1", "ECD1FF68E8489D53F3DACCEA9586C826A212D98EE7DA2C9265BF085973F1333F", "57992786A551E6A3BE3BFA7F01590A84D014B8551DF7F38053B77B17DA418FD1", "B724D3132E06B8364A6872840AD2C8AA3FD354F865F40F1AEAB4B0CA6E3583D1", "63762F285A7D76278A9546A62F4A9836D2944DBAE6BA3DB2A1526D9F42A73A61", "70CCE5C9A3C7C630B7AE9BC5BC2F2EE62A1E11D9753A6A0C5BDBB1B22399E54C", "3575379AF476E081135A21C57977B0F7D1EFD97EEC25332F2E61E1A4A0F432BF", "685C81EDA705F35A263832ADB8EE9704FEE4C7B95E1F6FCF8FFB71D7B8705F83", "36CBB772B39357BBAAD2054C555C0A162A4238B2899F2BCBBEFDD2768FE61B1D", "B79F0AAF1D549645BDB69E8778AD6C98F8574683F3A831B6F36CD0B5CE25DAF9", "31A53B15006572EAFA80871FD87A27BB94AD405C566536C8182F082D1124CAA0", "4AD17606C935F49D14685652E2884163A075AD73467139E0D173C3805AC7C39B", "69C1F0C4D12195A847CBC3808276DB096D3EA12755E5A35466C9772A520109C6", "DDBD75DC5FE041BC1686B8FDA1519AE29B5A534EA4532FCB7E2B62851E0DD838", "AD8FCE878D8C63621BA7B341E18FA1C54F1CD1900CBC3B2A7D60F0D6303CFC38", "71559DD7FA03DF4F08BFB202692B391281B6F472251430D460A5E78E32FAFC21", "0E2B0EA2501E9FD3D0FE7BF7FAA9FE322CEADA19DC2401585EE4452188D916FD", "0BA3AF252BDC41AB0905BA9CB7D578711D9B81AE7E5A34A6E98B471AE495EA37", "EA035B394F73A8B7644E33E114B2C239E5B5254AC483013BA69DECC37C5A2FD6", "04C21AD7FE5B79AFF352F22C911816C139BC041B096BDACCA0ABF1237C62EE81", "0F145166EB0FE7D906F541A6D95C07C9109700AFD9102230784776BE8D8B84BA", "ECA1E4727341C8466357A1EDDC4827A7133C772F56C21A92C783BC8D4FB20DC3", "D30FBFDE30C2C03EB49C9FA935FEAF8E5E4F7EE3C3A1CE31D39BB5AEF6EEE440", "54CC7908C6AC309E310BDCDF00B899DF210A7A780964D2B3A54B25CBFEE7F99F", "089F04268B1CE01848D361C217C293D4535910D9FAAEE9AE468B91F03461E404", "A5B10A6FB1F441E3D2CE5E652E886E541E6E4BF6A32278CF298D7411C33A2428", "06D7FCC026FCDCC08512809A1C3970341A0BD95F3D457DF850FEEE0763E68C8A", "3A37FEBBCAD9B6344A8316B3DF2C1DDC13FF596EFEC6A102982FD2CB83970C9F", "8C297834C051FF8CF58C9062D2EE2AC0DC1FC6E4204C89700B8F80BEF1767A51", "019F89FEC12D1DA852EC3BA683C7CFBB99D9C91F64ECF126C1A2CF3FACE32A6E", "960EA35EA80796E0C1E224E5F9B476C42E1D14A007F29AADC75BFE25B67D3847", "977A2CDF761F67ECAF8A8A24852ED903AFAAB1742178612F24F69E2EB0E3E0E1", "22AE30BAC6EF50F0A6ACF18E176818316A1B65F37183E7CDEEC672FDC14126EA", "32D9550C16C0D84B74F62EEFE6A4970EDB967CA6A6C7F2129921E6566CE2E130", "76B6F84F54BEE2B5845B50C1FB1FE57D0698BA36B91D697B004283CA71CC3DF4", "1681774DDBD0CE83250E628EA2513B0C4668E25CE2D8A13AE1DC5A9DE6328833", "4123A591AF6CE67733B55DF67EA43B12D18FE0F65BFDCC698E714764F4F10A09", "9B404103C46EA1D7714B7F51DC4987142D01A1C375CA6743ACEA71B47B60EAEA", "DCB8095A57BC7C4FBE208D6473BDB81856319537725B0F0F475CADEED4EC3BAA", "C8B1FBAC7FA5D33176631022DE6B496A6E5B8D0701B9ED9C9F8FBF90890E97AE", "4C325875BC8FA0542957D25EB7494ACBF50C839263EDA09F5D17B192DB4EC925", "DAE8A66FCD42CD5E8D95DC1D9A2712624FBE251129E7FE548A233092B3D48AC7", "E856630ED4AF65DA336762CC1CA8E377634530563FFF64443F0C53273A826AFD", "1F9146D2EE00EEB8FE28FF0A35577C05EC87CC6156F3DFF691170ABC7954A9C1", "3B0B73CAB33BF22F1BAB3951828CD74A5D362B6BA627BEE9B30EB8480BBE1E62", "FA9B09008DC9C70D1543D810F8D24E41B33A8C19B627ABE1157BCE7B3AD92B60", "0CF0FDCC1D4705556A755A8BC844E2AC259739F8F090D1A099A5E5FF44D74DAD", "2F1D2669B62BB04C2F9BC5290E98D60A7B64C7842FF1C30C48C1DF534A2D5FD0", "96BCE34E6353034BE78EFF29273BB06D070EA4FAE394F0916E44D3F35B5E88C0", "8C3F959953486ED0610B73E5C2B28FE8364871D3F56E2D0E6C78AE6AEC456155", "06F60C559A54B11A40C208C75CE9C675A1E7DDBD26B18B8E0181CB58799CFF08", "31FA67602D05D1AFE0BC778FBCF17F6A5AB251BD2B60143EE32A24595E4BB9DC", "94AB3391E41D6CB11B09A48936C0A7438CB3C42294D462A71117B43AF70245B2", "B7682431796E5ECE8E85D3F0791373BDEB3CE76568198803A37698061FCFC580", "514DF35C27C73480A79D07E26A4FE514E7218D095B70F3DCF3B5181937FCDC64", "0451DD42AA21F35DCA461B21FF095A249CAFD9B437D42C5D9FD5C886D09A971C", "E50C4FD494F0384F9DA776D501CABDABF824EA901CE1411C1AA7F6DD81B5D53E", "DE7534E45B704DEE8767A4FDC257B17CCDAAF2EEA27A07F9EDB1C2988A5C8E39", "259B0CB3CEC6731EF1DA8E9254936D60B258968EE3E103A9BD68D7C0E5FBB0F7", "6DC87A8817943B95FD2EE9C9A8FA0062384C19D65D4B26434B79E431397EF7B3", "4469503338AE4B8DD9760029B9749C32B141C8E15CBC784C4FE4F5D3C1E5733C", "70580A8418229010B4B73CBB9D47E8A5B923A04E553B52BC7138C1CBE27A0078", "50502380EFFBDA1818CACC4CC2218C4A23A10AF38167947202D1C02D91A0E994", "290B684B7C4F6E5063C619E0A7E4CE053712B3E844B85FAE3DF65DB8C429D30B", "690D1B423CD507D82DD0788A28D4CC9FF5E37985B3C15F49BD90B19710E78295", "96624DABB32F1C79011EEDE2E2ABD7A3FDF00BF78729F0A9BF8EB4A0528C112C", "4DF4C594A58576A5F100E9A8597F20F234F0A4DB3D155C9BD9C0492C09143354", "28433B0576F23012F7A5AA7A17DE578658D2400B09887D383D1477411C4C3979", "5A9B2E65BD27C22F3B33F5AE20BEF8606844285E56763BF05117A2B0A55BC292", "BB6F2ED057C04BFAD992277E78FE50A19E5D9AA1A90E197A3EC8CC0BAA88183B", "9EB86D5F32D208FCF8E719F52DD311BCFE7611541E9501154F41E3B03D73F8E4", "38CBD1086D5565B63304633EFADB42017F30EC5337AD0C49E8FFF0BD1D95F930", "589469913E8D7DF05BF9D677B062B02650B7C1E1C0DFA082370A3D589F029D16", "981C5C17B7D1A167ADE19DB4FC03C25066427DACCB866BC8525F68F3D3691213", "52DDB0F6BD4916005DA9C494CBC0A8E12452DDFA0234BC38D45474395067BC40", "7A0157AFE69BA422D30A42D187D547F174FB2190BD7FCA675F0909FEB5B771EA", "830C59CAD1C6ABD36E0EED6DCC527DE9EEA79A42393D502FC4900E4DB8347C9B", "EB44F88776B6A706744C6E4483B10A3E4199DECEF4D7DF8DE9AD8A0B3A59B2DF", "25CC099052BE06EFD4C8751FBB0E45BC454870BDD461A5EAF4F25055B0364392", "18FDB4B8B1E52129D0579EC366793CC2BADDD866E466246B13C4D114279035E9", "09992EE6CD2A60D8748DE73AA90502E24D55E1C8AEF243409C68E59E5E1D8848", "5D2FB8D9477147514F7E81EE68968516A00261254B3E8D296DF44925C59D1E27", "4DE13FE90112C1F28EBCDCACC5751D01F8BC2D6B4048FE6A14E34AF636BA3542", "4D86FA284F95768F703A4C5B94AF5D6CE026BC782367D4B4A6B2A6862F129500", "18C28135B06033755DB4C112334FBDBFCC6F8B76FAB0CD63CDA6778B0F6558CB", "E6B76DB4F428BA8C30179BA5FA46BA29D2F139958883DED16933CE435A64D1CF", "666997D699152CA6B291FD6185969B467FA88C7887003E9F584A266CECF6C79C", "D78682AFE8F5E7D0DA9FBB65FB2E9BE3FF6D770B6288511D12BE71FF6B70B99A", "CB9A5895D293BEA5242F8AFE3EBCED24604549C2261F64D06CF65EB80F9248E4", "EECB00EAD3F56A7160F7E7B7DB63529EC79D82ED366D8E7EC0A79BBA070EF8DF", "BB8F3558F4E93C11803033F015388B537A3A60B87496D9AA6C3DF5B586D1DC09", "6FF1F8400180ECDCA1B35283034235AC62C6D98D7034063DBF6946A65EDA7FB7", "E30896258A446421F32C776B59D263E99A9A6C0581B2C252A4C3CA87AC8D0FD3", "4823F3A204BBF831AF2CA15BF114A55B5A5E8A8F4D4673D89094CF012C53B594", "47E4C7CBF2EE76FF54A2DC00C622F513BBF859CDE4135AFCCB3868FEC69A36A1", "8355FA3970515A0A10530137A31876C6BCE18191F57D0D62AE1CE8680453C882", "322F6116716A6B6E2728B29B269D39BA94915E16647DE713F22BBB8C5162643E", "373DB103168DC9355DDE27A7A3CEA2B9C93FBEC8679939520EBE5E88780B984A", "32C1AC08C0AFB7142EC52AF79A2D0720C199CCDF5096209CEBFDCE73B499B7FA", "0C56EF0BACBFBE353E94A4CAAFB3AE5AE5EF2EA10D214AAF09DD5190C909CD75", "3C5CA4F52398F007CDE8081CE45AA2EA8623D6E44A4F004C6D2137D6BCEFD0C4", "73D4A7336F3089156782D347604C4231EF053F7FC35274BFB0E5E66AB0B18B76", "F21C80E8FFE5C6DD6D977E3780F338A34386C3F44E4E9BF64994E9FA3B9D129B", "6FCD121E731634ADD9C4B1E78A4A8959B841C9D1B6FD80323117CC07287BFF65", "D1EE11F733AD106051C9113A0BF383061051BEAF943C43CF772388DAB0C03447", "3B19E8727FA2F127C703FDD5D4DED75D95CCAD911326E3B4294D6120BD1B512B", "262BD97703AB309C718AC44A14D72F5F7759A3E1E5D3CE4F99CF64827719CEDE", "E56D9DA6B3C9DAB65AAB3BFDF1539FC6150A1FA27E4C1B606C9D2D85D2F68071", "89FFC12C69084EDDE4790F985D1613D96D5B6F8288B2BADAC2A1FF4B2DFFC070", "A72658BEA1384DCFD59C48377CDBF4AF7BDCEE94F0D7B5F181A35B9226F3DB1C", "9F4141120F17B58EE4DF370CC8B862E18E4C1778E1CD3A382ECB64C1B2690A1F", "1E3BFF370E6DB9196172F9916BD32C6D06C51104E3D54C09F2907A3A46828195", "A19753510A5492E8BA59A4C46A6B5B418EFD7982581CF1EAD5D7447FD5B8CF72", "71CF5084AAAB8303E4CB6BAFDC637F0B8056EBCAE69A9C6AC7B50D165BE295B3", "B45BD882662CD4250EF6E761746E7AD021628A2F59AD9483BB0A60342821B590", "E49D05E8A10399185E24B0D46A178118EA56E19347D340CB641AB2911EF82CA5", "C04AB5B9FC4A71D4D60EB69FAABFD9166C007BB864D358640EED319BEA1157AF", "D20FDB0D77E27FBE14555F15FB5802CDCC5B645820C57DEEA39086C01850C094", "9AEB7D1FA04BC60E62E98026E3823B34F1226FEEEF5C2D3FA229F0DB11C89772", "EE15773B6C898386E770E3613E28A8BE0D365F933648CA9AC4828AD67C998B71", "1E689B03CA88883F74CD0BC8D779B3493C030400106FF2DB7DC84DE4DB648FF8", "5AFAAEA4F69585CFC0767ED31685380BA41A45152E5F506298390DE191311168", "B6E77742F5B52210E8D80208C8B947585809929545B0F791D5B8DA895C320D4D", "90572B813DADD84C1461D3CA74374E65B2921ABCF1258644CA4D8377119FFC65", "1B5220FEBB1E533A9A28F79B16465828643A8C3C5DBFCB2640937611ABF5F504", "9BD990D0496B2F5150896025D21B96F38EFA18FC9D9CF1CECC536C557E8B639D", "8BD58E522183A70F58C785A560CC5942FABE6C6E4344231E547B94898FE60CA2", "7D79A5E36BCD629FF1F6D4FFBC55F8172D19D1A52AAA3E76A29C403A316C192A", "BDF81CC4E305D06214C4C28C6A810BBDB9274EB65B095EF64E09FA40902E580C", "053CF0A28823E73D57D7BB2BA806F490C564ED9547D37D2982DAF413B6C1AA86", "B4BA184FD63E501761FFB630D55EC5845981B1AFA4E03D60AB4496F877D8CA5E", "FF37C302F492289C1A4C0F87EF6DFA6FC38FA12C5998CE431C670D001B03D1A7", "F4491E0CA570D2D54779975EEF22CE92167B44F3FBBAE20B363404E31C4783D3", "DE587B3788ECFC1EEC502152F9E02681A9BA6BAA33D28728B122F3034EC80745", "6DB2E041AE12CCA8869D7D07BD606BAFDE9B30046D1E4CEBE1C5E77D53DA9599", "CDC42807A314B6BEE875305E43D7C255CA9FF3D5FD87B93F30DF6B69AB3BB6DC", "21B72CEA0A06E4DD3431ACBA8B0343D59663E9F98D428D854B12D75A4FA5F74D", "58696D59920C482510DF8700B031CD8C19B720E0286FB0F4D57BA0900FDA55A0", "7832BF744E2375A73142986F0D1223FE1BAE40A712B0FD2C1C88C4EB88F604DD", "8138639D8F69AE28EAAFE6CB1252A490E9235B2659F37745CCE7CC16DD07F775", "3EC65BDAADE0BC4C617ABACA4D5F7147A760380954EAA4ED2D53855103157F0C", "A4BA5C74F9CD4864200C3C1FC5C36BB859B2D777DFED480A4FBD4362C898232A", "5FCFC773A0AC902B1E7AC761AA71D9A2A46B86085D7906345BA47BCDA75FFABA", "55E61794273DDF74190C2CAD582E18D9028FE468DB42A35BBE7947A4F19826AA", "B7DC6CF86F9CF4A2C98837DCC9F0EBA44C1BCA23E9E5DD4591F3B73BB43EC7FD", "7B890B5B551D276A8F74C34C0F760FAA203B34779421E9EC111DA623BC319412", "A8179D6244EC628C7F784F888CB675B937E219A6DC8F5A1DB736C27CCC032F31", "D35720406246B1983F1F01B15F0E997CF15CEC694D00503A391B2999F92529AE", "76DD49E8EEC2B03529470F1EEC9D03E34B75F5A5981435E2F307706E732E80B0", "3B56035EB77478ED1EACDF0C1CC54966AB0858D92E7601DE735B54BF78A39CB5", "5056393B0BF1F0EE2E74CDB9A0D89176D4EE667C029AC2A19CEA6F92D38B297D", "D7464E13C34441C480527B1874A50444819079383A5A51D22A20F0B7258BF89A", "00FD566B7916165322A9C36F09AC3D08B3A14B8E781567CEDD85D5C4D2476536", "0B6D615C85942657A6721890693AAD3D9AEC4FAC85385D5F3017958DBA8FC48F", "D6DB854F5139E723E2907F59BDECFEBFDF0B83E5FF976FCC32A723D3937178D0", "DA80BD0035A96261BE7D525509511056A76B5A6A2D6F1967550ABD255423DD9F", "8E0083247FBBECA573917D506355A25E5551970C19E3F1B0D2150343D4BA5FBA", "9F03F069AEA58148F788DA59CE0FDA4C6C80C589D6436918BDFEB20070D0A675", "CA817F9A5E711284E8EA29A3733529EC87D0568C733715838F439472B2D87973", "220C4B7E27C002E3C3EF37AE231CC9374E12CE8BD57BF34202913362FBACE948", "F40D1F313BCCDA92D446FF10911CDCA81C001B1F7A1EA4B73036B3EC1091FF0F", "7BE680AD9E35651D44407E86315F5CD1AB0D79C5E4BA8361888B167DD87096B8", "0165E30D3C4929428AED063BE2F287967B8AB10A45827EEBC9D45E0D73575636", "43C89676F8C0608CFFF6D52DD355C0D0818AC7A578CAA41136D730AF2A0AD75E", "0ED310B724CEC917211AA49962E24B59CF19C468353C6F9EC0B548D6A02AE0CC", "B7B487C2F1EFBFCABE18B060281765CA8C97E6D3E4C887E6066E1102FF7A2914", "57B60C5D95EC0C0B2455520B955240462FAF6B76E4FCFF69E1C64A2899C9A543", "8B3C82509AC281440F001CF7A381E95183A5E22F282B78A791F929FCA60F4228", "57D11A12D8E6F233BA6CE46237374A663BA1D98CE2EA6FD4B772957186CE035C", "0087BB1A1B6F06C016F42FEDE5F9C70F2DF4DD393A0536F1D515A5AB0687D22A", "541510BBEA39ACD075E653C743D2DEFB09C3D84B06EAEA070D90EB49A865DC35", "C7CE87689491760CC46B51103AB77A37728F1582213549578A6F55E842E6A1FF", "62C4A87F09F0F58582CB939FA59CF5C50D8166E1AD1201179D2E560A210290BF", "08583058B3EE9E34757F84F56FAC4CBA40704CF2F2CB62CC553FAAA5D3D3114B", "072E1D34DA1AA81BBD0313D6C27267B78D6279D830900FE0D162360BE25C4E2F", "345D59509002F88DA8B1A68F96337F0DBB414C6C2958CFB5032A9E94422E4079", "7313A7CB776EC91CDC7C11297107B2392342E2AE488E24698535A3A20549F07A", "4282F6259E288CDF69F772E0C9A0B224CD6A45E2DEE76E255FA22D3625BF58F5", "525721B1A0C272A8F215FBDA5B1F8163406EB1F1C5F009FD7E43A1220A7C4F11", "18C66FC3654A02FB56C1115C3E00CDB5EDEA64DCE1E69DAC4ECF532D4687BB48", "E14CF046298311F316123A767807EA7EAF220FECC58DD4C8EA7715309B189F19", "302465EDC5D5B5949226576CAB3F0AE8CCCE3DDE12D7D4E0B1B2AEBCE1447942", "CDFD329A6E418591770695D0FB859113641AC20CB3A1F39AB3D721CEA2685EFE"]}, {"OwnerCount": 0, "index": "B56A1635B519A4ADD78176434543F36064414CDA88F05BF8C005F5FE000E9C6C", "Account": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif", "PreviousTxnID": "83124A90968261C4EC33F29A5F1D2B2941AC7A52D74639C1F8B94E36C13FA3F9", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 71, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "B5C9E9C4DEBB62335A724966E71A6FB40943D363DC76E0C11DD748A6B7D31BDE", "Account": "rMkq9vs7zfJyQSPPkS2JgD8hXpDR5djrTA", "PreviousTxnID": "BFB2829F8C2549B420539853A3A03A6F29803D6E885465F11E6BBED711DD013A", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 89, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "B6C70618B38DD91E494F966424E444906CF485DC2953FEFF1DC1C012FD87CD0B", "Account": "rBQQwVbHrkf8TEcW4h4MtE6EUyPQedmtof", "PreviousTxnID": "1EE8602B929B4690E2F3D318AFA25F5248607F82831930EB3280690F66F98147", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 237, "Balance": "50000000000000"}, {"OwnerCount": 0, "index": "B6DFCE9192DB869545C42908C097D41F0FF64530D657D5B2A29901D06D730CDF", "Account": "r4q1ujKY4hwBpgFNFx43629f2LuViU4LfA", "PreviousTxnID": "F00540C7D38779DEEE08CA90584D3A3D5A43E3ADAA97902B1541DD84D31D3CA7", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 14310, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "B70039BE02BF3A156A24463C27E9672D46476D1E3C4870808374854AE16B1935", "Account": "rhDfLV1hUCanViHnjJaq3gF1R2mo6PDCSC", "PreviousTxnID": "4D4C38E4A5BD7D7864F7C28CAD712D6CD1E85804C7645ABF6F4C5B2FE5472035", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 90, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "B722F9C6787A7019B41962696E9E0484E05F2638C0A7FC771601A8C24A2D3191", "Account": "rppWupV826yJUFd2zcpRGSjQHnAHXqe7Ny", "PreviousTxnID": "77A1280E1103759D7C77C6B4F4759AF005AFC58F84988C1893A74D47E3E0568A", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 8410, "Balance": "200000000000000"}, {"OwnerCount": 0, "index": "B77F72D5F6FB2B618878DF60444456C14853E14689143CD3A453A7773C136196", "Account": "r43ksW5oFnW7FMjQXDqpYGJfUwmLan9dGo", "PreviousTxnID": "663F8A73611629DCE63205AEA8C698770607CE929E1D015407D8D352E9DCEF8E", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26710, "Balance": "10000000000000"}, {"index": "B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93", "LedgerEntryType": "RippleState", "PreviousTxnID": "45CA59F7752331A307FF9BCF016C3243267D8506D0D0FA51965D322F7D59DF36", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7"}, "LowLimit": {"currency": "USD", "value": "7", "issuer": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA"}, "Flags": 65536, "PreviousTxnLgrSeq": 8904, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "B85B7C02547D98381DEAFF843DB507F595794C6A28805279B6F3CD5DDC32AD25", "Account": "rDy7Um1PmjPgkyhJzUWo1G8pzcDan9drox", "PreviousTxnID": "7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23095, "Balance": "200000000"}, {"index": "BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD", "LedgerEntryType": "RippleState", "PreviousTxnID": "A39F6B89F50033153C9CC1233BB175BE52685A31AE038A58BEC1A88898E83420", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rsQP8f9fLtd58hwjEArJz2evtrKULnCNif"}, "LowLimit": {"currency": "USD", "value": "5000", "issuer": "rphasxS8Q5p5TLTpScQCBhh5HfJfPbM2M8"}, "Flags": 65536, "PreviousTxnLgrSeq": 2026, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 1, "index": "BC1D404334842AB9252EC0D49BFB903518E4B91FAB452CB96ECE3F95D080063A", "Account": "rU5KBPzSyPycRVW1HdgCKjYpU6W9PKQdE8", "PreviousTxnID": "865A20F744FBB8673C684D6A310C1B2D59070FCB9979223A4E54018C22466946", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 16029, "Balance": "9999999990"}, {"OwnerCount": 0, "index": "BC9BA84DC5EF557460CE0672636EEE49279C5F93B02D1A026BA373548EAC19A9", "Account": "rQsiKrEtzTFZkQjF9MrxzsXHCANZJSd1je", "PreviousTxnID": "99711CE5DC63B01502BB642B58450B8F60EA544DEE30B2FE4F87282E13DD1360", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 4156, "Balance": "10300000000"}, {"OwnerCount": 0, "index": "C13E84A1C017CFF22775AA0D2D8197C8319F30540AFE90B8706A1F80A63868DF", "Account": "rsRpe4UHx6HB32kJJ3FjB6Q1wUdY2wi3xi", "PreviousTxnID": "D99B7B1D66C09166319920116CAAE2B7209FB1C44C352EAA18862EA0D49D68D3", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3751, "Balance": "40000000000000"}, {"HighNode": "0000000000000000", "index": "C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C", "LedgerEntryType": "RippleState", "PreviousTxnID": "19CDDD9E0DE5F269E1EAFC09E0C2D3E54BEDD7C67F890D020E883B69A653A4BA", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "300", "issuer": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy"}, "Flags": 65536, "PreviousTxnLgrSeq": 17698, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "C34C3BA82CD0770EF8FA4636E6A2C14B1D93989D4B05F1865B0C35595FA02EB2", "Account": "rwDWD2WoU7npQKKeYd6tyiLkmr7DuyRgsz", "PreviousTxnID": "3FAF5E34874473A4D9707124DA8A4D6AF6820EBA718F588A07B9C021CC5CAF01", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 93, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "C41A8E9022F725544C52778DD13858007330C5A87C17FB38D46F69470EF79D34", "Account": "rDCJ39V8yW39Ar3Pod7umxnrp24jATE1rt", "PreviousTxnID": "30DF2860F25D582699D4C802C7650A65DC54A07FA0D60ACCEB9A7A66B4454D5A", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3745, "Balance": "150000000000000"}, {"OwnerCount": 0, "index": "C46FA8C75CA1CAF38F76EF7D9259356CA8D50824A9CD25C383FBB788A9CC0848", "Account": "rf7phSp1ABzXhBvEwgSA7nRzWv2F7K5VM7", "PreviousTxnID": "BEF9DFDEA6B289FF343E83734A125D87C3B60E6007D1C3A499DA47CE1F909FFD", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3741, "Balance": "150000000000000"}, {"OwnerCount": 0, "index": "C64C17E27388ED04D589D5537B205271B903C1518810602D50AD229FF74F11C5", "Account": "rwoE5PxARitChLgu6VrMxWBHN7j11Jt18x", "PreviousTxnID": "3F8E7146B8BF4A208C01135EF1688E38FE4D2EB72DCEC472330B278660F5C251", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26719, "Balance": "10000000000000"}, {"HighNode": "0000000000000000", "index": "C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C", "LedgerEntryType": "RippleState", "PreviousTxnID": "4E4AAF8C25F0A436FECEA7D1CB8C36FCE33F1117B81B712B9CF30B400C226C3F", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "Flags": 65536, "PreviousTxnLgrSeq": 20192, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D8", "LedgerEntryType": "DirectoryNode", "Indexes": ["5CCE7ABDC737694A71B9B1BBD15D9408E8DC4439C9510D2BC2538D59F99B7515", "44A3BC5DABBA84B9E1D64A61350F2FBB26EC70D1393B699CA2BB2CA1A0679A01"], "Flags": 0, "RootIndex": "C6F93F7D81C5B659EA2BF067FA390CDE1A5D5084486FA0B1A7EAEF77937D54D8", "Owner": "rf8kg7r5Fc8cCszGdD2jeUZt2FrgQd76BS"}, {"OwnerCount": 0, "index": "C9E579804A293533C8EBF937E03B218C93DC0759BC7B981317BCBF7803A53E6A", "Account": "rnxyvrF2mUhK6HubgPxUfWExERAwZXMhVL", "PreviousTxnID": "189228C5636A8B16F1A811F0533953E71F2B8B1009D343888B72A23A83FAFB3F", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 95, "Balance": "300000000"}, {"OwnerCount": 0, "index": "CA3461C9D58B392B65F79DDF2123CD044BF6F5A509C84BC270095DA7E7C05212", "Account": "rKMhQik9qdyq8TDCYT92xPPRnFtuq8wvQK", "PreviousTxnID": "5014D1C3606B264324998AB36403FFD4A70F1E942F7586EA217DBE9336F962DA", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 262, "Balance": "50000000000000"}, {"OwnerCount": 8, "index": "CAD1774019DB0172B149BBAEAF746B8A0D3F082A38F6DC0869CFC5F4C166E053", "Account": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm", "PreviousTxnID": "D890893A91DC745BE221820C17EC3E8AF4CC119A93AA8AB8FD42C16D264521FA", "Sequence": 9, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 4174, "Balance": "8249999920"}, {"HighNode": "0000000000000000", "index": "CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B", "LedgerEntryType": "RippleState", "PreviousTxnID": "7957DD6BE9323DED70BAC7C43761E0EAAC4C6F5BA7DFC59CFE95100CA9B0B0D4", "HighLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "0", "issuer": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy"}, "Flags": 131072, "PreviousTxnLgrSeq": 26713, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "CB6B7AB6301045878E53C56A40E95DE910CC2D3CCE35F1984BDA2142E786C23B", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000002", "Indexes": ["CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF", "10BB331A6A794396B33DF7B975A57A3842AB68F3BC6C3B02928BA5399AAC9C8F"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"HighNode": "0000000000000000", "index": "CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488", "LedgerEntryType": "RippleState", "PreviousTxnID": "3B76C257B746C298DCD945AD900B05A17BA44C74E298A1B70C75A89AD588D006", "HighLimit": {"currency": "USD", "value": "1", "issuer": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "1", "issuer": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH"}, "Flags": 196608, "PreviousTxnLgrSeq": 17759, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "CD3BF1524B464476BF3D5348DB2E1DA8870FBC1D160F25BC3F55BCE7742617CF", "Account": "rMNKtUq5Z5TB5C4MJnwzUZ3YP7qmMGog3y", "PreviousTxnID": "D156CB5A5736E5B4383DEF61D4E4F934442077A4B4E291903A4B082E7E48FD42", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3761, "Balance": "10000000000000"}, {"index": "CEA57059DECE8D5C6FC9FDB9ACE44278EC74A075CE8A5A7522B2F85F669245FF", "LedgerEntryType": "RippleState", "PreviousTxnID": "3319CF0238A16958E2F5B26CFB90B05A2B16A290B933F105F66929DA16A09E6E", "HighLimit": {"currency": "BTC", "value": "1", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "BTC", "value": "1", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 196608, "PreviousTxnLgrSeq": 2953, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB", "LedgerEntryType": "RippleState", "PreviousTxnID": "DEEB01071843D07939A19BD97128604F2B788C744D01AF82D631DF5023F4C7C0", "HighLimit": {"currency": "BTC", "value": "1", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "BTC", "value": "0", "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, "Flags": 131072, "PreviousTxnLgrSeq": 234, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000005", "IndexNext": "0000000000000001", "Indexes": ["AC2875C846CBD37CAF8409A623F3AA7D62916A0E043E02C909C9EF3A7B06F8CF", "142355A88F0729A5014DB835C24DA05F062293A439151A0BE9ACB80F20B2CDC5"], "Flags": 0, "RootIndex": "D0CAC45692858D395B16D52A0B44ADCB7EF178617C05BAE3C36FF5574BA012C3", "Owner": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, {"index": "D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52", "LedgerEntryType": "Offer", "PreviousTxnID": "58BF1AC5F8ADDB088913149E0440EF41430F2E62A0BE200674F6F5F28979F1F8", "BookNode": "0000000000000000", "TakerPays": {"currency": "BTC", "value": "7.5", "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3"}, "Sequence": 6, "Account": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx", "OwnerNode": "0000000000000001", "BookDirectory": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", "TakerGets": {"currency": "USD", "value": "100", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "Flags": 0, "PreviousTxnLgrSeq": 10084}, {"OwnerCount": 0, "index": "D20CBC7D5DA3644EC561E45B3D336331784F5A63201CFBFCC62A0CEE7F8BAC46", "Account": "rEe6VvCzzKU1ib9waLknXvEXywVjjUWFDN", "PreviousTxnID": "7C63981F982844B6ABB31F0FE858CBE7528CA47BC76658855FE44A4ECEECEDD4", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 2967, "Balance": "10600000000"}, {"index": "D24FA4A3422BA1E91109B83D2A7545FC6369EAC13E7F4673F464BBBBC77AB2BE", "LedgerEntryType": "RippleState", "PreviousTxnID": "9C88635839AF1B4142FC8A03E733DCB62ADAE7D2407F13365A05B94A5A153D59", "HighLimit": {"currency": "USD", "value": "0", "issuer": "rHXS898sKZX6RY3WYPo5hW6UGnpBCnDzfr"}, "LowLimit": {"currency": "USD", "value": "10", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "Flags": 65536, "PreviousTxnLgrSeq": 268, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "D350820B8600CB920A94752BBE3EABA576DA9114BDD1A5172F456DEDAADFD588", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000003", "IndexNext": "0000000000000004", "Indexes": ["85469362B15032D6213572E63175C87C321601E1DDBB588C9CBD08CDB3F276AC", "2F1F54C50845EBD434A06639160F77CEB7C99C0606A3624F64C3678A9129F08D"], "Flags": 0, "RootIndex": "433FE9D880C1A0D1901BAE63BB255312119826D6ADF8571F04736C409A77B840", "Owner": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, {"index": "D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D", "LedgerEntryType": "DirectoryNode", "Indexes": ["C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C"], "Flags": 0, "RootIndex": "D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D", "Owner": "rDJvoVn8PyhwvHAWuTdtqkH4fuMLoWsZKG"}, {"index": "D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40", "LedgerEntryType": "DirectoryNode", "Indexes": ["9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09"], "Flags": 0, "RootIndex": "D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40", "Owner": "rLqQ62u51KR3TFcewbEbJTQbCuTqsg82EY"}, {"OwnerCount": 1, "index": "D5C0394AE3F32F2AFD3944D3DAF098B45E3E9AA4E1B79705AA7B0D8B8ADE9A09", "Account": "rPcHbQ26o4Xrwb2bu5gLc3gWUsS52yx1pG", "PreviousTxnID": "AF65070E6664E619813067C49BC64CBDB9A7543042DA7741DA5446859BDD782C", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 10065, "Balance": "10099999990"}, {"index": "D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204", "LedgerEntryType": "DirectoryNode", "Indexes": ["8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C", "C683B5BB928F025F1E860D9D69D6C554C2202DE0D45877ADB3077DA4CB9E125C"], "Flags": 0, "RootIndex": "D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204", "Owner": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"}, {"OwnerCount": 0, "index": "DA4F3B321AAE1BF8D86DF8B38D2FFC299B1661E98AADFE84827E5E9F91BF7F92", "Account": "rBrspBLnwBRXEeszToxcDUHs4GbWtGrhdE", "PreviousTxnID": "972A6B3107761A267F54B48A337B5145BC59A565E9E36E970525877CB053678C", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 101, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "DAF4D79959E97DFCFEF629F8FFFCD9B207FAD2FBCBA50C6C6A9F93DE5F5381FD", "Account": "rLebJGqYffmcTbFwBzWJRiv5fo2ccmmvsB", "PreviousTxnID": "458F1F8CC965A0677BC7B0761AFE57D47845B501B9E5293C49736A100E2E9292", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 14190, "Balance": "10000000000"}, {"OwnerCount": 0, "index": "DBF319518AA2F60C4D5C2A551C684B5FC6545AD9D0828B18B0F98E635A83FDEF", "Account": "rPWyiv5PXyKWitakbaKne4cnCQppRvDc5B", "PreviousTxnID": "2DA2B33FFAE8CDCC011C86E52904A665256AD3F9D0A1D85A6637C461925E3FB0", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 102, "Balance": "10000000000"}, {"index": "DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95", "LedgerEntryType": "DirectoryNode", "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"], "Flags": 0, "RootIndex": "DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95", "Owner": "rLiCWKQNUs8CQ81m2rBoFjshuVJviSRoaJ"}, {"OwnerCount": 0, "index": "DD569B66956B3A5E77342842310B1AD46A630D7619270DB590E57E1CAA715254", "Account": "rUzSNPtxrmeSTpnjsvaTuQvF2SQFPFSvLn", "PreviousTxnID": "8D247FF7A5195A888A36C0CA56DD2B70C2AB5BBD04F3045CD3B9CAF34BBF8143", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 87, "Balance": "1000000000000000"}, {"OwnerCount": 1, "index": "E0D7BDE68B468FF0B8D948FD865576517DA987569833A05374ADB9A72E870A06", "Account": "r3PDtZSa5LiYp1Ysn1vMuMzB59RzV3W9QH", "PreviousTxnID": "821706FDED3BED3D146CED9896683E2D4131B0D1238F44ED53C5C40E07DD659A", "Sequence": 9, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 17810, "Balance": "10026999920"}, {"OwnerCount": 0, "index": "E0F113B5599EA1063441FDB168DF3C5B3007006616B22C00B6FA2909410F0F05", "Account": "rMNzmamctjEDqgwyBKbYfEzHbMeSkLQfaS", "PreviousTxnID": "81066DCA6C77C2C8A2F39EB03DCC720652AA0FA0EDF6E99A92202ACB5414A1B5", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 104, "Balance": "20000000000"}, {"OwnerCount": 0, "index": "E1367C3A60F307BD7DBC25AF597CF263F1FB9EF53AB99BEDE400DA036D7B3EC0", "Account": "rHWKKygGWPon9WSj4SzTH7vS4ict1QWKo9", "PreviousTxnID": "711B2ED1072F60EA84B05BA99C594D56BB10701BD83BBA68EC0D55CD4C4FDC50", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 105, "Balance": "10000000000"}, {"index": "E136A6E4D945A85C05C644B9420C2FB182ACD0E15086757A4EC609202ABDC469", "LedgerEntryType": "RippleState", "PreviousTxnID": "AED7737870A63125C3255323624846181E422B8E6E5CB7F1740EB364B89AC1F0", "HighLimit": {"currency": "CAD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "CAD", "value": "0", "issuer": "rGLUu9LfpKyZyeTtSRXpU15e2FfrdvtADa"}, "Flags": 131072, "PreviousTxnLgrSeq": 227, "Balance": {"currency": "CAD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "E1A4C98A789F35BA9947BD4920CDA9BF2C1A74E831208F7616FA485D5F016714", "LedgerEntryType": "RippleState", "PreviousTxnID": "EB662576200A6F79B29F58B4C08605A391151199A551D0B2A7231013FD722D9C", "HighLimit": {"currency": "USD", "value": "10", "issuer": "rPgrEG6nMMwAM1VbTumL23dnEX4UmeUHk7"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6"}, "Flags": 131072, "PreviousTxnLgrSeq": 8895, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000001", "IndexNext": "0000000000000001", "Indexes": ["9C3784EB4832563535522198D9D14E91D2760644174813689EE6A03AD43C6E4C", "ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649"], "Flags": 0, "RootIndex": "E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29", "Owner": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, {"OwnerCount": 0, "index": "E24CA7AA2986E315B2040BE02BA1675AA7C62EC84B89D578E4AD41BCB70792FE", "Account": "rLp9pST1aAndXTeUYFkpLtkmtZVNcMs2Hc", "PreviousTxnID": "6F4331FB011A35EDBD5B17BF5D09764E9F5AA21984F7DDEB1C79E72E684BAD35", "Sequence": 15, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23085, "Balance": "8287999860"}, {"OwnerCount": 0, "index": "E26A66EC405C7904BECB1B9F9F36D48EFDA028D359BAE5C9E09930A0D0E0670A", "Account": "rBqCdAqw7jLH3EDx1Gkw4gUAbFqF7Gap4c", "PreviousTxnID": "94057E3093D47E7A5286F1ABBF11780FBE644AE9DE530C15B1EDCF512AAC42EA", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 106, "Balance": "2000000000"}, {"index": "E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED", "LedgerEntryType": "DirectoryNode", "Indexes": ["65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"], "Flags": 0, "RootIndex": "E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED", "Owner": "rJ6VE6L87yaVmdyxa9jZFXSAdEFSoTGPbE"}, {"OwnerCount": 0, "index": "E36E1BF26FCC532262D72FDC0BC45DC17DFBE1F94F4EA95AF3A7F999E99B7CC5", "Account": "rGwUWgN5BEg3QGNY3RX2HfYowjUTZdid3E", "PreviousTxnID": "DE5907B8533B8D3C40D1BA268D54E34D74F03348DAB54837F0000F9182A6BE03", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 17155, "Balance": "10000000000"}, {"index": "E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6", "LedgerEntryType": "RippleState", "PreviousTxnID": "981BC0B7C0BD6686453A9DC15A98E32E77834B55CA5D177916C03A09F8B89639", "HighLimit": {"currency": "BTC", "value": "0", "issuer": "rBJwwXADHqbwsp6yhrqoyt2nmFx9FB83Th"}, "LowLimit": {"currency": "BTC", "value": "25", "issuer": "rnziParaNb8nsU4aruQdwYE3j5jUcqjzFm"}, "Flags": 65536, "PreviousTxnLgrSeq": 147, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "E4C4F5D8E10B695980CCA35DCCB9D9A04ADF45A699353445FD85ABB0037E95BC", "Account": "rNRG8YAUqgsqoE5HSNPHTYqEGoKzMd7DJr", "PreviousTxnID": "48632A870D75AD35F30022A6E1406DE55D7807ACED8376BB9B6A99FCAD7242C6", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3734, "Balance": "1000000000000000"}, {"HighNode": "0000000000000000", "index": "E87ABEF8B6CD737F3972FC7C0E633F85848A195E29401F50D9EF1087792EC610", "LedgerEntryType": "RippleState", "PreviousTxnID": "782876BCD6E5A40816DA9C300D06BF1736E7938CDF72C3A5F65AD50EABB956EB", "HighLimit": {"currency": "USD", "value": "1000", "issuer": "rB5TihdPbKgMrkFqrqUC3yLdE8hhv4BdeY"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "0", "issuer": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV"}, "Flags": 131072, "PreviousTxnLgrSeq": 29191, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "EA13D588EF30B16968191F829759D4421560AECBB813DC697755D5F7B097F2FB", "Account": "r8TR1AeB1RDQFabM6i8UoFsRF5basqoHJ", "PreviousTxnID": "F85D6E7FBA9FEB513B4A3FD80A5EB8A7245A0D93F3BDB86DC0D00CAD928C7F20", "Sequence": 3, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 150, "Balance": "79997608218999980"}, {"OwnerCount": 0, "index": "EC271FCA6E852325AECA6FA006281197BD6F22F0D2CF8C12F1D202C6D4BEED65", "Account": "rpWrw1a5rQjZba1VySn2jichsPuB4GVnoC", "PreviousTxnID": "EC842B3F83593784A904FB1C43FF0677DEE59399E11286D426A52A1976856AB8", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 3757, "Balance": "20000000000000"}, {"index": "ED54FC8E215EFAE23E396D27099387D6687BDB63F7F282111BB0F567F8D1D649", "LedgerEntryType": "RippleState", "PreviousTxnID": "F859E3DE1B110C73CABAB950FEB0D734DE68B3E6028AC831A5E3EA65271953FD", "HighLimit": {"currency": "CAD", "value": "10", "issuer": "rMYBVwiY95QyUnCeuBQA1D47kXA9zuoBui"}, "LowLimit": {"currency": "CAD", "value": "0", "issuer": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, "Flags": 131072, "PreviousTxnLgrSeq": 233, "Balance": {"currency": "CAD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "EE6239275CA2A4C1C01DB5B9E120B4C4C90C75632E2D7F524B14D7C66C12A38D", "Account": "rJQx7JpaHUBgk7C56T2MeEAu1JZcxDekgH", "PreviousTxnID": "7FA58DF8A1A2D639D65AA889553EE19C44C770B33859E53BD7CE18272A81C06B", "Sequence": 2, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 23095, "Balance": "9799999990"}, {"OwnerCount": 0, "index": "EEA859A9C2C1E4ABB134AF2B2139F0428A4621135AF3FE116741430F8F065B8E", "Account": "rBnmYPdB5ModK8NyDUad1mxuQjHVp6tAbk", "PreviousTxnID": "898B68513DA6B1680A114474E0327C076FDA4F1280721657FF639AAAD60669B1", "Sequence": 5, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 7919, "Balance": "9999999960"}, {"OwnerCount": 0, "index": "F081FD465FFE6BC322274F2CC89E14FE3C8E1CB41A877AC6E348CBBBB5FFAA1A", "Account": "rGqM8S5GnGwiEdZ6QRm1GThiTAa89tS86E", "PreviousTxnID": "7E9190820F32DF1CAE924C9257B610F46003794229030F314E2075E4101B09DF", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26715, "Balance": "10000000000000"}, {"index": "F0A39AF318742B6E1ADC02A5ED3380680445AAD116468DC0CCCE21D34617AE45", "LedgerEntryType": "DirectoryNode", "IndexPrevious": "0000000000000002", "IndexNext": "0000000000000003", "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"], "Flags": 0, "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", "Owner": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, {"OwnerCount": 0, "index": "F0F957EC17434D364BF0D48AC7B10065BFCFC4FEFC54265C2C5898C0450D85D9", "Account": "rJZCJ2jcohxtTzssBPeTGHLstMNEj5D96n", "PreviousTxnID": "60CA81BF12767F5E9159DFDA983525E2B45776567ACA83D19FDBC28353F25D9F", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 110, "Balance": "10600000000"}, {"OwnerCount": 0, "index": "F2201CF519F4978896F8CAC11127C12039CF46E14FE59FF40588E9A8ACA8A370", "Account": "rJYMACXJd1eejwzZA53VncYmiK2kZSBxyD", "PreviousTxnID": "62EFA3F14D0DE4136D444B65371C6EFE842C9B4782437D6DE81784329E040012", "Sequence": 17, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26946, "Balance": "5919999799999840"}, {"index": "F3AC72A7F800A27E820B4647451A2A45C287CFF044AE4D85830EBE79848905E6", "LedgerEntryType": "DirectoryNode", "Indexes": ["CF1F8DF231AE06AE9D55C3B3367A9ED1E430FC0A6CA193EEA559C3ADF0A634FB", "353D47B7B033F5EC041BD4E367437C9EDA160D14BFBC3EF43B3335259AA5D5D5"], "Flags": 0, "RootIndex": "E1DE1C68686261E5D06A3C89B78B4C254366AE9F166B56ED02DA545FF1954B29", "Owner": "rJ51FBSh6hXSUkFdMxwmtcorjx9izrC1yj"}, {"OwnerCount": 0, "index": "F540F7747EBCE3B5BE3FD25BF9AE21DF3495E61121E792051FB9D07F637C4C76", "Account": "rLBwqTG5ErivwPXGaAGLQzJ2rr7ZTpjMx7", "PreviousTxnID": "AFD4F8E6EAB0CBE97A842576D6CEB158A54B209B6C28E5106E8445F0C599EF53", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26721, "Balance": "10000000000000"}, {"OwnerCount": 0, "index": "F56EC170A2F2F3B3A001D370C300AB7BD998393DB7F84FD008999CBFAB9EF4DE", "Account": "rhuCtPvq6jJeYF1S7aEmAcE5iM8LstSrrP", "PreviousTxnID": "256238C32D954F1DBE93C7FDF50D24226238DB495ED6A3205803915A27A138C2", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 26723, "Balance": "10000000000000"}, {"HighNode": "0000000000000000", "index": "F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A", "LedgerEntryType": "RippleState", "PreviousTxnID": "F9ED6C634DE09655F9F7C8E088B9157BB785571CAA4305A6DD7BC876BD57671D", "HighLimit": {"currency": "USD", "value": "20", "issuer": "rwCYkXihZPm7dWuPCXoS3WXap7vbnZ8uzB"}, "LowNode": "0000000000000000", "LowLimit": {"currency": "USD", "value": "20", "issuer": "rshceBo6ftSVYo8h5uNPzRWbdqk4W6g9va"}, "Flags": 196608, "PreviousTxnLgrSeq": 23260, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"index": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", "LedgerEntryType": "DirectoryNode", "TakerGetsIssuer": "58C742CF55C456DE367686CB9CED83750BD24979", "TakerPaysCurrency": "0000000000000000000000004254430000000000", "ExchangeRate": "531AA535D3D0C000", "Indexes": ["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52"], "TakerGetsCurrency": "0000000000000000000000005553440000000000", "Flags": 0, "RootIndex": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", "TakerPaysIssuer": "E8ACFC6B5EF4EA0601241525375162F43C2FF285"}, {"index": "F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E", "LedgerEntryType": "DirectoryNode", "Indexes": ["17B72685E9FBEFE18E0C1E8F07000E1B345A18ECD2D2BE9B27E69045248EF036", "F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836"], "Flags": 0, "RootIndex": "F8327E8AFE1AF09A5B13D6384F055CCC475A5757308AA243A7A1A2CB00A6CB7E", "Owner": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3"}, {"index": "F8608765CAD8DCA6FD3A5D417D008DB687732804BDABA32737DCB527DAC70B06", "LedgerEntryType": "RippleState", "PreviousTxnID": "8D7F42ED0621FBCFAE55CC6F2A9403A2AFB205708CCBA3109BB61DB8DDA261B4", "HighLimit": {"currency": "USD", "value": "7", "issuer": "rJRyob8LPaA3twGEQDPU2gXevWhpSgD8S6"}, "LowLimit": {"currency": "USD", "value": "0", "issuer": "rBKPS4oLSaV2KVVuHH8EpQqMGgGefGFQs7"}, "Flags": 131072, "PreviousTxnLgrSeq": 8901, "Balance": {"currency": "USD", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "F8FCC7CB74B33ABFDE9DF1A9EF57E37BB4C899848E64C51670ABFF540BF5091A", "Account": "r4HabKLiKYtCbwnGG3Ev4HqncmXWsCtF9F", "PreviousTxnID": "6B10BDDABEB8C1D5F8E0CD7A54C08FEAD32260BDFFAC9692EE79B95E6E022A27", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 229, "Balance": "10000000000000"}, {"index": "F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3", "LedgerEntryType": "DirectoryNode", "Indexes": ["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B"], "Flags": 0, "RootIndex": "F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3", "Owner": "rBY8EZDiCNMjjhrC7SCfaGr2PzGWtSntNy"}, {"index": "F9830A2F94E5B611F6364893235E6D7F3521A8DE8AF936687B40C555E1282836", "LedgerEntryType": "RippleState", "PreviousTxnID": "FE8A112AD2C27440245F120388EB00C8208833B3737A6DE6CB8D3AF3840ECEAD", "HighLimit": {"currency": "BTC", "value": "50", "issuer": "r4DGz8SxHXLaqsA9M2oocXsrty6BMSQvw3"}, "LowLimit": {"currency": "BTC", "value": "50", "issuer": "r9aRw8p1jHtR9XhDAE22TjtM7PdupNXhkx"}, "Flags": 196608, "PreviousTxnLgrSeq": 10050, "Balance": {"currency": "BTC", "value": "0", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji"}}, {"OwnerCount": 0, "index": "FD29ED56F11AB5951A73EBC80F6349C18BEADB88D278CAE48C6404CEDF3847B7", "Account": "rKHD6m92oprEVdi1FwGfTzxbgKt8eQfUYL", "PreviousTxnID": "F1414803262CA34694E60B7D1EFBD6F7400966BFE1C7EEF2C564599730D792CC", "Sequence": 1, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 111, "Balance": "10000000000"}, {"index": "FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE", "LedgerEntryType": "DirectoryNode", "Indexes": ["8A2B79E75D1012CB89DBF27A0CE4750B398C353D679F5C1E22F8FAC6F87AE13C", "CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"], "Flags": 0, "RootIndex": "FD46CE0EEBB1C52878ECA415AB73DF378CE04452AE67873B8BEF0356F89B35CE", "Owner": "rD1jovjQeEpvaDwn9wKaYokkXXrqo4D23x"}, {"OwnerCount": 2, "index": "FE0F0FA0BFF65D7A239700B3446BD43D3CF5069C69E57F2CDACE69B5443642EE", "Account": "rhxbkK9jGqPVLZSWPvCEmmf15xHBfJfCEy", "PreviousTxnID": "0A7E6FD67D2EB7B7AD0E10DAC33B595B26E8E0DFD9F06183FB430A46779B6634", "Sequence": 9, "LedgerEntryType": "AccountRoot", "Flags": 0, "PreviousTxnLgrSeq": 17842, "Balance": "3499999920"}, {"index": "FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C", "LedgerEntryType": "DirectoryNode", "Indexes": ["B15AB125CC1D8CACDC22B76E5AABF74A6BB620A5C223BE81ECB71EF17F1C3489", "B82A83B063FF08369F9BDEDC73074352FE37733E8373F6EDBFFC872489B57D93"], "Flags": 0, "RootIndex": "FFA9A0BE95FAC1E9843396C0791EADA3CBFEE551D900BA126E4AD107EC71008C", "Owner": "rnGTwRTacmqZZBwPB6rh3H1W4GoTZCQtNA"}], "closed": true, "parent_hash": "CDFD329A6E418591770695D0FB859113641AC20CB3A1F39AB3D721CEA2685EFE", "totalCoins": "99999999999996310", "accepted": true, "account_hash": "1B536BFBDFC92B9550F2F63D32F7269D451885FFB2CAB374332EBC2D663320E0", "total_coins": "99999999999996310", "close_time_human": "2013-Jan-02 16:25:30"} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/negative-unl.json b/packages/ripple-binary-codec/test/fixtures/negative-unl.json new file mode 100644 index 00000000..03817cd2 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/negative-unl.json @@ -0,0 +1,12 @@ +{ + "binary": "120066240000000026000003006840000000000000007300701321ED9D593004CC501CACD261BD8E31E863F2B3F6CA69505E7FD54DA8F5690BEFB7AE8114000000000000000000000000000000000000000000101101", + "tx": { + "UNLModifyDisabling": 1, + "LedgerSequence": 768, + "UNLModifyValidator": "ED9D593004CC501CACD261BD8E31E863F2B3F6CA69505E7FD54DA8F5690BEFB7AE", + "TransactionType": "UNLModify", + "Account": "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + "Sequence": 0, + "Fee": "0", + "SigningPubKey": ""} +} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-binary.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-binary.json new file mode 100644 index 00000000..e6d86042 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-binary.json @@ -0,0 +1 @@ +"12000F5016C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA61986140000000000F42406240000000000F4240712132D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A764630440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B" diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-tx.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-tx.json new file mode 100644 index 00000000..7c6a165d --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-claim-tx.json @@ -0,0 +1,8 @@ +{ + "TransactionType": "PaymentChannelClaim", + "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", + "Balance": "1000000", + "Amount": "1000000", + "Signature": "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA3CD7B9B", + "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A" +} diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-create-binary.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-create-binary.json new file mode 100644 index 00000000..24ac25df --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-create-binary.json @@ -0,0 +1 @@ +"12000D2300002DE32E00005BB820241FC78D66202700015180614000000000002710712132D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A81144B4E9C06F24296074F7BC48F92A97916C6DC5EA98314204288D2E47F8EF6C99BCC457966320D12409711" diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-create-tx.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-create-tx.json new file mode 100644 index 00000000..c886fdee --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-create-tx.json @@ -0,0 +1,11 @@ +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "PaymentChannelCreate", + "Amount": "10000", + "Destination": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW", + "SettleDelay": 86400, + "PublicKey": "32D2471DB72B27E3310F355BB33E339BF26F8392D5A93D3BC0FC3B566612DA0F0A", + "CancelAfter": 533171558, + "DestinationTag": 23480, + "SourceTag": 11747 +} diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-binary.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-binary.json new file mode 100644 index 00000000..4c813e12 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-binary.json @@ -0,0 +1 @@ +"12000E2A206023E65016C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198614000000000030D4081144B4E9C06F24296074F7BC48F92A97916C6DC5EA9" diff --git a/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-tx.json b/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-tx.json new file mode 100644 index 00000000..5fb94b7a --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/payment-channel-fund-tx.json @@ -0,0 +1,7 @@ +{ + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "TransactionType": "PaymentChannelFund", + "Channel": "C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198", + "Amount": "200000", + "Expiration": 543171558 +} diff --git a/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-binary.json b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-binary.json new file mode 100644 index 00000000..5875683b --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-binary.json @@ -0,0 +1 @@ +"12000C22800000002400003B49201B01724E3520230000000368400000000000000B73210315B15964B3704B171E860DE1FC914D283395EE825C8546AEEBF0D24A5802BBC574463044022069FC98D0BC32F510D4F94ECC726613E957D290050E428DD86EDA2C2515A1732D02207064EF085437B3F12A744AC6528D9E0C59FAA5A9FE903DF3639D2F09B522175F81144901F90028CEAD8AF389AC6FA0F83643DB67E95BF4EB1300018114EA97C2F7C88AE5735A59811F6F89E825B478982FE1EB1300018114B4AC72AF6C0EE5A1B8C94A3C20BE09599BBB57EEE1EB1300018114FA7420343B9EA7C9B294C3AF802AE80103F0B11BE1F1" diff --git a/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-meta-binary.json b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-meta-binary.json new file mode 100644 index 00000000..3bbbd67e --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx-meta-binary.json @@ -0,0 +1 @@ +"201C00000008F8E51100612501724363554CD30C2526418A76ABED74713DF144B19F1B29BD8F7BC9EADCF16D33D7EC83D8560DAF42BEE40F0EEFCFD8D54E81ECACD9371D281CDD9B77384FCDAF0E16560A44E62400003B4962400000010F99515AE1E722000000002400003B4A2D0000001962400000010F99514F81144901F90028CEAD8AF389AC6FA0F83643DB67E95B8814CAA26A38FC8F4E5D6D142432B0D7D94A2880DDDFE1E1E51100535616F6AEEC6B85C9658B4BF604671677B7A7B2FAAFDB2FA5A0B72CBB49CAE80924E72200000000202300000003202600000000340000000000000000F4EB1300018114B4AC72AF6C0EE5A1B8C94A3C20BE09599BBB57EEE1EB1300018114EA97C2F7C88AE5735A59811F6F89E825B478982FE1EB1300018114FA7420343B9EA7C9B294C3AF802AE80103F0B11BE1F1E1E1F1031000" diff --git a/packages/ripple-binary-codec/test/fixtures/signerlistset-tx.json b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx.json new file mode 100644 index 00000000..34286151 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/signerlistset-tx.json @@ -0,0 +1,94 @@ +{ + "Account": "rfCp6hiUS4qqN1i4hTyX4ogA49MEbXgCau", + "Fee": "11", + "Flags": 2147483648, + "LastLedgerSequence": 24268341, + "Sequence": 15177, + "SignerEntries": [ + { + "SignerEntry": { + "Account": "r4PQv7BCpp4SAJx3isNpQM8T2BuGrMQs5U", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "rH7KDR67MZR7LDV7gesmEMXtaqU3FaK7Lr", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "rPqHsX34XApKSfE4UxKbqVXb3WRmmgMY2u", + "SignerWeight": 1 + } + } + ], + "SignerQuorum": 3, + "SigningPubKey": "0315B15964B3704B171E860DE1FC914D283395EE825C8546AEEBF0D24A5802BBC5", + "TransactionType": "SignerListSet", + "TxnSignature": "3044022069FC98D0BC32F510D4F94ECC726613E957D290050E428DD86EDA2C2515A1732D02207064EF085437B3F12A744AC6528D9E0C59FAA5A9FE903DF3639D2F09B522175F", + "date": 527847001, + "hash": "98C33CABFAE9F830CE842C260E34C25B0F987EE691941C0C9225AD476871B73D", + "inLedger": 24268339, + "ledger_index": 24268339, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rfCp6hiUS4qqN1i4hTyX4ogA49MEbXgCau", + "Balance": "4556673359", + "Flags": 0, + "OwnerCount": 25, + "RegularKey": "rK7ShY9CeDMBHLNFSMtTrSAUd9uzwcymcL", + "Sequence": 15178 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "0DAF42BEE40F0EEFCFD8D54E81ECACD9371D281CDD9B77384FCDAF0E16560A44", + "PreviousFields": { + "Balance": "4556673370", + "Sequence": 15177 + }, + "PreviousTxnID": "4CD30C2526418A76ABED74713DF144B19F1B29BD8F7BC9EADCF16D33D7EC83D8", + "PreviousTxnLgrSeq": 24265571 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "OwnerNode": "0000000000000000", + "SignerEntries": [ + { + "SignerEntry": { + "Account": "rH7KDR67MZR7LDV7gesmEMXtaqU3FaK7Lr", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "r4PQv7BCpp4SAJx3isNpQM8T2BuGrMQs5U", + "SignerWeight": 1 + } + }, + { + "SignerEntry": { + "Account": "rPqHsX34XApKSfE4UxKbqVXb3WRmmgMY2u", + "SignerWeight": 1 + } + } + ], + "SignerListID": 0, + "SignerQuorum": 3 + }, + "LedgerEntryType": "SignerList", + "LedgerIndex": "16F6AEEC6B85C9658B4BF604671677B7A7B2FAAFDB2FA5A0B72CBB49CAE80924" + } + } + ], + "TransactionIndex": 8, + "TransactionResult": "tesSUCCESS" + }, + "validated": true +} diff --git a/packages/ripple-binary-codec/test/fixtures/ticket-create-binary.json b/packages/ripple-binary-codec/test/fixtures/ticket-create-binary.json new file mode 100644 index 00000000..bde52025 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/ticket-create-binary.json @@ -0,0 +1 @@ +"12000A240000000E2028000000016840000000000027108114D5024F157225CA9F8F4C73094D61A8FDD746E0DB" diff --git a/packages/ripple-binary-codec/test/fixtures/ticket-create-tx.json b/packages/ripple-binary-codec/test/fixtures/ticket-create-tx.json new file mode 100644 index 00000000..20c7ff9d --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/ticket-create-tx.json @@ -0,0 +1,7 @@ +{ + "TransactionType": "TicketCreate", + "TicketCount": 1, + "Account": "rLRH6HciuPv5rQBNFBYH1iPPAuVFERtNXZ", + "Sequence": 14, + "Fee": "10000" +} diff --git a/packages/ripple-binary-codec/test/fixtures/x-codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/x-codec-fixtures.json new file mode 100644 index 00000000..7012e4b5 --- /dev/null +++ b/packages/ripple-binary-codec/test/fixtures/x-codec-fixtures.json @@ -0,0 +1,188 @@ +{ + "transactions": [{ + "rjson": { + "Account": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", + "Destination": "rLQBHVhFnaC5gLEkgr6HgBJJ3bgeZHg9cj", + "TransactionType": "Payment", + "TxnSignature": "3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639", + "SigningPubKey": "034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E", + "Amount": "10000000000", + "DestinationTag": 1010, + "SourceTag": 84854, + "Fee": "10", + "Flags": 0, + "Sequence": 62 + }, + "xjson": { + "Account": "X7tFPvjMH7nDxP8nTGkeeggcUpCZj8UbyT2QoiRHGDfjqrB", + "Destination": "XVYmGpJqHS95ir411XvanwY1xt5Z2314WsamHPVgUNABUGV", + "TransactionType": "Payment", + "TxnSignature": "3045022022EB32AECEF7C644C891C19F87966DF9C62B1F34BABA6BE774325E4BB8E2DD62022100A51437898C28C2B297112DF8131F2BB39EA5FE613487DDD611525F1796264639", + "SigningPubKey": "034AADB09CFF4A4804073701EC53C3510CDC95917C2BB0150FB742D0C66E6CEE9E", + "Amount": "10000000000", + "Fee": "10", + "Flags": 0, + "Sequence": 62 + } + }, + { + "rjson": { + "Account": "r4DymtkgUAh2wqRxVfdd3Xtswzim6eC6c5", + "Amount": "199000000", + "Destination": "rsekGH9p9neiPxym2TMJhqaCzHFuokenTU", + "DestinationTag": 3663729509, + "Fee": "6335", + "Flags": 2147483648, + "LastLedgerSequence": 57313352, + "Sequence": 105791, + "SigningPubKey": "02053A627976CE1157461336AC65290EC1571CAAD1B327339980F7BF65EF776F83", + "TransactionType": "Payment", + "TxnSignature": "30440220086D3330CD6CE01D891A26BA0355D8D5A5D28A5C9A1D0C5E06E321C81A02318A0220027C3F6606E41FEA35103EDE5224CC489B6514ACFE27543185B0419DD02E301C" + }, + "xjson": { + "Account": "r4DymtkgUAh2wqRxVfdd3Xtswzim6eC6c5", + "Amount": "199000000", + "Destination": "X7cBoj6a5xSEfPCr6AStN9YPhbMAA2yaN2XYWwRJKAKb3y5", + "Fee": "6335", + "Flags": 2147483648, + "LastLedgerSequence": 57313352, + "Sequence": 105791, + "SigningPubKey": "02053A627976CE1157461336AC65290EC1571CAAD1B327339980F7BF65EF776F83", + "TransactionType": "Payment", + "TxnSignature": "30440220086D3330CD6CE01D891A26BA0355D8D5A5D28A5C9A1D0C5E06E321C81A02318A0220027C3F6606E41FEA35103EDE5224CC489B6514ACFE27543185B0419DD02E301C" + } + }, + { + "rjson": { + "Account": "rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv", + "Amount": "105302107", + "Destination": "r33hypJXDs47LVpmvta7hMW9pR8DYeBtkW", + "DestinationTag": 1658156118, + "Fee": "60000", + "Flags": 2147483648, + "LastLedgerSequence": 57313566, + "Sequence": 1113196, + "SigningPubKey": "03D847C2DBED3ABF0453F71DCD7641989136277218DF516AD49519C9693F32727E", + "TransactionType": "Payment", + "TxnSignature": "3045022100FCA10FBAC65EA60C115A970CD52E6A526B1F9DDB6C4F843DA3DE7A97DFF9492D022037824D0FC6F663FB08BE0F2812CBADE1F61836528D44945FC37F10CC03215111" + }, + "xjson": { + "Account": "rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv", + "Amount": "105302107", + "Destination": "X7ikFY5asEwp6ikt2AJdTfBLALEs5JN35kkeqKVeT1GdvY1", + "Fee": "60000", + "Flags": 2147483648, + "LastLedgerSequence": 57313566, + "Sequence": 1113196, + "SigningPubKey": "03D847C2DBED3ABF0453F71DCD7641989136277218DF516AD49519C9693F32727E", + "TransactionType": "Payment", + "TxnSignature": "3045022100FCA10FBAC65EA60C115A970CD52E6A526B1F9DDB6C4F843DA3DE7A97DFF9492D022037824D0FC6F663FB08BE0F2812CBADE1F61836528D44945FC37F10CC03215111" + } + }, + { + "rjson": { + "Account": "rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv", + "Amount": "3899911571", + "Destination": "rU2mEJSLqBRkYLVTv55rFTgQajkLTnT6mA", + "DestinationTag": 255406, + "Fee": "60000", + "Flags": 2147483648, + "LastLedgerSequence": 57313566, + "Sequence": 1113197, + "SigningPubKey": "03D847C2DBED3ABF0453F71DCD7641989136277218DF516AD49519C9693F32727E", + "TransactionType": "Payment", + "TxnSignature": "3044022077642D94BB3C49BF3CB4C804255EC830D2C6009EA4995E38A84602D579B8AAD702206FAD977C49980226E8B495BF03C8D9767380F1546BBF5A4FD47D604C0D2CCF9B" + }, + "xjson": { + "Account": "rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv", + "Amount": "3899911571", + "Destination": "XVfH8gwNWVbB5Kft16jmTNgGTqgw1dzA8ZTBkNjSLw6JdXS", + "Fee": "60000", + "Flags": 2147483648, + "LastLedgerSequence": 57313566, + "Sequence": 1113197, + "SigningPubKey": "03D847C2DBED3ABF0453F71DCD7641989136277218DF516AD49519C9693F32727E", + "TransactionType": "Payment", + "TxnSignature": "3044022077642D94BB3C49BF3CB4C804255EC830D2C6009EA4995E38A84602D579B8AAD702206FAD977C49980226E8B495BF03C8D9767380F1546BBF5A4FD47D604C0D2CCF9B" + } + }, + { + "rjson": { + "Account": "r4eEbLKZGbVSBHnSUBZW8i5XaMjGLdqT4a", + "Amount": "820370849", + "Destination": "rDhmyBh4JwDAtXyRZDarNgg52UcLLRoGje", + "DestinationTag": 2017780486, + "Fee": "6000", + "Flags": 2147483648, + "LastLedgerSequence": 57315579, + "Sequence": 234254, + "SigningPubKey": "038CF47114672A12B269AEE015BF7A8438609B994B0640E4B28B2F56E93D948B15", + "TransactionType": "Payment", + "TxnSignature": "3044022015004653B1CBDD5CCA1F7B38555F1B37FE3F811E9D5070281CCC6C8A93460D870220679E9899184901EA69750C8A9325768490B1B9C1A733842446727653FF3D1DC0" + }, + "xjson": { + "Account": "r4eEbLKZGbVSBHnSUBZW8i5XaMjGLdqT4a", + "Amount": "820370849", + "Destination": "XV31huWNJQXsAJFwgE6rnC8uf8jRx4H4waq4MyGUxz5CXzS", + "Fee": "6000", + "Flags": 2147483648, + "LastLedgerSequence": 57315579, + "Sequence": 234254, + "SigningPubKey": "038CF47114672A12B269AEE015BF7A8438609B994B0640E4B28B2F56E93D948B15", + "TransactionType": "Payment", + "TxnSignature": "3044022015004653B1CBDD5CCA1F7B38555F1B37FE3F811E9D5070281CCC6C8A93460D870220679E9899184901EA69750C8A9325768490B1B9C1A733842446727653FF3D1DC0" + } + }, + { + "rjson": { + "Account": "rsGeDwS4rpocUumu9smpXomzaaeG4Qyifz", + "Amount": "1500000000", + "Destination": "rDxfhNRgCDNDckm45zT5ayhKDC4Ljm7UoP", + "DestinationTag": 1000635172, + "Fee": "5000", + "Flags": 2147483648, + "Sequence": 55741075, + "SigningPubKey": "02ECB814477DF9D8351918878E235EE6AF147A2A5C20F1E71F291F0F3303357C36", + "SourceTag": 1000635172, + "TransactionType": "Payment", + "TxnSignature": "304402202A90972E21823214733082E1977F9EA2D6B5101902F108E7BDD7D128CEEA7AF3022008852C8DAD746A7F18E66A47414FABF551493674783E8EA7409C501D3F05F99A" + }, + "xjson": { + "Account": "rsGeDwS4rpocUumu9smpXomzaaeG4Qyifz", + "Amount": "1500000000", + "Destination": "XVBkK1yLutMqFGwTm6hykn7YXGDUrjsZSkpzMgRveZrMbHs", + "Fee": "5000", + "Flags": 2147483648, + "Sequence": 55741075, + "SigningPubKey": "02ECB814477DF9D8351918878E235EE6AF147A2A5C20F1E71F291F0F3303357C36", + "SourceTag": 1000635172, + "TransactionType": "Payment", + "TxnSignature": "304402202A90972E21823214733082E1977F9EA2D6B5101902F108E7BDD7D128CEEA7AF3022008852C8DAD746A7F18E66A47414FABF551493674783E8EA7409C501D3F05F99A" + } + }, + { + "rjson": { + "Account": "rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt", + "Amount": "48918500000", + "Destination": "rEb8TK3gBgk5auZkwc6sHnwrGVJH8DuaLh", + "DestinationTag": 105959914, + "Fee": "10", + "Flags": 2147483648, + "Sequence": 32641, + "SigningPubKey": "02E98DA545CCCC5D14C82594EE9E6CCFCF5171108E2410B3E784183E1068D33429", + "TransactionType": "Payment", + "TxnSignature": "304502210091DCA7AF189CD9DC93BDE24DEAE87381FBF16789C43113EE312241D648982B2402201C6055FEFFF1F119640AAC0B32C4F37375B0A96033E0527A21C1366920D6A524" + }, + "xjson": { + "Account": "rHWcuuZoFvDS6gNbmHSdpb7u1hZzxvCoMt", + "Amount": "48918500000", + "Destination": "XVH3aqvbYGhRhrD1FYSzGooNuxdzbG3VR2fuM47oqbXxQr7", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 32641, + "SigningPubKey": "02E98DA545CCCC5D14C82594EE9E6CCFCF5171108E2410B3E784183E1068D33429", + "TransactionType": "Payment", + "TxnSignature": "304502210091DCA7AF189CD9DC93BDE24DEAE87381FBF16789C43113EE312241D648982B2402201C6055FEFFF1F119640AAC0B32C4F37375B0A96033E0527A21C1366920D6A524" + } + }] +} \ No newline at end of file diff --git a/packages/ripple-binary-codec/test/hash.test.js b/packages/ripple-binary-codec/test/hash.test.js new file mode 100644 index 00000000..32ed8411 --- /dev/null +++ b/packages/ripple-binary-codec/test/hash.test.js @@ -0,0 +1,87 @@ +const { coreTypes } = require("../dist/types"); +const { Hash160, Hash256, AccountID, Currency } = coreTypes; +const { Buffer } = require("buffer/"); + +describe("Hash160", function () { + test("has a static width member", function () { + expect(Hash160.width).toBe(20); + }); + test("inherited by subclasses", function () { + expect(AccountID.width).toBe(20); + expect(Currency.width).toBe(20); + }); + test("can be compared against another", function () { + const h1 = Hash160.from("1000000000000000000000000000000000000000"); + const h2 = Hash160.from("2000000000000000000000000000000000000000"); + const h3 = Hash160.from("0000000000000000000000000000000000000003"); + expect(h1.lt(h2)).toBe(true); + expect(h3.lt(h2)).toBe(true); + }); + test("throws when constructed from invalid hash length", () => { + expect(() => + Hash160.from("10000000000000000000000000000000000000") + ).toThrow("Invalid Hash length 19"); + expect(() => + Hash160.from("100000000000000000000000000000000000000000") + ).toThrow("Invalid Hash length 21"); + }); +}); + +describe("Hash256", function () { + test("has a static width member", function () { + expect(Hash256.width).toBe(32); + }); + test("has a ZERO_256 member", function () { + expect(Hash256.ZERO_256.toJSON()).toBe( + "0000000000000000000000000000000000000000000000000000000000000000" + ); + }); + test("supports getting the nibblet values at given positions", function () { + const h = Hash256.from( + "1359BD0000000000000000000000000000000000000000000000000000000000" + ); + expect(h.nibblet(0)).toBe(0x1); + expect(h.nibblet(1)).toBe(0x3); + expect(h.nibblet(2)).toBe(0x5); + expect(h.nibblet(3)).toBe(0x9); + expect(h.nibblet(4)).toBe(0x0b); + expect(h.nibblet(5)).toBe(0xd); + }); +}); + +describe("Currency", function () { + test("Will throw an error for dodgy XRP ", function () { + expect(() => + Currency.from("0000000000000000000000005852500000000000") + ).toThrow(); + }); + test("Currency with lowercase letters decode to hex", () => { + expect(Currency.from("xRp").toJSON()).toBe( + "0000000000000000000000007852700000000000" + ); + }); + test("Currency codes with symbols decode to hex", () => { + expect(Currency.from("x|p").toJSON()).toBe( + "000000000000000000000000787C700000000000" + ); + }); + test("Currency codes with uppercase and 0-9 decode to ISO codes", () => { + expect(Currency.from("X8P").toJSON()).toBe("X8P"); + expect(Currency.from("USD").toJSON()).toBe("USD"); + }); + test("can be constructed from a Buffer", function () { + const xrp = new Currency(Buffer.alloc(20)); + expect(xrp.iso()).toBe("XRP"); + }); + test("Can handle non-standard currency codes", () => { + const currency = "015841551A748AD2C1F76FF6ECB0CCCD00000000"; + expect(Currency.from(currency).toJSON()).toBe(currency); + }); + test("throws on invalid reprs", function () { + expect(() => Currency.from(Buffer.alloc(19))).toThrow(); + expect(() => Currency.from(1)).toThrow(); + expect(() => + Currency.from("00000000000000000000000000000000000000m") + ).toThrow(); + }); +}); diff --git a/packages/ripple-binary-codec/test/ledger.test.js b/packages/ripple-binary-codec/test/ledger.test.js new file mode 100644 index 00000000..b0ced384 --- /dev/null +++ b/packages/ripple-binary-codec/test/ledger.test.js @@ -0,0 +1,29 @@ +const { loadFixture } = require("./utils"); +const { + transactionTreeHash, + ledgerHash, + accountStateHash, +} = require("../dist/ledger-hashes"); + +describe("Ledger Hashes", function () { + function testFactory(ledgerFixture) { + describe(`can calculate hashes for ${ledgerFixture}`, function () { + const ledger = loadFixture(ledgerFixture); + test("computes correct account state hash", function () { + expect(accountStateHash(ledger.accountState).toHex()).toBe( + ledger.account_hash + ); + }); + test("computes correct transaction tree hash", function () { + expect(transactionTreeHash(ledger.transactions).toHex()).toBe( + ledger.transaction_hash + ); + }); + test("computes correct ledger header hash", function () { + expect(ledgerHash(ledger).toHex()).toBe(ledger.hash); + }); + }); + } + testFactory("ledger-full-40000.json"); + testFactory("ledger-full-38129.json"); +}); diff --git a/packages/ripple-binary-codec/test/lower-case-hex.test.js b/packages/ripple-binary-codec/test/lower-case-hex.test.js new file mode 100644 index 00000000..3f36fde8 --- /dev/null +++ b/packages/ripple-binary-codec/test/lower-case-hex.test.js @@ -0,0 +1,46 @@ +const { encode, decode } = require("../dist"); + +let str = + "1100612200000000240000000125000068652D0000000055B6632D6376A2D9319F20A1C6DCCB486432D1E4A79951229D4C3DE2946F51D56662400009184E72A00081140DD319918CD5AE792BF7EC80D63B0F01B4573BBC"; +let lower = str.toLowerCase(); + +let bin = + "1100612200000000240000000125000000082D00000000550735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E56240000002540BE400811479927BAFFD3D04A26096C0C97B1B0D45B01AD3C0"; +let json = { + OwnerCount: 0, + Account: "rUnFEsHjxqTswbivzL2DNHBb34rhAgZZZK", + PreviousTxnLgrSeq: 8, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "0735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E5".toLowerCase(), + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let jsonUpper = { + OwnerCount: 0, + Account: "rUnFEsHjxqTswbivzL2DNHBb34rhAgZZZK", + PreviousTxnLgrSeq: 8, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "0735A0B32B2A3F4C938B76D6933003E29447DB8C7CE382BBE089402FF12A03E5", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +describe("Lowercase hex test", () => { + test("Correctly decodes", () => { + expect(decode(lower)).toEqual(decode(str)); + }); + test("Re-encodes to uppercase hex", () => { + expect(encode(decode(lower))).toEqual(str); + }); + test("Encode when hex field lowercase", () => { + expect(encode(json)).toBe(bin); + }); + test("Re-decodes to uppercase hex", () => { + expect(decode(encode(json))).toEqual(jsonUpper); + }); +}); diff --git a/packages/ripple-binary-codec/test/pseudo-transaction.test.js b/packages/ripple-binary-codec/test/pseudo-transaction.test.js new file mode 100644 index 00000000..950d0e04 --- /dev/null +++ b/packages/ripple-binary-codec/test/pseudo-transaction.test.js @@ -0,0 +1,38 @@ +const { encode, decode } = require("../dist"); + +let json = { + Account: "rrrrrrrrrrrrrrrrrrrrrhoLvTp", + Sequence: 0, + Fee: "0", + SigningPubKey: "", + Signature: "", +}; + +let json_blank_acct = { + Account: "", + Sequence: 0, + Fee: "0", + SigningPubKey: "", + Signature: "", +}; + +let binary = + "24000000006840000000000000007300760081140000000000000000000000000000000000000000"; + +describe("Can encode Pseudo Transactions", () => { + test("Correctly encodes Pseudo Transaciton", () => { + expect(encode(json)).toEqual(binary); + }); + + test("Can decode account objects", () => { + expect(decode(encode(json))).toEqual(json); + }); + + test("Blank AccountID is ACCOUNT_ZERO", () => { + expect(encode(json_blank_acct)).toEqual(binary); + }); + + test("Decodes Blank AccountID", () => { + expect(decode(encode(json_blank_acct))).toEqual(json); + }); +}); diff --git a/packages/ripple-binary-codec/test/quality.test.js b/packages/ripple-binary-codec/test/quality.test.js new file mode 100644 index 00000000..528dd9d3 --- /dev/null +++ b/packages/ripple-binary-codec/test/quality.test.js @@ -0,0 +1,15 @@ +const { quality } = require("../dist/coretypes"); + +describe("Quality encode/decode", function () { + const bookDirectory = + "4627DFFCFF8B5A265EDBD8AE8C14A52325DBFEDAF4F5C32E5D06F4C3362FE1D0"; + const expectedQuality = "195796912.5171664"; + test("can decode", function () { + const decimal = quality.decode(bookDirectory); + expect(decimal.toString()).toBe(expectedQuality); + }); + test("can encode", function () { + const bytes = quality.encode(expectedQuality); + expect(bytes.toString("hex").toUpperCase()).toBe(bookDirectory.slice(-16)); + }); +}); diff --git a/packages/ripple-binary-codec/test/shamap.test.js b/packages/ripple-binary-codec/test/shamap.test.js new file mode 100644 index 00000000..87e6ab48 --- /dev/null +++ b/packages/ripple-binary-codec/test/shamap.test.js @@ -0,0 +1,89 @@ +const { ShaMap } = require("../dist/shamap.js"); +const { binary, HashPrefix } = require("../dist/coretypes"); +const { coreTypes } = require("../dist/types"); +const { loadFixture } = require("./utils"); +const { Buffer } = require("buffer/"); + +function now() { + return Number(Date.now()) / 1000; +} + +const ZERO = "0000000000000000000000000000000000000000000000000000000000000000"; + +function makeItem(indexArg) { + let str = indexArg; + while (str.length < 64) { + str += "0"; + } + const index = coreTypes.Hash256.from(str); + const item = { + toBytesSink(sink) { + index.toBytesSink(sink); + }, + hashPrefix() { + return Buffer.from([1, 3, 3, 7]); + }, + }; + return [index, item]; +} + +describe("ShaMap", () => { + now(); + + test("hashes to zero when empty", () => { + const map = new ShaMap(); + expect(map.hash().toHex()).toBe(ZERO); + }); + test("creates the same hash no matter which order items are added", () => { + let map = new ShaMap(); + const items = [ + "0", + "1", + "11", + "7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E20000000000000000", + "7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E21000000000000000", + "7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E22000000000000000", + "7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E23000000000000000", + "12", + "122", + ]; + items.forEach((i) => map.addItem(...makeItem(i))); + const h1 = map.hash(); + expect(h1.eq(h1)).toBe(true); + map = new ShaMap(); + items.reverse().forEach((i) => map.addItem(...makeItem(i))); + expect(map.hash()).toStrictEqual(h1); + }); + function factory(fixture) { + test(`recreate account state hash from ${fixture}`, () => { + const map = new ShaMap(); + const ledger = loadFixture(fixture); + // const t = now(); + const leafNodePrefix = HashPrefix.accountStateEntry; + ledger.accountState + .map((e, i) => { + if ((i > 1000) & (i % 1000 === 0)) { + console.log(e.index); + console.log(i); + } + const bytes = binary.serializeObject(e); + return { + index: coreTypes.Hash256.from(e.index), + hashPrefix() { + return leafNodePrefix; + }, + toBytesSink(sink) { + sink.put(bytes); + }, + }; + }) + .forEach((so) => map.addItem(so.index, so)); + expect(map.hash().toHex()).toBe(ledger.account_hash); + // console.log('took seconds: ', (now() - t)); + }); + } + factory("ledger-full-38129.json"); + factory("ledger-full-40000.json"); + // factory('ledger-4320277.json'); + // factory('14280680.json'); +}); diff --git a/packages/ripple-binary-codec/test/signing-data-encoding.test.js b/packages/ripple-binary-codec/test/signing-data-encoding.test.js new file mode 100644 index 00000000..c337a391 --- /dev/null +++ b/packages/ripple-binary-codec/test/signing-data-encoding.test.js @@ -0,0 +1,129 @@ +const { + encodeForSigning, + encodeForSigningClaim, + encodeForMultisigning, +} = require("../dist"); + +const tx_json = { + Account: "r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ", + Amount: "1000", + Destination: "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + Fee: "10", + Flags: 2147483648, + Sequence: 1, + TransactionType: "Payment", + TxnSignature: + "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1" + + "E721B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80" + + "ECA3CD7B9B", + Signature: + "30440220718D264EF05CAED7C781FF6DE298DCAC68D002562C9BF3A07C1E72" + + "1B420C0DAB02203A5A4779EF4D2CCC7BC3EF886676D803A9981B928D3B8ACA483B80ECA" + + "3CD7B9B", + SigningPubKey: + "ED5F5AC8B98974A3CA843326D9B88CEBD0560177B973EE0B149F782CFAA06DC66A", +}; + +describe("Signing data", function () { + test("can create single signing blobs", function () { + const actual = encodeForSigning(tx_json); + expect(actual).toBe( + [ + "53545800", // signingPrefix + // TransactionType + "12", + "0000", + // Flags + "22", + "80000000", + // Sequence + "24", + "00000001", + // Amount + "61", + // native amount + "40000000000003E8", + // Fee + "68", + // native amount + "400000000000000A", + // SigningPubKey + "73", + // VLLength + "21", + "ED5F5AC8B98974A3CA843326D9B88CEBD0560177B973EE0B149F782CFAA06DC66A", + // Account + "81", + // VLLength + "14", + "5B812C9D57731E27A2DA8B1830195F88EF32A3B6", + // Destination + "83", + // VLLength + "14", + "B5F762798A53D543A014CAF8B297CFF8F2F937E8", + ].join("") + ); + }); + test("can create multi signing blobs", function () { + const signingAccount = "rJZdUusLDtY9NEsGea7ijqhVrXv98rYBYN"; + const signingJson = Object.assign({}, tx_json, { SigningPubKey: "" }); + const actual = encodeForMultisigning(signingJson, signingAccount); + expect(actual).toBe( + [ + "534D5400", // signingPrefix + // TransactionType + "12", + "0000", + // Flags + "22", + "80000000", + // Sequence + "24", + "00000001", + // Amount + "61", + // native amount + "40000000000003E8", + // Fee + "68", + // native amount + "400000000000000A", + // SigningPubKey + "73", + // VLLength + "00", + // '', + // Account + "81", + // VLLength + "14", + "5B812C9D57731E27A2DA8B1830195F88EF32A3B6", + // Destination + "83", + // VLLength + "14", + "B5F762798A53D543A014CAF8B297CFF8F2F937E8", + // signingAccount suffix + "C0A5ABEF242802EFED4B041E8F2D4A8CC86AE3D1", + ].join("") + ); + }); + test("can create claim blob", function () { + const channel = + "43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1"; + const amount = "1000"; + const json = { channel, amount }; + const actual = encodeForSigningClaim(json); + expect(actual).toBe( + [ + // hash prefix + "434C4D00", + // channel ID + "43904CBFCDCEC530B4037871F86EE90BF799DF8D2E0EA564BC8A3F332E4F5FB1", + // amount as a uint64 + "00000000000003E8", + ].join("") + ); + }); +}); diff --git a/packages/ripple-binary-codec/test/tx-encode-decode.test.js b/packages/ripple-binary-codec/test/tx-encode-decode.test.js new file mode 100644 index 00000000..e2182ca0 --- /dev/null +++ b/packages/ripple-binary-codec/test/tx-encode-decode.test.js @@ -0,0 +1,97 @@ +const { encode, decode } = require("../dist"); + +// Notice: no Amount or Fee +const tx_json = { + Account: "r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ", + // Amount: '1000', + Destination: "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + // Fee: '10', + + // JavaScript converts operands to 32-bit signed ints after doing bitwise + // operations. We need to convert it back to an unsigned int with >>> 0. + Flags: (1 << 31) >>> 0, // tfFullyCanonicalSig + + Sequence: 1, + TransactionType: "Payment", + // TxnSignature, + // Signature, + // SigningPubKey +}; + +describe("encoding and decoding tx_json", function () { + test("can encode tx_json without Amount or Fee", function () { + const encoded = encode(tx_json); + const decoded = decode(encoded); + expect(tx_json).toEqual(decoded); + }); + test("can encode tx_json with Amount and Fee", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: "1000", + Fee: "10", + }); + const encoded = encode(my_tx); + const decoded = decode(encoded); + expect(my_tx).toEqual(decoded); + }); + test("can encode tx_json with TicketCount", function () { + const my_tx = Object.assign({}, tx_json, { + TicketCount: 2, + }); + const encoded = encode(my_tx); + const decoded = decode(encoded); + expect(my_tx).toEqual(decoded); + }); + test("can encode tx_json with TicketSequence", function () { + const my_tx = Object.assign({}, tx_json, { + Sequence: 0, + TicketSequence: 2, + }); + const encoded = encode(my_tx); + const decoded = decode(encoded); + expect(my_tx).toEqual(decoded); + }); + test("throws when Amount is invalid", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: "1000.001", + Fee: "10", + }); + expect(() => { + encode(my_tx); + }).toThrow(); + }); + test("throws when Fee is invalid", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: "1000", + Fee: "10.123", + }); + expect(() => { + encode(my_tx); + }).toThrow(); + }); + test("throws when Amount and Fee are invalid", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: "1000.789", + Fee: "10.123", + }); + expect(() => { + encode(my_tx); + }).toThrow(); + }); + test("throws when Amount is a number instead of a string-encoded integer", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: 1000.789, + }); + expect(() => { + encode(my_tx); + }).toThrow(); + }); + + test("throws when Fee is a number instead of a string-encoded integer", function () { + const my_tx = Object.assign({}, tx_json, { + Amount: 1234.56, + }); + expect(() => { + encode(my_tx); + }).toThrow(); + }); +}); diff --git a/packages/ripple-binary-codec/test/types.test.js b/packages/ripple-binary-codec/test/types.test.js new file mode 100644 index 00000000..779337ef --- /dev/null +++ b/packages/ripple-binary-codec/test/types.test.js @@ -0,0 +1,34 @@ +const { coreTypes } = require("../dist/types"); +const { SerializedType } = require("../dist/types/serialized-type"); + +describe("SerializedType interfaces", () => { + Object.entries(coreTypes).forEach(([name, Value]) => { + test(`${name} has a \`from\` static constructor`, () => { + expect(Value.from && Value.from !== Array.from).toBe(true); + }); + test(`${name} has a default constructor`, () => { + expect(new Value()).not.toBe(undefined); + }); + test(`${name}.from will return the same object`, () => { + const instance = new Value(); + expect(Value.from(instance) === instance).toBe(true); + }); + test(`${name} instances have toBytesSink`, () => { + expect(new Value().toBytesSink).not.toBe(undefined); + }); + test(`${name} instances have toJSON`, () => { + expect(new Value().toJSON).not.toBe(undefined); + }); + test(`${name}.from(json).toJSON() == json`, () => { + const newJSON = new Value().toJSON(); + expect(Value.from(newJSON).toJSON()).toEqual(newJSON); + }); + describe(`${name} supports all methods of the SerializedType mixin`, () => { + Object.keys(SerializedType.prototype).forEach((k) => { + test(`new ${name}.prototype.${k} !== undefined`, () => { + expect(Value.prototype[k]).not.toBe(undefined); + }); + }); + }); + }); +}); diff --git a/packages/ripple-binary-codec/test/uint.test.js b/packages/ripple-binary-codec/test/uint.test.js new file mode 100644 index 00000000..b291f3cc --- /dev/null +++ b/packages/ripple-binary-codec/test/uint.test.js @@ -0,0 +1,148 @@ +const { coreTypes } = require("../dist/types"); +const { UInt8, UInt64 } = coreTypes; + +const { encode } = require("../dist"); + +const binary = + "11007222000300003700000000000000003800000000000000006280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C680000000000000000000000000005553440000000000AE123A8556F3CF91154711376AFB0F894F832B3D67D5438D7EA4C680000000000000000000000000005553440000000000F51DFC2A09D62CBBA1DFBDD4691DAC96AD98B90F"; +const json = { + Balance: { + currency: "USD", + issuer: "rrrrrrrrrrrrrrrrrrrrBZbvji", + value: "0", + }, + Flags: 196608, + HighLimit: { + currency: "USD", + issuer: "rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK", + value: "1000", + }, + HighNode: "0", + LedgerEntryType: "RippleState", + LowLimit: { + currency: "USD", + issuer: "rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn", + value: "1000", + }, + LowNode: "0", +}; + +const binaryEntry0 = + "11007222001100002501EC24873700000000000000003800000000000000A35506FC7DE374089D50F81AAE13E7BBF3D0E694769331E14F55351B38D0148018EA62D44BF89AC2A40B800000000000000000000000004A50590000000000000000000000000000000000000000000000000166D6C38D7EA4C680000000000000000000000000004A5059000000000047C1258B4B79774B28176324068F759EDE226F686780000000000000000000000000000000000000004A505900000000005BBC0F22F61D9224A110650CFE21CC0C4BE13098"; +const jsonEntry0 = { + Balance: { + currency: "JPY", + issuer: "rrrrrrrrrrrrrrrrrrrrBZbvji", + value: "0.3369568318", + }, + Flags: 1114112, + HighLimit: { + currency: "JPY", + issuer: "r94s8px6kSw1uZ1MV98dhSRTvc6VMPoPcN", + value: "0", + }, + HighNode: "a3", + LedgerEntryType: "RippleState", + LowLimit: { + currency: "JPY", + issuer: "rfYQMgj3g3Qp8VLoZNvvU35mEuuJC8nCmY", + value: "1000000000", + }, + LowNode: "0", + PreviousTxnID: + "06FC7DE374089D50F81AAE13E7BBF3D0E694769331E14F55351B38D0148018EA", + PreviousTxnLgrSeq: 32253063, + index: "000319BAE0A618A7D3BB492F17E98E5D92EA0C6458AFEBED44206B5B4798A840", +}; + +const binaryEntry1 = + "1100642200000000320000000000000002580CB3C1AD2C371136AEA434246D971C5FCCD32CBF520667E131AB7B10D706E7528214BA53D10260FFCC968ACD16BA30F7CEABAD6E5D92011340A3454ACED87177146EABD5E4A256021D836D1E3617618B1EB362D10B0D1BAC6AE1ED9E8D280BBE0B6656748FD647231851C6C650794D5E6852DFA1E35E68630F"; +const jsonEntry1 = { + Flags: 0, + IndexPrevious: "2", + Indexes: [ + "A3454ACED87177146EABD5E4A256021D836D1E3617618B1EB362D10B0D1BAC6A", + "E1ED9E8D280BBE0B6656748FD647231851C6C650794D5E6852DFA1E35E68630F", + ], + LedgerEntryType: "DirectoryNode", + Owner: "rHzDaMNybxQppiE3uWyt2N265KvAKdiRdP", + RootIndex: "0CB3C1AD2C371136AEA434246D971C5FCCD32CBF520667E131AB7B10D706E752", + index: "0B4A2E68C111F7E42FAEEE405F7344560C8240840B151D9D04131EB79D080167", +}; + +const binaryEntry2 = + "1100722200210000250178D1CA37000000000000000038000000000000028355C0C37CE200B509E0A529880634F7841A9EF4CB65F03C12E6004CFAD9718D66946280000000000000000000000000000000000000004743420000000000000000000000000000000000000000000000000166D6071AFD498D000000000000000000000000000047434200000000002599D1D255BCA61189CA64C84528F2FCBE4BFC3867800000000000000000000000000000000000000047434200000000006EEBB1D1852CE667876A0B3630861FB6C6AB358E"; +const jsonEntry2 = { + Balance: { + currency: "GCB", + issuer: "rrrrrrrrrrrrrrrrrrrrBZbvji", + value: "0", + }, + Flags: 2162688, + HighLimit: { + currency: "GCB", + issuer: "rBfVgTnsdh8ckC19RM8aVGNuMZnpwrMP6n", + value: "0", + }, + HighNode: "283", + LedgerEntryType: "RippleState", + LowLimit: { + currency: "GCB", + issuer: "rhRFGCy2RJTA8oxkjjtYTvofPVGqcgvXWj", + value: "2000000", + }, + LowNode: "0", + PreviousTxnID: + "C0C37CE200B509E0A529880634F7841A9EF4CB65F03C12E6004CFAD9718D6694", + PreviousTxnLgrSeq: 24695242, + index: "0000041EFD027808D3F78C8352F97E324CB816318E00B977C74ECDDC7CD975B2", +}; + +test("compareToTests[0]", () => { + expect(UInt8.from(124).compareTo(UInt64.from(124))).toBe(0); +}); + +test("compareToTest[1]", () => { + expect(UInt64.from(124).compareTo(UInt8.from(124))).toBe(0); +}); + +test("compareToTest[2]", () => { + expect(UInt64.from(124).compareTo(UInt8.from(123))).toBe(1); +}); + +test("compareToTest[3]", () => { + expect(UInt8.from(124).compareTo(UInt8.from(13))).toBe(1); +}); + +test("compareToTest[4]", () => { + expect(UInt8.from(124).compareTo(124)).toBe(0); +}); + +test("compareToTest[5]", () => { + expect(UInt64.from(124).compareTo(124)).toBe(0); +}); + +test("compareToTest[6]", () => { + expect(UInt64.from(124).compareTo(123)).toBe(1); +}); + +test("compareToTest[7]", () => { + expect(UInt8.from(124).compareTo(13)).toBe(1); +}); + +test("UInt64 from string zero", () => { + expect(UInt64.from("0")).toEqual(UInt64.from(0)); + expect(encode(json)).toEqual(binary); +}); + +test("UInt64 from non 16 length hex", () => { + expect(encode(jsonEntry0)).toEqual(binaryEntry0); + expect(encode(jsonEntry1)).toEqual(binaryEntry1); + expect(encode(jsonEntry2)).toEqual(binaryEntry2); +}); + +test("valueOfTests", () => { + let val = UInt8.from(1); + val |= 0x2; + expect(val).toBe(3); +}); diff --git a/packages/ripple-binary-codec/test/utils.js b/packages/ripple-binary-codec/test/utils.js new file mode 100644 index 00000000..8c65b6c4 --- /dev/null +++ b/packages/ripple-binary-codec/test/utils.js @@ -0,0 +1,30 @@ +const fs = require("fs"); +const { Buffer } = require('buffer/') + +function hexOnly(hex) { + return hex.replace(/[^a-fA-F0-9]/g, ""); +} + +function unused() {} + +function parseHexOnly(hex) { + return Buffer.from(hexOnly(hex), "hex"); +} + +function loadFixture(relativePath) { + const fn = __dirname + "/fixtures/" + relativePath; + return require(fn); +} + +function loadFixtureText(relativePath) { + const fn = __dirname + "/fixtures/" + relativePath; + return fs.readFileSync(fn).toString("utf8"); +} + +module.exports = { + hexOnly, + parseHexOnly, + loadFixture, + loadFixtureText, + unused, +}; diff --git a/packages/ripple-binary-codec/test/x-address.test.js b/packages/ripple-binary-codec/test/x-address.test.js new file mode 100644 index 00000000..4fc440a5 --- /dev/null +++ b/packages/ripple-binary-codec/test/x-address.test.js @@ -0,0 +1,181 @@ +const { encode, decode } = require("./../dist/index"); +const fixtures = require("./fixtures/x-codec-fixtures.json"); + +let json_x1 = { + OwnerCount: 0, + Account: "XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let json_r1 = { + OwnerCount: 0, + Account: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", + SourceTag: 12345, +}; + +let json_null_x = { + OwnerCount: 0, + Account: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Destination: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Issuer: "XVXdn5wEVm5G4UhEHWDPqjvdeH361P4GETfNyyXGaoqBj71", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let json_invalid_x = { + OwnerCount: 0, + Account: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Destination: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Issuer: "XVXdn5wEVm5g4UhEHWDPqjvdeH361P4GETfNyyXGaoqBj71", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let json_null_r = { + OwnerCount: 0, + Account: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Destination: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Issuer: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let invalid_json_issuer_tagged = { + OwnerCount: 0, + Account: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Destination: "rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv", + Issuer: "XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", +}; + +let invalid_json_x_and_tagged = { + OwnerCount: 0, + Account: "XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT", + PreviousTxnLgrSeq: 7, + LedgerEntryType: "AccountRoot", + PreviousTxnID: + "DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF", + Flags: 0, + Sequence: 1, + Balance: "10000000000", + SourceTag: 12345, +}; + +let json_issued_x = { + TakerPays: { + currency: "USD", + issuer: "X7WZKEeNVS2p9Tire9DtNFkzWBZbFtJHWxDjN9fCrBGqVA4", + value: "7072.8", + }, +}; + +let json_issued_r = { + TakerPays: { + currency: "USD", + issuer: "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + value: "7072.8", + }, +}; + +let json_issued_with_tag = { + TakerPays: { + currency: "USD", + issuer: "X7WZKEeNVS2p9Tire9DtNFkzWBZbFtSiS2eDBib7svZXuc2", + value: "7072.8", + }, +}; + +describe("X-Address Account is equivalent to a classic address w/ SourceTag", () => { + let encoded_x = encode(json_x1); + let encoded_r = encode(json_r1); + test("Can encode with x-Address", () => { + expect(encoded_x).toEqual(encoded_r); + }); + + test("decoded X-address is object w/ source and tag", () => { + let decoded_x = decode(encoded_x); + expect(decoded_x).toEqual(json_r1); + }); + + test("Encoding issuer X-Address w/ undefined destination tag", () => { + expect(encode(json_null_x)).toEqual(encode(json_null_r)); + }); + + test("Throws when X-Address is invalid", () => { + expect(() => encode(json_invalid_x)).toThrow("checksum_invalid"); + }); + + test("Encodes issued currency w/ x-address", () => { + expect(encode(json_issued_x)).toEqual(encode(json_issued_r)); + }); +}); + +describe("Invalid X-Address behavior", () => { + test("X-Address with tag throws value for invalid field", () => { + expect(() => encode(invalid_json_issuer_tagged)).toThrow( + new Error("Issuer cannot have an associated tag") + ); + }); + + test("Throws when Account has both X-Addr and Destination Tag", () => { + expect(() => encode(invalid_json_x_and_tagged)).toThrow( + new Error("Cannot have Account X-Address and SourceTag") + ); + }); + + test("Throws when issued currency has tag", () => { + expect(() => encode(json_issued_with_tag)).toThrow( + "Only allowed to have tag on Account or Destination" + ); + }); +}); + +describe("ripple-binary-codec x-address test", function () { + function makeSuite(name, entries) { + describe(name, function () { + entries.forEach((t, testN) => { + test(`${name}[${testN}] encodes X-address json equivalent to classic address json`, () => { + expect(encode(t.rjson)).toEqual(encode(t.xjson)); + }); + test(`${name}[${testN}] decodes X-address json equivalent to classic address json`, () => { + expect(decode(encode(t.xjson))).toEqual(t.rjson); + }); + }); + }); + } + makeSuite("transactions", fixtures.transactions); +}); diff --git a/packages/ripple-binary-codec/tsconfig.eslint.json b/packages/ripple-binary-codec/tsconfig.eslint.json new file mode 100644 index 00000000..fccfa7d0 --- /dev/null +++ b/packages/ripple-binary-codec/tsconfig.eslint.json @@ -0,0 +1,7 @@ +// We need this file to run ESLint on our tests +// https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration +{ + // extend your base config so you don't have to redefine your compilerOptions + "extends": "./tsconfig.json", + "include": ["src/**/*.ts", "test/**/*.js"] + } \ No newline at end of file diff --git a/packages/ripple-binary-codec/tsconfig.json b/packages/ripple-binary-codec/tsconfig.json new file mode 100644 index 00000000..59b5c5a6 --- /dev/null +++ b/packages/ripple-binary-codec/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "es5", + "lib": [ + "es2017" + ], + "rootDir": "./src", + "outDir": "./dist", + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "noImplicitThis": false, + "noImplicitAny": false, + "removeComments": false, + "preserveConstEnums": false, + "suppressImplicitAnyIndexErrors": true, + "skipLibCheck": true, + "declaration": true + }, + "references": [ + { + "path": "../ripple-address-codec/tsconfig.json" + } + ], + "include": [ + "src/**/*.ts", + "src/**/*.json" + ] +} diff --git a/packages/ripple-keypairs/.eslintignore b/packages/ripple-keypairs/.eslintignore new file mode 100644 index 00000000..0fc07055 --- /dev/null +++ b/packages/ripple-keypairs/.eslintignore @@ -0,0 +1,12 @@ +# Don't ever lint node_modules +node_modules + +# Don't lint build output +dist + +# don't lint nyc coverage output +coverage +.nyc_output + +# Don't lint NYC configuration +nyc.config.js diff --git a/packages/ripple-keypairs/.eslintrc.js b/packages/ripple-keypairs/.eslintrc.js new file mode 100644 index 00000000..73d641d5 --- /dev/null +++ b/packages/ripple-keypairs/.eslintrc.js @@ -0,0 +1,60 @@ +module.exports = { + root: true, + + parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + + sourceType: 'module', // Allow the use of imports / ES modules + + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + + // Specify global variables that are predefined + env: { + browser: true, // Enable browser global variables + node: true, // Enable node global variables & Node.js scoping + es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 + mocha: true, // Add Mocha testing global variables + }, + + plugins: [], + extends: ['@xrplf/eslint-config/base', 'plugin:mocha/recommended'], + + rules: { + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/check-tag-names': 'off', + 'jsdoc/no-types': 'off', + 'tsdoc/syntax': 'off', + 'import/order': 'off', + 'eslint-comments/require-description': 'off', + 'no-shadow': 'off', + 'multiline-comment-style': 'off', + }, +} diff --git a/packages/ripple-keypairs/.gitignore b/packages/ripple-keypairs/.gitignore new file mode 100644 index 00000000..0a7abd75 --- /dev/null +++ b/packages/ripple-keypairs/.gitignore @@ -0,0 +1,72 @@ +# .gitignore + +# Ignore package locks other than npm +yarn.lock +npm-shrinkwrap.json + +# Ignore vim swap files. +*.swp + +# Ignore SCons support files. +.sconsign.dblite + +# Ignore python compiled files. +*.pyc + +# Ignore Macintosh Desktop Services Store files. +.DS_Store + +# Ignore backup/temps +*~ + +# Ignore object files. +*.o +build/ +tags +bin/rippled +Debug/*.* +Release/*.* + +# Ignore locally installed node_modules +node_modules +!test/node_modules + +# Ignore tmp directory. +tmp + +# Ignore database directory. +db/*.db +db/*.db-* + +# Ignore customized configs +rippled.cfg +validators.txt +test/config.js + +# Ignore coverage files +/lib-cov +/src-cov +/coverage.html +/coverage + +# Ignore IntelliJ files +.idea + +# Ignore npm-debug +npm-debug.log + +# Ignore dist folder, build for bower +dist/ + +# Ignore flow output directory +out/ + +# Ignore perf test cache +scripts/cache + +eslintrc + +distrib/ + +# nyc (istanbul) +.nyc_output diff --git a/packages/ripple-keypairs/.mocharc.js b/packages/ripple-keypairs/.mocharc.js new file mode 100644 index 00000000..f828360a --- /dev/null +++ b/packages/ripple-keypairs/.mocharc.js @@ -0,0 +1,15 @@ +module.exports = { + opts: false, + slow: 500, + timeout: 5000, + + // Required to get proper coverage on TypeScript files + // transpile-only is required if we use custom types + require: ['ts-node/register/transpile-only', 'source-map-support/register'], + + // Look for tests in subdirectories + recursive: true, + + // Check for global variable leaks + 'check-leaks': true, +} diff --git a/packages/ripple-keypairs/HISTORY.md b/packages/ripple-keypairs/HISTORY.md new file mode 100644 index 00000000..fdf9c77a --- /dev/null +++ b/packages/ripple-keypairs/HISTORY.md @@ -0,0 +1,55 @@ +# ripple-keypairs Release History + +## 1.0.3 (2021-02-22) + +* Update dependencies: + * elliptic to 6.5.4 - includes security fix, although ripple-keypairs should not be susceptible because the vulnerable code is meant only for DH key exchange, which we do not use + * ripple-address-codec to 4.1.2 + * bn.js, ts-node, @types/node, @types/mocha, codecov, prettier, typescript, eslint-config-prettier, eslint-plugin-import, elint-config-airbnb-base, eslint-plugin-prettier, ts-node, mocha + +## 1.0.2 (2020-09-12) + +* Drop support for Node.js version 8 (#171) + * Node.js v8 reached End-of-Life on 31st December 2019. As ripple-keypairs is a security-sensitive library, we recommend upgrading to Node.js 10 or higher immediately. ([Node.js Releases](https://nodejs.org/en/about/releases/)) +* Internal + * Update dependencies (#170) (#163) (#173) (#172) (#175) (#177) (#179) (#180) (#181) + * Bump elliptic from 6.5.2 to 6.5.3 (#190) + * We do not believe that the issue fixed in this patch affects ripple-keypairs in any way, but we are bumping the dependency just to stay up-to-date. + * Bump lodash from 4.17.15 to 4.17.20 (#207) +* Add GitHub Actions CI (#221) + +## 1.0.1 (2020-05-12) + +* Update dependencies + * codecov, eslint-config-airbnb-typescript, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, @types/node, eslint-plugin-mocha, typescript, mocha +* This will probably be the last version to support Node.js version 8, which reached End-of-Life on 31st December 2019. If you are still using Node.js 8, we recommend upgrading to version 10 or higher as soon as possible. ([Node.js Releases](https://nodejs.org/en/about/releases/)) + +## 1.0.0 (2020-02-05) + +* Refactor and use TypeScript +* Use Travis CI (.travis.yml) +* Use "dist/*" for distribution files +* Add yarn.lock +* Export members and add default export +* Internal + * Use published ripple-address-codec (#58) + * Replace TSLint with ESLint + Prettier (#71) + * Add type (#74) + * Remove unused code (#81) + * Add tests (#82) + * Improve comments (#90) + * Remove Babel (#33) +* Update dependencies + * @types/node, eslint, bn.js, typescript, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, mocha, istanbul, hash.js + +## 0.11.0 (2018-10-23) + +* Upgrade elliptic (#28) + +## 0.10.2 + +* Remove unused devDependencies + +## 0.10.1 (2017-11-10) + +* [Verify that generated keypairs can correctly sign a message](https://github.com/ripple/ripple-keypairs/pull/22) diff --git a/packages/ripple-keypairs/LICENSE b/packages/ripple-keypairs/LICENSE new file mode 100644 index 00000000..cbd08426 --- /dev/null +++ b/packages/ripple-keypairs/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2012-2015 Ripple Labs Inc. + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/packages/ripple-keypairs/README.md b/packages/ripple-keypairs/README.md new file mode 100644 index 00000000..a1f05ded --- /dev/null +++ b/packages/ripple-keypairs/README.md @@ -0,0 +1,48 @@ +# ripple-keypairs [![NPM](https://img.shields.io/npm/v/ripple-keypairs.svg)](https://npmjs.org/package/ripple-keypairs) [![Build Status](https://img.shields.io/travis/ripple/ripple-keypairs/master.svg)](https://travis-ci.org/ripple/ripple-keypairs) ![Codecov](https://img.shields.io/codecov/c/github/ripple/ripple-keypairs) + +An implementation of XRP Ledger keypairs & wallet generation using +[elliptic](https://github.com/indutny/elliptic) which supports rfc6979 and +eddsa deterministic signatures. + +[![NPM](https://nodei.co/npm/ripple-keypairs.png)](https://www.npmjs.org/package/ripple-keypairs) + +## API Methods + +``` +generateSeed({entropy?: Array, algorithm?: string}) -> string +``` +Generate a seed that can be used to generate keypairs. Entropy can be provided as an array of bytes expressed as integers in the range 0-255. If provided, it must be 16 bytes long (additional bytes are ignored). If not provided, entropy will be automatically generated. The "algorithm" defaults to "ecdsa-secp256k1", but can also be set to "ed25519". The result is a seed encoded in base58, starting with "s". + +``` +deriveKeypair(seed: string) -> {privateKey: string, publicKey: string} +``` +Derive a public and private key from a seed. The keys are represented as 33-byte hexadecimal strings. + +``` +sign(messageHex: string, privateKey: string) -> string +``` +Sign an arbitrary hex-encoded message with a private key. Returns the signature as a hexadecimal string. + +``` +verify(messageHex: string, signature: string, publicKey: string) -> boolean +``` +Verify a signature for a given hex-encoded message and public key. Returns true if the signature is valid, false otherwise. + +``` +deriveAddress(publicKey: string) -> string +``` +Derive an XRP Ledger classic address from a public key. + +``` +deriveNodeAddress(publicKey: string) -> string +``` +Derive a node address from a public key. + + +## Generate a random XRP Ledger address + +``` +const seed = generateSeed(); +const keypair = deriveKeypair(seed); +const address = deriveAddress(keypair.publicKey); +``` diff --git a/packages/ripple-keypairs/SECURITY.md b/packages/ripple-keypairs/SECURITY.md new file mode 100644 index 00000000..27cb2920 --- /dev/null +++ b/packages/ripple-keypairs/SECURITY.md @@ -0,0 +1,91 @@ +# Security Policy + +## Supported Versions + +We accept vulnerability reports that affect recent and current versions of the library. + +## Reporting a Vulnerability + +Your report should include the following: + +- Your contact information (typically, an email address); +- Which repository and software/library is affected; +- The description of the vulnerability; +- The attack scenario (if any); +- The steps to reproduce the vulnerability; +- Any other relevant details or artifacts, including code, scripts or patches. + +To report a bug or potential vulnerability, please send a detailed report to: + +|Email Address|bugs@ripple.com | +|:-----------:|:----------------------------------------------------| +|Short Key ID | `0xC57929BE` | +|Long Key ID | `0xCD49A0AFC57929BE` | +|Fingerprint | `24E6 3B02 37E0 FA9C 5E96 8974 CD49 A0AF C579 29BE` | + +The full PGP key for this address, which is also available on several key servers (e.g. on [keys.gnupg.net](https://keys.gnupg.net)), is: +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +mQINBFUwGHYBEAC0wpGpBPkd8W1UdQjg9+cEFzeIEJRaoZoeuJD8mofwI5Ejnjdt +kCpUYEDal0ygkKobu8SzOoATcDl18iCrScX39VpTm96vISFZMhmOryYCIp4QLJNN +4HKc2ZdBj6W4igNi6vj5Qo6JMyGpLY2mz4CZskbt0TNuUxWrGood+UrCzpY8x7/N +a93fcvNw+prgCr0rCH3hAPmAFfsOBbtGzNnmq7xf3jg5r4Z4sDiNIF1X1y53DAfV +rWDx49IKsuCEJfPMp1MnBSvDvLaQ2hKXs+cOpx1BCZgHn3skouEUxxgqbtTzBLt1 +xXpmuijsaltWngPnGO7mOAzbpZSdBm82/Emrk9bPMuD0QaLQjWr7HkTSUs6ZsKt4 +7CLPdWqxyY/QVw9UaxeHEtWGQGMIQGgVJGh1fjtUr5O1sC9z9jXcQ0HuIHnRCTls +GP7hklJmfH5V4SyAJQ06/hLuEhUJ7dn+BlqCsT0tLmYTgZYNzNcLHcqBFMEZHvHw +9GENMx/tDXgajKql4bJnzuTK0iGU/YepanANLd1JHECJ4jzTtmKOus9SOGlB2/l1 +0t0ADDYAS3eqOdOcUvo9ElSLCI5vSVHhShSte/n2FMWU+kMUboTUisEG8CgQnrng +g2CvvQvqDkeOtZeqMcC7HdiZS0q3LJUWtwA/ViwxrVlBDCxiTUXCotyBWwARAQAB +tDBSaXBwbGUgTGFicyBCdWcgQm91bnR5IFByb2dyYW0gPGJ1Z3NAcmlwcGxlLmNv +bT6JAjcEEwEKACEFAlUwGHYCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQ +zUmgr8V5Kb6R0g//SwY/mVJY59k87iL26/KayauSoOcz7xjcST26l4ZHVVX85gOY +HYZl8k0+m8X3zxeYm9a3QAoAml8sfoaFRFQP8ynnefRrLUPaZ2MjbJ0SACMwZNef +T6o7Mi8LBAaiNZdYVyIfX1oM6YXtqYkuJdav6ZCyvVYqc9OvMJPY2ZzJYuI/ZtvQ +/lTndxCeg9ALNX/iezOLGdfMpf4HuIFVwcPPlwGi+HDlB9/bggDEHC8z434SXVFc +aQatXAPcDkjMUweU7y0CZtYEj00HITd4pSX6MqGiHrxlDZTqinCOPs1Ieqp7qufs +MzlM6irLGucxj1+wa16ieyYvEtGaPIsksUKkywx0O7cf8N2qKg+eIkUk6O0Uc6eO +CszizmiXIXy4O6OiLlVHGKkXHMSW9Nwe9GE95O8G9WR8OZCEuDv+mHPAutO+IjdP +PDAAUvy+3XnkceO+HGWRpVvJZfFP2YH4A33InFL5yqlJmSoR/yVingGLxk55bZDM ++HYGR3VeMb8Xj1rf/02qERsZyccMCFdAvKDbTwmvglyHdVLu5sPmktxbBYiemfyJ +qxMxmYXCc9S0hWrWZW7edktBa9NpE58z1mx+hRIrDNbS2sDHrib9PULYCySyVYcF +P+PWEe1CAS5jqkR2ker5td2/pHNnJIycynBEs7l6zbc9fu+nktFJz0q2B+GJAhwE +EAEKAAYFAlUwGaQACgkQ+tiY1qQ2QkjMFw//f2hNY3BPNe+1qbhzumMDCnbTnGif +kLuAGl9OKt81VHG1f6RnaGiLpR696+6Ja45KzH15cQ5JJl5Bgs1YkR/noTGX8IAD +c70eNwiFu8JXTaaeeJrsmFkF9Tueufb364risYkvPP8tNUD3InBFEZT3WN7JKwix +coD4/BwekUwOZVDd/uCFEyhlhZsROxdKNisNo3VtAq2s+3tIBAmTrriFUl0K+ZC5 +zgavcpnPN57zMtW9aK+VO3wXqAKYLYmtgxkVzSLUZt2M7JuwOaAdyuYWAneKZPCu +1AXkmyo+d84sd5mZaKOr5xArAFiNMWPUcZL4rkS1Fq4dKtGAqzzR7a7hWtA5o27T +6vynuxZ1n0PPh0er2O/zF4znIjm5RhTlfjp/VmhZdQfpulFEQ/dMxxGkQ9z5IYbX +mTlSDbCSb+FMsanRBJ7Drp5EmBIudVGY6SHI5Re1RQiEh7GoDfUMUwZO+TVDII5R +Ra7WyuimYleJgDo/+7HyfuIyGDaUCVj6pwVtYtYIdOI3tTw1R1Mr0V8yaNVnJghL +CHcEJQL+YHSmiMM3ySil3O6tm1By6lFz8bVe/rgG/5uklQrnjMR37jYboi1orCC4 +yeIoQeV0ItlxeTyBwYIV/o1DBNxDevTZvJabC93WiGLw2XFjpZ0q/9+zI2rJUZJh +qxmKP+D4e27lCI65Ag0EVTAYdgEQAMvttYNqeRNBRpSX8fk45WVIV8Fb21fWdwk6 +2SkZnJURbiC0LxQnOi7wrtii7DeFZtwM2kFHihS1VHekBnIKKZQSgGoKuFAQMGyu +a426H4ZsSmA9Ufd7kRbvdtEcp7/RTAanhrSL4lkBhaKJrXlxBJ27o3nd7/rh7r3a +OszbPY6DJ5bWClX3KooPTDl/RF2lHn+fweFk58UvuunHIyo4BWJUdilSXIjLun+P +Qaik4ZAsZVwNhdNz05d+vtai4AwbYoO7adboMLRkYaXSQwGytkm+fM6r7OpXHYuS +cR4zB/OK5hxCVEpWfiwN71N2NMvnEMaWd/9uhqxJzyvYgkVUXV9274TUe16pzXnW +ZLfmitjwc91e7mJBBfKNenDdhaLEIlDRwKTLj7k58f9srpMnyZFacntu5pUMNblB +cjXwWxz5ZaQikLnKYhIvrIEwtWPyjqOzNXNvYfZamve/LJ8HmWGCKao3QHoAIDvB +9XBxrDyTJDpxbog6Qu4SY8AdgVlan6c/PsLDc7EUegeYiNTzsOK+eq3G5/E92eIu +TsUXlciypFcRm1q8vLRr+HYYe2mJDo4GetB1zLkAFBcYJm/x9iJQbu0hn5NxJvZO +R0Y5nOJQdyi+muJzKYwhkuzaOlswzqVXkq/7+QCjg7QsycdcwDjiQh3OrsgXHrwl +M7gyafL9ABEBAAGJAh8EGAEKAAkFAlUwGHYCGwwACgkQzUmgr8V5Kb50BxAAhj9T +TwmNrgRldTHszj+Qc+v8RWqV6j+R+zc0cn5XlUa6XFaXI1OFFg71H4dhCPEiYeN0 +IrnocyMNvCol+eKIlPKbPTmoixjQ4udPTR1DC1Bx1MyW5FqOrsgBl5t0e1VwEViM +NspSStxu5Hsr6oWz2GD48lXZWJOgoL1RLs+uxjcyjySD/em2fOKASwchYmI+ezRv +plfhAFIMKTSCN2pgVTEOaaz13M0U+MoprThqF1LWzkGkkC7n/1V1f5tn83BWiagG +2N2Q4tHLfyouzMUKnX28kQ9sXfxwmYb2sA9FNIgxy+TdKU2ofLxivoWT8zS189z/ +Yj9fErmiMjns2FzEDX+bipAw55X4D/RsaFgC+2x2PDbxeQh6JalRA2Wjq32Ouubx +u+I4QhEDJIcVwt9x6LPDuos1F+M5QW0AiUhKrZJ17UrxOtaquh/nPUL9T3l2qPUn +1ChrZEEEhHO6vA8+jn0+cV9n5xEz30Str9iHnDQ5QyR5LyV4UBPgTdWyQzNVKA69 +KsSr9lbHEtQFRzGuBKwt6UlSFv9vPWWJkJit5XDKAlcKuGXj0J8OlltToocGElkF ++gEBZfoOWi/IBjRLrFW2cT3p36DTR5O1Ud/1DLnWRqgWNBLrbs2/KMKE6EnHttyD +7Tz8SQkuxltX/yBXMV3Ddy0t6nWV2SZEfuxJAQI= +=spg4 +-----END PGP PUBLIC KEY BLOCK----- +``` + +We will triage and respond to your disclosure within 24 hours. If you do not hear from us after 24 hours, you may also contact the development team at rippleapi@ripple.com. diff --git a/packages/ripple-keypairs/nyc.config.js b/packages/ripple-keypairs/nyc.config.js new file mode 100644 index 00000000..0e6b3444 --- /dev/null +++ b/packages/ripple-keypairs/nyc.config.js @@ -0,0 +1,20 @@ +module.exports = { + extension: ['.js', '.ts'], + + exclude: [ + '**/*.d.ts', + '*.js', + 'test/**/*', + 'coverage/**/*', + ], + + // Assert we remain at 100% code coverage + 'check-coverage': true, + 'branches': 100, + 'lines': 100, + 'functions': 100, + 'statements': 100, + + // Required to get coverage reported on every file, including those that aren't tested + all: true, +} diff --git a/packages/ripple-keypairs/package.json b/packages/ripple-keypairs/package.json new file mode 100644 index 00000000..d34564d3 --- /dev/null +++ b/packages/ripple-keypairs/package.json @@ -0,0 +1,36 @@ +{ + "name": "ripple-keypairs", + "version": "1.0.3", + "description": "Cryptographic key pairs for the XRP Ledger", + "scripts": { + "build": "tsc -b", + "test": "tsc -b && nyc mocha", + "clean": "rm -rf ./dist && rm -rf tsconfig.tsbuildinfo", + "lint": "eslint . --ext .ts", + "prepublish": "npm run lint && npm test" + }, + "files": [ + "dist/*" + ], + "main": "dist/", + "directories": { + "test": "test" + }, + "dependencies": { + "bn.js": "^5.1.1", + "brorand": "^1.0.5", + "elliptic": "^6.5.4", + "hash.js": "^1.0.3", + "ripple-address-codec": "^4.0.0" + }, + "repository": { + "type": "git", + "url": "git@github.com:XRPLF/xrpl.js.git" + }, + "license": "ISC", + "prettier": "@xrplf/prettier-config", + "engines": { + "node": ">= 10", + "npm": ">=7.0.0" + } +} diff --git a/packages/ripple-keypairs/src/Sha512.ts b/packages/ripple-keypairs/src/Sha512.ts new file mode 100644 index 00000000..9c916e6d --- /dev/null +++ b/packages/ripple-keypairs/src/Sha512.ts @@ -0,0 +1,39 @@ +/* eslint-disable no-bitwise -- + * lots of bitwise operators necessary for this */ +import * as hashjs from 'hash.js' +import * as BigNum from 'bn.js' + +export default class Sha512 { + // TODO: type of `hash`? + hash: any + + constructor() { + this.hash = hashjs.sha512() + } + + add(bytes) { + this.hash.update(bytes) + return this + } + + addU32(i) { + return this.add([ + (i >>> 24) & 0xff, + (i >>> 16) & 0xff, + (i >>> 8) & 0xff, + i & 0xff, + ]) + } + + finish() { + return this.hash.digest() + } + + first256() { + return this.finish().slice(0, 32) + } + + first256BN() { + return new BigNum(this.first256()) + } +} diff --git a/packages/ripple-keypairs/src/index.ts b/packages/ripple-keypairs/src/index.ts new file mode 100644 index 00000000..288afddb --- /dev/null +++ b/packages/ripple-keypairs/src/index.ts @@ -0,0 +1,168 @@ +import * as assert from 'assert' +import * as brorand from 'brorand' +import * as hashjs from 'hash.js' +import * as elliptic from 'elliptic' + +import * as addressCodec from 'ripple-address-codec' +import { derivePrivateKey, accountPublicFromPublicGenerator } from './secp256k1' +import * as utils from './utils' + +const Ed25519 = elliptic.eddsa('ed25519') +const Secp256k1 = elliptic.ec('secp256k1') + +const { hexToBytes } = utils +const { bytesToHex } = utils + +function generateSeed( + options: { + entropy?: Uint8Array + algorithm?: 'ed25519' | 'ecdsa-secp256k1' + } = {}, +): string { + assert.ok( + !options.entropy || options.entropy.length >= 16, + 'entropy too short', + ) + const entropy = options.entropy ? options.entropy.slice(0, 16) : brorand(16) + const type = options.algorithm === 'ed25519' ? 'ed25519' : 'secp256k1' + return addressCodec.encodeSeed(entropy, type) +} + +function hash(message): number[] { + return hashjs.sha512().update(message).digest().slice(0, 32) +} + +const secp256k1 = { + deriveKeypair( + entropy: Uint8Array, + options?: object, + ): { + privateKey: string + publicKey: string + } { + const prefix = '00' + + const privateKey = + prefix + derivePrivateKey(entropy, options).toString(16, 64).toUpperCase() + + const publicKey = bytesToHex( + Secp256k1.keyFromPrivate(privateKey.slice(2)) + .getPublic() + .encodeCompressed(), + ) + return { privateKey, publicKey } + }, + + sign(message, privateKey): string { + return bytesToHex( + Secp256k1.sign(hash(message), hexToBytes(privateKey), { + canonical: true, + }).toDER(), + ) + }, + + verify(message, signature, publicKey): boolean { + return Secp256k1.verify(hash(message), signature, hexToBytes(publicKey)) + }, +} + +const ed25519 = { + deriveKeypair(entropy: Uint8Array): { + privateKey: string + publicKey: string + } { + const prefix = 'ED' + const rawPrivateKey = hash(entropy) + const privateKey = prefix + bytesToHex(rawPrivateKey) + const publicKey = + prefix + bytesToHex(Ed25519.keyFromSecret(rawPrivateKey).pubBytes()) + return { privateKey, publicKey } + }, + + sign(message, privateKey): string { + // caution: Ed25519.sign interprets all strings as hex, stripping + // any non-hex characters without warning + assert.ok(Array.isArray(message), 'message must be array of octets') + return bytesToHex( + Ed25519.sign(message, hexToBytes(privateKey).slice(1)).toBytes(), + ) + }, + + verify(message, signature, publicKey): boolean { + return Ed25519.verify( + message, + hexToBytes(signature), + hexToBytes(publicKey).slice(1), + ) + }, +} + +function select(algorithm): any { + const methods = { 'ecdsa-secp256k1': secp256k1, ed25519 } + return methods[algorithm] +} + +function deriveKeypair( + seed: string, + options?: object, +): { + publicKey: string + privateKey: string +} { + const decoded = addressCodec.decodeSeed(seed) + const algorithm = decoded.type === 'ed25519' ? 'ed25519' : 'ecdsa-secp256k1' + const method = select(algorithm) + const keypair = method.deriveKeypair(decoded.bytes, options) + const messageToVerify = hash('This test message should verify.') + const signature = method.sign(messageToVerify, keypair.privateKey) + /* istanbul ignore if */ + if (method.verify(messageToVerify, signature, keypair.publicKey) !== true) { + throw new Error('derived keypair did not generate verifiable signature') + } + return keypair +} + +function getAlgorithmFromKey(key): 'ed25519' | 'ecdsa-secp256k1' { + const bytes = hexToBytes(key) + return bytes.length === 33 && bytes[0] === 0xed + ? 'ed25519' + : 'ecdsa-secp256k1' +} + +function sign(messageHex, privateKey): string { + const algorithm = getAlgorithmFromKey(privateKey) + return select(algorithm).sign(hexToBytes(messageHex), privateKey) +} + +function verify(messageHex, signature, publicKey): boolean { + const algorithm = getAlgorithmFromKey(publicKey) + return select(algorithm).verify(hexToBytes(messageHex), signature, publicKey) +} + +function deriveAddressFromBytes(publicKeyBytes: Buffer): string { + return addressCodec.encodeAccountID( + utils.computePublicKeyHash(publicKeyBytes), + ) +} + +function deriveAddress(publicKey): string { + return deriveAddressFromBytes(Buffer.from(hexToBytes(publicKey))) +} + +function deriveNodeAddress(publicKey): string { + const generatorBytes = addressCodec.decodeNodePublic(publicKey) + const accountPublicBytes = accountPublicFromPublicGenerator(generatorBytes) + return deriveAddressFromBytes(accountPublicBytes) +} + +const { decodeSeed } = addressCodec + +export = { + generateSeed, + deriveKeypair, + sign, + verify, + deriveAddress, + deriveNodeAddress, + decodeSeed, +} diff --git a/packages/ripple-keypairs/src/secp256k1.ts b/packages/ripple-keypairs/src/secp256k1.ts new file mode 100644 index 00000000..6f307f1e --- /dev/null +++ b/packages/ripple-keypairs/src/secp256k1.ts @@ -0,0 +1,77 @@ +import * as elliptic from 'elliptic' + +import Sha512 from './Sha512' + +const secp256k1 = elliptic.ec('secp256k1') + +function deriveScalar(bytes, discrim?: number) { + const order = secp256k1.curve.n + for (let i = 0; i <= 0xffffffff; i++) { + // We hash the bytes to find a 256 bit number, looping until we are sure it + // is less than the order of the curve. + const hasher = new Sha512().add(bytes) + // If the optional discriminator index was passed in, update the hash. + if (discrim !== undefined) { + hasher.addU32(discrim) + } + hasher.addU32(i) + const key = hasher.first256BN() + /* istanbul ignore else */ + if (key.cmpn(0) > 0 && key.cmp(order) < 0) { + return key + } + } + // This error is practically impossible to reach. + // The order of the curve describes the (finite) amount of points on the curve + // https://github.com/indutny/elliptic/blob/master/lib/elliptic/curves.js#L182 + // How often will an (essentially) random number generated by Sha512 be larger than that? + // There's 2^32 chances (the for loop) to get a number smaller than the order, + // and it's rare that you'll even get past the first loop iteration. + // Note that in TypeScript we actually need the throw, otherwise the function signature would be BN | undefined + // + /* istanbul ignore next */ + throw new Error('impossible unicorn ;)') +} + +/** + * @param seed - Bytes. + * @param [opts] - Object. + * @param [opts.accountIndex=0] - The account number to generate. + * @param [opts.validator=false] - Generate root key-pair, + * as used by validators. + * @returns {bn.js} 256 bit scalar value. + * + */ +export function derivePrivateKey( + seed, + opts: { + validator?: boolean + accountIndex?: number + } = {}, +) { + const root = opts.validator + const order = secp256k1.curve.n + + // This private generator represents the `root` private key, and is what's + // used by validators for signing when a keypair is generated from a seed. + const privateGen = deriveScalar(seed) + if (root) { + // As returned by validation_create for a given seed + return privateGen + } + const publicGen = secp256k1.g.mul(privateGen) + // A seed can generate many keypairs as a function of the seed and a uint32. + // Almost everyone just uses the first account, `0`. + const accountIndex = opts.accountIndex || 0 + return deriveScalar(publicGen.encodeCompressed(), accountIndex) + .add(privateGen) + .mod(order) +} + +export function accountPublicFromPublicGenerator(publicGenBytes) { + const rootPubPoint = secp256k1.curve.decodePoint(publicGenBytes) + const scalar = deriveScalar(publicGenBytes, 0) + const point = secp256k1.g.mul(scalar) + const offset = rootPubPoint.add(point) + return offset.encodeCompressed() +} diff --git a/packages/ripple-keypairs/src/utils.ts b/packages/ripple-keypairs/src/utils.ts new file mode 100644 index 00000000..100b3b65 --- /dev/null +++ b/packages/ripple-keypairs/src/utils.ts @@ -0,0 +1,26 @@ +import * as assert from 'assert' +import * as hashjs from 'hash.js' +import * as BN from 'bn.js' + +function bytesToHex(a): string { + return a + .map((byteValue) => { + const hex = byteValue.toString(16).toUpperCase() + return hex.length > 1 ? hex : `0${hex}` + }) + .join('') +} + +function hexToBytes(a): number[] { + assert.ok(a.length % 2 === 0) + return new BN(a, 16).toArray(null, a.length / 2) +} + +function computePublicKeyHash(publicKeyBytes: Buffer): Buffer { + const hash256 = hashjs.sha256().update(publicKeyBytes).digest() + + const hash160 = hashjs.ripemd160().update(hash256).digest() + return Buffer.from(hash160) +} + +export { bytesToHex, hexToBytes, computePublicKeyHash } diff --git a/packages/ripple-keypairs/test/api-test.js b/packages/ripple-keypairs/test/api-test.js new file mode 100644 index 00000000..58d311b7 --- /dev/null +++ b/packages/ripple-keypairs/test/api-test.js @@ -0,0 +1,109 @@ +'use strict' // eslint-disable-line strict + +const assert = require('assert') +const fixtures = require('./fixtures/api.json') +const api = require('../dist') +const decodeSeed = api.decodeSeed +const entropy = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] + +describe('api', () => { + it('generateSeed - secp256k1', () => { + assert.strictEqual(api.generateSeed({entropy}), fixtures.secp256k1.seed) + }) + + it('generateSeed - secp256k1, random', () => { + const seed = api.generateSeed() + assert(seed.charAt(0) === 's') + const {type, bytes} = decodeSeed(seed) + assert(type === 'secp256k1') + assert(bytes.length === 16) + }) + + it('generateSeed - ed25519', () => { + assert.strictEqual(api.generateSeed({entropy, algorithm: 'ed25519'}), + fixtures.ed25519.seed) + }) + + it('generateSeed - ed25519, random', () => { + const seed = api.generateSeed({algorithm: 'ed25519'}) + assert(seed.slice(0, 3) === 'sEd') + const {type, bytes} = decodeSeed(seed) + assert(type === 'ed25519') + assert(bytes.length === 16) + }) + + it('deriveKeypair - secp256k1', () => { + const keypair = api.deriveKeypair(fixtures.secp256k1.seed) + assert.deepEqual(keypair, fixtures.secp256k1.keypair) + }) + + it('deriveKeypair - ed25519', () => { + const keypair = api.deriveKeypair(fixtures.ed25519.seed) + assert.deepEqual(keypair, fixtures.ed25519.keypair) + }) + + it('deriveKeypair - secp256k1 - validator', () => { + const keypair = api.deriveKeypair(fixtures.secp256k1.seed, {validator: true}) + assert.deepEqual(keypair, fixtures.secp256k1.validatorKeypair) + }) + + it('deriveKeypair - ed25519 - validator', () => { + const keypair = api.deriveKeypair(fixtures.ed25519.seed, {validator: true}) + assert.deepEqual(keypair, fixtures.ed25519.validatorKeypair) + }) + + it('deriveAddress - secp256k1 public key', () => { + const address = api.deriveAddress(fixtures.secp256k1.keypair.publicKey) + assert.strictEqual(address, fixtures.secp256k1.address) + }) + + it('deriveAddress - ed25519 public key', () => { + const address = api.deriveAddress(fixtures.ed25519.keypair.publicKey) + assert.strictEqual(address, fixtures.ed25519.address) + }) + + it('sign - secp256k1', () => { + const privateKey = fixtures.secp256k1.keypair.privateKey + const message = fixtures.secp256k1.message + const messageHex = (Buffer.from(message, 'utf8')).toString('hex') + const signature = api.sign(messageHex, privateKey) + assert.strictEqual(signature, fixtures.secp256k1.signature) + }) + + it('verify - secp256k1', () => { + const signature = fixtures.secp256k1.signature + const publicKey = fixtures.secp256k1.keypair.publicKey + const message = fixtures.secp256k1.message + const messageHex = (Buffer.from(message, 'utf8')).toString('hex') + assert(api.verify(messageHex, signature, publicKey)) + }) + + it('sign - ed25519', () => { + const privateKey = fixtures.ed25519.keypair.privateKey + const message = fixtures.ed25519.message + const messageHex = (Buffer.from(message, 'utf8')).toString('hex') + const signature = api.sign(messageHex, privateKey) + assert.strictEqual(signature, fixtures.ed25519.signature) + }) + + it('verify - ed25519', () => { + const signature = fixtures.ed25519.signature + const publicKey = fixtures.ed25519.keypair.publicKey + const message = fixtures.ed25519.message + const messageHex = (Buffer.from(message, 'utf8')).toString('hex') + assert(api.verify(messageHex, signature, publicKey)) + }) + + it('deriveNodeAddress', () => { + const x = 'n9KHn8NfbBsZV5q8bLfS72XyGqwFt5mgoPbcTV4c6qKiuPTAtXYk' + const y = 'rU7bM9ENDkybaxNrefAVjdLTyNLuue1KaJ' + assert.strictEqual(api.deriveNodeAddress(x), y) + }) + + it('Random Address', () => { + const seed = api.generateSeed() + const keypair = api.deriveKeypair(seed) + const address = api.deriveAddress(keypair.publicKey) + assert(address[0] === 'r') + }) +}) diff --git a/packages/ripple-keypairs/test/codec-test.js b/packages/ripple-keypairs/test/codec-test.js new file mode 100644 index 00000000..3f7365bd --- /dev/null +++ b/packages/ripple-keypairs/test/codec-test.js @@ -0,0 +1,53 @@ +/* eslint-disable no-unused-expressions/no-unused-expressions */ + +'use strict' + +const assert = require('assert') +const api = require('ripple-address-codec') + +function toHex(bytes) { + return Buffer.from(bytes).toString('hex').toUpperCase() +} + +function toBytes(hex) { + return Buffer.from(hex, 'hex').toJSON().data +} + +describe('ripple-address-codec', function() { + function makeTest(type, base58, hex) { + it('can translate between ' + hex + ' and ' + base58 + ' (encode ' + type + ')', function() { + const actual = api['encode' + type](toBytes(hex)) + assert.equal(actual, base58) + }) + it('can translate between ' + base58 + ' and ' + hex + ' (decode ' + type + ')', function() { + const buf = api['decode' + type](base58) + assert.equal(toHex(buf), hex) + }) + } + + makeTest('AccountID', 'rJrRMgiRgrU6hDF4pgu5DXQdWyPbY35ErN', + 'BA8E78626EE42C41B46D46C3048DF3A1C3C87072') + + makeTest( + 'NodePublic', + 'n9MXXueo837zYH36DvMc13BwHcqtfAWNJY5czWVbp7uYTj7x17TH', + '0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828') + + it('can decode arbitrary seeds', function() { + const decoded = api.decodeSeed('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + assert.equal(toHex(decoded.bytes), '4C3A1D213FBDFB14C7C28D609469B341') + assert.equal(decoded.type, 'ed25519') + + const decoded2 = api.decodeSeed('sn259rEFXrQrWyx3Q7XneWcwV6dfL') + assert.equal(toHex(decoded2.bytes), 'CF2DE378FBDD7E2EE87D486DFB5A7BFF') + assert.equal(decoded2.type, 'secp256k1') + }) + + it('can pass a type as second arg to encodeSeed', function() { + const edSeed = 'sEdTM1uX8pu2do5XvTnutH6HsouMaM2' + const decoded = api.decodeSeed(edSeed) + assert.equal(toHex(decoded.bytes), '4C3A1D213FBDFB14C7C28D609469B341') + assert.equal(decoded.type, 'ed25519') + assert.equal(api.encodeSeed(decoded.bytes, decoded.type), edSeed) + }) +}) diff --git a/packages/ripple-keypairs/test/fixtures/api.json b/packages/ripple-keypairs/test/fixtures/api.json new file mode 100644 index 00000000..13c81652 --- /dev/null +++ b/packages/ripple-keypairs/test/fixtures/api.json @@ -0,0 +1,30 @@ +{ + "secp256k1": { + "seed": "sp5fghtJtpUorTwvof1NpDXAzNwf5", + "keypair": { + "privateKey": "00D78B9735C3F26501C7337B8A5727FD53A6EFDBC6AA55984F098488561F985E23", + "publicKey": "030D58EB48B4420B1F7B9DF55087E0E29FEF0E8468F9A6825B01CA2C361042D435" + }, + "validatorKeypair": { + "privateKey": "001A6B48BF0DE7C7E425B61E0444E3921182B6529867685257CEDC3E7EF13F0F18", + "publicKey": "03B462771E99AAE9C7912AF47D6120C0B0DA972A4043A17F26320A52056DA46EA8" + }, + "address": "rU6K7V3Po4snVhBBaU29sesqs2qTQJWDw1", + "message": "test message", + "signature": "30440220583A91C95E54E6A651C47BEC22744E0B101E2C4060E7B08F6341657DAD9BC3EE02207D1489C7395DB0188D3A56A977ECBA54B36FA9371B40319655B1B4429E33EF2D" + }, + "ed25519": { + "seed": "sEdSKaCy2JT7JaM7v95H9SxkhP9wS2r", + "keypair": { + "privateKey": "EDB4C4E046826BD26190D09715FC31F4E6A728204EADD112905B08B14B7F15C4F3", + "publicKey": "ED01FA53FA5A7E77798F882ECE20B1ABC00BB358A9E55A202D0D0676BD0CE37A63" + }, + "validatorKeypair": { + "privateKey": "EDB4C4E046826BD26190D09715FC31F4E6A728204EADD112905B08B14B7F15C4F3", + "publicKey": "ED01FA53FA5A7E77798F882ECE20B1ABC00BB358A9E55A202D0D0676BD0CE37A63" + }, + "address": "rLUEXYuLiQptky37CqLcm9USQpPiz5rkpD", + "message": "test message", + "signature": "CB199E1BFD4E3DAA105E4832EEDFA36413E1F44205E4EFB9E27E826044C21E3E2E848BBC8195E8959BADF887599B7310AD1B7047EF11B682E0D068F73749750E" + } +} diff --git a/packages/ripple-keypairs/test/utils-test.js b/packages/ripple-keypairs/test/utils-test.js new file mode 100644 index 00000000..3fb8f632 --- /dev/null +++ b/packages/ripple-keypairs/test/utils-test.js @@ -0,0 +1,14 @@ +'use strict' // eslint-disable-line strict + +const assert = require('assert') +const utils = require('../dist/utils') + +describe('utils', () => { + it('hexToBytes - zero', () => { + assert.deepEqual(utils.hexToBytes('000000'), [0, 0, 0]) + }) + + it('hexToBytes - DEADBEEF', () => { + assert.deepEqual(utils.hexToBytes('DEADBEEF'), [222, 173, 190, 239]) + }) +}) diff --git a/packages/ripple-keypairs/test/xrp-codec-test.js b/packages/ripple-keypairs/test/xrp-codec-test.js new file mode 100644 index 00000000..f431cefa --- /dev/null +++ b/packages/ripple-keypairs/test/xrp-codec-test.js @@ -0,0 +1,81 @@ +/* eslint-disable no-unused-expressions/no-unused-expressions */ + +'use strict' + +const assert = require('assert') +const api = require('ripple-address-codec') + +function toHex(bytes) { + return Buffer.from(bytes).toString('hex').toUpperCase() +} + +function toBytes(hex) { + return Buffer.from(hex, 'hex').toJSON().data +} + +describe('ripple-address-codec', function() { + + describe('encodeSeed', function() { + + it('encodes a secp256k1 seed', function() { + const result = api.encodeSeed(toBytes('CF2DE378FBDD7E2EE87D486DFB5A7BFF'), 'secp256k1') + assert.equal(result, 'sn259rEFXrQrWyx3Q7XneWcwV6dfL') + }) + + it('encodes low secp256k1 seed', function() { + const result = api.encodeSeed(toBytes('00000000000000000000000000000000'), 'secp256k1') + assert.equal(result, 'sp6JS7f14BuwFY8Mw6bTtLKWauoUs') + }) + + it('encodes high secp256k1 seed', function() { + const result = api.encodeSeed(toBytes('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'), 'secp256k1') + assert.equal(result, 'saGwBRReqUNKuWNLpUAq8i8NkXEPN') + }) + + it('encodes an ed25519 seed', function() { + const result = api.encodeSeed(toBytes('4C3A1D213FBDFB14C7C28D609469B341'), 'ed25519') + assert.equal(result, 'sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + }) + + it('encodes low ed25519 seed', function() { + const result = api.encodeSeed(toBytes('00000000000000000000000000000000'), 'ed25519') + assert.equal(result, 'sEdSJHS4oiAdz7w2X2ni1gFiqtbJHqE') + }) + + it('encodes high ed25519 seed', function() { + const result = api.encodeSeed(toBytes('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'), 'ed25519') + assert.equal(result, 'sEdV19BLfeQeKdEXyYA4NhjPJe6XBfG') + }) + }) + + describe('decodeSeed', function() { + + it('can decode an Ed25519 seed', function() { + const decoded = api.decodeSeed('sEdTM1uX8pu2do5XvTnutH6HsouMaM2') + assert.equal(toHex(decoded.bytes), '4C3A1D213FBDFB14C7C28D609469B341') + assert.equal(decoded.type, 'ed25519') + }) + + it('can decode a secp256k1 seed', function() { + const decoded = api.decodeSeed('sn259rEFXrQrWyx3Q7XneWcwV6dfL') + assert.equal(toHex(decoded.bytes), 'CF2DE378FBDD7E2EE87D486DFB5A7BFF') + assert.equal(decoded.type, 'secp256k1') + }) + }) + + describe('encodeAccountID', function() { + + it('can encode an AccountID', function() { + const encoded = api.encodeAccountID(toBytes('BA8E78626EE42C41B46D46C3048DF3A1C3C87072')) + assert.equal(encoded, 'rJrRMgiRgrU6hDF4pgu5DXQdWyPbY35ErN') + }) + }) + + describe('decodeNodePublic', function() { + + it('can decode a NodePublic', function() { + const decoded = api.decodeNodePublic('n9MXXueo837zYH36DvMc13BwHcqtfAWNJY5czWVbp7uYTj7x17TH') + assert.equal(toHex(decoded), '0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828') + }) + }) +}) diff --git a/packages/ripple-keypairs/tsconfig.json b/packages/ripple-keypairs/tsconfig.json new file mode 100644 index 00000000..4f4b9421 --- /dev/null +++ b/packages/ripple-keypairs/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "target": "ES2017", + "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "rootDir": "./src", + "noImplicitAny": false, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + }, + "references": [{ + "path": "../ripple-address-codec/tsconfig.json" + }], + "include": ["src/**/*.ts"] +} diff --git a/.eslintignore b/packages/xrpl/.eslintignore similarity index 100% rename from .eslintignore rename to packages/xrpl/.eslintignore diff --git a/.eslintrc.js b/packages/xrpl/.eslintrc.js similarity index 94% rename from .eslintrc.js rename to packages/xrpl/.eslintrc.js index 54a90a3c..42ce4d9f 100644 --- a/.eslintrc.js +++ b/packages/xrpl/.eslintrc.js @@ -75,6 +75,11 @@ module.exports = { { files: ['test/**/*.ts'], rules: { + // Because this project is managed by lerna, dev dependencies are + // hoisted and do not appear in the package.json. + 'import/no-extraneous-dependencies': 'off', + 'node/no-extraneous-import': 'off', + // We have lots of magic numbers in tests '@typescript-eslint/no-magic-numbers': 'off', @@ -90,14 +95,6 @@ module.exports = { // We need to mess with internal things to generate certain testing situations '@typescript-eslint/no-unsafe-member-access': 'off', - // We need to be able to import xrpl-local - 'node/no-extraneous-import': [ - 'error', - { - allowModules: ['xrpl-local'], - }, - ], - // Tests are already in 2 callbacks, so max 3 is pretty restrictive 'max-nested-callbacks': 'off', diff --git a/packages/xrpl/.gitignore b/packages/xrpl/.gitignore new file mode 100644 index 00000000..618cc69e --- /dev/null +++ b/packages/xrpl/.gitignore @@ -0,0 +1,73 @@ +# .gitignore + +# Ignore package locks other than npm. +yarn.lock +npm-shrinkwrap.json + +# Ignore vim swap files. +*.swp + +# Ignore SCons support files. +.sconsign.dblite + +# Ignore python compiled files. +*.pyc + +# Ignore Macintosh Desktop Services Store files. +.DS_Store + +# Ignore backup/temps +*~ + +# Ignore object files. +*.o +build/ +tags +bin/rippled +Debug/*.* +Release/*.* + +# Ignore locally installed node_modules +node_modules +!test/node_modules + +# Ignore tmp directory. +tmp + +# Ignore database directory. +db/*.db +db/*.db-* + +# Ignore customized configs +rippled.cfg +validators.txt +test/config.js + +# Ignore coverage files +/lib-cov +/src-cov +/coverage.html +/coverage + +# Ignore IntelliJ files +.idea + +# Ignore npm-debug +npm-debug.log + +# Ignore dist folder, built from tsc +dist/ + +# TypeScript incremental compilation cache +*.tsbuildinfo + +# Ignore perf test cache +scripts/cache + +.eslintrc + +# nyc (istanbul) +.nyc_output + +# browser tests +testCompiledForWeb diff --git a/.nycrc b/packages/xrpl/.nycrc similarity index 100% rename from .nycrc rename to packages/xrpl/.nycrc diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md new file mode 100644 index 00000000..f1324ebf --- /dev/null +++ b/packages/xrpl/HISTORY.md @@ -0,0 +1,1618 @@ +# xrpl.js (ripple-lib) Release History + +Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xrpl-announce) for release announcements. We recommend that xrpl.js (ripple-lib) users stay up-to-date with the latest stable release. + +## 2.0.1 (2021-11-01) + +* Fix private interfaces not showing up in the docs (#1769) + +## 2.0.0 (2021-10-20) + +A migration guide is available at https://xrpl.org/xrpljs2-migration-guide.html. + +### Added +* New request and transaction models that exactly mirror rippled +* Wallet object to handle key pairs +* All rippled request methods are now supported by client request methods +* JavaScript method (`validate`) to check the shape of transaction models +* Methods to multisign (`multisign`), authorize a payment channel (`authorizeChannel`) and verify a transaction signature (`verifySignature`) +* `client.autofill` (converts X-Addresses, converts transaction flags from objects to numbers, and fills in `Sequence`, `LastLedgerSequence`, and `Fee`) +* Adds a message to the connection's trace whenever a partial payment is received on a stream +* `getBalanceChanges` added in from `ripple-lib-transactionparser` +* Changed return shape of some methods +* Reliable transaction submission (waits until the transaction has been validated or `LastLedgerSequence` has failed before returning) + +### Changed +* Renamed package from `ripple-lib` to `xrpl.js` +* Main client + * Renamed from `RippleAPI` to `Client` + * Removed all methods that did not require a connection to the ledger (most were moved to the utils) + * Changed the constructor params to take a mandatory server URL and then the rest of the optional params (since there are no longer any functions on the Client that don't require a server connection) + * Added TypeScript typing to subscription handlers + * `client.request` now takes a request object that matches the rippled format, instead of separating out the `command` + * `client.requestAll` is now a public method that anyone can use + * `api.getLedgerVersion` -> `client.getLedgerIndex` + * `client.submit` will now sign a transaction +* Better TypeScript typing everywhere +* Completely revamped library documentation (now available at js.xrpl.org) +* Utils + * Exported all utils at the top level and removed them from the client + * Renamed many of the utils to be more descriptive and more succinct + * Moved `ripple-address-codec` functions from `Client` to `utils` (and exported at the top level) + * Moved `hasNextPage` from `Client` to `utils` +* Renamed `client.generateFaucetWallet` to `client.fundWallet` (and it now returns a `Wallet` and the wallet's balance) +* Better flag organization +* Updated dependencies + * ws, typescript + +### Deprecated +* `api.prepareTransaction` (left in for easier migration, but it is now just an alias of `client.autofill`, which should be used instead) + +### Removed +* Automatic client subscription to incoming ledgers +* Removed `jsonschema` in favor of TypeScript types and `validate` for JS users +* Functions that were replaced by similar functionality elsewhere in the library + * `api.combine` -> `multisign` + * `api.sign` -> `Wallet.sign` + * `generateXAddress` -> `Wallet.generate(...).getXAddress(...)` + * `api.prepare...` -> `client.autofill(tx)` (they have slightly different APIs, but serve a similar purpose) +* Several client abstraction methods that were deemed no longer necessary + * `api.getAccountInfo` -> `client.request({command: 'account_info', ...})` + * `api.getAccountObjects` -> `client.request({command: 'account_objects', ...})` + * `api.getBalanceSheet` -> `client.request({command: 'gateway_balances', ...})` + * `api.getLedger` -> `client.request({command: 'ledger', ...})` + * `api.getOrders` -> `client.request({command: 'account_offers', ...})` + * `api.getPaymentChannel` -> `client.request({command: 'ledger_entry', ...})` + * `api.getSettings` -> `client.request({command: 'account_info', ...})` + * `api.getServerInfo` -> `client.request({command: 'server_info'})` + * `api.getTransaction` -> `client.request({command: 'tx', ...})` + * `api.getTransactions` -> `client.request({command: 'account_tx', ...})` + * `api.getTrustlines` -> `client.request({command: 'account_lines', ...})` + * `api.getPaths` -> `client.request({command: ripple_path_find, ...})` +* Helper methods/utils that are no longer necessary (such as `renameCounterpartyToIssuer` and `formatBidsAndAsks`) + +### Security +* Fixed potential vulnerability in xrp-drops conversion (#1714) + +### Changes for library contributors +* Linted code +* Changed the docs framework to `typedoc` +* Changes to testing structure + * Moved fixtures out of `test/mockRippled` - they are now defined in the test that they are used + * Renamed all files to be camelCase + * Fixtures now use TypeScript + * Use chai instead of assert-diff +* Much more extensive integration testing +* Switched from yarn to npm +* Updated dev dependencies - replaced assert-diff with chai, updated linters, removed jsonschemas, updated types +* Reorganized files + * Anything connection/client-related is in `src/client` + * All models are in `src/models` + * All additional abstraction functions are in `src/sugar` + * All independent methods that don't require a connection are in `src/utils` + * Everything to do with wallets is in `src/wallet` + + +## 1.10.0 (2021-08-12) + +* Add address generation from Devnet/Testnet faucets (#1497) +* Fix bug with `getBalances()` ledgerVersion (#1505) +* Include lodash in webpack build (#1500) +* Documentation Updates: + * Export and document AccountSetFlags (#1525) + * Add links to example keypair derivation (#1523) + +## 1.9.8 (2021-07-30) + +* Export offline methods to top level of package (#1479) +* Remove deprecated ledger fields (#1160) + * These fields have been deprecated for many years: accepted, hash (use ledger_hash instead), seqNum (use ledger_index instead), totalCoins (use total_coins instead) +* Docs improvements (#1251, #1420, #1463) +* Reduce dependencies on lodash (#1467) +* Bug fixes + * Allow lowercase hex for memos (#1475) + * Add type argument to Promise (#1474) + * Fix miscommunication with ripplingDisabled in trustlines (#1481) + * Allow X-address for issuer (#1471) +* Dependencies + * ws, ripple-binary-codec + * deps-dev: typescript, @types/node, ts-node + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +f3a0efb9f8bb618da6b10425a9b55a8492359a331a22d0ab4de7d3551870eb3d build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +fd40457a89a14732ce261148e129cdda5aa963d9a433c57700353083faa1bffe build/ripple-latest.js +``` + +## 1.9.7 (2021-07-14) + +* Bug fixes + * TypeScript: fix TrustlineTransaction type (#1458) (#1460) (thanks @mrosendin) +* Docs + * Update boilerplate (#1459) (thanks @mDuo13) +* Dependencies + * @types/node, @types/ws, @types/lodash, @types/mocha, prettier, mocha, webpack, ripple-binary-codec, ws, webpack-cli, doctoc + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +a994422648c040076251c9a040fd494bc2ee30de23867607985b953022853afc build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +2e22b6187ff5f9300520c29a538013067609b439181f1f2184d6a80fcfa2449c build/ripple-latest.js +``` + +## 1.9.6 (2021-07-01) + +* Bug fixes + * Use 'current' ledger when preparing txs (#1429) (#999) + * Allow multiple settings at once (#1435) +* Dependencies + * ripple-address-codec, prettier, mocha + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +cac7f6f3be93efbd61dc5fd527c40f0d1baec06f2f9faa64e9eeb191cc85a710 build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +5737483e940dca8b73768d8a1de8217c7e921a9cebaadef02d2b16867658f331 build/ripple-latest.js +``` + +## 1.9.5 (2021-06-01) + +* Bug fixes + * Prevent getFee from returning NaN from Reporting Mode (#1401) (#1398) + * Return promise inside catch block of reconnect to propagate promise (#1418) (#1113) (thanks @camposfyi) + * Internal + * Update mocha to use RC file config (#1417) (#1210) (thanks @camposfyi) +* Dependencies + * @types/ws, ws, browserslist, @types/lodash + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +fcdc4aa1e1df7cb788b68f3d036e168aa64f9e818f441b99fef62d4571c0387d build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +dfb7a92c4156fb3ee367254b5ea0935cda741cd3b5c36cdca695e7d89f88605e build/ripple-latest.js +``` + +## 1.9.4 (2021-04-18) + +* Add memos support for all transaction types for getTransactions (#1353, #1397) +* Add Deno and React instructions (#1387) + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +daa2b892a18037e89fea6fcf7de67624a782971956cb8df17cd765a4b0201ee9 build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +b1d0bab54c6dbc76091610ede54a4269e73dea8cc6a9c25738d62bd7671920e4 build/ripple-latest.js +``` + +## 1.9.3 (2021-03-16) + +* Expose ripple-address-codec methods. These are static methods on RippleAPI, so you do not need to create a RippleAPI instance. + * `classicAddressToXAddress` / `xAddressToClassicAddress` + * `isValidXAddress` / `isValidClassicAddress` + * `encodeSeed` / `decodeSeed` + * `encodeAccountID` / `decodeAccountID` + * `encodeNodePublic` / `decodeNodePublic` + * `encodeAccountPublic` / `decodeAccountPublic` + * `encodeXAddress` / `decodeXAddress` + +Example 1. Encode an X-address with tag 4294967295: +```js +const RippleAPI = require('ripple-lib').RippleAPI +const xAddress = RippleAPI.classicAddressToXAddress('rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', 4294967295) +console.log(xAddress) +``` + +Output for Example 1: +``` +XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi +``` + +Example 2. Encode a test address for use with Testnet or Devnet: +```js +const RippleAPI = require('ripple-lib').RippleAPI +const address = RippleAPI.classicAddressToXAddress('r3SVzk8ApofDJuVBPKdmbbLjWGCCXpBQ2g', 123, true) +console.log(address) +``` + +Output for Example 2: +``` +T7oKJ3q7s94kDH6tpkBowhetT1JKfcfdSCmAXbS75iATyLD +``` + +Example 3. Decode an X-address: +```js +const RippleAPI = require('ripple-lib').RippleAPI +const address = RippleAPI.xAddressToClassicAddress('XVLhHMPHU98es4dbozjVtdWzVrDjtV18pX8yuPT7y4xaEHi') +console.log(address) +``` + +Output for Example 3: +```js +{ + classicAddress: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + tag: 4294967295, + test: false +} +``` + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +bcc8db4e5464197151a267d9f240693794bf1eb4d26a4e0b3637f82a1d66e440 build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +99c2825685d249c074abe7b59abaf197afce67ece7ad08ded6db67185e916dd2 build/ripple-latest.js +``` + +## 1.9.2 (2021-03-12) + +* Docs + * Add missing transaction type links (#1378) +* Bug fixes + * Deserialization and verification of payment paths (#1382) (#1347) (#1376) +* Dependencies + * Bump ripple-binary-codec to 1.1.2 + * Fix edge case when constructing a value from "0", which can occur when using rippled v1.7.0 + * Bump lodash, ripple-address-codec + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +a1fd24b65d81ea5dbc36d74da7a6317267a048bba084effff5380d47299c3c63 build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +410f78105c4f23c13671ec94f963ef47179393bfcad65ff610bc838c5a3c6a65 build/ripple-latest.js +``` + +## 1.9.1 (2021-02-25) + +* Docs + * Add transaction specifications: (#1352) + * Ticket Create + * Account Delete + * Deposit Preauth + * Update link to subscribe page (#1354) +* Bug fixes + * Allow connectionTimeout option to be customized (#1355) +* Dependencies + * Bump ripple-keypairs to 1.0.3 + * Bump elliptic to 6.5.4 (this patches a potential security issue, although we do not believe that the issue affects ripple-lib: [details](https://github.com/ripple/ripple-keypairs/security/advisories/GHSA-w6x3-9ph2-7x54)) + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +f59e0221a7218460eea59b0441a0ee2d2a14484dd473ed5373283852798516c7 build/ripple-latest-min.js +fc17a5572001d814ea6b81aa701fcb66882ec031c68afb769a8ea8b71c6529a6 build/ripple-latest-min.js.LICENSE.txt +731ed44cbff8db26bcf256e0e3f3ac3fe90a10b6c227701d67918a5d643c5b29 build/ripple-latest.js +``` + +## 1.9.0 (2020-12-07) + +* New features + * Support for tickets (TicketBatch amendment required - not yet activated on live/main network) + * `prepareTicketCreate` + * Types: Add LedgerClosedEvent and export more types +* Docs + * Improve descriptions of get-ledger response time fields + * Applications + * Add Bithomp explorer + * Add example of reliable transaction submission +* Node.js + * Require Node.js version 10.13.0+ +* Internal + * Update webpack, webpack-cli, mocha, nyc, ripple-binary-codec + * Run prettier to format code + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 build/* +2d3ae057ad637df272f98cfe940ea9e1317588e5bbf4fee47c8b16d6e6e71d85 build/ripple-latest-min.js +8cbbc7bb482f68bcc8d411bae2e42effdb14ddfa562fcbc329a373910b85cf8c build/ripple-latest.js +``` + +## 1.8.2 (2020-10-23) + +* Bug fixes + * Browser compatibility: Use ripple-binary-codec 0.2.x to prevent browser issues (#1321) + * Memory leak: Clear awaiting response promises to prevent memory leak (#1302) +* Feature: getSettings() - allow ledgerVersion to be 'validated', 'closed', or 'current' (#1298) +* Docs: Update APPLICATIONS.md + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 * +ba760c36028b8a3ce267386e188a422890dfb1b03bc87c852a4c2034ea9bac2e ripple-latest-min.js +7e5281eb9623602284b9f11564f0f3a36cfde305f2c2f7a32e0d29a04913c817 ripple-latest.js +``` + +## 1.8.1 (2020-09-25) + +* Internal + * Bump elliptic to 6.5.3 (this patches a potential security issue, although we do not believe that the issue affects ripple-lib) + * Bump ripple-binary-codec to 1.0.2 + * Bump lodash to 4.17.19 + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 * +0895f349944fa11bb1976b2c350c0eb143dfd09abbfc7c2be33aed5c2a4b9ee8 ripple-latest-min.js +7c00188a28f9d295d8e66aa08b340294d2fe49f635d154fb0df049ae8572c195 ripple-latest.js +``` + +## 1.8.0 (2020-07-06) + +* [Document `request('submit', ...)` method](https://github.com/ripple/ripple-lib/blob/develop/docs/index.md#submit), which includes additional useful information in the response +* Update [list of applications using ripple-lib](https://github.com/ripple/ripple-lib/blob/1.7.0/APPLICATIONS.md) + +## 1.7.1 (2020-05-26) + +* Fix preparePayment when using source.amount/destination.minAmount (#1295) (Fix #1237) (Thanks to @leobel) +* Docs + * Fix generateXAddress example (#1286) + * Update Transaction Streams link (#1278) +* Dependencies + * Update assert-diff, mocha, webpack-bundle-analyzer, @typescript-eslint/parser, @typescript-eslint/eslint-plugin, @types/ws, @types/node, ws, ts-node, eventemitter2 + +## 1.7.0 (2020-04-28) + +* Export hashing functions (#1275) +* Add failHard (fail_hard) option in `submit` method (#1029) +* Add type for parseAccountFlags (#1258) +* Add api.connection.getReserveBase() (#1259) +* Travis: remove node 8 (#1257) +* Dependencies + * Update ripple-address-codec, @types/ws, @types/lodash, https-proxy-agent + * Update devDependencies: eventemitter2, nyc, ejs, @types/node, webpack, ts-node, prettier, @typescript-eslint/eslint-plugin + +## 1.6.5 (2020-03-23) + +* APPLICATIONS.md: Add xrplorer.com +* Internal: Fix typos +* Dependencies + * Update @types/ws, @types/node, @typescript-eslint/eslint-plugin, @types/mocha, webpack, typescript, mocha, assert-diff + * Remove mocha-junit-reporter + +## 1.6.4 (2020-02-18) + +* Fix generateXAddress() and generateAddress() with no entropy (#1211, #1209) +* Internal + * Improve unit tests +* Dependencies + * Update webpack-cli, @types/node, webpack, @typescript-eslint/eslint-plugin, + typescript, ripple-keypairs + +## 1.6.3 (2020-02-05) + +* Update ripple-keypairs to 1.0.0 +* Bug fix: Assign event listener to socket close event on open before attempting post-open logic (#1186) + * Protects against possible unhandled rejection in disconnect + * Adds the Connection `_ws.close` event listener post `_ws.open` before executing any post `_ws.open` logic, i.e. `Connection._subscribeToLedger` + * This prevents a reconnection error loop that occurs if `Connection._ws` is never cleaned up by the unreachable `_ws.close` event listener + * Also ensures that a possible disconnect() promise rejection is not unhandled if any `_ws.open` logic in `Connection.connect()` throws +* Dependencies + * Update mocha-junit-reporter, @types/node, mocha, @typescript-eslint/eslint-plugin, ripple-address-codec + +## 1.6.2 (2020-01-17) + +* Bug fix: Catch possible error in reconnect() on _heartbeat(), emit reconnect error (#1179) +* Docs: Fix whitespace +* Dependencies + * Update @typescript-eslint/eslint-plugin, ts-node, @types/node, @types/ws, typescript + +## 1.6.1 (2020-01-14) + +> **Update Note:** In this release we refactored the internal connection logic of ripple-lib to improve resiliency across dropped messages and reconnects. The external interface remains the same, with zero changes to public methods/properties. However, If you experience any problems around connections, requests, and request retries, please [file an issue]( https://github.com/ripple/ripple-lib/issues/new) with the repo (and be sure to test against v1.6.0 to confirm that the problem was introduced in this version). + +* Documentation + * Document message type 'path_find' (#1121) (thanks @r0bertz) + * Improve documentation for address generation; functions that can be called offline; generateXAddress() (#1158, #1159, #1169) (thanks @hbergren) + * Add [Security Policy](https://github.com/ripple/ripple-lib/blob/develop/SECURITY.md) +* Bug fixes + * Types: Fix AccountObjectsResponse structure (#1127) (thanks @you21979) + * In some cases, ripple-lib would fail to wait for the connection to be ready (#1119) +* Dependencies + * Update docs dependencies, ejs and doctoc (#1153) + * Update eslint, ripple-lib-transactionparser, typescript, nyc, ws, @types/node, ripple-binary-codec, mocha, mocha-junit-reporter +* Internal + * Add LedgerHistory to Connection (#1119): Moved ledger logic into its own Ledger class + +## 1.6.0 (2020-01-06) + +* Add support for AccountDelete (#1120) +* Improve error type given on rejected message _send to be DisconnectedError (#1098) +* Internal + * Add unit test for unhandled promise rejection warning on message _send (#1098) +* Dependencies + * Update @types/node, @typescript-eslint/parser + +## 1.5.1 (2019-12-28) + +* Fix support for CDNs (#1142) +* Internal + * Clean up connection trace logic (#1114) + * Clean up the connection config (#1115) + * Run prettier format (#1116) + * Update eslint command (#1118) +* Dependencies + * Update webpack-cli, webpack, ts-node, @types/lodash, @types/ws, @types/node, @typescript-eslint/parser, @typescript-eslint/eslint-plugin, https-proxy-agent, mocha, eventemitter2 + +## 1.5.0 (2019-12-14) + +* Add support for `WalletLocator` (#1083) +* Types: Move and de-dupe `TransactionJSON` type (#1096) + * This resolves an error surfaced by [TypeScript 3.7](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#local-and-imported-type-declarations-now-conflict) +* Add a heartbeat to detect hung connections (#1101) +* Dependencies + * Update TypeScript version (#1096) + * Update ripple-lib-transactionparser to 0.8.1 (#1097) + * Update ripple-binary-codec to 0.2.5 + * Update webpack (#1112) + * Require node 8 and yarn (#1107) +* Testing: Refactor and add unit tests + * Fix some errors caught by the improved tests + +## 1.4.2 (2019-11-14) + +* Add support for tick size (#1090) (thanks @RareData) +* Update email hash default to allow proper clearing (#1089) (thanks @RareData) +* Fix Unhandled Promise Rejection Warning on message `_send` + * Add an immediate catch to the `_send` promise passed to `_whenReady` in case there is rejection before async handlers are added (#1092) (thanks @nickewansmith) +* Docs improvements + * Add XRP Toolkit reference (#1088) +* Internal improvements + * Add a prettier config + * Update Node.js Testing Versions (#1085) + * Testing matrix based on: https://nodejs.org/en/about/releases/ + - Node 11 is no longer supported (not LTS) + - Node 12 added (active LTS) + - Node 13 added ("current" release) + +## 1.4.1 (2019-11-06) + +* Compatibility: Change TypeScript compile target back to `es6` (#1071) + * WARNING: This allows for the use of Node v6, which is no longer supported by Node.js, as it was end-of-life'd in April 2019 + * We recommend updating to Node v8/v10 ASAP in order to get security updates and fixes from the Node.js team + * We are not actively running tests against Node v6 (ref #1076) +* Docs: `getAccountObjects` doc fix +* Dependencies: + * Update `bignumber.js` + * Update `ripple-keypairs` + * Update `ws` +* Build process: Update `webpack` flow + +## 1.4.0 (2019-10-28) + +* Unref timer so it does not hang the Node.js process +* Add a 2-second timeout for connect() +* Improve getTransaction() error when tx has not been validated yet +* Add support for the new X-address format +* Fix error in Safari, Chrome 78, Firefox 70 +* Some error messages have changed slightly. For example: + * `-instance.Account is not of a type(s) string,instance.Account does not conform to the "address" format` + * `+instance.Account is not of a type(s) string,instance.Account is not exactly one from ,` + +### Internal improvements + +* Reduce dependency size +* Move tests to TypeScript +* Replace tslint with eslint +* Update https-proxy-agent +* Add tests + +## 1.3.4 (2019-10-18) + +* Update ripple-lib-transactionparser +* Improve error message when signing fails (e.g. due to trailing zeros) +* Integrate ripple-hashes (in TypeScript with improved naming and docs) +* Add multi-signing example to sign() method docs +* Update TypeScript + +## 1.3.3 (2019-09-10) + +* Expand node version compatibility to support Node.js 12 ([ripple-binary-codec#32](https://github.com/ripple/ripple-binary-codec/issues/32)) + +## 1.3.2 (2019-09-03) + +* Export and document `rippleTimeToISO8601()` method +* Add type for isValidAddress (fixes error TS7016, #1032) +* Docs: update recommended Node.js version (#1031) + +When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1) or later. + +## 1.3.1 (2019-08-26) + +* Upgrade to gulp 4 (#1030) +* Remove http server (unused) +* Update dependencies + +There are no changes in the browser version with this release. The npm package for Node.js should be slightly smaller. + +When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1). + +## 1.3.0 (2019-08-16) + +### Bug fixes: + +* Breaking change: Fix `getServerInfo` (#1012) + +Before: +``` +{ + // ... + "load": { + "jobTypes": { + "0": {"jobType": "untrustedValidation", "perSecond": 10}, + "1": {"jobType": "ledgerData", "peakTime": 2, "perSecond": 2}, + "2": {"inProgress": 1, "jobType": "clientCommand", "perSecond": 1}, + "3": {"jobType": "transaction", "perSecond": 1}, + // ... + }, + "threads": 6 + }, + // ... +} +``` + +After: +``` +{ + // ... + "load": { + "jobTypes": [ + { + "jobType": "untrustedValidation", + "perSecond": 8 + }, + { + "avgTime": 2, + "jobType": "ledgerData", + "peakTime": 72, + "perSecond": 2 + }, + { + "inProgress": 1, + "jobType": "clientCommand", + "perSecond": 1 + }, + { + "jobType": "transaction", + "perSecond": 1 + }, + // ... + ], + "threads": 6 + }, + // ... +} +``` + +* Sign method - verify accurate encoding (#1026) + * In previous versions, the following could be encoded incorrectly: + * Amounts of XRP with more than 6 decimal places + * Amounts of XRP drops with any decimal places + * In versions 1.2.5 and 1.3.0, amounts that are invalid in this way will throw an error +* Expand `APIOptions` by extending `ConnectionOptions` (#1018, fixes #1017) +* Fix docs for destination.address (#1011) + +### New features: + +* Support removing a signer list (#1021) +* Export `setCanonicalFlag` method from `src/transaction/utils` + +### Improvements: + +* Clean up phrasing in schema descriptions (#1023) +* Improve docs +* Update dependencies + +Since this release fixes a bug that could cause transactions to be serialized incorrectly during the signing process, it has also been simultaneously released as version 1.2.5 (patch release). + +When using this release with [rippled](https://github.com/ripple/rippled), we recommend using [rippled version 1.3.1](https://github.com/ripple/rippled/releases/tag/1.3.1). + +## 1.2.4 (2019-06-06) + +* Update README.md +* Clarify docs +* Update dependencies +* Fix typos + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +4f09c056ccc51bc6cf17b128b559112e9c5adf19cc96ac8f9a06faee185697a7 ripple-1.2.4-debug.js +5da1c75a02d76b0b105d98355ee4561f5d5036e8d5d0237efd5960812dcaa1fd ripple-1.2.4-min.js +e147f303e880a65db149d2a5b9183b75814bd8145cd00740bcc4679d867192c8 ripple-1.2.4.js +``` + +## 1.2.3 (2019-04-30) + +* Fix browser builds + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +efb0f29cde94534a015d8a2171abb11b9a4345ba01418bf5b6ab6042a6d51dde ripple-1.2.3-debug.js +b86145c0e30099b966ed8d3830ba25988d72877f1f87044d9954d6707be098ac ripple-1.2.3-min.js +e027d91c7321d41ba94bb1bdc77dcff0107a5fd9eb833c6dbd06f1bbedef3900 ripple-1.2.3.js +``` + +## 1.2.2 (2019-04-15) + +* Prevent `prepareTransaction` from overwriting `Fee` and/or `LastLedgerSequence` (#997) +* Add `deliveredAmount` as optional field for type `Outcome` (#996) +* Fix build failure with TS strict checks (#993) + +Minor changes: + +* Use TypeScript project references +* Travis: Drop node 9 and add node 11 for testing +* Bump versions of devDependencies + +Note: There is no browser version of this release. + +## 1.2.1 (2019-03-23) + +* Update `ripple-binary-codec` to 0.2.1 to support `tecKILLED` + +The SHA-256 checksums for the browser version of this release can be found +below. + +``` +% shasum -a 256 * +531c2a8f4bf6d6b5bd4afe6a40b6a68a77179a343902cfa4210d7e35b5697af0 ripple-1.2.1-debug.js +201ee99922b16b7e32afb5317ef4bb9facc23b20c272bb5c4ed7010f5d996cab ripple-1.2.1-min.js +c1b984581299bf00e0e3c8ac4e62eadfc9b190bd78a2458a76e59ceb56046148 ripple-1.2.1.js +``` + +## 1.2.0 (2019-03-19) + +This release: + +* changes the way you handle errors for the `prepare*` methods. +* improves the `message` field of `RippledError`s. +* allows `Sequence` to be set in the transaction JSON provided to + `prepareTransaction`. + +For details, continue reading: + +### [BREAKING CHANGE] `prepare*` methods reject the Promise on error + +The `prepare*` methods now always reject the Promise when an error occurs, instead of throwing. + +Previously, the methods would synchronously throw on validation errors, despite being asynchronous methods that return Promises. + +In other words, to handle errors in the past, you would need to use a try/catch block: + +``` +// OBSOLETE - no need for try/catch anymore +try { + api.preparePayment(address, payment, instructions).then(prepared => { + res.send(prepared.txJSON); + }).catch(error => { + // Handle asynchronous error + }); +} catch (error) { + // Handle synchronous error +} +``` + +Now, you can rely on the Promise's `catch` handler, which is called with the error when the Promise is rejected: + +``` +api.preparePayment(address, payment, instructions).then(prepared => { + res.send(prepared.txJSON); +}).catch(error => { + // Handle error +}); +``` + +This applies to: +* preparePayment +* prepareTrustline +* prepareOrder +* prepareOrderCancellation +* prepareSettings +* prepareEscrowCreation +* prepareEscrowExecution +* prepareCheckCreate +* prepareCheckCash +* prepareCheckCancel +* preparePaymentChannelCreate +* preparePaymentChannelClaim +* preparePaymentChannelFund + +### Improved `RippledError` `message` + +Previously, `RippledErrors` (errors from rippled) used rippled's `error` field as the `message`. + +Now, the `error_message` field is used as the `message`. + +This helps to surface the specific cause of an error. + +For example, before: +``` +[RippledError(invalidParams, { error: 'invalidParams', + error_code: 31, + error_message: 'Missing field \'account\'.', + id: 3, + request: { command: 'account_info', id: 3 }, + status: 'error', + type: 'response' })] +``` + +After: +``` +[RippledError(Missing field 'account'., { error: 'invalidParams', + error_code: 31, + error_message: 'Missing field \'account\'.', + id: 3, + request: { command: 'account_info', id: 3 }, + status: 'error', + type: 'response' })] +``` + +In this case, you can see at a glance that `account` is the missing field. + +The `error` field is still available in `errorObject.data.error`. + +When `error_message` is not set (as with e.g. error 'entryNotFound'), the `error` field is used as the `message`. + +### [BUG FIX] `prepareTransaction` does not overwrite the `Sequence` field + +The `prepareTransaction` method now allows `Sequence` to be set in the Transaction JSON object, instead of overwriting it with the account's expected sequence based on the state of the ledger. + +Previously, you had to use the `sequence` field in the `instructions` object to manually set a transaction's sequence number. + +### New in rippled 1.2.1 + +As this is the first release of ripple-lib following the release of rippled 1.2.1, we would like to highlight the following API improvements: + +1. The [`delivered_amount` field](https://developers.ripple.com/partial-payments.html#the-delivered-amount-field) has been added to the `ledger` method, and to transaction subscriptions. + + api.getLedger({includeTransactions: true, includeAllData: true, ledgerVersion: 17718771}).then(...) + + You can also call `ledger` directly: + + request('ledger', {...}).then(...) + +2. [Support for Ed25519 seeds encoded using ripple-lib](https://github.com/ripple/rippled/pull/2734) + +You have access to these improvements when you use a rippled server running version 1.2.1 or later. At the time of writing, we recommend using rippled version **1.2.2** or later. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +13021fe3efbdd59faf68597b0b18204b39847b285cca82f84c737e3d19922cc2 ripple-1.2.0-debug.js +0070225e731afd8c2c0a0976111ebf326c19a96ee1549368de9f016abdd53d2f ripple-1.2.0-min.js +d440268397c03ad5137a3294e53a07b959ef93cd23b1990d6f82621c4776ba9f ripple-1.2.0.js +``` + +## 1.1.2 (2018-12-12) + ++ Update `submit` response (#978) + + Includes the full object returned by rippled, while keeping the existing + fields for backward compatibility ++ Add `getLedger` option for ledger hash (#980) + + Use the `ledgerHash` option to get a specific ledger by hash + +Thanks to @alexchiriac for the contributions in this release. + +When using `ripple-lib` with `rippled`, we recommend using `rippled` version +1.1.2 or later. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +e6cc52395d0c3e205263777ba2e528e50f4d1f84bb4b16763a3bf7f5fcc290f5 ripple-1.1.2-debug.js +82df879bc2970e0e4fd161975a99448b4859b0cde751d8ea34e9f51d672090b9 ripple-1.1.2-min.js +12f56330dc71bba8ac3004025cbc9698413a0c619df302dda105b31228a67319 ripple-1.1.2.js +``` + +## 1.1.1 (2018-11-27) + ++ Fix `getOrderbook` offer sorting (#970) + + **BREAKING CHANGE:** The ordering of offers returned by `getOrderbook` has + been changed so that offers with the best quality are sorted first ++ Add new helper methods for working with the `rippled` APIs: + + `formatBidsAndAsks`: Takes offers and returns a formatted order book object + with bids and asks + + `renameCounterpartyToIssuer`: Takes an object and renames the `counterparty` + field to `issuer` ++ TypeScript: Add return type for `generateAddress` (#968) + +When using `ripple-lib` with `rippled`, we recommend using `rippled` version 1.1.1 or +later. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +e151900e49bb5482b02bef5b0b1542ea586076363b072ae616f6d4d2f7f5b8a1 ripple-1.1.1-debug.js +6aee3757b29de285f361e20862261090033c07a13fd09f4a3cc4c097b6e84b55 ripple-1.1.1-min.js +bea4a889fb9ee4092324c6667490ea66469bdde869ddc1aaddf5e9d12b0cf091 ripple-1.1.1.js +``` + +## 1.1.0 (2018-10-31) + ++ Add support for Node.js v10 LTS (#964) ++ Add [DepositPreauth](https://developers.ripple.com/depositauth.html) ([#958](https://github.com/ripple/ripple-lib/pull/958)) ++ In `FormattedTransactionType`, the `Outcome`'s `balanceChanges` property had + the wrong type. This is now fixed (#955) ++ Add/fix docs for: xrpToDrops, dropsToXrp, iso8601ToRippleTime, schemaValidator, isValidAddress, isValidSecret, deriveKeypair, deriveAddress + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +e1d742092b3c0fcee97a875e18db4baeab3bbc82f08b96e883ee188c5f0cfb37 ripple-1.1.0-debug.js +f28921f57a133678dcb3cb54c497626bd76b1f953d22d61f3ddca31c8947d552 ripple-1.1.0-min.js +3696871a80c1102635699994adcaf00cdfdfcff5014fc2eba3d8f8d8437c8f91 ripple-1.1.0.js +``` + +## 1.0.2 (2018-10-16) + ++ Fix #954: Exclude SendMax from all XRP to XRP payments (thanks @jefftrudeau) ++ TypeScript + + book_offers returns offers type OfferLedgerEntry (#951) + + Use `object` (#936) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +2556fe17296e127ed44e7066e90a6175e2b164f00ca3c1aa7b1c554f31c688dd ripple-1.0.2-debug.js +e0342ea21eac32a1024c62034fba09c6f26dd3e7371b23ea1e153e03135cd590 ripple-1.0.2-min.js +c7286c517497d018d02d09257e81172b61d36c8b9885a077af68e8133c3b3b9b ripple-1.0.2.js +``` + +## 1.0.1 (2018-09-27) + ++ Add address/secret/key validation and derivation methods ([#932](https://github.com/ripple/ripple-lib/pull/932)) + + `isValidAddress(address: string) : boolean`: Checks if the specified string contains a valid address. + + `isValidSecret(secret: string): boolean`: Checks if the specified string contains a valid secret. + + `deriveKeypair(seed: string): {privateKey: string, publicKey: string}`: Derive a public and private key from a seed. + + `deriveAddress(publicKey: string): string`: Derive an XRP Ledger address from a public key. ++ To derive an address from a secret: + 1. Derive the public key from the secret. + 2. Derive the address from the public key. + + Example: `const address = api.deriveAddress(api.deriveKeypair(secret).publicKey)` ++ Update server regex to accommodate UDS (#944) ++ Include memos when parsing trustlines (#949) ++ Add remaining LedgerEntry types (#943) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +9b6408641ce83659afcd5765c256c35829a4fcb4c3244dc9ca6bf27c871a45c4 ripple-1.0.1-debug.js +7ab2b69fe59c2d4a74638116e2ba3b387155eb2d23e48a01bbf7beb72911f898 ripple-1.0.1-min.js +8bb4dcad9ce25a27003b1d73d71ddf41b8a5af02ece4ebbfeaff4aeb91f3b8c4 ripple-1.0.1.js +``` + +## 1.0.0 (2018-08-30) + +We are pleased to announce the release of `ripple-lib` version 1.0.0. + +This version features a range of changes and improvements that make the library +more capable and flexible. It includes new methods for accessing rippled APIs, +including subscriptions. + +When using this version with `rippled` for online functionality, we recommend +using `rippled` version 1.0.1 or later. + +Here is a summary of the changes since `ripple-lib` version 0.22.0, which was +the last non-beta version. + +### New Features + ++ [Add `request()`, `hasNextPage()`, and `requestNextPage()` for accessing `rippled` + APIs](https://github.com/ripple/ripple-lib/blob/09541dae86bc859bf5928ac65b2645dfaaf7f8b1/docs/index.md#rippled-apis). ++ Add `prepareTransaction()` for preparing raw `txJSON`. ++ XRP amounts can be specified in drops. Also, `xrpToDrops()` and `dropsToXrp()` + are available to make conversions. ++ `getTransaction` responses can include a new `channelChanges` property that + describes the details of a payment channel. + +### Data Validation and Errors + ++ [Amounts in drops and XRP are checked for + validity](https://github.com/ripple/ripple-lib/blob/develop/HISTORY.md#100-beta1-2018-05-24). ++ [A maximum fee is now + imposed](https://github.com/ripple/ripple-lib/blob/develop/HISTORY.md#100-beta2-2018-06-08). Exceeding it causes a `ValidationError` to be + thrown. ++ Errors are improved and more data validation was added. ++ Bug fix: `getPaths` now filters paths correctly and works correctly when the + destination currency is XRP. + +### Breaking Changes + +The following changes were introduced in 1.0.0. + ++ `getTransaction()` and `getTransactions()` + + The `specification.destination.amount` field has been removed from the parsed transaction response. + + To determine the amount that a transaction delivered, use `outcome.deliveredAmount`. + + If you require the provisional requested `Amount` from the original transaction: + + Use `getTransaction`'s `includeRawTransaction` option, or + + Use `getTransactions`'s `includeRawTransactions` option, or + + Use the rippled APIs directly with `request`. For example, call the API methods `tx`, `account_tx`, etc. ++ `getLedger()` response object + + The `rawTransactions` field has been removed (for consistency with `getTransaction()` and `getTransactions()`). + + Instead, within each `transaction`, use the new `rawTransaction` JSON string. + + The `metaData` field has been renamed to `meta` for consistency with rippled's `tx` method. + + `ledger_index` has been added to each raw transaction. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +06e5efcb6846ad45dedfd85cfa2ef4bdeb608b15ccbfb60b872c995d97342426 ripple-1.0.0-debug.js +cdb26b928a89ce228c727d1ff966df266eb46b2f76bd94f81cbeb0a9d75febf0 ripple-1.0.0-min.js +f74ee804e8a945a994e4e3901a0a3eb52292fbdcbff61ed30cefb8ffbcba50c3 ripple-1.0.0.js +``` + +## 1.0.0-beta.5 (2018-08-11) + ++ [Fix a TypeScript error by importing the `Prepare` type](https://github.com/ripple/ripple-lib/commit/7cd517268bda5fe74b91dad02fedf8b51b7eae9b) + +## 1.0.0-beta.4 (2018-08-10) + ++ [Add `prepareTransaction()`](https://github.com/ripple/ripple-lib/pull/898) ++ Internal improvements and cleanup + +## 1.0.0-beta.3 (2018-07-17) + ++ For payment channel transactions, `getTransaction` includes a new + `channelChanges` property that describes the details of the payment channel. + (#920) + +### Bug Fixes + ++ A bug caused calculated fees to use too many decimal places. This was fixed by + rounding fees to 6 decimal places. (#912) ++ When using the Settings transaction to set up a multi-signing list, the + threshold and weights fields are required. (#909) ++ Docs: Fix the MIMETYPE in examples with memos. (#914) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +460dbb521e24c44cb53dabc1a74feeca33d031b44d889dd5b51103ca92d51de6 ripple-1.0.0-beta.3-debug.js +cccfd24973c6b7990d9e933a589175dae26249825737fff4f2f73d8558a3f186 ripple-1.0.0-beta.3-min.js +0dc456a58fb078347d9920310621595905085595d73c2b8fe96bea73bcf35450 ripple-1.0.0-beta.3.js +``` + +## 1.0.0-beta.2 (2018-06-08) + +### Breaking Changes + ++ During transaction preparation, there is now a maximum fee. Also, when a transaction is signed, its fee is checked and an error is thrown if the fee exceeds the maximum. The default `maxFeeXRP` is `'2'` (2 XRP). Override this value in the RippleAPI constructor. ++ Attempting to prepare a transaction with an exact `fee` higher than `maxFeeXRP` causes a `ValidationError` to be thrown. ++ Attempting to sign a transaction with a fee higher than `maxFeeXRP` causes a `ValidationError` to be thrown. ++ The value returned by `getFee()` is capped at `maxFeeXRP`. + +### Other Changes + ++ In Transaction Instructions, the `maxFee` parameter is deprecated. Use the `maxFeeXRP` parameter in the RippleAPI constructor. + +#### Overview of new fee limit + +Most users of ripple-lib do not need to make any code changes to accommodate the new soft limit on fees. The limit is designed to protect against the most severe cases where an unintentionally high fee may be used. + ++ When having ripple-lib provide the fee with a `prepare*` method, a maximum fee of `maxFeeXRP` (default 2 XRP) applies. You can prepare more economical transactions by setting a lower `maxFeeXRP`, or support high-priority transactions by setting a higher `maxFeeXRP` in the RippleAPI constructor. ++ When using `sign` with a Fee higher than `maxFeeXRP`, a `ValidationError` is thrown. + +If you have any questions or concerns, please open an issue on GitHub. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +ef348a2805098e61395b689b410cbf4bfd35e4d72e38c89f4ab74ec5e19793f5 ripple-1.0.0-beta.2-debug.js +ea33fd53df8c7176d5fbf52dae0b64aade7180860f26449062cdbefaf8bd4d9b ripple-1.0.0-beta.2-min.js +fe5cc6e97c9b8a1470dacb34f16a64255cd639a25381abe9db1ba79e102456f2 ripple-1.0.0-beta.2.js +``` + +## 1.0.0-beta.1 (2018-05-24) + +### Breaking Changes + ++ Amounts in drops and XRP are checked for validity. Some + methods may now throw a `BigNumber Error` or `ValidationError` if the amount + is invalid. This may include methods that previously did not throw. ++ Note that 1 drop is equivalent to 0.000001 XRP and 1 XRP is equivalent to 1,000,000 drops. ++ Using drops is recommended. All rippled APIs require XRP amounts to be + expressed in drops. + +### Other Changes + ++ Allow specifying amounts in drops for consistency with the `rippled` + APIs. ++ Export `xrpToDrops()` and `dropsToXrp()` functions. ++ Potentially breaking change: Improve errors. For example, `RippledError` now includes the full response from + the `rippled` server ([#687](https://github.com/ripple/ripple-lib/issues/687)). `NotConnectedError` + may be thrown with a different message than before. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +a80ebb39e186640246306eadb2879147458c8271fd3c6cb32e6ef78d0b4b01a5 ripple-1.0.0-beta.1-debug.js +81bcc4b5fd6fd52220ed151242eaddd63eb29c4078845edc68f65b769557d126 ripple-1.0.0-beta.1-min.js +738b4d65b58cf4e3542fa396f8d319a24cd7d0b7aff5ff629a900e244f735ff4 ripple-1.0.0-beta.1.js +``` + +## 1.0.0-beta.0 (2018-05-10) + ++ [Add `request`, `hasNextPage`, and + `requestNextPage`](https://github.com/ripple/ripple-lib/pull/887). + + This provides support for all rippled APIs, including subscriptions. + +When using rippled APIs, you must: ++ For all XRP amounts, use drops (1 drop = 0.000001 XRP). ++ Instead of `counterparty`, use `issuer`. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +ab2094979a3d6b320c7bc22bc5946c50fa5e29af0976d352e7689b0a4d840c55 ripple-1.0.0-beta.0-debug.js +0e7f7d740606c2866ebf63776b13b41a555848e1a1419e2c8058d2e6c562d7fd ripple-1.0.0-beta.0-min.js +bd05e8806832ca4192aea7ba2d0362baa9f44605f8e8e6676acd25eb0b94b778 ripple-1.0.0-beta.0.js +``` + +## 0.22.0 (2018-05-10) + ++ [`getOrderbook` - return raw order data](https://github.com/ripple/ripple-lib/pull/886). The full `BookOffer` data is now provided under `data`. + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +33f71b55c4adec4452826e44fe7809377364df04222b60f0fce01e7de2daff33 ripple-0.22.0-debug.js +63232888a4ea77065e8e8eb8fdaa8ebfe3a785428fe935e2667c1ea54c837f29 ripple-0.22.0-min.js +ab98026fabe296bd938297c48cb58e01dfdbe90f3c66c9617d6a3e1efd4c6b93 ripple-0.22.0.js +``` + +## 0.21.0 (2018-04-11) + ++ [Upgrade https-proxy-agent](https://github.com/ripple/ripple-lib/pull/883) ++ [Add getAccountObjects](https://github.com/ripple/ripple-lib/pull/881) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +3ab52209ad4a80393c8c08ef3f4aa9cfb47bc76c0ede2ee9fa7f5ca180ba4d67 ripple-0.21.0-debug.js +3b1efccded347bed5f64757098a1ea6a513bb8932d922d00af47cd24e001dc14 ripple-0.21.0-min.js +db08e5a3eab1f659b4c803543374398004d950ba720adc4b9a7658817cb5c94b ripple-0.21.0.js +``` + +## 0.20.0 (2018-04-09) + ++ [Add support for using a keypair with sign()](https://github.com/ripple/ripple-lib/pull/769) ++ [Fix a bug caused by jsonschema v1.2.3 by pinning to v1.2.2](https://github.com/ripple/ripple-lib/pull/882) ++ [Improve Payment Channel documentation](https://github.com/ripple/ripple-lib/pull/877) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +389811a9baa72f77e2a43d0b48045762d29a6f616ed5fd2660ba76fc12a3ecc5 ripple-0.20.0-debug.js +c1746ea0dd55318cb4e1ef3955ef14759d9d70861437c69abafc10169916f068 ripple-0.20.0-min.js +17958b0e46395d2b2a35a003693c0babdfb5382513d3cc58a62f8648ad710b0e ripple-0.20.0.js +``` + +## 0.19.1 (2018-03-22) + ++ [Fix: Include TypeScript declarations in npm package](https://github.com/ripple/ripple-lib/pull/863) ++ [Fix: Documentation link to checkCash](https://github.com/ripple/ripple-lib/pull/871) ++ [Internal: Clean up types and migrate more APIs to new request method](https://github.com/ripple/ripple-lib/pull/857) ++ [Internal: Fix Payment source and destination types](https://github.com/ripple/ripple-lib/pull/870) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +3ed5332aa035c07bae6c1abfdfc8ca77cdbb05cc4b88878f544f1ea4cb793f4d ripple-0.19.1-debug.js +2f5507aa00a40ab6a94de1822af87db5e927edef3885aef5d9b39ccb623ccb54 ripple-0.19.1-min.js +1e439aee1b220242d56ea687a9b55a67b8614212c1ddbd70a4fcf34503fc487a ripple-0.19.1.js +``` + +## 0.19.0 (2018-03-02) + ++ [Add support for Checks](https://github.com/ripple/ripple-lib/pull/853) + + **CheckCreate** adds a check entry to the ledger. The check is a promise from the source of the check that the destination of the check may cash the check and receive up to the SendMax specified on the check. The check may have an (optional) expiration, after which the check may no longer be cashed. + + **CheckCancel** removes the check from the ledger without transferring funds. Either the check's source or destination can cancel the check at any time. After a check has expired, any account can cancel the check. + + **CheckCash** is a request by the destination of the check to transfer a requested amount of funds, up to the check's SendMax, from the source to the destination. The destination may receive less than the SendMax due to transfer fees. ++ [Add support for the Deposit Authorization account root flag](https://github.com/ripple/ripple-lib/pull/852) ++ [Generate .ts.d TypeScript declaration files](https://github.com/ripple/ripple-lib/pull/851) ++ [Improve documentation of getTransactions params](https://github.com/ripple/ripple-lib/pull/856) ++ [Add new request interface](https://github.com/ripple/ripple-lib/pull/843) (private for now) + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +0e7ce4594b7e455fbc57ad81f6fddc391d1e1f349a49c96ad783be50f80fdc14 ripple-0.19.0-debug.js +6d716a0357929e51e476f22136880f7a0e5458fd396ac145ce9308f278ff7cc1 ripple-0.19.0-min.js +6715db1af638f99226ab7f8f244103306aa6e04d1b8c1da47a63431053bacb84 ripple-0.19.0.js +``` + +## 0.18.2 (2018-02-13) + ++ [Fix: Publish updated browser builds to npm so that users can easily use + CDNs](https://github.com/ripple/ripple-lib/pull/849) ++ [Fix: Browserify fails due to dependency on `ws`](https://github.com/ripple/ripple-lib/pull/847) ++ [Fix: `build` script fails when `node_modules` is in path](https://github.com/ripple/ripple-lib/pull/846) ++ [Reduce size of published npm package](https://github.com/ripple/ripple-lib/commit/0c318816ccf25c4c3932934a35ef903cc552edc1) ++ Clean up files from Flow (we migrated to TypeScript) ++ Typos and code cleanup + +The SHA-256 checksums for the browser version of this release can be found +below. +``` +% shasum -a 256 * +f08ab61137255be3639e9d210ded2a182b6e0388f257a70d9b372ce7e7e518a6 ripple-0.18.2-debug.js +0604835b8421391167b4314ce93a76b5994780a08bd7edf36d91eb5e8f2643a2 ripple-0.18.2-min.js +fda56ab5c8256e04355e20064877ef4053f26c87f37cfcf861340f22bf89ee40 ripple-0.18.2.js +``` + +## 0.18.1 (2018-01-27) + +Note: The package published to npm for this version did not include updated +browser builds. If you are using a CDN that pulls from npm, please use 0.18.2 or +later. + ++ [Fix: isSameIssue() should check counterparty](https://github.com/ripple/ripple-lib/pull/836). This bug caused `getOrderbook()` to return incorrect values. + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 * +6871855a2af1dc591ef557d442c11e8c60e01c5932054e13e8cbb84a182f45e0 ripple-0.18.1-debug.js +331f0baff46af44933a8fa31f128132945ff82a147acfff0a7315adb446e3de0 ripple-0.18.1-min.js +26324bb0725d2d484fe3b6086335d49734f45dc647b07c60746e0d8619f1ed3e ripple-0.18.1.js +``` + +## 0.18.0 (2018-01-25) + ++ [Convert from Flow to TypeScript](https://github.com/ripple/ripple-lib/pull/816) ++ [Use ES Module syntax](https://github.com/ripple/ripple-lib/pull/815) (Babel still compiles these to common.js modules for + distribution) ++ Docs: [Improve escrow creation example/test](https://github.com/ripple/ripple-lib/pull/820) ++ [Fix type errors](https://github.com/ripple/ripple-lib/pull/811) ++ [Fix lint errors](https://github.com/ripple/ripple-lib/pull/813) + +## 0.17.9 (2017-11-14) + ++ [Update ws dependency to 3.3.1](https://github.com/ripple/ripple-lib/pull/804) ++ [Remove unnecessary polyfills](https://github.com/ripple/ripple-lib/pull/807) ++ Fix lint errors ([#786](https://github.com/ripple/ripple-lib/pull/786), [#808](https://github.com/ripple/ripple-lib/pull/808)) ++ [Update ripple-keypairs dependency to 0.10.1](https://github.com/ripple/ripple-lib/pull/805) + +The SHA-256 checksums for the browser version of this release can be found below. +``` +% shasum -a 256 * +b52f251eedac2509d72093eab1e8dba0d0f4a9fe6a28ec1cc90853cfb0fd7110 ripple-0.17.9-debug.js +d577a2bbdbdf7535c5365a1c52a2a31989d1b966e30abcba65c87133a536b9dc ripple-0.17.9-min.js +ff4c3002842fac72ec2ebbd081e9594b0de6050d4d051a8fd6c06adb9a351488 ripple-0.17.9.js +``` + +The SHA-1 checksums for the browser version of this release can be found below. +``` +% shasum * +e1995afc34aef6accd269cfccc55a45619618a41 ripple-0.17.9-debug.js +e6ad9a9c111ab696f5637bfa372d80999e5ae362 ripple-0.17.9-min.js +4866494ec5f9095cc34bea142f1e2b8ac5f7fbf8 ripple-0.17.9.js +``` + +## 0.17.8 (2017-11-06) + ++ Fix: Freezing in Safari 10.1 (updated bignumber.js) (closes #762) ++ [Fix: `getSettings` should include signers](https://github.com/ripple/ripple-lib/commit/2a90f9b134e168937dceb7da283d63734eac9e7c) ++ Update for Node 6 ++ Update lodash dependency ++ Migrate to yarn + +## 0.17.7 (2017-05-08) + ++ Replace AJV with jsonschema + +## 0.16.5 (2016-01-21) + ++ [Filter insufficient source funds paths from pathfind results](https://github.com/ripple/ripple-lib/pull/688) + +## 0.16.4 + ++ [Update `ws` to 1.0.1](https://github.com/ripple/ripple-lib/pull/682) + +## 0.16.2 + ++ Bump `ripple-binary-codec` dependency version to 0.1.1 to fix issue with `computeLedgerHash` for transactions with `DeliverMin` + +## 0.16.1 + ++ [FIX: Use assert not assert-diff](https://github.com/ripple/ripple-lib/commit/f6ebe325193e7208c5ee8d8e84a7504714f0009e) + +## 0.16.0 + +__BREAKING CHANGES__ ++ [Fix types of XRP values in `getServerInfo` response](https://github.com/ripple/ripple-lib/commit/99d08065e4bda3dda6ae1f183adbd11abc70a9b7) ++ [Change error event format and fix crash due to error event on websocket](https://github.com/ripple/ripple-lib/commit/9cd72595f0efc062d77b9d625695d6030c524cc6) + +__OTHER CHANGES__ ++ [Fix `generateAddress` docs and add error event listener to boilerplate](https://github.com/ripple/ripple-lib/commit/809d981987a2890fac3a73a40a05c598b9040334) ++ [Allow setting `maxLedgerVersion` to `null` to specify no maximum](https://github.com/ripple/ripple-lib/commit/82613e7e8b360d1ae1552eab4559ab4763c06d7e) ++ [Add support for client certificates](https://github.com/ripple/ripple-lib/commit/5f5e48e4140345d166b8c1a3ee0847b0d9e2d893) ++ [`getFee` returns a string not a float](https://github.com/ripple/ripple-lib/commit/7bf2da6014c87e164542e69356efeaabb575a157) ++ [Fix parsing of quality for `getTrustlines`](https://github.com/ripple/ripple-lib/commit/86ff315ef2a39dfdc2ce97e0e1c4aa73f04e363b) ++ Fix `DeliverMin` value when specifying `minAmount` ++ [http server example](https://github.com/ripple/ripple-lib/commit/76866ab901ea46a2dd73181605e0f7f4220043d4) + +## 0.15.2 + ++ [Fix support for proxy credentials in proxy URL and fix error when there are more than 10 outstanding requests](https://github.com/ripple/ripple-lib/commit/0990ad4a6f1d59ca9d2cb859b4e2d71693f3fc4b) + +## 0.15.1 + ++ [Fix `babel-polyfill` require](https://github.com/ripple/ripple-lib/commit/062148674c3b1293ab82c28e25615ddd530339fa) ++ [Fix samples](https://github.com/ripple/ripple-lib/commit/5d5cf868a2ddb1b1cd40e4a4f0a782d0066c2055) ++ [Add unit tests for `RippleAPIBroadcast`](https://github.com/ripple/ripple-lib/commit/ddf8fe5b1a9c750490dca98fb9ffaaf8017f87e0) + +## 0.15.0 + +__BREAKING CHANGES__ ++ ["servers" parameter changed to single "server"](https://github.com/ripple/ripple-lib/commit/7061e9afe46f0682254d098adeff3dd7157521a1) + +__OTHER CHANGES__ ++ [Fix handling memos in `prepareSettings`](https://github.com/ripple/ripple-lib/commit/c9704137b7b538e8dbf31c483bcdcf2dcfd7cd75) ++ [Docs: SusPay warnings, offline mode, and other tweaks](https://github.com/ripple/ripple-lib/commit/4b4fc36ebd93f1360781a65f2869bd2c4f0a5093) ++ [Fix prepareOrderCancellation documentation](https://github.com/ripple/ripple-lib/commit/5e720891f579fd73d43c64e5ec519d9121023c10) + +## 0.14.0 + +__BREAKING CHANGES__ ++ [`prepareOrderCancellation` now takes orderCancellation specification](https://github.com/ripple/ripple-lib/commit/7f33d8a71e56289e5a5e0ead1c74f75ebcde72bc) ++ [Rename "ledgerClosed" event to "ledger" and change format](https://github.com/ripple/ripple-lib/commit/8a3d4a64db5fbf560ebf87dc62e0212513c5e18a) + +__OTHER CHANGES__ ++ [Fix proxy support and add support for proxy authorization](https://github.com/ripple/ripple-lib/commit/14b840f3feca758e0384b746c94e36d8bf59b8c2) ++ [Fix trace option](https://github.com/ripple/ripple-lib/commit/af620755c53556c55eed12de4b0013ef5a349ce2) ++ [Allow memos on all transaction types](https://github.com/ripple/ripple-lib/commit/b5081344da8e66fbd3a5113cc3313325ef72a494) ++ [Add documentation for RippleAPI options](https://github.com/ripple/ripple-lib/commit/a76b554cadb9f9f918b06f8386bc29355682a1a4) ++ [Docs: more on basic types, tx types](https://github.com/ripple/ripple-lib/commit/fdbac63f466b4fd3be701d4878800d856692e26e) ++ [Docs: revised introductory material](https://github.com/ripple/ripple-lib/commit/ef2515507dbd3c6a426ab5b31332a1bdf72d5b2d) ++ [boost coverage to almost 100%](https://github.com/ripple/ripple-lib/commit/995606b1e6f3643af34d9fd442ccd31f320b03eb) + +## 0.13.2 + ++ [Fix: Specify send_max when pathfinding with a source amount](https://github.com/ripple/ripple-lib/commit/75142139184625c8b9fcc480b1825d9985337813) + +## 0.13.1 + ++ [Add documentation for API events](https://github.com/ripple/ripple-lib/commit/25d1ac0c5f95cad32ea4ceebb) ++ [Fix: Add babel-polyfill](https://github.com/ripple/ripple-lib/commit/8a53abc32f6ec6c7d50cd182492d6fb511b86704) ++ [Fix: Bump version on ripple-hashes](https://github.com/ripple/ripple-lib/commit/12e5765c64aea31b3c2fb65ff989cf01e6368f58) + +## 0.13.0 + +__BREAKING CHANGES__ ++ Add new RippleAPI interface and delete old API + - [RippleAPI README and samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples) + +__OTHER CHANGES__ ++ [Removed timeout method of Request and added default timeout](https://github.com/ripple/ripple-lib/commit/634fe5683a9082e57682ff7d5c4fb9483b4af818) ++ [Add Remote.closeCurrentPathFind function, so current pathfind can be properly closed](https://github.com/ripple/ripple-lib/commit/e99010f363fc7cbe7fd547d3ca5b32ea083c44e6) ++ [Implement Balance Sheet API](https://github.com/ripple/ripple-lib/pull/579) ++ [Fix bugs in orderbook subscription](https://github.com/ripple/ripple-lib/commit/7404795dc64a85216148de7bc3ca7da7b33f4490) ++ [Fix crash due to rippled slowDown error](https://github.com/ripple/ripple-lib/commit/84838b2e9f6969b593b8462a62a6b8f516ada937) ++ [Fix: Emit error events and return error on pathfind](https://github.com/ripple/ripple-lib/commit/1ccbaf677631a1944eb05d90f7afc5f3690a03dd) ++ [Deprecate core and remove snake case method copying](https://github.com/ripple/ripple-lib/commit/fb8dc44ec1d49bb05cd0cdbe6dd4ab211195868a) ++ [Fix RangeSet for validated_ledger as single ledger](https://github.com/ripple/ripple-lib/commit/9f9e76f8b933201651af59307135f67cfa7d60e8) ++ [Fix bug where the paths would be set with an empty array](https://github.com/ripple/ripple-lib/commit/83874ec0962da311b76f2385623e51c68bc39035) ++ [Fix reserve calculation](https://github.com/ripple/ripple-lib/commit/52879febb92d876f01f2e4d70871baa07af631fb) + +## 0.12.9 + ++ [OrderBook performance optimizations](https://github.com/ripple/ripple-lib/commit/3e17d91edf36745f6b6c09b0ad88971b7775f6ab) + +## 0.12.7 and 0.12.8 + ++ [Improve performance of orderbook](https://github.com/ripple/ripple-lib/commit/c745faaaf0956ca98448a754b4fe97fb50574fc7) ++ [Remove Firefox warning about prototype overwrite](https://github.com/ripple/ripple-lib/commit/0c62fa21123b220b066871e1c41a3b4fe6f51885) ++ [Fix compare bug in `Amount` class](https://github.com/ripple/ripple-lib/commit/806547dd154e1b0bf252e8a74ad3ac6aa8a97660) + +## 0.12.6 + ++ [Fix webpack require failure due to "./" notation](https://github.com/ripple/ripple-lib/commit/8d9746d7b10be203ee613df523c2522012ff1baf) + +## 0.12.15 + ++ [Add offer autobridging](https://github.com/ripple/ripple-lib/commit/c7bbce83719c1e8c6a4fae5ca850e7515db1a4a5) ++ [Prevent crash when listening for "model" events on the OrderBook class](https://github.com/ripple/ripple-lib/commit/5824c3cb7cb6bd834d6e037f69943aebf3d83351) ++ [Fix empty order edgecase](https://github.com/ripple/ripple-lib/commit/64809d9ae23dc24f47accd4b4788b48f49880d3e) ++ [Fix AutobridgeCalculator (RT-3445)](https://github.com/ripple/ripple-lib/commit/1fff5ea6dcbcee856536df26f3b9cf1aec3c3b55) ++ [Update sjcl and delete custom ripemd160, montgomery, and jacobi](https://github.com/ripple/ripple-lib/commit/50cda426eb83599c38c0b725e1524a01fc415da2) ++ [Fix transaction summary for transactions that fail with remoteError](https://github.com/ripple/ripple-lib/commit/5e714f6143464d7912f42537acaa553b88eaf6dc) ++ [Fix serializedobject append for excessively large bytes length](https://github.com/ripple/ripple-lib/commit/e93f1ab6f4aaad347450aee75a169af0faa2121c) ++ [Switch to sjcl npm module](https://github.com/ripple/ripple-lib/commit/9a502580fd89ec6a9aa55f4e5847f6a4a2cb5bba) ++ [Add babel transpiler](https://github.com/ripple/ripple-lib/commit/398f8d001f758bf575b959537a17e79e4042d17b) ++ [Remove unused float.js and wallet.js](https://github.com/ripple/ripple-lib/commit/d4a4b5f4fbbf09677a59ce81bace35c6426a2fda) ++ [Remove config singleton to reduce global state](https://github.com/ripple/ripple-lib/commit/c655c2a20ee5d150a4b5a1b6717b9fb81f636025) + +## 0.12.4 + ++ [Improve entropy security](https://github.com/ripple/ripple-lib/commit/c7ba822320880037796f57876d1abb4e525648ed) ++ [Remove unused crypt.js file](https://github.com/ripple/ripple-lib/commit/1f68eba1461bca03a4d22872450d15ae5a185334) + +## 0.12.3 + ++ [Add getLedgerSequence to Remote](https://github.com/ripple/ripple-lib/commit/d09548d04d3238fca653d482ec1d5faa7254559a) ++ [Improve randomness when generating ECDSA signatures](https://github.com/ripple/ripple-lib/commit/fe7e30b737ead6e71adfa466f5835ba546feab31) ++ [Improve SerializedObject.append performance](https://github.com/ripple/ripple-lib/commit/f7c35b118ebba549a64bcaa1a0629385ec6dbf6f) ++ [Add `Amount.scale`. Multiply an amount’s value by a scale factor](https://github.com/ripple/ripple-lib/commit/74dac97b368493056474468520f05671f458a69f) + +## 0.12.2 + ++ [Check that stack trace is available, fixes logging in browser](https://github.com/ripple/ripple-lib/commit/53cae3a66d48e88e8a6bbb96d6489ce7b9e22975) + +## 0.12.1 + +__BREAKING CHANGES__ ++ [Removed support for parsing native amounts in floating point format](https://github.com/ripple/ripple-lib/commit/e80cd1ff55deae9cd5b0ae85be957f86856b887e) + +__OTHER CHANGES__ ++ [Fix taker pays funded calculation](https://github.com/ripple/ripple-lib/commit/5af824f5cf46c7b9caa58ee0a757bf854d26c8dc) ++ [Fix order funded amount calculation](https://github.com/ripple/ripple-lib/commit/b2cdb1a6aed968b1f306e8dadbd4b7ca37e5aa03) ++ [Fix handling of quality in order book](https://github.com/ripple/ripple-lib/commit/2a5a8b498da60df738ba18d5c265f34771e8a1af) ++ [Fix currency parsing of non-alphanumeric and no-currency currencies](https://github.com/ripple/ripple-lib/commit/2166bb2e88eae8d5f1aba77338f69e8a9edf6a6f) ++ [Add Amount.strict_mode for toggling range validation](https://github.com/ripple/ripple-lib/commit/b5ed8f59a7dab1a17491618b8d9193646c314fb4) ++ [Add filename and line number to log, use log.warn() for deprecations](https://github.com/ripple/ripple-lib/commit/90329d3d73f1a76675063655b407513e32dc048b) ++ [Add GlobalFreeze and NoFreeze flags](https://github.com/ripple/ripple-lib/commit/e2ed2bdbf6f01c7d4d690c2cf0b83fba94558dd7) ++ [Fix handling of falsy parameters in requestLedger](https://github.com/ripple/ripple-lib/commit/6023efed41b7812b3bab660a1c0dc9f0a21000b9) ++ [Fix Base:decode](https://github.com/ripple/ripple-lib/commit/719f39c01c6941d9a650aa94f95617793dd53ea0) ++ [Fix Amount: clone in ratio_human, product_human](https://github.com/ripple/ripple-lib/commit/19e17a8431550cf156b1ad669a19dedfe4e28e4a) ++ [Fix Amount.to_human for very small numbers](https://github.com/ripple/ripple-lib/commit/6abfa759aa09d68074ac558d96c4b126a7cd1719) ++ [Refactor base conversion](https://github.com/ripple/ripple-lib/commit/f2b63fa4a80663eb29472bc6bb1aea8159f1f205) ++ [Update binary transaction format](https://github.com/ripple/ripple-lib/commit/8e134918fb4c22983320a3102f955e4568bb1dfb) ++ [Add DefaultRipple account flag](https://github.com/ripple/ripple-lib/commit/3e249902c4cf25b4da5e75048c84ae391be83b10) ++ [Remove `Features` field requirement in `SetFee` transaction format](https://github.com/ripple/ripple-lib/commit/a20a649013646710c078d4ce1e210f87c7fe74fe) ++ [Remove `RegularKey` field requirement in `SetRegularKey` transaction format](https://github.com/ripple/ripple-lib/commit/c275174f27877ba8f389eb4efe969feb514d6e46) + +## 0.12.0 + +__BREAKING CHANGES__ ++ REMOVED Remote storage interface ++ REMOVED Remote `ping` configuration ++ REMOVED Old/deprecated Remote server configuration (websocket_ip, websocket_port) ++ REMOVED browser `online` reconnect listener + - [Cleanup, deprecations - 2833a7b6](https://github.com/ripple/ripple-lib/commit/2833a7b66e696dab427464625077f9b93092d0d5) ++ Remove `jsbn` and use `bignumber.js` instead for big number math ++ The `allow_nan` flag has been removed. Results for invalid amounts will always be `NaN` + - [Refactor to use bignumber.js - d025b4a0](https://github.com/ripple/ripple-lib/commit/d025b4a0c3a98a6de27a1bee9573c85347bcd66b) + - [Handle invalid input in parse_human - c8f18c8c](https://github.com/ripple/ripple-lib/commit/c8f18c8c8590b7b48e370e0325b6677b7720294f) + - [Check for null in isNumber - b86790c8](https://github.com/ripple/ripple-lib/commit/b86790c8543c239a532fd7697d4652829019d385) + - [Cleanup amount.js - d0fb291c](https://github.com/ripple/ripple-lib/commit/d0fb291c4e330193a244902156f1d74730da357d) + +__OTHER CHANGES__ ++ [Add deprecation warnings to request constructors. The first argument to request constructor functions should be an object containing request properties](https://github.com/ripple/ripple-lib/commit/35d76b3520934285f80059c1badd6c522539104c) ++ [Fix taker_gets_funded exceeding offer.TakerGets](https://github.com/ripple/ripple-lib/commit/b19ecb4482b589d575382b7a5d0480b963383bb1) ++ [Fix unsymmetric memo serializing](https://github.com/ripple/ripple-lib/commit/1ed36fabdbd54f4d31078c2b0eaa3becc0fe2821) ++ [Fix IOU value passed to `Amount.from_json()`](https://github.com/ripple/ripple-lib/commit/fd1b64393dffb3d1819cd40b8d43df43a4db042d) ++ [Update transaction binary parsing to account for XRP delivered amounts](https://github.com/ripple/ripple-lib/commit/35a346a674e6ee1e1e495db93700d55984efc7dd) ++ [Bumped dependencies](https://github.com/ripple/ripple-lib/commit/f9bc7cc746b44b24b61bbe260ae2e9d9617286da) + +## 0.11.0 + ++ [Track the funded status of an order based on cumulative account orders](https://github.com/ripple/ripple-lib/commit/67d39737a4d5e0fcd9d9b47b9083ee00e5a9e652) and [67d3973](https://github.com/ripple/ripple-lib/commit/b6b99dde022e1e14c4797e454b1d7fca50e49482) ++ Remove blobvault client from ripple-lib, use the [`ripple-vault-client`](https://github.com/ripple/ripple-vault-client) instead [9b3d62b7](https://github.com/ripple/ripple-lib/commit/9b3d62b765c4c25beae6eb0fa57ef3a07f2581b1) ++ [Add support for `ledger` option in requestBookOffers](https://github.com/ripple/ripple-lib/commit/34c0677c453c409ef0a5b351959abdc176d3bacb) ++ [Add support for `limit` option in requestBookOffers](https://github.com/ripple/ripple-lib/commit/d1d4452217c878d0b377d24830b4cd8b3162f6e0) ++ [Add `ledgerSelect` request constructor in `Remote`](https://github.com/ripple/ripple-lib/commit/98f40abfc3aa74dec5067a2d90002756cc8acd01) ++ [Default to binary data for commands that accept the binary flag](https://github.com/ripple/ripple-lib/commit/7cb113fcbcfc1e3e9830a999148b3e78df3387cc) ++ [Fix metadata account check](https://github.com/ripple/ripple-lib/commit/3f61598d6c87e3cc877af60e2d515f9eff73dfe1) ++ [Double check `tes` code before emitting `success`](https://github.com/ripple/ripple-lib/commit/97a8c874903eb7309d8f755955ac80872f670582) ++ [Decrease redundancy in binary account_tx parsing](https://github.com/ripple/ripple-lib/commit/0aba638e6e7f4f6e22cb6424eed3897ebad90a5a) ++ [Abort server connection on unrecoverable TLS error](https://github.com/ripple/ripple-lib/commit/000a2ea00c57157044aeca0fb3f24b37669b163c) ++ [Fix complete ledgers check on subscription that is not initial](https://github.com/ripple/ripple-lib/commit/89de91301e682a46dc60aaacc7ae152e8fe1b7c7) + +## 0.10.0 + ++ [Transaction changes](https://github.com/ripple/ripple-lib/pull/221) ++ **Important** `tef*` and `tel*` and errors will no longer be presented as +final. Rather than considering these errors final, ripple-lib will wait until +the `LastLedgerSequence` specified in the transaction is exceeded. This makes +failures more definitive, and ensures that no transaction will resubmit +indefinitely. ++ A new, final tej-class error is introduced to account for transactions that +are locally determined to have expired: `tejMaxLedger`. ++ [Allow per transaction fees to be set, `transaction.setFixedFee()`](https://github.com/ripple/ripple-lib/commit/9b22f279bcbe60ee6bcf4b7fa60a48e9c197a828) ++ [Improve memo support](https://github.com/ripple/ripple-lib/commit/1704ac4ae144c0ce54afad86f644c75a632080b1) + - Add `MemoFormat` property for memo + - Enforce `MemoFormat` and `MemoType` to be valid ASCII + - Support `text` and `json` MemoFormat ++ [Update sjcl library](https://github.com/ripple/ripple-lib/commit/3204998fcb6f31d6c90532a737a4adb8a1e420f6) + - Improved entropy by taking advantage of platform crypto + - Use jscl's k256 curve instead of altering the c256 curve with k256 configuration + - **Deprecated:** The c256 curve is linked to the k256 curve to provide backwards compatibility, this link will be removed in the future ++ [Fix empty queue check on reconnect](https://github.com/ripple/ripple-lib/commit/3c21994adcf72d1fbd87d453ceb917f9ad6df4ec) + +## 0.9.4 + ++ [Normalize offers from book_offers and transaction stream](https://github.com/ripple/ripple-lib/commit/86ed24b94cf7c8929c87db3a63e9bbea7f767e9c) ++ [Fix: Amount.to_human() precision rounding](https://github.com/ripple/ripple-lib/commit/e371cc2c3ceccb3c1cfdf18b98d80093147dd8b2) ++ [Fix: fractional drops in funded taker_pays setter](https://github.com/ripple/ripple-lib/commit/0d7fc0a573a144caac15dd13798b23eeb1f95fb4) + +## 0.9.3 + ++ [Change `presubmit` to emit immediately before transaction submit](https://github.com/ripple/ripple-lib/commit/7a1feaa89701bf861ab31ebd8ffdc8d8d1474e29) ++ [Add a "core" browser build of ripple-lib which has a subset of features and smaller file size](https://github.com/ripple/ripple-lib/pull/205) ++ [Update binformat with missing fields from rippled](https://github.com/ripple/ripple-lib/commit/cae980788efb00191bfd0988ed836d60cdf7a9a2) ++ [Wait for transaction validation before returning `tec` error](https://github.com/ripple/ripple-lib/commit/6bdd4b2670906588852fc4dda457607b4aac08e4) ++ [Change default `max_fee` on `Remote` to `1 XRP`](https://github.com/ripple/ripple-lib/commit/d6b1728c23ff85c3cc791bed6982a750641fd95f) ++ [Fix: Request ledger_accept should return the Remote](https://github.com/ripple/ripple-lib/pull/209) + +## 0.9.2 + +__BREAKING CHANGES__ ++ [Change accountRequest method signature](https://github.com/ripple/ripple-lib/commit/6f5d1104aa3eb440c518ec4f39e264fdce15fa15) + +__OTHER CHANGES__ ++ [Add paging behavior for account requests, `account_lines` and `account_offers`](https://github.com/ripple/ripple-lib/commit/722f4e175dbbf378e51b49142d0285f87acb22d7) ++ [Add max_fee setter to transactions to set max fee the submitter is willing to pay](https://github.com/ripple/ripple-lib/commit/24587fab9c8ad3840d7aa345a7037b48839e09d7) ++ [Fix: cap IOU Amounts to their max and min value](https://github.com/ripple/ripple-lib/commit/f05941fbc46fdb7c6fe7ad72927af02d527ffeed) + +Example on how to use paging with `account_offers`: +```js +// A valid `ledger_index` or `ledger_hash` is required to provide a reliable result. +// Results can change between ledger closes, so the provided ledger will be used as base. +var options = { + account: < rippleAccount >, + limit: < Number between 10 and 400 >, + ledger: < valid ledger_index or ledger_hash > +} + +// The `marker` comes back in an account request if there are more results than are returned +// in the current response. The amount of results per response are determined by the `limit`. +if (marker) { + options.marker = < marker >; +} + +var request = remote.requestAccountOffers(options); +``` + +[Full working example](https://github.com/geertweening/ripple-lib-scripts/blob/master/account_offers_paging.js) + +## 0.9.1 + ++ Switch account requests to use ledgerSelect rather than ledgerChoose ([278df90](https://github.com/ripple/ripple-lib/commit/278df9025a20228de22379a53c76ca12d40fa591)) ++ **Deprecated** setting `ident` and `account_index` on account requests ([278df90](https://github.com/ripple/ripple-lib/commit/278df9025a20228de22379a53c76ca12d40fa591)) ++ Change initial account transaction sequence to 1 ([a3c1d06](https://github.com/ripple/ripple-lib/commit/a3c1d06eba883dc84fe2bfe700e4309795c84cac)) ++ Fix: instance transaction without remote ([d3b6b81](https://github.com/ripple/ripple-lib/commit/d3b6b8127c7b01e416b400c25abf1719bdd008ca)) ++ Fix: account root request ledger argument ([bc1f9f8](https://github.com/ripple/ripple-lib/commit/bc1f9f8a286b187d36ebaf552694e31e73742293)) ++ Fix: rsign.js local signing and example ([d3b6b81](https://github.com/ripple/ripple-lib/commit/d3b6b8127c7b01e416b400c25abf1719bdd008ca) and [f1004c6](https://github.com/ripple/ripple-lib/commit/f1004c6db2a0ce59bbabbb8f2b355a9fd9995fd8)) + +## 0.9.0 + +__BREAKING CHANGES__ ++ Make maxLoops in seed.get_key optional. [Example use in tests](https://github.com/ripple/ripple-lib/blob/23e473b6886c457781949c825b3ff48b3984e51f/test/seed-test.js) ([23e473b](https://github.com/ripple/ripple-lib/commit/23e473b6886c457781949c825b3ff48b3984e51f)) + +__OTHER CHANGES__ ++ Add routes to the vault client for KYC attestations ([ed2da574](https://github.com/ripple/ripple-lib/commit/ed2da57475acf5e9d2cf3373858f4274832bd83f)) ++ Currency: add `show_interest` flag to show or hide interest in `Currency.to_human()` and `Currency.to_json()` [Example use in tests](https://github.com/ripple/ripple-lib/blob/947ec3edc2e7c8f1ef097e496bf552c74366e749/test/currency-test.js#L123) ++ Configurable maxAttempts for transaction submission ([d107092](https://github.com/ripple/ripple-lib/commit/d10709254061e9e4416d2cb78b5cac1ec0d7ffa5)) ++ Binformat: added missing TransactionResult options ([6abed8d](https://github.com/ripple/ripple-lib/commit/6abed8dd5311765b2eb70505dadbdf5121439ca8)) ++ Shrinkwrap packages for dependency locking ([2dcd5f9](2dcd5f94fbc71200eb08a5044c76ef94f7971913)) ++ Fix: Amount.to_human() precision bugs ([4be209e](https://github.com/ripple/ripple-lib/commit/4be209e286b5b209bec7bcd1212098985e15ff2f) and [7708c64](https://github.com/ripple/ripple-lib/commit/7708c64576e70ce3ac190442daceb30e4446aab7)) ++ Fix: change handling of requestLedger options ([57b7030](https://github.com/ripple/ripple-lib/commit/57b70300f5f0c7534ede118ddbb5d8762668a4f8)) + +## 0.8.2 + ++ Currency: Allow mixed letters and numbers in currencies ++ Deprecate account_tx map/reduce/filterg ++ Fix: correct requestLedger arguments ++ Fix: missing subscription on error events for some server methods ++ Fix: orderbook reset on reconnect ++ Fix: ripple-lib crashing. Add potential missing error handlers + +## 0.8.1 + ++ Wallet: Add Wallet class that generates wallets ++ Make npm test runnable in Windows. ++ Fix several stability issues, see merged PR's for details ++ Fix bug in Amount.to_human_full() ++ Fix undefined fee states when connecting to a rippled that is syncing + +## 0.8.0 + ++ Orderbook: Added tracking of offer funds for determining when offers are not funded ++ Orderbook: Added tests ++ Orderbook: Update owner funds ++ Transactions: If transaction errs with `tefALREADY`, wait until all possible submissions err with the same before emitting `error`. Fixes a client "Transaction malformed" bug. ++ Transactions: Track submissions, don't bother submitting to unconnected servers ++ Request: `request.request()` now accepts an array of servers as first argument. Servers can be represented with URL, or the server object itself. ++ Request: `request.broadcast()` now returns the number of servers request was sent to ++ Server: Acquire host information from server without additional request ++ Amount: Add a constant for the maximum canonical value that can be expressed as a Ripple value ++ Amount: Make Constants static fields on the class, instead of a separate export + +## 0.7.39 + ++ Improvements to multi-server support. Fixed an issue where a server's score was not reset and connections would keep dropping after being connected for a significant amount of time. ++ Improvements in order book support. Added support for currency pairs with interest bearing currencies. You can request an order book with hex, ISO code or full name for the currency. ++ Fix value parsing for amount/currency order pairs, e.g. `Amount.from_human("XAU 12345.6789")` ++ Improved Amount parsing from human readable string given a hex currency, e.g. `Amount.from_human("10 015841551A748AD2C1F76FF6ECB0CCCD00000000")` ++ Improvements to username normalization in the vault client ++ Add 2-factor authentication support for vault client ++ Removed vestiges of Grunt, switched to Gulp + +## 0.7.37 + ++ **Deprecations** + + 1. Removed humanistic amount detection in `transaction.payment`. Passing `1XRP` as the payment amount no longer works. + 2. `remote.setServer` uses full server URL rather than hostname. Example: `remote.setServer('wss://s`.ripple.com:443')` + 3. Removed constructors for deprecated transaction types from `transaction.js`. + 4. Removed `invoiceID` option from `transaction.payment`. Instead, use the `transaction.invoiceID` method. + 5. Removed `transaction.transactionManager` getter. + ++ Improved multi-server support. Servers are now ranked dynamically, and transactions are broadcasted to all connected servers. ++ Automatically ping connected servers. Client configuration now should contain `ping: ` to specify the ping interval. ++ Added `transaction.lastLedger` to specify `LastLedgerSequence`. Setting it this way also ensures that the sequence is not bumped on subsequent requests. ++ Added optional `remote.accountTx` binary parsing. + ```js + { + binary: true, + parseBinary: false + } + ``` ++ Added full currency name support, e.g. `Currency.from_json('XRP').to_human({full_name:'Ripples'})` will return `XRP - Ripples` ++ Improved interest bearing currency support, e.g. `Currency.from_human('USD - US Dollar (2.5%pa)')` ++ Improve test coverage ++ Added blob vault client. The vault client facilitates interaction with ripple's namespace and blob vault or 3rd party blob vaults using ripple's blob vault software (https://github.com/ripple/ripple-blobvault). A list of the available functions can be found at [docs/VAULTCLIENT.md](docs/VAULTCLIENT.md) + + +## 0.7.35 + ++ `LastLedgerSequence` is set by default on outgoing transactions. This refers to the last valid ledger index (AKA sequence) for a transaction. By default, this index is set to the current index (at submission time) plus 8. In theory, this allows ripple-lib to deterministically fail a transaction whose submission request timed out, but whose associated server continues to emit ledger_closed events. ++ Transactions that err with `telINSUF_FEE_P` will be automatically resubmitted. This error indicates that the `Fee` supplied in the transaction submission request was inadequate. Ideally, the `Fee` is tracked by ripple-lib in real-time, and the resubmitted transaction will most likely succeed. ++ Added Transaction.iff(function(callback) { }). Callback expects first argument to be an Error or null, second argument is a boolean which indicates whether or not to proceed with the transaction submission. If an `iff` function is specified, it will be executed prior to every submission of the transaction (including resubmissions). ++ Transactions will now emit `presubmit` and `postsubmit` events. They will be emitted before and after a transaction is submitted, respectively. ++ Added Transaction.summary(). Returns a summary of a transaction in semi-human-readable form. JSON-stringifiable. ++ Remote.requestAccountTx() with `binary: true` will automatically parse transactions. ++ Added Remote.requestAccountTx filter, map, and reduce. + +```js + remote.requestAccountTx({ + account: 'retc', + ledger_index_min: -1, + ledger_index_max: -1, + limit: 100, + binary: true, + + filter: function(transaction) { + return transaction.tx.TransactionType === 'Payment'; + }, + + map: function(transaction) { + return Number(transaction.tx.Amount); + }, + + reduce: function(a, b) { + return a + b; + }, + + pluck: 'transactions' + }, console.log) +``` + ++ Added persistence hooks. ++ General performance improvements, especially for long-running processes. diff --git a/LICENSE b/packages/xrpl/LICENSE similarity index 100% rename from LICENSE rename to packages/xrpl/LICENSE diff --git a/packages/xrpl/README.md b/packages/xrpl/README.md new file mode 100644 index 00000000..21afeb51 --- /dev/null +++ b/packages/xrpl/README.md @@ -0,0 +1,8 @@ +# xrpl.js + +This package includes the `xrpl` library. This repository uses a monorepo +layout. Please find the README for `xrpl` [here](https://github.com/XRPLF/xrpl.js/tree/master/README.md). + +READMEs for other packages in this monorepo are located at the root of their +package, but since newcomers to XRPL are likely to want to use the `xrpl` +package this README is at the root of the project. diff --git a/docs/.nojekyll b/packages/xrpl/docs/.nojekyll similarity index 100% rename from docs/.nojekyll rename to packages/xrpl/docs/.nojekyll diff --git a/docs/CNAME b/packages/xrpl/docs/CNAME similarity index 100% rename from docs/CNAME rename to packages/xrpl/docs/CNAME diff --git a/docs/assets/highlight.css b/packages/xrpl/docs/assets/highlight.css similarity index 100% rename from docs/assets/highlight.css rename to packages/xrpl/docs/assets/highlight.css diff --git a/docs/assets/icons.css b/packages/xrpl/docs/assets/icons.css similarity index 100% rename from docs/assets/icons.css rename to packages/xrpl/docs/assets/icons.css diff --git a/docs/assets/icons.png b/packages/xrpl/docs/assets/icons.png similarity index 100% rename from docs/assets/icons.png rename to packages/xrpl/docs/assets/icons.png diff --git a/docs/assets/icons@2x.png b/packages/xrpl/docs/assets/icons@2x.png similarity index 100% rename from docs/assets/icons@2x.png rename to packages/xrpl/docs/assets/icons@2x.png diff --git a/docs/assets/main.js b/packages/xrpl/docs/assets/main.js similarity index 100% rename from docs/assets/main.js rename to packages/xrpl/docs/assets/main.js diff --git a/docs/assets/search.js b/packages/xrpl/docs/assets/search.js similarity index 100% rename from docs/assets/search.js rename to packages/xrpl/docs/assets/search.js diff --git a/docs/assets/style.css b/packages/xrpl/docs/assets/style.css similarity index 100% rename from docs/assets/style.css rename to packages/xrpl/docs/assets/style.css diff --git a/docs/assets/widgets.png b/packages/xrpl/docs/assets/widgets.png similarity index 100% rename from docs/assets/widgets.png rename to packages/xrpl/docs/assets/widgets.png diff --git a/docs/assets/widgets@2x.png b/packages/xrpl/docs/assets/widgets@2x.png similarity index 100% rename from docs/assets/widgets@2x.png rename to packages/xrpl/docs/assets/widgets@2x.png diff --git a/docs/classes/BroadcastClient.html b/packages/xrpl/docs/classes/BroadcastClient.html similarity index 100% rename from docs/classes/BroadcastClient.html rename to packages/xrpl/docs/classes/BroadcastClient.html diff --git a/docs/classes/Client.html b/packages/xrpl/docs/classes/Client.html similarity index 100% rename from docs/classes/Client.html rename to packages/xrpl/docs/classes/Client.html diff --git a/docs/classes/ConnectionError.html b/packages/xrpl/docs/classes/ConnectionError.html similarity index 100% rename from docs/classes/ConnectionError.html rename to packages/xrpl/docs/classes/ConnectionError.html diff --git a/docs/classes/DisconnectedError.html b/packages/xrpl/docs/classes/DisconnectedError.html similarity index 100% rename from docs/classes/DisconnectedError.html rename to packages/xrpl/docs/classes/DisconnectedError.html diff --git a/docs/classes/NotConnectedError.html b/packages/xrpl/docs/classes/NotConnectedError.html similarity index 100% rename from docs/classes/NotConnectedError.html rename to packages/xrpl/docs/classes/NotConnectedError.html diff --git a/docs/classes/NotFoundError.html b/packages/xrpl/docs/classes/NotFoundError.html similarity index 100% rename from docs/classes/NotFoundError.html rename to packages/xrpl/docs/classes/NotFoundError.html diff --git a/docs/classes/ResponseFormatError.html b/packages/xrpl/docs/classes/ResponseFormatError.html similarity index 100% rename from docs/classes/ResponseFormatError.html rename to packages/xrpl/docs/classes/ResponseFormatError.html diff --git a/docs/classes/RippledError.html b/packages/xrpl/docs/classes/RippledError.html similarity index 100% rename from docs/classes/RippledError.html rename to packages/xrpl/docs/classes/RippledError.html diff --git a/docs/classes/RippledNotInitializedError.html b/packages/xrpl/docs/classes/RippledNotInitializedError.html similarity index 100% rename from docs/classes/RippledNotInitializedError.html rename to packages/xrpl/docs/classes/RippledNotInitializedError.html diff --git a/docs/classes/TimeoutError.html b/packages/xrpl/docs/classes/TimeoutError.html similarity index 100% rename from docs/classes/TimeoutError.html rename to packages/xrpl/docs/classes/TimeoutError.html diff --git a/docs/classes/UnexpectedError.html b/packages/xrpl/docs/classes/UnexpectedError.html similarity index 100% rename from docs/classes/UnexpectedError.html rename to packages/xrpl/docs/classes/UnexpectedError.html diff --git a/docs/classes/ValidationError.html b/packages/xrpl/docs/classes/ValidationError.html similarity index 100% rename from docs/classes/ValidationError.html rename to packages/xrpl/docs/classes/ValidationError.html diff --git a/docs/classes/Wallet.html b/packages/xrpl/docs/classes/Wallet.html similarity index 100% rename from docs/classes/Wallet.html rename to packages/xrpl/docs/classes/Wallet.html diff --git a/docs/classes/XRPLFaucetError.html b/packages/xrpl/docs/classes/XRPLFaucetError.html similarity index 100% rename from docs/classes/XRPLFaucetError.html rename to packages/xrpl/docs/classes/XRPLFaucetError.html diff --git a/docs/classes/XrplError.html b/packages/xrpl/docs/classes/XrplError.html similarity index 100% rename from docs/classes/XrplError.html rename to packages/xrpl/docs/classes/XrplError.html diff --git a/docs/enums/AccountSetAsfFlags.html b/packages/xrpl/docs/enums/AccountSetAsfFlags.html similarity index 100% rename from docs/enums/AccountSetAsfFlags.html rename to packages/xrpl/docs/enums/AccountSetAsfFlags.html diff --git a/docs/enums/AccountSetTfFlags.html b/packages/xrpl/docs/enums/AccountSetTfFlags.html similarity index 100% rename from docs/enums/AccountSetTfFlags.html rename to packages/xrpl/docs/enums/AccountSetTfFlags.html diff --git a/docs/enums/LedgerEntry.AccountRootFlags.html b/packages/xrpl/docs/enums/LedgerEntry.AccountRootFlags.html similarity index 100% rename from docs/enums/LedgerEntry.AccountRootFlags.html rename to packages/xrpl/docs/enums/LedgerEntry.AccountRootFlags.html diff --git a/docs/enums/LedgerEntry.OfferFlags.html b/packages/xrpl/docs/enums/LedgerEntry.OfferFlags.html similarity index 100% rename from docs/enums/LedgerEntry.OfferFlags.html rename to packages/xrpl/docs/enums/LedgerEntry.OfferFlags.html diff --git a/docs/enums/LedgerEntry.RippleStateFlags.html b/packages/xrpl/docs/enums/LedgerEntry.RippleStateFlags.html similarity index 100% rename from docs/enums/LedgerEntry.RippleStateFlags.html rename to packages/xrpl/docs/enums/LedgerEntry.RippleStateFlags.html diff --git a/docs/enums/LedgerEntry.SignerListFlags.html b/packages/xrpl/docs/enums/LedgerEntry.SignerListFlags.html similarity index 100% rename from docs/enums/LedgerEntry.SignerListFlags.html rename to packages/xrpl/docs/enums/LedgerEntry.SignerListFlags.html diff --git a/docs/enums/OfferCreateFlags.html b/packages/xrpl/docs/enums/OfferCreateFlags.html similarity index 100% rename from docs/enums/OfferCreateFlags.html rename to packages/xrpl/docs/enums/OfferCreateFlags.html diff --git a/docs/enums/PaymentChannelClaimFlags.html b/packages/xrpl/docs/enums/PaymentChannelClaimFlags.html similarity index 100% rename from docs/enums/PaymentChannelClaimFlags.html rename to packages/xrpl/docs/enums/PaymentChannelClaimFlags.html diff --git a/docs/enums/PaymentFlags.html b/packages/xrpl/docs/enums/PaymentFlags.html similarity index 100% rename from docs/enums/PaymentFlags.html rename to packages/xrpl/docs/enums/PaymentFlags.html diff --git a/docs/enums/TrustSetFlags.html b/packages/xrpl/docs/enums/TrustSetFlags.html similarity index 100% rename from docs/enums/TrustSetFlags.html rename to packages/xrpl/docs/enums/TrustSetFlags.html diff --git a/docs/index.html b/packages/xrpl/docs/index.html similarity index 100% rename from docs/index.html rename to packages/xrpl/docs/index.html diff --git a/docs/interfaces/AccountChannelsRequest.html b/packages/xrpl/docs/interfaces/AccountChannelsRequest.html similarity index 100% rename from docs/interfaces/AccountChannelsRequest.html rename to packages/xrpl/docs/interfaces/AccountChannelsRequest.html diff --git a/docs/interfaces/AccountChannelsResponse.html b/packages/xrpl/docs/interfaces/AccountChannelsResponse.html similarity index 100% rename from docs/interfaces/AccountChannelsResponse.html rename to packages/xrpl/docs/interfaces/AccountChannelsResponse.html diff --git a/docs/interfaces/AccountCurrenciesRequest.html b/packages/xrpl/docs/interfaces/AccountCurrenciesRequest.html similarity index 100% rename from docs/interfaces/AccountCurrenciesRequest.html rename to packages/xrpl/docs/interfaces/AccountCurrenciesRequest.html diff --git a/docs/interfaces/AccountCurrenciesResponse.html b/packages/xrpl/docs/interfaces/AccountCurrenciesResponse.html similarity index 100% rename from docs/interfaces/AccountCurrenciesResponse.html rename to packages/xrpl/docs/interfaces/AccountCurrenciesResponse.html diff --git a/docs/interfaces/AccountDelete.html b/packages/xrpl/docs/interfaces/AccountDelete.html similarity index 100% rename from docs/interfaces/AccountDelete.html rename to packages/xrpl/docs/interfaces/AccountDelete.html diff --git a/docs/interfaces/AccountInfoRequest.html b/packages/xrpl/docs/interfaces/AccountInfoRequest.html similarity index 100% rename from docs/interfaces/AccountInfoRequest.html rename to packages/xrpl/docs/interfaces/AccountInfoRequest.html diff --git a/docs/interfaces/AccountInfoResponse.html b/packages/xrpl/docs/interfaces/AccountInfoResponse.html similarity index 100% rename from docs/interfaces/AccountInfoResponse.html rename to packages/xrpl/docs/interfaces/AccountInfoResponse.html diff --git a/docs/interfaces/AccountLinesRequest.html b/packages/xrpl/docs/interfaces/AccountLinesRequest.html similarity index 100% rename from docs/interfaces/AccountLinesRequest.html rename to packages/xrpl/docs/interfaces/AccountLinesRequest.html diff --git a/docs/interfaces/AccountLinesResponse.html b/packages/xrpl/docs/interfaces/AccountLinesResponse.html similarity index 100% rename from docs/interfaces/AccountLinesResponse.html rename to packages/xrpl/docs/interfaces/AccountLinesResponse.html diff --git a/docs/interfaces/AccountObjectsRequest.html b/packages/xrpl/docs/interfaces/AccountObjectsRequest.html similarity index 100% rename from docs/interfaces/AccountObjectsRequest.html rename to packages/xrpl/docs/interfaces/AccountObjectsRequest.html diff --git a/docs/interfaces/AccountObjectsResponse.html b/packages/xrpl/docs/interfaces/AccountObjectsResponse.html similarity index 100% rename from docs/interfaces/AccountObjectsResponse.html rename to packages/xrpl/docs/interfaces/AccountObjectsResponse.html diff --git a/docs/interfaces/AccountOffersRequest.html b/packages/xrpl/docs/interfaces/AccountOffersRequest.html similarity index 100% rename from docs/interfaces/AccountOffersRequest.html rename to packages/xrpl/docs/interfaces/AccountOffersRequest.html diff --git a/docs/interfaces/AccountOffersResponse.html b/packages/xrpl/docs/interfaces/AccountOffersResponse.html similarity index 100% rename from docs/interfaces/AccountOffersResponse.html rename to packages/xrpl/docs/interfaces/AccountOffersResponse.html diff --git a/docs/interfaces/AccountSet.html b/packages/xrpl/docs/interfaces/AccountSet.html similarity index 100% rename from docs/interfaces/AccountSet.html rename to packages/xrpl/docs/interfaces/AccountSet.html diff --git a/docs/interfaces/AccountSetFlagsInterface.html b/packages/xrpl/docs/interfaces/AccountSetFlagsInterface.html similarity index 100% rename from docs/interfaces/AccountSetFlagsInterface.html rename to packages/xrpl/docs/interfaces/AccountSetFlagsInterface.html diff --git a/docs/interfaces/AccountTxRequest.html b/packages/xrpl/docs/interfaces/AccountTxRequest.html similarity index 100% rename from docs/interfaces/AccountTxRequest.html rename to packages/xrpl/docs/interfaces/AccountTxRequest.html diff --git a/docs/interfaces/AccountTxResponse.html b/packages/xrpl/docs/interfaces/AccountTxResponse.html similarity index 100% rename from docs/interfaces/AccountTxResponse.html rename to packages/xrpl/docs/interfaces/AccountTxResponse.html diff --git a/docs/interfaces/BookOffer.html b/packages/xrpl/docs/interfaces/BookOffer.html similarity index 100% rename from docs/interfaces/BookOffer.html rename to packages/xrpl/docs/interfaces/BookOffer.html diff --git a/docs/interfaces/BookOffersRequest.html b/packages/xrpl/docs/interfaces/BookOffersRequest.html similarity index 100% rename from docs/interfaces/BookOffersRequest.html rename to packages/xrpl/docs/interfaces/BookOffersRequest.html diff --git a/docs/interfaces/BookOffersResponse.html b/packages/xrpl/docs/interfaces/BookOffersResponse.html similarity index 100% rename from docs/interfaces/BookOffersResponse.html rename to packages/xrpl/docs/interfaces/BookOffersResponse.html diff --git a/docs/interfaces/ChannelVerifyRequest.html b/packages/xrpl/docs/interfaces/ChannelVerifyRequest.html similarity index 100% rename from docs/interfaces/ChannelVerifyRequest.html rename to packages/xrpl/docs/interfaces/ChannelVerifyRequest.html diff --git a/docs/interfaces/ChannelVerifyResponse.html b/packages/xrpl/docs/interfaces/ChannelVerifyResponse.html similarity index 100% rename from docs/interfaces/ChannelVerifyResponse.html rename to packages/xrpl/docs/interfaces/ChannelVerifyResponse.html diff --git a/docs/interfaces/CheckCancel.html b/packages/xrpl/docs/interfaces/CheckCancel.html similarity index 100% rename from docs/interfaces/CheckCancel.html rename to packages/xrpl/docs/interfaces/CheckCancel.html diff --git a/docs/interfaces/CheckCash.html b/packages/xrpl/docs/interfaces/CheckCash.html similarity index 100% rename from docs/interfaces/CheckCash.html rename to packages/xrpl/docs/interfaces/CheckCash.html diff --git a/docs/interfaces/CheckCreate.html b/packages/xrpl/docs/interfaces/CheckCreate.html similarity index 100% rename from docs/interfaces/CheckCreate.html rename to packages/xrpl/docs/interfaces/CheckCreate.html diff --git a/docs/interfaces/ClientOptions.html b/packages/xrpl/docs/interfaces/ClientOptions.html similarity index 100% rename from docs/interfaces/ClientOptions.html rename to packages/xrpl/docs/interfaces/ClientOptions.html diff --git a/docs/interfaces/ConsensusStream.html b/packages/xrpl/docs/interfaces/ConsensusStream.html similarity index 100% rename from docs/interfaces/ConsensusStream.html rename to packages/xrpl/docs/interfaces/ConsensusStream.html diff --git a/docs/interfaces/DepositAuthorizedRequest.html b/packages/xrpl/docs/interfaces/DepositAuthorizedRequest.html similarity index 100% rename from docs/interfaces/DepositAuthorizedRequest.html rename to packages/xrpl/docs/interfaces/DepositAuthorizedRequest.html diff --git a/docs/interfaces/DepositAuthorizedResponse.html b/packages/xrpl/docs/interfaces/DepositAuthorizedResponse.html similarity index 100% rename from docs/interfaces/DepositAuthorizedResponse.html rename to packages/xrpl/docs/interfaces/DepositAuthorizedResponse.html diff --git a/docs/interfaces/DepositPreauth.html b/packages/xrpl/docs/interfaces/DepositPreauth.html similarity index 100% rename from docs/interfaces/DepositPreauth.html rename to packages/xrpl/docs/interfaces/DepositPreauth.html diff --git a/docs/interfaces/ErrorResponse.html b/packages/xrpl/docs/interfaces/ErrorResponse.html similarity index 100% rename from docs/interfaces/ErrorResponse.html rename to packages/xrpl/docs/interfaces/ErrorResponse.html diff --git a/docs/interfaces/EscrowCancel.html b/packages/xrpl/docs/interfaces/EscrowCancel.html similarity index 100% rename from docs/interfaces/EscrowCancel.html rename to packages/xrpl/docs/interfaces/EscrowCancel.html diff --git a/docs/interfaces/EscrowCreate.html b/packages/xrpl/docs/interfaces/EscrowCreate.html similarity index 100% rename from docs/interfaces/EscrowCreate.html rename to packages/xrpl/docs/interfaces/EscrowCreate.html diff --git a/docs/interfaces/EscrowFinish.html b/packages/xrpl/docs/interfaces/EscrowFinish.html similarity index 100% rename from docs/interfaces/EscrowFinish.html rename to packages/xrpl/docs/interfaces/EscrowFinish.html diff --git a/docs/interfaces/FeeRequest.html b/packages/xrpl/docs/interfaces/FeeRequest.html similarity index 100% rename from docs/interfaces/FeeRequest.html rename to packages/xrpl/docs/interfaces/FeeRequest.html diff --git a/docs/interfaces/FeeResponse.html b/packages/xrpl/docs/interfaces/FeeResponse.html similarity index 100% rename from docs/interfaces/FeeResponse.html rename to packages/xrpl/docs/interfaces/FeeResponse.html diff --git a/docs/interfaces/GatewayBalancesRequest.html b/packages/xrpl/docs/interfaces/GatewayBalancesRequest.html similarity index 100% rename from docs/interfaces/GatewayBalancesRequest.html rename to packages/xrpl/docs/interfaces/GatewayBalancesRequest.html diff --git a/docs/interfaces/GatewayBalancesResponse.html b/packages/xrpl/docs/interfaces/GatewayBalancesResponse.html similarity index 100% rename from docs/interfaces/GatewayBalancesResponse.html rename to packages/xrpl/docs/interfaces/GatewayBalancesResponse.html diff --git a/docs/interfaces/LedgerClosedRequest.html b/packages/xrpl/docs/interfaces/LedgerClosedRequest.html similarity index 100% rename from docs/interfaces/LedgerClosedRequest.html rename to packages/xrpl/docs/interfaces/LedgerClosedRequest.html diff --git a/docs/interfaces/LedgerClosedResponse.html b/packages/xrpl/docs/interfaces/LedgerClosedResponse.html similarity index 100% rename from docs/interfaces/LedgerClosedResponse.html rename to packages/xrpl/docs/interfaces/LedgerClosedResponse.html diff --git a/docs/interfaces/LedgerCurrentRequest.html b/packages/xrpl/docs/interfaces/LedgerCurrentRequest.html similarity index 100% rename from docs/interfaces/LedgerCurrentRequest.html rename to packages/xrpl/docs/interfaces/LedgerCurrentRequest.html diff --git a/docs/interfaces/LedgerCurrentResponse.html b/packages/xrpl/docs/interfaces/LedgerCurrentResponse.html similarity index 100% rename from docs/interfaces/LedgerCurrentResponse.html rename to packages/xrpl/docs/interfaces/LedgerCurrentResponse.html diff --git a/docs/interfaces/LedgerDataRequest.html b/packages/xrpl/docs/interfaces/LedgerDataRequest.html similarity index 100% rename from docs/interfaces/LedgerDataRequest.html rename to packages/xrpl/docs/interfaces/LedgerDataRequest.html diff --git a/docs/interfaces/LedgerDataResponse.html b/packages/xrpl/docs/interfaces/LedgerDataResponse.html similarity index 100% rename from docs/interfaces/LedgerDataResponse.html rename to packages/xrpl/docs/interfaces/LedgerDataResponse.html diff --git a/docs/interfaces/LedgerEntry.AccountRoot.html b/packages/xrpl/docs/interfaces/LedgerEntry.AccountRoot.html similarity index 100% rename from docs/interfaces/LedgerEntry.AccountRoot.html rename to packages/xrpl/docs/interfaces/LedgerEntry.AccountRoot.html diff --git a/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html b/packages/xrpl/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html similarity index 100% rename from docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html rename to packages/xrpl/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html diff --git a/docs/interfaces/LedgerEntry.Amendments.html b/packages/xrpl/docs/interfaces/LedgerEntry.Amendments.html similarity index 100% rename from docs/interfaces/LedgerEntry.Amendments.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Amendments.html diff --git a/docs/interfaces/LedgerEntry.Check.html b/packages/xrpl/docs/interfaces/LedgerEntry.Check.html similarity index 100% rename from docs/interfaces/LedgerEntry.Check.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Check.html diff --git a/docs/interfaces/LedgerEntry.DepositPreauth.html b/packages/xrpl/docs/interfaces/LedgerEntry.DepositPreauth.html similarity index 100% rename from docs/interfaces/LedgerEntry.DepositPreauth.html rename to packages/xrpl/docs/interfaces/LedgerEntry.DepositPreauth.html diff --git a/docs/interfaces/LedgerEntry.DirectoryNode.html b/packages/xrpl/docs/interfaces/LedgerEntry.DirectoryNode.html similarity index 100% rename from docs/interfaces/LedgerEntry.DirectoryNode.html rename to packages/xrpl/docs/interfaces/LedgerEntry.DirectoryNode.html diff --git a/docs/interfaces/LedgerEntry.Escrow.html b/packages/xrpl/docs/interfaces/LedgerEntry.Escrow.html similarity index 100% rename from docs/interfaces/LedgerEntry.Escrow.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Escrow.html diff --git a/docs/interfaces/LedgerEntry.FeeSettings.html b/packages/xrpl/docs/interfaces/LedgerEntry.FeeSettings.html similarity index 100% rename from docs/interfaces/LedgerEntry.FeeSettings.html rename to packages/xrpl/docs/interfaces/LedgerEntry.FeeSettings.html diff --git a/docs/interfaces/LedgerEntry.Ledger.html b/packages/xrpl/docs/interfaces/LedgerEntry.Ledger.html similarity index 100% rename from docs/interfaces/LedgerEntry.Ledger.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Ledger.html diff --git a/docs/interfaces/LedgerEntry.LedgerHashes.html b/packages/xrpl/docs/interfaces/LedgerEntry.LedgerHashes.html similarity index 100% rename from docs/interfaces/LedgerEntry.LedgerHashes.html rename to packages/xrpl/docs/interfaces/LedgerEntry.LedgerHashes.html diff --git a/docs/interfaces/LedgerEntry.NegativeUNL.html b/packages/xrpl/docs/interfaces/LedgerEntry.NegativeUNL.html similarity index 100% rename from docs/interfaces/LedgerEntry.NegativeUNL.html rename to packages/xrpl/docs/interfaces/LedgerEntry.NegativeUNL.html diff --git a/docs/interfaces/LedgerEntry.Offer.html b/packages/xrpl/docs/interfaces/LedgerEntry.Offer.html similarity index 100% rename from docs/interfaces/LedgerEntry.Offer.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Offer.html diff --git a/docs/interfaces/LedgerEntry.PayChannel.html b/packages/xrpl/docs/interfaces/LedgerEntry.PayChannel.html similarity index 100% rename from docs/interfaces/LedgerEntry.PayChannel.html rename to packages/xrpl/docs/interfaces/LedgerEntry.PayChannel.html diff --git a/docs/interfaces/LedgerEntry.RippleState.html b/packages/xrpl/docs/interfaces/LedgerEntry.RippleState.html similarity index 100% rename from docs/interfaces/LedgerEntry.RippleState.html rename to packages/xrpl/docs/interfaces/LedgerEntry.RippleState.html diff --git a/docs/interfaces/LedgerEntry.SignerList.html b/packages/xrpl/docs/interfaces/LedgerEntry.SignerList.html similarity index 100% rename from docs/interfaces/LedgerEntry.SignerList.html rename to packages/xrpl/docs/interfaces/LedgerEntry.SignerList.html diff --git a/docs/interfaces/LedgerEntry.Ticket.html b/packages/xrpl/docs/interfaces/LedgerEntry.Ticket.html similarity index 100% rename from docs/interfaces/LedgerEntry.Ticket.html rename to packages/xrpl/docs/interfaces/LedgerEntry.Ticket.html diff --git a/docs/interfaces/LedgerEntryRequest.html b/packages/xrpl/docs/interfaces/LedgerEntryRequest.html similarity index 100% rename from docs/interfaces/LedgerEntryRequest.html rename to packages/xrpl/docs/interfaces/LedgerEntryRequest.html diff --git a/docs/interfaces/LedgerEntryResponse.html b/packages/xrpl/docs/interfaces/LedgerEntryResponse.html similarity index 100% rename from docs/interfaces/LedgerEntryResponse.html rename to packages/xrpl/docs/interfaces/LedgerEntryResponse.html diff --git a/docs/interfaces/LedgerRequest.html b/packages/xrpl/docs/interfaces/LedgerRequest.html similarity index 100% rename from docs/interfaces/LedgerRequest.html rename to packages/xrpl/docs/interfaces/LedgerRequest.html diff --git a/docs/interfaces/LedgerResponse.html b/packages/xrpl/docs/interfaces/LedgerResponse.html similarity index 100% rename from docs/interfaces/LedgerResponse.html rename to packages/xrpl/docs/interfaces/LedgerResponse.html diff --git a/docs/interfaces/LedgerStream.html b/packages/xrpl/docs/interfaces/LedgerStream.html similarity index 100% rename from docs/interfaces/LedgerStream.html rename to packages/xrpl/docs/interfaces/LedgerStream.html diff --git a/docs/interfaces/ManifestRequest.html b/packages/xrpl/docs/interfaces/ManifestRequest.html similarity index 100% rename from docs/interfaces/ManifestRequest.html rename to packages/xrpl/docs/interfaces/ManifestRequest.html diff --git a/docs/interfaces/ManifestResponse.html b/packages/xrpl/docs/interfaces/ManifestResponse.html similarity index 100% rename from docs/interfaces/ManifestResponse.html rename to packages/xrpl/docs/interfaces/ManifestResponse.html diff --git a/docs/interfaces/NoRippleCheckRequest.html b/packages/xrpl/docs/interfaces/NoRippleCheckRequest.html similarity index 100% rename from docs/interfaces/NoRippleCheckRequest.html rename to packages/xrpl/docs/interfaces/NoRippleCheckRequest.html diff --git a/docs/interfaces/NoRippleCheckResponse.html b/packages/xrpl/docs/interfaces/NoRippleCheckResponse.html similarity index 100% rename from docs/interfaces/NoRippleCheckResponse.html rename to packages/xrpl/docs/interfaces/NoRippleCheckResponse.html diff --git a/docs/interfaces/OfferCancel.html b/packages/xrpl/docs/interfaces/OfferCancel.html similarity index 100% rename from docs/interfaces/OfferCancel.html rename to packages/xrpl/docs/interfaces/OfferCancel.html diff --git a/docs/interfaces/OfferCreate.html b/packages/xrpl/docs/interfaces/OfferCreate.html similarity index 100% rename from docs/interfaces/OfferCreate.html rename to packages/xrpl/docs/interfaces/OfferCreate.html diff --git a/docs/interfaces/OfferCreateFlagsInterface.html b/packages/xrpl/docs/interfaces/OfferCreateFlagsInterface.html similarity index 100% rename from docs/interfaces/OfferCreateFlagsInterface.html rename to packages/xrpl/docs/interfaces/OfferCreateFlagsInterface.html diff --git a/docs/interfaces/OrderBookStream.html b/packages/xrpl/docs/interfaces/OrderBookStream.html similarity index 100% rename from docs/interfaces/OrderBookStream.html rename to packages/xrpl/docs/interfaces/OrderBookStream.html diff --git a/docs/interfaces/PathFindCloseRequest.html b/packages/xrpl/docs/interfaces/PathFindCloseRequest.html similarity index 100% rename from docs/interfaces/PathFindCloseRequest.html rename to packages/xrpl/docs/interfaces/PathFindCloseRequest.html diff --git a/docs/interfaces/PathFindCreateRequest.html b/packages/xrpl/docs/interfaces/PathFindCreateRequest.html similarity index 100% rename from docs/interfaces/PathFindCreateRequest.html rename to packages/xrpl/docs/interfaces/PathFindCreateRequest.html diff --git a/docs/interfaces/PathFindResponse.html b/packages/xrpl/docs/interfaces/PathFindResponse.html similarity index 100% rename from docs/interfaces/PathFindResponse.html rename to packages/xrpl/docs/interfaces/PathFindResponse.html diff --git a/docs/interfaces/PathFindStatusRequest.html b/packages/xrpl/docs/interfaces/PathFindStatusRequest.html similarity index 100% rename from docs/interfaces/PathFindStatusRequest.html rename to packages/xrpl/docs/interfaces/PathFindStatusRequest.html diff --git a/docs/interfaces/PathFindStream.html b/packages/xrpl/docs/interfaces/PathFindStream.html similarity index 100% rename from docs/interfaces/PathFindStream.html rename to packages/xrpl/docs/interfaces/PathFindStream.html diff --git a/docs/interfaces/Payment.html b/packages/xrpl/docs/interfaces/Payment.html similarity index 100% rename from docs/interfaces/Payment.html rename to packages/xrpl/docs/interfaces/Payment.html diff --git a/docs/interfaces/PaymentChannelClaim.html b/packages/xrpl/docs/interfaces/PaymentChannelClaim.html similarity index 100% rename from docs/interfaces/PaymentChannelClaim.html rename to packages/xrpl/docs/interfaces/PaymentChannelClaim.html diff --git a/docs/interfaces/PaymentChannelClaimFlagsInterface.html b/packages/xrpl/docs/interfaces/PaymentChannelClaimFlagsInterface.html similarity index 100% rename from docs/interfaces/PaymentChannelClaimFlagsInterface.html rename to packages/xrpl/docs/interfaces/PaymentChannelClaimFlagsInterface.html diff --git a/docs/interfaces/PaymentChannelCreate.html b/packages/xrpl/docs/interfaces/PaymentChannelCreate.html similarity index 100% rename from docs/interfaces/PaymentChannelCreate.html rename to packages/xrpl/docs/interfaces/PaymentChannelCreate.html diff --git a/docs/interfaces/PaymentChannelFund.html b/packages/xrpl/docs/interfaces/PaymentChannelFund.html similarity index 100% rename from docs/interfaces/PaymentChannelFund.html rename to packages/xrpl/docs/interfaces/PaymentChannelFund.html diff --git a/docs/interfaces/PaymentFlagsInterface.html b/packages/xrpl/docs/interfaces/PaymentFlagsInterface.html similarity index 100% rename from docs/interfaces/PaymentFlagsInterface.html rename to packages/xrpl/docs/interfaces/PaymentFlagsInterface.html diff --git a/docs/interfaces/PeerStatusStream.html b/packages/xrpl/docs/interfaces/PeerStatusStream.html similarity index 100% rename from docs/interfaces/PeerStatusStream.html rename to packages/xrpl/docs/interfaces/PeerStatusStream.html diff --git a/docs/interfaces/PingRequest.html b/packages/xrpl/docs/interfaces/PingRequest.html similarity index 100% rename from docs/interfaces/PingRequest.html rename to packages/xrpl/docs/interfaces/PingRequest.html diff --git a/docs/interfaces/PingResponse.html b/packages/xrpl/docs/interfaces/PingResponse.html similarity index 100% rename from docs/interfaces/PingResponse.html rename to packages/xrpl/docs/interfaces/PingResponse.html diff --git a/docs/interfaces/RandomRequest.html b/packages/xrpl/docs/interfaces/RandomRequest.html similarity index 100% rename from docs/interfaces/RandomRequest.html rename to packages/xrpl/docs/interfaces/RandomRequest.html diff --git a/docs/interfaces/RandomResponse.html b/packages/xrpl/docs/interfaces/RandomResponse.html similarity index 100% rename from docs/interfaces/RandomResponse.html rename to packages/xrpl/docs/interfaces/RandomResponse.html diff --git a/docs/interfaces/RipplePathFindRequest.html b/packages/xrpl/docs/interfaces/RipplePathFindRequest.html similarity index 100% rename from docs/interfaces/RipplePathFindRequest.html rename to packages/xrpl/docs/interfaces/RipplePathFindRequest.html diff --git a/docs/interfaces/RipplePathFindResponse.html b/packages/xrpl/docs/interfaces/RipplePathFindResponse.html similarity index 100% rename from docs/interfaces/RipplePathFindResponse.html rename to packages/xrpl/docs/interfaces/RipplePathFindResponse.html diff --git a/docs/interfaces/ServerInfoRequest.html b/packages/xrpl/docs/interfaces/ServerInfoRequest.html similarity index 100% rename from docs/interfaces/ServerInfoRequest.html rename to packages/xrpl/docs/interfaces/ServerInfoRequest.html diff --git a/docs/interfaces/ServerInfoResponse.html b/packages/xrpl/docs/interfaces/ServerInfoResponse.html similarity index 100% rename from docs/interfaces/ServerInfoResponse.html rename to packages/xrpl/docs/interfaces/ServerInfoResponse.html diff --git a/docs/interfaces/ServerStateRequest.html b/packages/xrpl/docs/interfaces/ServerStateRequest.html similarity index 100% rename from docs/interfaces/ServerStateRequest.html rename to packages/xrpl/docs/interfaces/ServerStateRequest.html diff --git a/docs/interfaces/ServerStateResponse.html b/packages/xrpl/docs/interfaces/ServerStateResponse.html similarity index 100% rename from docs/interfaces/ServerStateResponse.html rename to packages/xrpl/docs/interfaces/ServerStateResponse.html diff --git a/docs/interfaces/SetRegularKey.html b/packages/xrpl/docs/interfaces/SetRegularKey.html similarity index 100% rename from docs/interfaces/SetRegularKey.html rename to packages/xrpl/docs/interfaces/SetRegularKey.html diff --git a/docs/interfaces/SignerListSet.html b/packages/xrpl/docs/interfaces/SignerListSet.html similarity index 100% rename from docs/interfaces/SignerListSet.html rename to packages/xrpl/docs/interfaces/SignerListSet.html diff --git a/docs/interfaces/SubmitMultisignedRequest.html b/packages/xrpl/docs/interfaces/SubmitMultisignedRequest.html similarity index 100% rename from docs/interfaces/SubmitMultisignedRequest.html rename to packages/xrpl/docs/interfaces/SubmitMultisignedRequest.html diff --git a/docs/interfaces/SubmitMultisignedResponse.html b/packages/xrpl/docs/interfaces/SubmitMultisignedResponse.html similarity index 100% rename from docs/interfaces/SubmitMultisignedResponse.html rename to packages/xrpl/docs/interfaces/SubmitMultisignedResponse.html diff --git a/docs/interfaces/SubmitRequest.html b/packages/xrpl/docs/interfaces/SubmitRequest.html similarity index 100% rename from docs/interfaces/SubmitRequest.html rename to packages/xrpl/docs/interfaces/SubmitRequest.html diff --git a/docs/interfaces/SubmitResponse.html b/packages/xrpl/docs/interfaces/SubmitResponse.html similarity index 100% rename from docs/interfaces/SubmitResponse.html rename to packages/xrpl/docs/interfaces/SubmitResponse.html diff --git a/docs/interfaces/SubscribeRequest.html b/packages/xrpl/docs/interfaces/SubscribeRequest.html similarity index 100% rename from docs/interfaces/SubscribeRequest.html rename to packages/xrpl/docs/interfaces/SubscribeRequest.html diff --git a/docs/interfaces/SubscribeResponse.html b/packages/xrpl/docs/interfaces/SubscribeResponse.html similarity index 100% rename from docs/interfaces/SubscribeResponse.html rename to packages/xrpl/docs/interfaces/SubscribeResponse.html diff --git a/docs/interfaces/TicketCreate.html b/packages/xrpl/docs/interfaces/TicketCreate.html similarity index 100% rename from docs/interfaces/TicketCreate.html rename to packages/xrpl/docs/interfaces/TicketCreate.html diff --git a/docs/interfaces/TransactionAndMetadata.html b/packages/xrpl/docs/interfaces/TransactionAndMetadata.html similarity index 100% rename from docs/interfaces/TransactionAndMetadata.html rename to packages/xrpl/docs/interfaces/TransactionAndMetadata.html diff --git a/docs/interfaces/TransactionEntryRequest.html b/packages/xrpl/docs/interfaces/TransactionEntryRequest.html similarity index 100% rename from docs/interfaces/TransactionEntryRequest.html rename to packages/xrpl/docs/interfaces/TransactionEntryRequest.html diff --git a/docs/interfaces/TransactionEntryResponse.html b/packages/xrpl/docs/interfaces/TransactionEntryResponse.html similarity index 100% rename from docs/interfaces/TransactionEntryResponse.html rename to packages/xrpl/docs/interfaces/TransactionEntryResponse.html diff --git a/docs/interfaces/TransactionMetadata.html b/packages/xrpl/docs/interfaces/TransactionMetadata.html similarity index 100% rename from docs/interfaces/TransactionMetadata.html rename to packages/xrpl/docs/interfaces/TransactionMetadata.html diff --git a/docs/interfaces/TransactionStream.html b/packages/xrpl/docs/interfaces/TransactionStream.html similarity index 100% rename from docs/interfaces/TransactionStream.html rename to packages/xrpl/docs/interfaces/TransactionStream.html diff --git a/docs/interfaces/TrustSet.html b/packages/xrpl/docs/interfaces/TrustSet.html similarity index 100% rename from docs/interfaces/TrustSet.html rename to packages/xrpl/docs/interfaces/TrustSet.html diff --git a/docs/interfaces/TrustSetFlagsInterface.html b/packages/xrpl/docs/interfaces/TrustSetFlagsInterface.html similarity index 100% rename from docs/interfaces/TrustSetFlagsInterface.html rename to packages/xrpl/docs/interfaces/TrustSetFlagsInterface.html diff --git a/docs/interfaces/TxRequest.html b/packages/xrpl/docs/interfaces/TxRequest.html similarity index 100% rename from docs/interfaces/TxRequest.html rename to packages/xrpl/docs/interfaces/TxRequest.html diff --git a/docs/interfaces/TxResponse.html b/packages/xrpl/docs/interfaces/TxResponse.html similarity index 100% rename from docs/interfaces/TxResponse.html rename to packages/xrpl/docs/interfaces/TxResponse.html diff --git a/docs/interfaces/UnsubscribeRequest.html b/packages/xrpl/docs/interfaces/UnsubscribeRequest.html similarity index 100% rename from docs/interfaces/UnsubscribeRequest.html rename to packages/xrpl/docs/interfaces/UnsubscribeRequest.html diff --git a/docs/interfaces/UnsubscribeResponse.html b/packages/xrpl/docs/interfaces/UnsubscribeResponse.html similarity index 100% rename from docs/interfaces/UnsubscribeResponse.html rename to packages/xrpl/docs/interfaces/UnsubscribeResponse.html diff --git a/docs/interfaces/ValidationStream.html b/packages/xrpl/docs/interfaces/ValidationStream.html similarity index 100% rename from docs/interfaces/ValidationStream.html rename to packages/xrpl/docs/interfaces/ValidationStream.html diff --git a/docs/modules.html b/packages/xrpl/docs/modules.html similarity index 100% rename from docs/modules.html rename to packages/xrpl/docs/modules.html diff --git a/docs/modules/LedgerEntry.html b/packages/xrpl/docs/modules/LedgerEntry.html similarity index 100% rename from docs/modules/LedgerEntry.html rename to packages/xrpl/docs/modules/LedgerEntry.html diff --git a/packages/xrpl/package.json b/packages/xrpl/package.json new file mode 100644 index 00000000..16fe6b36 --- /dev/null +++ b/packages/xrpl/package.json @@ -0,0 +1,67 @@ +{ + "name": "xrpl", + "version": "2.0.1", + "license": "ISC", + "description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser", + "files": [ + "dist/npm/*", + "build/xrpl-latest-min.js", + "build/xrpl-latest.js" + ], + "main": "dist/npm/", + "unpkg": "build/xrpl-latest-min.js", + "jsdelivr": "build/xrpl-latest-min.js", + "types": "dist/npm/index.d.ts", + "directories": { + "test": "test" + }, + "browser": { + "ws": "./dist/npm/client/WSWrapper.js" + }, + "dependencies": { + "bignumber.js": "^9.0.0", + "bip32": "^2.0.6", + "bip39": "^3.0.4", + "https-proxy-agent": "^5.0.0", + "lodash": "^4.17.4", + "ripple-address-codec": "^4.1.1", + "ripple-binary-codec": "^1.1.3", + "ripple-keypairs": "^1.0.3", + "ws": "^8.2.2" + }, + "resolutions": { + "elliptic": "^6.5.4" + }, + "scripts": { + "build": "run-s build:lib build:snippets build:web", + "build:snippets": "tsc --build ./snippets/tsconfig.json", + "build:lib": "tsc --build tsconfig.build.json", + "build:web": "webpack", + "build:browserTests": "webpack --config ./test/webpack.config.js", + "analyze": "run-s build:web --analyze", + "watch": "run-s build:lib --watch", + "clean": "rm -rf dist", + "docgen": "typedoc && echo js.xrpl.org >> ./docs/CNAME", + "prepublish": "run-s clean build", + "test": "nyc mocha --config=test/.mocharc.json --exit", + "test:integration": "TS_NODE_PROJECT=tsconfig.build.json nyc mocha ./test/integration/**/*.ts ./test/integration/*.ts", + "test:browser": "npm run build:browserTests && TS_NODE_PROJECT=tsconfig.build.json nyc mocha ./test/browser/*.ts", + "test:watch": "TS_NODE_PROJECT=src/tsconfig.json mocha --config=test/.mocharc.json --watch --reporter dot", + "format": "prettier --write '{src,test}/**/*.ts'", + "lint": "eslint . --ext .ts --max-warnings 0", + "perf": "./scripts/perf_test.sh", + "compile:snippets": "tsc -p snippets/tsconfig.json", + "start:snippet": "npm run compile:snippets && node", + "inspect:snippet": "npm run compile:snippets && node inspect" + }, + "prettier": "@xrplf/prettier-config", + "repository": { + "type": "git", + "url": "git@github.com:XRPLF/xrpl.js.git" + }, + "readmeFilename": "README.md", + "engines": { + "node": ">=10.13.0", + "npm": ">=7.14.0 <8.0.0" + } +} diff --git a/snippets/src/claimPayChannel.ts b/packages/xrpl/snippets/src/claimPayChannel.ts similarity index 100% rename from snippets/src/claimPayChannel.ts rename to packages/xrpl/snippets/src/claimPayChannel.ts diff --git a/snippets/src/getTransaction.ts b/packages/xrpl/snippets/src/getTransaction.ts similarity index 100% rename from snippets/src/getTransaction.ts rename to packages/xrpl/snippets/src/getTransaction.ts diff --git a/snippets/src/partialPayment.ts b/packages/xrpl/snippets/src/partialPayment.ts similarity index 100% rename from snippets/src/partialPayment.ts rename to packages/xrpl/snippets/src/partialPayment.ts diff --git a/snippets/src/paths.ts b/packages/xrpl/snippets/src/paths.ts similarity index 100% rename from snippets/src/paths.ts rename to packages/xrpl/snippets/src/paths.ts diff --git a/snippets/src/reliableTransactionSubmission.ts b/packages/xrpl/snippets/src/reliableTransactionSubmission.ts similarity index 100% rename from snippets/src/reliableTransactionSubmission.ts rename to packages/xrpl/snippets/src/reliableTransactionSubmission.ts diff --git a/snippets/src/sendEscrow.ts b/packages/xrpl/snippets/src/sendEscrow.ts similarity index 100% rename from snippets/src/sendEscrow.ts rename to packages/xrpl/snippets/src/sendEscrow.ts diff --git a/snippets/src/setRegularKey.ts b/packages/xrpl/snippets/src/setRegularKey.ts similarity index 100% rename from snippets/src/setRegularKey.ts rename to packages/xrpl/snippets/src/setRegularKey.ts diff --git a/packages/xrpl/snippets/tsconfig.json b/packages/xrpl/snippets/tsconfig.json new file mode 100644 index 00000000..2735a39d --- /dev/null +++ b/packages/xrpl/snippets/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": ["./src/**/*.ts"] +} diff --git a/src/ECDSA.ts b/packages/xrpl/src/ECDSA.ts similarity index 100% rename from src/ECDSA.ts rename to packages/xrpl/src/ECDSA.ts diff --git a/src/Wallet/fundWallet.ts b/packages/xrpl/src/Wallet/fundWallet.ts similarity index 100% rename from src/Wallet/fundWallet.ts rename to packages/xrpl/src/Wallet/fundWallet.ts diff --git a/src/Wallet/index.ts b/packages/xrpl/src/Wallet/index.ts similarity index 100% rename from src/Wallet/index.ts rename to packages/xrpl/src/Wallet/index.ts diff --git a/src/Wallet/signer.ts b/packages/xrpl/src/Wallet/signer.ts similarity index 100% rename from src/Wallet/signer.ts rename to packages/xrpl/src/Wallet/signer.ts diff --git a/src/client/BroadcastClient.ts b/packages/xrpl/src/client/BroadcastClient.ts similarity index 100% rename from src/client/BroadcastClient.ts rename to packages/xrpl/src/client/BroadcastClient.ts diff --git a/src/client/ConnectionManager.ts b/packages/xrpl/src/client/ConnectionManager.ts similarity index 100% rename from src/client/ConnectionManager.ts rename to packages/xrpl/src/client/ConnectionManager.ts diff --git a/src/client/ExponentialBackoff.ts b/packages/xrpl/src/client/ExponentialBackoff.ts similarity index 100% rename from src/client/ExponentialBackoff.ts rename to packages/xrpl/src/client/ExponentialBackoff.ts diff --git a/src/client/RequestManager.ts b/packages/xrpl/src/client/RequestManager.ts similarity index 100% rename from src/client/RequestManager.ts rename to packages/xrpl/src/client/RequestManager.ts diff --git a/src/client/WSWrapper.ts b/packages/xrpl/src/client/WSWrapper.ts similarity index 100% rename from src/client/WSWrapper.ts rename to packages/xrpl/src/client/WSWrapper.ts diff --git a/src/client/connection.ts b/packages/xrpl/src/client/connection.ts similarity index 100% rename from src/client/connection.ts rename to packages/xrpl/src/client/connection.ts diff --git a/src/client/index.ts b/packages/xrpl/src/client/index.ts similarity index 100% rename from src/client/index.ts rename to packages/xrpl/src/client/index.ts diff --git a/src/client/partialPayment.ts b/packages/xrpl/src/client/partialPayment.ts similarity index 100% rename from src/client/partialPayment.ts rename to packages/xrpl/src/client/partialPayment.ts diff --git a/src/errors.ts b/packages/xrpl/src/errors.ts similarity index 100% rename from src/errors.ts rename to packages/xrpl/src/errors.ts diff --git a/src/index.ts b/packages/xrpl/src/index.ts similarity index 100% rename from src/index.ts rename to packages/xrpl/src/index.ts diff --git a/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts similarity index 100% rename from src/models/common/index.ts rename to packages/xrpl/src/models/common/index.ts diff --git a/src/models/index.ts b/packages/xrpl/src/models/index.ts similarity index 100% rename from src/models/index.ts rename to packages/xrpl/src/models/index.ts diff --git a/src/models/ledger/AccountRoot.ts b/packages/xrpl/src/models/ledger/AccountRoot.ts similarity index 100% rename from src/models/ledger/AccountRoot.ts rename to packages/xrpl/src/models/ledger/AccountRoot.ts diff --git a/src/models/ledger/Amendments.ts b/packages/xrpl/src/models/ledger/Amendments.ts similarity index 100% rename from src/models/ledger/Amendments.ts rename to packages/xrpl/src/models/ledger/Amendments.ts diff --git a/src/models/ledger/BaseLedgerEntry.ts b/packages/xrpl/src/models/ledger/BaseLedgerEntry.ts similarity index 100% rename from src/models/ledger/BaseLedgerEntry.ts rename to packages/xrpl/src/models/ledger/BaseLedgerEntry.ts diff --git a/src/models/ledger/Check.ts b/packages/xrpl/src/models/ledger/Check.ts similarity index 100% rename from src/models/ledger/Check.ts rename to packages/xrpl/src/models/ledger/Check.ts diff --git a/src/models/ledger/DepositPreauth.ts b/packages/xrpl/src/models/ledger/DepositPreauth.ts similarity index 100% rename from src/models/ledger/DepositPreauth.ts rename to packages/xrpl/src/models/ledger/DepositPreauth.ts diff --git a/src/models/ledger/DirectoryNode.ts b/packages/xrpl/src/models/ledger/DirectoryNode.ts similarity index 100% rename from src/models/ledger/DirectoryNode.ts rename to packages/xrpl/src/models/ledger/DirectoryNode.ts diff --git a/src/models/ledger/Escrow.ts b/packages/xrpl/src/models/ledger/Escrow.ts similarity index 100% rename from src/models/ledger/Escrow.ts rename to packages/xrpl/src/models/ledger/Escrow.ts diff --git a/src/models/ledger/FeeSettings.ts b/packages/xrpl/src/models/ledger/FeeSettings.ts similarity index 100% rename from src/models/ledger/FeeSettings.ts rename to packages/xrpl/src/models/ledger/FeeSettings.ts diff --git a/src/models/ledger/Ledger.ts b/packages/xrpl/src/models/ledger/Ledger.ts similarity index 100% rename from src/models/ledger/Ledger.ts rename to packages/xrpl/src/models/ledger/Ledger.ts diff --git a/src/models/ledger/LedgerEntry.ts b/packages/xrpl/src/models/ledger/LedgerEntry.ts similarity index 100% rename from src/models/ledger/LedgerEntry.ts rename to packages/xrpl/src/models/ledger/LedgerEntry.ts diff --git a/src/models/ledger/LedgerHashes.ts b/packages/xrpl/src/models/ledger/LedgerHashes.ts similarity index 100% rename from src/models/ledger/LedgerHashes.ts rename to packages/xrpl/src/models/ledger/LedgerHashes.ts diff --git a/src/models/ledger/NegativeUNL.ts b/packages/xrpl/src/models/ledger/NegativeUNL.ts similarity index 100% rename from src/models/ledger/NegativeUNL.ts rename to packages/xrpl/src/models/ledger/NegativeUNL.ts diff --git a/src/models/ledger/Offer.ts b/packages/xrpl/src/models/ledger/Offer.ts similarity index 100% rename from src/models/ledger/Offer.ts rename to packages/xrpl/src/models/ledger/Offer.ts diff --git a/src/models/ledger/PayChannel.ts b/packages/xrpl/src/models/ledger/PayChannel.ts similarity index 100% rename from src/models/ledger/PayChannel.ts rename to packages/xrpl/src/models/ledger/PayChannel.ts diff --git a/src/models/ledger/RippleState.ts b/packages/xrpl/src/models/ledger/RippleState.ts similarity index 100% rename from src/models/ledger/RippleState.ts rename to packages/xrpl/src/models/ledger/RippleState.ts diff --git a/src/models/ledger/SignerList.ts b/packages/xrpl/src/models/ledger/SignerList.ts similarity index 100% rename from src/models/ledger/SignerList.ts rename to packages/xrpl/src/models/ledger/SignerList.ts diff --git a/src/models/ledger/Ticket.ts b/packages/xrpl/src/models/ledger/Ticket.ts similarity index 100% rename from src/models/ledger/Ticket.ts rename to packages/xrpl/src/models/ledger/Ticket.ts diff --git a/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts similarity index 100% rename from src/models/ledger/index.ts rename to packages/xrpl/src/models/ledger/index.ts diff --git a/src/models/methods/accountChannels.ts b/packages/xrpl/src/models/methods/accountChannels.ts similarity index 100% rename from src/models/methods/accountChannels.ts rename to packages/xrpl/src/models/methods/accountChannels.ts diff --git a/src/models/methods/accountCurrencies.ts b/packages/xrpl/src/models/methods/accountCurrencies.ts similarity index 100% rename from src/models/methods/accountCurrencies.ts rename to packages/xrpl/src/models/methods/accountCurrencies.ts diff --git a/src/models/methods/accountInfo.ts b/packages/xrpl/src/models/methods/accountInfo.ts similarity index 100% rename from src/models/methods/accountInfo.ts rename to packages/xrpl/src/models/methods/accountInfo.ts diff --git a/src/models/methods/accountLines.ts b/packages/xrpl/src/models/methods/accountLines.ts similarity index 100% rename from src/models/methods/accountLines.ts rename to packages/xrpl/src/models/methods/accountLines.ts diff --git a/src/models/methods/accountObjects.ts b/packages/xrpl/src/models/methods/accountObjects.ts similarity index 100% rename from src/models/methods/accountObjects.ts rename to packages/xrpl/src/models/methods/accountObjects.ts diff --git a/src/models/methods/accountOffers.ts b/packages/xrpl/src/models/methods/accountOffers.ts similarity index 100% rename from src/models/methods/accountOffers.ts rename to packages/xrpl/src/models/methods/accountOffers.ts diff --git a/src/models/methods/accountTx.ts b/packages/xrpl/src/models/methods/accountTx.ts similarity index 100% rename from src/models/methods/accountTx.ts rename to packages/xrpl/src/models/methods/accountTx.ts diff --git a/src/models/methods/baseMethod.ts b/packages/xrpl/src/models/methods/baseMethod.ts similarity index 100% rename from src/models/methods/baseMethod.ts rename to packages/xrpl/src/models/methods/baseMethod.ts diff --git a/src/models/methods/bookOffers.ts b/packages/xrpl/src/models/methods/bookOffers.ts similarity index 100% rename from src/models/methods/bookOffers.ts rename to packages/xrpl/src/models/methods/bookOffers.ts diff --git a/src/models/methods/channelVerify.ts b/packages/xrpl/src/models/methods/channelVerify.ts similarity index 100% rename from src/models/methods/channelVerify.ts rename to packages/xrpl/src/models/methods/channelVerify.ts diff --git a/src/models/methods/depositAuthorized.ts b/packages/xrpl/src/models/methods/depositAuthorized.ts similarity index 100% rename from src/models/methods/depositAuthorized.ts rename to packages/xrpl/src/models/methods/depositAuthorized.ts diff --git a/src/models/methods/fee.ts b/packages/xrpl/src/models/methods/fee.ts similarity index 100% rename from src/models/methods/fee.ts rename to packages/xrpl/src/models/methods/fee.ts diff --git a/src/models/methods/gatewayBalances.ts b/packages/xrpl/src/models/methods/gatewayBalances.ts similarity index 100% rename from src/models/methods/gatewayBalances.ts rename to packages/xrpl/src/models/methods/gatewayBalances.ts diff --git a/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts similarity index 100% rename from src/models/methods/index.ts rename to packages/xrpl/src/models/methods/index.ts diff --git a/src/models/methods/ledger.ts b/packages/xrpl/src/models/methods/ledger.ts similarity index 100% rename from src/models/methods/ledger.ts rename to packages/xrpl/src/models/methods/ledger.ts diff --git a/src/models/methods/ledgerClosed.ts b/packages/xrpl/src/models/methods/ledgerClosed.ts similarity index 100% rename from src/models/methods/ledgerClosed.ts rename to packages/xrpl/src/models/methods/ledgerClosed.ts diff --git a/src/models/methods/ledgerCurrent.ts b/packages/xrpl/src/models/methods/ledgerCurrent.ts similarity index 100% rename from src/models/methods/ledgerCurrent.ts rename to packages/xrpl/src/models/methods/ledgerCurrent.ts diff --git a/src/models/methods/ledgerData.ts b/packages/xrpl/src/models/methods/ledgerData.ts similarity index 100% rename from src/models/methods/ledgerData.ts rename to packages/xrpl/src/models/methods/ledgerData.ts diff --git a/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts similarity index 100% rename from src/models/methods/ledgerEntry.ts rename to packages/xrpl/src/models/methods/ledgerEntry.ts diff --git a/src/models/methods/manifest.ts b/packages/xrpl/src/models/methods/manifest.ts similarity index 100% rename from src/models/methods/manifest.ts rename to packages/xrpl/src/models/methods/manifest.ts diff --git a/src/models/methods/norippleCheck.ts b/packages/xrpl/src/models/methods/norippleCheck.ts similarity index 100% rename from src/models/methods/norippleCheck.ts rename to packages/xrpl/src/models/methods/norippleCheck.ts diff --git a/src/models/methods/pathFind.ts b/packages/xrpl/src/models/methods/pathFind.ts similarity index 100% rename from src/models/methods/pathFind.ts rename to packages/xrpl/src/models/methods/pathFind.ts diff --git a/src/models/methods/ping.ts b/packages/xrpl/src/models/methods/ping.ts similarity index 100% rename from src/models/methods/ping.ts rename to packages/xrpl/src/models/methods/ping.ts diff --git a/src/models/methods/random.ts b/packages/xrpl/src/models/methods/random.ts similarity index 100% rename from src/models/methods/random.ts rename to packages/xrpl/src/models/methods/random.ts diff --git a/src/models/methods/ripplePathFind.ts b/packages/xrpl/src/models/methods/ripplePathFind.ts similarity index 100% rename from src/models/methods/ripplePathFind.ts rename to packages/xrpl/src/models/methods/ripplePathFind.ts diff --git a/src/models/methods/serverInfo.ts b/packages/xrpl/src/models/methods/serverInfo.ts similarity index 100% rename from src/models/methods/serverInfo.ts rename to packages/xrpl/src/models/methods/serverInfo.ts diff --git a/src/models/methods/serverState.ts b/packages/xrpl/src/models/methods/serverState.ts similarity index 100% rename from src/models/methods/serverState.ts rename to packages/xrpl/src/models/methods/serverState.ts diff --git a/src/models/methods/submit.ts b/packages/xrpl/src/models/methods/submit.ts similarity index 100% rename from src/models/methods/submit.ts rename to packages/xrpl/src/models/methods/submit.ts diff --git a/src/models/methods/submitMultisigned.ts b/packages/xrpl/src/models/methods/submitMultisigned.ts similarity index 100% rename from src/models/methods/submitMultisigned.ts rename to packages/xrpl/src/models/methods/submitMultisigned.ts diff --git a/src/models/methods/subscribe.ts b/packages/xrpl/src/models/methods/subscribe.ts similarity index 100% rename from src/models/methods/subscribe.ts rename to packages/xrpl/src/models/methods/subscribe.ts diff --git a/src/models/methods/transactionEntry.ts b/packages/xrpl/src/models/methods/transactionEntry.ts similarity index 100% rename from src/models/methods/transactionEntry.ts rename to packages/xrpl/src/models/methods/transactionEntry.ts diff --git a/src/models/methods/tx.ts b/packages/xrpl/src/models/methods/tx.ts similarity index 100% rename from src/models/methods/tx.ts rename to packages/xrpl/src/models/methods/tx.ts diff --git a/src/models/methods/unsubscribe.ts b/packages/xrpl/src/models/methods/unsubscribe.ts similarity index 100% rename from src/models/methods/unsubscribe.ts rename to packages/xrpl/src/models/methods/unsubscribe.ts diff --git a/src/models/transactions/accountDelete.ts b/packages/xrpl/src/models/transactions/accountDelete.ts similarity index 100% rename from src/models/transactions/accountDelete.ts rename to packages/xrpl/src/models/transactions/accountDelete.ts diff --git a/src/models/transactions/accountSet.ts b/packages/xrpl/src/models/transactions/accountSet.ts similarity index 100% rename from src/models/transactions/accountSet.ts rename to packages/xrpl/src/models/transactions/accountSet.ts diff --git a/src/models/transactions/checkCancel.ts b/packages/xrpl/src/models/transactions/checkCancel.ts similarity index 100% rename from src/models/transactions/checkCancel.ts rename to packages/xrpl/src/models/transactions/checkCancel.ts diff --git a/src/models/transactions/checkCash.ts b/packages/xrpl/src/models/transactions/checkCash.ts similarity index 100% rename from src/models/transactions/checkCash.ts rename to packages/xrpl/src/models/transactions/checkCash.ts diff --git a/src/models/transactions/checkCreate.ts b/packages/xrpl/src/models/transactions/checkCreate.ts similarity index 100% rename from src/models/transactions/checkCreate.ts rename to packages/xrpl/src/models/transactions/checkCreate.ts diff --git a/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts similarity index 100% rename from src/models/transactions/common.ts rename to packages/xrpl/src/models/transactions/common.ts diff --git a/src/models/transactions/depositPreauth.ts b/packages/xrpl/src/models/transactions/depositPreauth.ts similarity index 100% rename from src/models/transactions/depositPreauth.ts rename to packages/xrpl/src/models/transactions/depositPreauth.ts diff --git a/src/models/transactions/escrowCancel.ts b/packages/xrpl/src/models/transactions/escrowCancel.ts similarity index 100% rename from src/models/transactions/escrowCancel.ts rename to packages/xrpl/src/models/transactions/escrowCancel.ts diff --git a/src/models/transactions/escrowCreate.ts b/packages/xrpl/src/models/transactions/escrowCreate.ts similarity index 100% rename from src/models/transactions/escrowCreate.ts rename to packages/xrpl/src/models/transactions/escrowCreate.ts diff --git a/src/models/transactions/escrowFinish.ts b/packages/xrpl/src/models/transactions/escrowFinish.ts similarity index 100% rename from src/models/transactions/escrowFinish.ts rename to packages/xrpl/src/models/transactions/escrowFinish.ts diff --git a/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts similarity index 100% rename from src/models/transactions/index.ts rename to packages/xrpl/src/models/transactions/index.ts diff --git a/src/models/transactions/metadata.ts b/packages/xrpl/src/models/transactions/metadata.ts similarity index 100% rename from src/models/transactions/metadata.ts rename to packages/xrpl/src/models/transactions/metadata.ts diff --git a/src/models/transactions/offerCancel.ts b/packages/xrpl/src/models/transactions/offerCancel.ts similarity index 100% rename from src/models/transactions/offerCancel.ts rename to packages/xrpl/src/models/transactions/offerCancel.ts diff --git a/src/models/transactions/offerCreate.ts b/packages/xrpl/src/models/transactions/offerCreate.ts similarity index 100% rename from src/models/transactions/offerCreate.ts rename to packages/xrpl/src/models/transactions/offerCreate.ts diff --git a/src/models/transactions/payment.ts b/packages/xrpl/src/models/transactions/payment.ts similarity index 100% rename from src/models/transactions/payment.ts rename to packages/xrpl/src/models/transactions/payment.ts diff --git a/src/models/transactions/paymentChannelClaim.ts b/packages/xrpl/src/models/transactions/paymentChannelClaim.ts similarity index 100% rename from src/models/transactions/paymentChannelClaim.ts rename to packages/xrpl/src/models/transactions/paymentChannelClaim.ts diff --git a/src/models/transactions/paymentChannelCreate.ts b/packages/xrpl/src/models/transactions/paymentChannelCreate.ts similarity index 100% rename from src/models/transactions/paymentChannelCreate.ts rename to packages/xrpl/src/models/transactions/paymentChannelCreate.ts diff --git a/src/models/transactions/paymentChannelFund.ts b/packages/xrpl/src/models/transactions/paymentChannelFund.ts similarity index 100% rename from src/models/transactions/paymentChannelFund.ts rename to packages/xrpl/src/models/transactions/paymentChannelFund.ts diff --git a/src/models/transactions/setRegularKey.ts b/packages/xrpl/src/models/transactions/setRegularKey.ts similarity index 100% rename from src/models/transactions/setRegularKey.ts rename to packages/xrpl/src/models/transactions/setRegularKey.ts diff --git a/src/models/transactions/signerListSet.ts b/packages/xrpl/src/models/transactions/signerListSet.ts similarity index 100% rename from src/models/transactions/signerListSet.ts rename to packages/xrpl/src/models/transactions/signerListSet.ts diff --git a/src/models/transactions/ticketCreate.ts b/packages/xrpl/src/models/transactions/ticketCreate.ts similarity index 100% rename from src/models/transactions/ticketCreate.ts rename to packages/xrpl/src/models/transactions/ticketCreate.ts diff --git a/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts similarity index 100% rename from src/models/transactions/transaction.ts rename to packages/xrpl/src/models/transactions/transaction.ts diff --git a/src/models/transactions/trustSet.ts b/packages/xrpl/src/models/transactions/trustSet.ts similarity index 100% rename from src/models/transactions/trustSet.ts rename to packages/xrpl/src/models/transactions/trustSet.ts diff --git a/src/models/utils/flags.ts b/packages/xrpl/src/models/utils/flags.ts similarity index 100% rename from src/models/utils/flags.ts rename to packages/xrpl/src/models/utils/flags.ts diff --git a/src/models/utils/index.ts b/packages/xrpl/src/models/utils/index.ts similarity index 100% rename from src/models/utils/index.ts rename to packages/xrpl/src/models/utils/index.ts diff --git a/src/sugar/autofill.ts b/packages/xrpl/src/sugar/autofill.ts similarity index 100% rename from src/sugar/autofill.ts rename to packages/xrpl/src/sugar/autofill.ts diff --git a/src/sugar/balances.ts b/packages/xrpl/src/sugar/balances.ts similarity index 100% rename from src/sugar/balances.ts rename to packages/xrpl/src/sugar/balances.ts diff --git a/src/sugar/getFeeXrp.ts b/packages/xrpl/src/sugar/getFeeXrp.ts similarity index 100% rename from src/sugar/getFeeXrp.ts rename to packages/xrpl/src/sugar/getFeeXrp.ts diff --git a/src/sugar/getLedgerIndex.ts b/packages/xrpl/src/sugar/getLedgerIndex.ts similarity index 100% rename from src/sugar/getLedgerIndex.ts rename to packages/xrpl/src/sugar/getLedgerIndex.ts diff --git a/src/sugar/getOrderbook.ts b/packages/xrpl/src/sugar/getOrderbook.ts similarity index 100% rename from src/sugar/getOrderbook.ts rename to packages/xrpl/src/sugar/getOrderbook.ts diff --git a/src/sugar/index.ts b/packages/xrpl/src/sugar/index.ts similarity index 100% rename from src/sugar/index.ts rename to packages/xrpl/src/sugar/index.ts diff --git a/src/sugar/submit.ts b/packages/xrpl/src/sugar/submit.ts similarity index 100% rename from src/sugar/submit.ts rename to packages/xrpl/src/sugar/submit.ts diff --git a/src/sugar/utils.ts b/packages/xrpl/src/sugar/utils.ts similarity index 100% rename from src/sugar/utils.ts rename to packages/xrpl/src/sugar/utils.ts diff --git a/src/utils/derive.ts b/packages/xrpl/src/utils/derive.ts similarity index 100% rename from src/utils/derive.ts rename to packages/xrpl/src/utils/derive.ts diff --git a/src/utils/getBalanceChanges.ts b/packages/xrpl/src/utils/getBalanceChanges.ts similarity index 100% rename from src/utils/getBalanceChanges.ts rename to packages/xrpl/src/utils/getBalanceChanges.ts diff --git a/src/utils/hashes/HashPrefix.ts b/packages/xrpl/src/utils/hashes/HashPrefix.ts similarity index 100% rename from src/utils/hashes/HashPrefix.ts rename to packages/xrpl/src/utils/hashes/HashPrefix.ts diff --git a/src/utils/hashes/README.md b/packages/xrpl/src/utils/hashes/README.md similarity index 100% rename from src/utils/hashes/README.md rename to packages/xrpl/src/utils/hashes/README.md diff --git a/src/utils/hashes/SHAMap/InnerNode.ts b/packages/xrpl/src/utils/hashes/SHAMap/InnerNode.ts similarity index 100% rename from src/utils/hashes/SHAMap/InnerNode.ts rename to packages/xrpl/src/utils/hashes/SHAMap/InnerNode.ts diff --git a/src/utils/hashes/SHAMap/LeafNode.ts b/packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts similarity index 100% rename from src/utils/hashes/SHAMap/LeafNode.ts rename to packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts diff --git a/src/utils/hashes/SHAMap/index.ts b/packages/xrpl/src/utils/hashes/SHAMap/index.ts similarity index 100% rename from src/utils/hashes/SHAMap/index.ts rename to packages/xrpl/src/utils/hashes/SHAMap/index.ts diff --git a/src/utils/hashes/SHAMap/node.ts b/packages/xrpl/src/utils/hashes/SHAMap/node.ts similarity index 100% rename from src/utils/hashes/SHAMap/node.ts rename to packages/xrpl/src/utils/hashes/SHAMap/node.ts diff --git a/src/utils/hashes/hashLedger.ts b/packages/xrpl/src/utils/hashes/hashLedger.ts similarity index 100% rename from src/utils/hashes/hashLedger.ts rename to packages/xrpl/src/utils/hashes/hashLedger.ts diff --git a/src/utils/hashes/index.ts b/packages/xrpl/src/utils/hashes/index.ts similarity index 100% rename from src/utils/hashes/index.ts rename to packages/xrpl/src/utils/hashes/index.ts diff --git a/src/utils/hashes/ledgerSpaces.ts b/packages/xrpl/src/utils/hashes/ledgerSpaces.ts similarity index 100% rename from src/utils/hashes/ledgerSpaces.ts rename to packages/xrpl/src/utils/hashes/ledgerSpaces.ts diff --git a/src/utils/hashes/sha512Half.ts b/packages/xrpl/src/utils/hashes/sha512Half.ts similarity index 100% rename from src/utils/hashes/sha512Half.ts rename to packages/xrpl/src/utils/hashes/sha512Half.ts diff --git a/src/utils/index.ts b/packages/xrpl/src/utils/index.ts similarity index 100% rename from src/utils/index.ts rename to packages/xrpl/src/utils/index.ts diff --git a/src/utils/quality.ts b/packages/xrpl/src/utils/quality.ts similarity index 100% rename from src/utils/quality.ts rename to packages/xrpl/src/utils/quality.ts diff --git a/src/utils/signPaymentChannelClaim.ts b/packages/xrpl/src/utils/signPaymentChannelClaim.ts similarity index 100% rename from src/utils/signPaymentChannelClaim.ts rename to packages/xrpl/src/utils/signPaymentChannelClaim.ts diff --git a/src/utils/timeConversion.ts b/packages/xrpl/src/utils/timeConversion.ts similarity index 100% rename from src/utils/timeConversion.ts rename to packages/xrpl/src/utils/timeConversion.ts diff --git a/src/utils/verifyPaymentChannelClaim.ts b/packages/xrpl/src/utils/verifyPaymentChannelClaim.ts similarity index 100% rename from src/utils/verifyPaymentChannelClaim.ts rename to packages/xrpl/src/utils/verifyPaymentChannelClaim.ts diff --git a/src/utils/xrpConversion.ts b/packages/xrpl/src/utils/xrpConversion.ts similarity index 100% rename from src/utils/xrpConversion.ts rename to packages/xrpl/src/utils/xrpConversion.ts diff --git a/test/.mocharc.json b/packages/xrpl/test/.mocharc.json similarity index 100% rename from test/.mocharc.json rename to packages/xrpl/test/.mocharc.json diff --git a/test/ExponentialBackoff.ts b/packages/xrpl/test/ExponentialBackoff.ts similarity index 100% rename from test/ExponentialBackoff.ts rename to packages/xrpl/test/ExponentialBackoff.ts diff --git a/test/broadcastClient.ts b/packages/xrpl/test/broadcastClient.ts similarity index 100% rename from test/broadcastClient.ts rename to packages/xrpl/test/broadcastClient.ts diff --git a/test/browser/browserIntegration.ts b/packages/xrpl/test/browser/browserIntegration.ts similarity index 100% rename from test/browser/browserIntegration.ts rename to packages/xrpl/test/browser/browserIntegration.ts diff --git a/test/client.ts b/packages/xrpl/test/client.ts similarity index 100% rename from test/client.ts rename to packages/xrpl/test/client.ts diff --git a/test/client/autofill.ts b/packages/xrpl/test/client/autofill.ts similarity index 100% rename from test/client/autofill.ts rename to packages/xrpl/test/client/autofill.ts diff --git a/test/client/constructor.ts b/packages/xrpl/test/client/constructor.ts similarity index 100% rename from test/client/constructor.ts rename to packages/xrpl/test/client/constructor.ts diff --git a/test/client/errors.ts b/packages/xrpl/test/client/errors.ts similarity index 100% rename from test/client/errors.ts rename to packages/xrpl/test/client/errors.ts diff --git a/test/client/getBalances.ts b/packages/xrpl/test/client/getBalances.ts similarity index 100% rename from test/client/getBalances.ts rename to packages/xrpl/test/client/getBalances.ts diff --git a/test/client/getFeeXrp.ts b/packages/xrpl/test/client/getFeeXrp.ts similarity index 100% rename from test/client/getFeeXrp.ts rename to packages/xrpl/test/client/getFeeXrp.ts diff --git a/test/client/getLedgerIndex.ts b/packages/xrpl/test/client/getLedgerIndex.ts similarity index 100% rename from test/client/getLedgerIndex.ts rename to packages/xrpl/test/client/getLedgerIndex.ts diff --git a/test/client/getOrderbook.ts b/packages/xrpl/test/client/getOrderbook.ts similarity index 100% rename from test/client/getOrderbook.ts rename to packages/xrpl/test/client/getOrderbook.ts diff --git a/test/client/getXrpBalance.ts b/packages/xrpl/test/client/getXrpBalance.ts similarity index 100% rename from test/client/getXrpBalance.ts rename to packages/xrpl/test/client/getXrpBalance.ts diff --git a/test/client/isConnected.ts b/packages/xrpl/test/client/isConnected.ts similarity index 100% rename from test/client/isConnected.ts rename to packages/xrpl/test/client/isConnected.ts diff --git a/test/client/partialPayments.ts b/packages/xrpl/test/client/partialPayments.ts similarity index 100% rename from test/client/partialPayments.ts rename to packages/xrpl/test/client/partialPayments.ts diff --git a/test/client/request.ts b/packages/xrpl/test/client/request.ts similarity index 100% rename from test/client/request.ts rename to packages/xrpl/test/client/request.ts diff --git a/test/client/requestAll.ts b/packages/xrpl/test/client/requestAll.ts similarity index 100% rename from test/client/requestAll.ts rename to packages/xrpl/test/client/requestAll.ts diff --git a/test/client/requestNextPage.ts b/packages/xrpl/test/client/requestNextPage.ts similarity index 100% rename from test/client/requestNextPage.ts rename to packages/xrpl/test/client/requestNextPage.ts diff --git a/test/client/submit.ts b/packages/xrpl/test/client/submit.ts similarity index 100% rename from test/client/submit.ts rename to packages/xrpl/test/client/submit.ts diff --git a/test/client/subscribe.ts b/packages/xrpl/test/client/subscribe.ts similarity index 100% rename from test/client/subscribe.ts rename to packages/xrpl/test/client/subscribe.ts diff --git a/test/connection.ts b/packages/xrpl/test/connection.ts similarity index 100% rename from test/connection.ts rename to packages/xrpl/test/connection.ts diff --git a/test/createMockRippled.ts b/packages/xrpl/test/createMockRippled.ts similarity index 100% rename from test/createMockRippled.ts rename to packages/xrpl/test/createMockRippled.ts diff --git a/test/fixtures/addresses.json b/packages/xrpl/test/fixtures/addresses.json similarity index 100% rename from test/fixtures/addresses.json rename to packages/xrpl/test/fixtures/addresses.json diff --git a/test/fixtures/requests/getOrderbook.json b/packages/xrpl/test/fixtures/requests/getOrderbook.json similarity index 100% rename from test/fixtures/requests/getOrderbook.json rename to packages/xrpl/test/fixtures/requests/getOrderbook.json diff --git a/test/fixtures/requests/getOrderbookWithXrp.json b/packages/xrpl/test/fixtures/requests/getOrderbookWithXrp.json similarity index 100% rename from test/fixtures/requests/getOrderbookWithXrp.json rename to packages/xrpl/test/fixtures/requests/getOrderbookWithXrp.json diff --git a/test/fixtures/requests/hashLedger.json b/packages/xrpl/test/fixtures/requests/hashLedger.json similarity index 100% rename from test/fixtures/requests/hashLedger.json rename to packages/xrpl/test/fixtures/requests/hashLedger.json diff --git a/test/fixtures/requests/hashLedgerTransactions.json b/packages/xrpl/test/fixtures/requests/hashLedgerTransactions.json similarity index 100% rename from test/fixtures/requests/hashLedgerTransactions.json rename to packages/xrpl/test/fixtures/requests/hashLedgerTransactions.json diff --git a/test/fixtures/requests/index.ts b/packages/xrpl/test/fixtures/requests/index.ts similarity index 100% rename from test/fixtures/requests/index.ts rename to packages/xrpl/test/fixtures/requests/index.ts diff --git a/test/fixtures/requests/sign.json b/packages/xrpl/test/fixtures/requests/sign.json similarity index 100% rename from test/fixtures/requests/sign.json rename to packages/xrpl/test/fixtures/requests/sign.json diff --git a/test/fixtures/requests/signAs.json b/packages/xrpl/test/fixtures/requests/signAs.json similarity index 100% rename from test/fixtures/requests/signAs.json rename to packages/xrpl/test/fixtures/requests/signAs.json diff --git a/test/fixtures/requests/signEscrow.json b/packages/xrpl/test/fixtures/requests/signEscrow.json similarity index 100% rename from test/fixtures/requests/signEscrow.json rename to packages/xrpl/test/fixtures/requests/signEscrow.json diff --git a/test/fixtures/requests/signPaymentChannelClaim.json b/packages/xrpl/test/fixtures/requests/signPaymentChannelClaim.json similarity index 100% rename from test/fixtures/requests/signPaymentChannelClaim.json rename to packages/xrpl/test/fixtures/requests/signPaymentChannelClaim.json diff --git a/test/fixtures/requests/signTicket.json b/packages/xrpl/test/fixtures/requests/signTicket.json similarity index 100% rename from test/fixtures/requests/signTicket.json rename to packages/xrpl/test/fixtures/requests/signTicket.json diff --git a/test/fixtures/responses/generateAddress.json b/packages/xrpl/test/fixtures/responses/generateAddress.json similarity index 100% rename from test/fixtures/responses/generateAddress.json rename to packages/xrpl/test/fixtures/responses/generateAddress.json diff --git a/test/fixtures/responses/generateXAddress.json b/packages/xrpl/test/fixtures/responses/generateXAddress.json similarity index 100% rename from test/fixtures/responses/generateXAddress.json rename to packages/xrpl/test/fixtures/responses/generateXAddress.json diff --git a/test/fixtures/responses/getAccountObjects.json b/packages/xrpl/test/fixtures/responses/getAccountObjects.json similarity index 100% rename from test/fixtures/responses/getAccountObjects.json rename to packages/xrpl/test/fixtures/responses/getAccountObjects.json diff --git a/test/fixtures/responses/getBalances.json b/packages/xrpl/test/fixtures/responses/getBalances.json similarity index 100% rename from test/fixtures/responses/getBalances.json rename to packages/xrpl/test/fixtures/responses/getBalances.json diff --git a/test/fixtures/responses/getLedgerFull.json b/packages/xrpl/test/fixtures/responses/getLedgerFull.json similarity index 100% rename from test/fixtures/responses/getLedgerFull.json rename to packages/xrpl/test/fixtures/responses/getLedgerFull.json diff --git a/test/fixtures/responses/getOrderbook.json b/packages/xrpl/test/fixtures/responses/getOrderbook.json similarity index 100% rename from test/fixtures/responses/getOrderbook.json rename to packages/xrpl/test/fixtures/responses/getOrderbook.json diff --git a/test/fixtures/responses/getOrderbookWithXrp.json b/packages/xrpl/test/fixtures/responses/getOrderbookWithXrp.json similarity index 100% rename from test/fixtures/responses/getOrderbookWithXrp.json rename to packages/xrpl/test/fixtures/responses/getOrderbookWithXrp.json diff --git a/test/fixtures/responses/getServerInfo.json b/packages/xrpl/test/fixtures/responses/getServerInfo.json similarity index 100% rename from test/fixtures/responses/getServerInfo.json rename to packages/xrpl/test/fixtures/responses/getServerInfo.json diff --git a/test/fixtures/responses/index.ts b/packages/xrpl/test/fixtures/responses/index.ts similarity index 100% rename from test/fixtures/responses/index.ts rename to packages/xrpl/test/fixtures/responses/index.ts diff --git a/test/fixtures/responses/sign.json b/packages/xrpl/test/fixtures/responses/sign.json similarity index 100% rename from test/fixtures/responses/sign.json rename to packages/xrpl/test/fixtures/responses/sign.json diff --git a/test/fixtures/responses/signAs.json b/packages/xrpl/test/fixtures/responses/signAs.json similarity index 100% rename from test/fixtures/responses/signAs.json rename to packages/xrpl/test/fixtures/responses/signAs.json diff --git a/test/fixtures/responses/signEscrow.json b/packages/xrpl/test/fixtures/responses/signEscrow.json similarity index 100% rename from test/fixtures/responses/signEscrow.json rename to packages/xrpl/test/fixtures/responses/signEscrow.json diff --git a/test/fixtures/responses/signPaymentChannelClaim.json b/packages/xrpl/test/fixtures/responses/signPaymentChannelClaim.json similarity index 100% rename from test/fixtures/responses/signPaymentChannelClaim.json rename to packages/xrpl/test/fixtures/responses/signPaymentChannelClaim.json diff --git a/test/fixtures/responses/signTicket.json b/packages/xrpl/test/fixtures/responses/signTicket.json similarity index 100% rename from test/fixtures/responses/signTicket.json rename to packages/xrpl/test/fixtures/responses/signTicket.json diff --git a/test/fixtures/rippled/accountInfo.json b/packages/xrpl/test/fixtures/rippled/accountInfo.json similarity index 100% rename from test/fixtures/rippled/accountInfo.json rename to packages/xrpl/test/fixtures/rippled/accountInfo.json diff --git a/test/fixtures/rippled/accountLines.js b/packages/xrpl/test/fixtures/rippled/accountLines.js similarity index 100% rename from test/fixtures/rippled/accountLines.js rename to packages/xrpl/test/fixtures/rippled/accountLines.js diff --git a/test/fixtures/rippled/accountObjectsEmpty.json b/packages/xrpl/test/fixtures/rippled/accountObjectsEmpty.json similarity index 100% rename from test/fixtures/rippled/accountObjectsEmpty.json rename to packages/xrpl/test/fixtures/rippled/accountObjectsEmpty.json diff --git a/test/fixtures/rippled/accountObjectsNormal.json b/packages/xrpl/test/fixtures/rippled/accountObjectsNormal.json similarity index 100% rename from test/fixtures/rippled/accountObjectsNormal.json rename to packages/xrpl/test/fixtures/rippled/accountObjectsNormal.json diff --git a/test/fixtures/rippled/accountTx.json b/packages/xrpl/test/fixtures/rippled/accountTx.json similarity index 100% rename from test/fixtures/rippled/accountTx.json rename to packages/xrpl/test/fixtures/rippled/accountTx.json diff --git a/test/fixtures/rippled/bookOffers.js b/packages/xrpl/test/fixtures/rippled/bookOffers.js similarity index 100% rename from test/fixtures/rippled/bookOffers.js rename to packages/xrpl/test/fixtures/rippled/bookOffers.js diff --git a/test/fixtures/rippled/bookOffersUsdXrp.json b/packages/xrpl/test/fixtures/rippled/bookOffersUsdXrp.json similarity index 100% rename from test/fixtures/rippled/bookOffersUsdXrp.json rename to packages/xrpl/test/fixtures/rippled/bookOffersUsdXrp.json diff --git a/test/fixtures/rippled/bookOffersXrpUsd.json b/packages/xrpl/test/fixtures/rippled/bookOffersXrpUsd.json similarity index 100% rename from test/fixtures/rippled/bookOffersXrpUsd.json rename to packages/xrpl/test/fixtures/rippled/bookOffersXrpUsd.json diff --git a/test/fixtures/rippled/index.ts b/packages/xrpl/test/fixtures/rippled/index.ts similarity index 100% rename from test/fixtures/rippled/index.ts rename to packages/xrpl/test/fixtures/rippled/index.ts diff --git a/test/fixtures/rippled/ledger.json b/packages/xrpl/test/fixtures/rippled/ledger.json similarity index 100% rename from test/fixtures/rippled/ledger.json rename to packages/xrpl/test/fixtures/rippled/ledger.json diff --git a/test/fixtures/rippled/ledgerDataFirstPage.json b/packages/xrpl/test/fixtures/rippled/ledgerDataFirstPage.json similarity index 100% rename from test/fixtures/rippled/ledgerDataFirstPage.json rename to packages/xrpl/test/fixtures/rippled/ledgerDataFirstPage.json diff --git a/test/fixtures/rippled/ledgerDataLastPage.json b/packages/xrpl/test/fixtures/rippled/ledgerDataLastPage.json similarity index 100% rename from test/fixtures/rippled/ledgerDataLastPage.json rename to packages/xrpl/test/fixtures/rippled/ledgerDataLastPage.json diff --git a/test/fixtures/rippled/ledgerFull38129.json b/packages/xrpl/test/fixtures/rippled/ledgerFull38129.json similarity index 100% rename from test/fixtures/rippled/ledgerFull38129.json rename to packages/xrpl/test/fixtures/rippled/ledgerFull38129.json diff --git a/test/fixtures/rippled/ledgerFull40000.json b/packages/xrpl/test/fixtures/rippled/ledgerFull40000.json similarity index 100% rename from test/fixtures/rippled/ledgerFull40000.json rename to packages/xrpl/test/fixtures/rippled/ledgerFull40000.json diff --git a/test/fixtures/rippled/ledgerFull7501326.json b/packages/xrpl/test/fixtures/rippled/ledgerFull7501326.json similarity index 100% rename from test/fixtures/rippled/ledgerFull7501326.json rename to packages/xrpl/test/fixtures/rippled/ledgerFull7501326.json diff --git a/test/fixtures/rippled/partialPaymentIOU.json b/packages/xrpl/test/fixtures/rippled/partialPaymentIOU.json similarity index 100% rename from test/fixtures/rippled/partialPaymentIOU.json rename to packages/xrpl/test/fixtures/rippled/partialPaymentIOU.json diff --git a/test/fixtures/rippled/partialPaymentXRP.json b/packages/xrpl/test/fixtures/rippled/partialPaymentXRP.json similarity index 100% rename from test/fixtures/rippled/partialPaymentXRP.json rename to packages/xrpl/test/fixtures/rippled/partialPaymentXRP.json diff --git a/test/fixtures/rippled/serverInfo.json b/packages/xrpl/test/fixtures/rippled/serverInfo.json similarity index 100% rename from test/fixtures/rippled/serverInfo.json rename to packages/xrpl/test/fixtures/rippled/serverInfo.json diff --git a/test/fixtures/rippled/serverInfoHighLoadFactor.json b/packages/xrpl/test/fixtures/rippled/serverInfoHighLoadFactor.json similarity index 100% rename from test/fixtures/rippled/serverInfoHighLoadFactor.json rename to packages/xrpl/test/fixtures/rippled/serverInfoHighLoadFactor.json diff --git a/test/fixtures/rippled/streams/consensusPhase.json b/packages/xrpl/test/fixtures/rippled/streams/consensusPhase.json similarity index 100% rename from test/fixtures/rippled/streams/consensusPhase.json rename to packages/xrpl/test/fixtures/rippled/streams/consensusPhase.json diff --git a/test/fixtures/rippled/streams/ledger.json b/packages/xrpl/test/fixtures/rippled/streams/ledger.json similarity index 100% rename from test/fixtures/rippled/streams/ledger.json rename to packages/xrpl/test/fixtures/rippled/streams/ledger.json diff --git a/test/fixtures/rippled/streams/manifest.json b/packages/xrpl/test/fixtures/rippled/streams/manifest.json similarity index 100% rename from test/fixtures/rippled/streams/manifest.json rename to packages/xrpl/test/fixtures/rippled/streams/manifest.json diff --git a/test/fixtures/rippled/streams/partialPaymentTransaction.json b/packages/xrpl/test/fixtures/rippled/streams/partialPaymentTransaction.json similarity index 100% rename from test/fixtures/rippled/streams/partialPaymentTransaction.json rename to packages/xrpl/test/fixtures/rippled/streams/partialPaymentTransaction.json diff --git a/test/fixtures/rippled/streams/pathFind.json b/packages/xrpl/test/fixtures/rippled/streams/pathFind.json similarity index 100% rename from test/fixtures/rippled/streams/pathFind.json rename to packages/xrpl/test/fixtures/rippled/streams/pathFind.json diff --git a/test/fixtures/rippled/streams/peerStatusChange.json b/packages/xrpl/test/fixtures/rippled/streams/peerStatusChange.json similarity index 100% rename from test/fixtures/rippled/streams/peerStatusChange.json rename to packages/xrpl/test/fixtures/rippled/streams/peerStatusChange.json diff --git a/test/fixtures/rippled/streams/transaction.json b/packages/xrpl/test/fixtures/rippled/streams/transaction.json similarity index 100% rename from test/fixtures/rippled/streams/transaction.json rename to packages/xrpl/test/fixtures/rippled/streams/transaction.json diff --git a/test/fixtures/rippled/streams/validation.json b/packages/xrpl/test/fixtures/rippled/streams/validation.json similarity index 100% rename from test/fixtures/rippled/streams/validation.json rename to packages/xrpl/test/fixtures/rippled/streams/validation.json diff --git a/test/fixtures/rippled/submit.json b/packages/xrpl/test/fixtures/rippled/submit.json similarity index 100% rename from test/fixtures/rippled/submit.json rename to packages/xrpl/test/fixtures/rippled/submit.json diff --git a/test/fixtures/rippled/subscribe.json b/packages/xrpl/test/fixtures/rippled/subscribe.json similarity index 100% rename from test/fixtures/rippled/subscribe.json rename to packages/xrpl/test/fixtures/rippled/subscribe.json diff --git a/test/fixtures/rippled/subscribeError.json b/packages/xrpl/test/fixtures/rippled/subscribeError.json similarity index 100% rename from test/fixtures/rippled/subscribeError.json rename to packages/xrpl/test/fixtures/rippled/subscribeError.json diff --git a/test/fixtures/rippled/transactionEntry.json b/packages/xrpl/test/fixtures/rippled/transactionEntry.json similarity index 100% rename from test/fixtures/rippled/transactionEntry.json rename to packages/xrpl/test/fixtures/rippled/transactionEntry.json diff --git a/test/fixtures/rippled/tx/offerCreateSell.json b/packages/xrpl/test/fixtures/rippled/tx/offerCreateSell.json similarity index 100% rename from test/fixtures/rippled/tx/offerCreateSell.json rename to packages/xrpl/test/fixtures/rippled/tx/offerCreateSell.json diff --git a/test/fixtures/rippled/tx/payment.json b/packages/xrpl/test/fixtures/rippled/tx/payment.json similarity index 100% rename from test/fixtures/rippled/tx/payment.json rename to packages/xrpl/test/fixtures/rippled/tx/payment.json diff --git a/test/fixtures/rippled/unsubscribe.json b/packages/xrpl/test/fixtures/rippled/unsubscribe.json similarity index 100% rename from test/fixtures/rippled/unsubscribe.json rename to packages/xrpl/test/fixtures/rippled/unsubscribe.json diff --git a/test/fixtures/utils/paymentToken.json b/packages/xrpl/test/fixtures/utils/paymentToken.json similarity index 100% rename from test/fixtures/utils/paymentToken.json rename to packages/xrpl/test/fixtures/utils/paymentToken.json diff --git a/test/fixtures/utils/paymentTokenDestinationNoBalance.json b/packages/xrpl/test/fixtures/utils/paymentTokenDestinationNoBalance.json similarity index 100% rename from test/fixtures/utils/paymentTokenDestinationNoBalance.json rename to packages/xrpl/test/fixtures/utils/paymentTokenDestinationNoBalance.json diff --git a/test/fixtures/utils/paymentTokenMultipath.json b/packages/xrpl/test/fixtures/utils/paymentTokenMultipath.json similarity index 100% rename from test/fixtures/utils/paymentTokenMultipath.json rename to packages/xrpl/test/fixtures/utils/paymentTokenMultipath.json diff --git a/test/fixtures/utils/paymentTokenRedeem.json b/packages/xrpl/test/fixtures/utils/paymentTokenRedeem.json similarity index 100% rename from test/fixtures/utils/paymentTokenRedeem.json rename to packages/xrpl/test/fixtures/utils/paymentTokenRedeem.json diff --git a/test/fixtures/utils/paymentTokenRedeemThenIssue.json b/packages/xrpl/test/fixtures/utils/paymentTokenRedeemThenIssue.json similarity index 100% rename from test/fixtures/utils/paymentTokenRedeemThenIssue.json rename to packages/xrpl/test/fixtures/utils/paymentTokenRedeemThenIssue.json diff --git a/test/fixtures/utils/paymentTokenSpendFullBalance.json b/packages/xrpl/test/fixtures/utils/paymentTokenSpendFullBalance.json similarity index 100% rename from test/fixtures/utils/paymentTokenSpendFullBalance.json rename to packages/xrpl/test/fixtures/utils/paymentTokenSpendFullBalance.json diff --git a/test/fixtures/utils/paymentXrpCreateAccount.json b/packages/xrpl/test/fixtures/utils/paymentXrpCreateAccount.json similarity index 100% rename from test/fixtures/utils/paymentXrpCreateAccount.json rename to packages/xrpl/test/fixtures/utils/paymentXrpCreateAccount.json diff --git a/test/fixtures/utils/trustlineCreate.json b/packages/xrpl/test/fixtures/utils/trustlineCreate.json similarity index 100% rename from test/fixtures/utils/trustlineCreate.json rename to packages/xrpl/test/fixtures/utils/trustlineCreate.json diff --git a/test/fixtures/utils/trustlineDelete.json b/packages/xrpl/test/fixtures/utils/trustlineDelete.json similarity index 100% rename from test/fixtures/utils/trustlineDelete.json rename to packages/xrpl/test/fixtures/utils/trustlineDelete.json diff --git a/test/fixtures/utils/trustlineSetLimit.json b/packages/xrpl/test/fixtures/utils/trustlineSetLimit.json similarity index 100% rename from test/fixtures/utils/trustlineSetLimit.json rename to packages/xrpl/test/fixtures/utils/trustlineSetLimit.json diff --git a/test/fixtures/utils/trustlineSetLimit2.json b/packages/xrpl/test/fixtures/utils/trustlineSetLimit2.json similarity index 100% rename from test/fixtures/utils/trustlineSetLimit2.json rename to packages/xrpl/test/fixtures/utils/trustlineSetLimit2.json diff --git a/test/fixtures/utils/trustlineSetLimitZero.json b/packages/xrpl/test/fixtures/utils/trustlineSetLimitZero.json similarity index 100% rename from test/fixtures/utils/trustlineSetLimitZero.json rename to packages/xrpl/test/fixtures/utils/trustlineSetLimitZero.json diff --git a/test/hacks/phantomhacks.js b/packages/xrpl/test/hacks/phantomhacks.js similarity index 100% rename from test/hacks/phantomhacks.js rename to packages/xrpl/test/hacks/phantomhacks.js diff --git a/test/integration/README.md b/packages/xrpl/test/integration/README.md similarity index 100% rename from test/integration/README.md rename to packages/xrpl/test/integration/README.md diff --git a/test/integration/finalTest.ts b/packages/xrpl/test/integration/finalTest.ts similarity index 100% rename from test/integration/finalTest.ts rename to packages/xrpl/test/integration/finalTest.ts diff --git a/test/integration/fundWallet.ts b/packages/xrpl/test/integration/fundWallet.ts similarity index 100% rename from test/integration/fundWallet.ts rename to packages/xrpl/test/integration/fundWallet.ts diff --git a/test/integration/index.ts b/packages/xrpl/test/integration/index.ts similarity index 100% rename from test/integration/index.ts rename to packages/xrpl/test/integration/index.ts diff --git a/test/integration/integration.ts b/packages/xrpl/test/integration/integration.ts similarity index 100% rename from test/integration/integration.ts rename to packages/xrpl/test/integration/integration.ts diff --git a/test/integration/onConnect.ts b/packages/xrpl/test/integration/onConnect.ts similarity index 100% rename from test/integration/onConnect.ts rename to packages/xrpl/test/integration/onConnect.ts diff --git a/test/integration/regularKey.ts b/packages/xrpl/test/integration/regularKey.ts similarity index 100% rename from test/integration/regularKey.ts rename to packages/xrpl/test/integration/regularKey.ts diff --git a/test/integration/requests/accountChannels.ts b/packages/xrpl/test/integration/requests/accountChannels.ts similarity index 100% rename from test/integration/requests/accountChannels.ts rename to packages/xrpl/test/integration/requests/accountChannels.ts diff --git a/test/integration/requests/accountCurrencies.ts b/packages/xrpl/test/integration/requests/accountCurrencies.ts similarity index 100% rename from test/integration/requests/accountCurrencies.ts rename to packages/xrpl/test/integration/requests/accountCurrencies.ts diff --git a/test/integration/requests/accountInfo.ts b/packages/xrpl/test/integration/requests/accountInfo.ts similarity index 100% rename from test/integration/requests/accountInfo.ts rename to packages/xrpl/test/integration/requests/accountInfo.ts diff --git a/test/integration/requests/accountLines.ts b/packages/xrpl/test/integration/requests/accountLines.ts similarity index 100% rename from test/integration/requests/accountLines.ts rename to packages/xrpl/test/integration/requests/accountLines.ts diff --git a/test/integration/requests/accountObjects.ts b/packages/xrpl/test/integration/requests/accountObjects.ts similarity index 100% rename from test/integration/requests/accountObjects.ts rename to packages/xrpl/test/integration/requests/accountObjects.ts diff --git a/test/integration/requests/accountOffers.ts b/packages/xrpl/test/integration/requests/accountOffers.ts similarity index 100% rename from test/integration/requests/accountOffers.ts rename to packages/xrpl/test/integration/requests/accountOffers.ts diff --git a/test/integration/requests/accountTx.ts b/packages/xrpl/test/integration/requests/accountTx.ts similarity index 100% rename from test/integration/requests/accountTx.ts rename to packages/xrpl/test/integration/requests/accountTx.ts diff --git a/test/integration/requests/bookOffers.ts b/packages/xrpl/test/integration/requests/bookOffers.ts similarity index 100% rename from test/integration/requests/bookOffers.ts rename to packages/xrpl/test/integration/requests/bookOffers.ts diff --git a/test/integration/requests/channelVerify.ts b/packages/xrpl/test/integration/requests/channelVerify.ts similarity index 100% rename from test/integration/requests/channelVerify.ts rename to packages/xrpl/test/integration/requests/channelVerify.ts diff --git a/test/integration/requests/depositAuthorized.ts b/packages/xrpl/test/integration/requests/depositAuthorized.ts similarity index 100% rename from test/integration/requests/depositAuthorized.ts rename to packages/xrpl/test/integration/requests/depositAuthorized.ts diff --git a/test/integration/requests/fee.ts b/packages/xrpl/test/integration/requests/fee.ts similarity index 100% rename from test/integration/requests/fee.ts rename to packages/xrpl/test/integration/requests/fee.ts diff --git a/test/integration/requests/gatewayBalances.ts b/packages/xrpl/test/integration/requests/gatewayBalances.ts similarity index 100% rename from test/integration/requests/gatewayBalances.ts rename to packages/xrpl/test/integration/requests/gatewayBalances.ts diff --git a/test/integration/requests/ledger.ts b/packages/xrpl/test/integration/requests/ledger.ts similarity index 100% rename from test/integration/requests/ledger.ts rename to packages/xrpl/test/integration/requests/ledger.ts diff --git a/test/integration/requests/ledgerClosed.ts b/packages/xrpl/test/integration/requests/ledgerClosed.ts similarity index 100% rename from test/integration/requests/ledgerClosed.ts rename to packages/xrpl/test/integration/requests/ledgerClosed.ts diff --git a/test/integration/requests/ledgerCurrent.ts b/packages/xrpl/test/integration/requests/ledgerCurrent.ts similarity index 100% rename from test/integration/requests/ledgerCurrent.ts rename to packages/xrpl/test/integration/requests/ledgerCurrent.ts diff --git a/test/integration/requests/ledgerData.ts b/packages/xrpl/test/integration/requests/ledgerData.ts similarity index 100% rename from test/integration/requests/ledgerData.ts rename to packages/xrpl/test/integration/requests/ledgerData.ts diff --git a/test/integration/requests/ledgerEntry.ts b/packages/xrpl/test/integration/requests/ledgerEntry.ts similarity index 100% rename from test/integration/requests/ledgerEntry.ts rename to packages/xrpl/test/integration/requests/ledgerEntry.ts diff --git a/test/integration/requests/noRippleCheck.ts b/packages/xrpl/test/integration/requests/noRippleCheck.ts similarity index 100% rename from test/integration/requests/noRippleCheck.ts rename to packages/xrpl/test/integration/requests/noRippleCheck.ts diff --git a/test/integration/requests/pathFind.ts b/packages/xrpl/test/integration/requests/pathFind.ts similarity index 100% rename from test/integration/requests/pathFind.ts rename to packages/xrpl/test/integration/requests/pathFind.ts diff --git a/test/integration/requests/ripplePathFind.ts b/packages/xrpl/test/integration/requests/ripplePathFind.ts similarity index 100% rename from test/integration/requests/ripplePathFind.ts rename to packages/xrpl/test/integration/requests/ripplePathFind.ts diff --git a/test/integration/requests/serverInfo.ts b/packages/xrpl/test/integration/requests/serverInfo.ts similarity index 100% rename from test/integration/requests/serverInfo.ts rename to packages/xrpl/test/integration/requests/serverInfo.ts diff --git a/test/integration/requests/serverState.ts b/packages/xrpl/test/integration/requests/serverState.ts similarity index 100% rename from test/integration/requests/serverState.ts rename to packages/xrpl/test/integration/requests/serverState.ts diff --git a/test/integration/requests/submit.ts b/packages/xrpl/test/integration/requests/submit.ts similarity index 100% rename from test/integration/requests/submit.ts rename to packages/xrpl/test/integration/requests/submit.ts diff --git a/test/integration/requests/submitMultisigned.ts b/packages/xrpl/test/integration/requests/submitMultisigned.ts similarity index 100% rename from test/integration/requests/submitMultisigned.ts rename to packages/xrpl/test/integration/requests/submitMultisigned.ts diff --git a/test/integration/requests/subscribe.ts b/packages/xrpl/test/integration/requests/subscribe.ts similarity index 100% rename from test/integration/requests/subscribe.ts rename to packages/xrpl/test/integration/requests/subscribe.ts diff --git a/test/integration/requests/tx.ts b/packages/xrpl/test/integration/requests/tx.ts similarity index 100% rename from test/integration/requests/tx.ts rename to packages/xrpl/test/integration/requests/tx.ts diff --git a/test/integration/requests/utility.ts b/packages/xrpl/test/integration/requests/utility.ts similarity index 100% rename from test/integration/requests/utility.ts rename to packages/xrpl/test/integration/requests/utility.ts diff --git a/test/integration/serverUrl.ts b/packages/xrpl/test/integration/serverUrl.ts similarity index 100% rename from test/integration/serverUrl.ts rename to packages/xrpl/test/integration/serverUrl.ts diff --git a/test/integration/setup.ts b/packages/xrpl/test/integration/setup.ts similarity index 100% rename from test/integration/setup.ts rename to packages/xrpl/test/integration/setup.ts diff --git a/test/integration/submitAndWait.ts b/packages/xrpl/test/integration/submitAndWait.ts similarity index 100% rename from test/integration/submitAndWait.ts rename to packages/xrpl/test/integration/submitAndWait.ts diff --git a/test/integration/transactions/accountDelete.ts b/packages/xrpl/test/integration/transactions/accountDelete.ts similarity index 100% rename from test/integration/transactions/accountDelete.ts rename to packages/xrpl/test/integration/transactions/accountDelete.ts diff --git a/test/integration/transactions/accountSet.ts b/packages/xrpl/test/integration/transactions/accountSet.ts similarity index 100% rename from test/integration/transactions/accountSet.ts rename to packages/xrpl/test/integration/transactions/accountSet.ts diff --git a/test/integration/transactions/checkCancel.ts b/packages/xrpl/test/integration/transactions/checkCancel.ts similarity index 100% rename from test/integration/transactions/checkCancel.ts rename to packages/xrpl/test/integration/transactions/checkCancel.ts diff --git a/test/integration/transactions/checkCash.ts b/packages/xrpl/test/integration/transactions/checkCash.ts similarity index 100% rename from test/integration/transactions/checkCash.ts rename to packages/xrpl/test/integration/transactions/checkCash.ts diff --git a/test/integration/transactions/checkCreate.ts b/packages/xrpl/test/integration/transactions/checkCreate.ts similarity index 100% rename from test/integration/transactions/checkCreate.ts rename to packages/xrpl/test/integration/transactions/checkCreate.ts diff --git a/test/integration/transactions/depositPreauth.ts b/packages/xrpl/test/integration/transactions/depositPreauth.ts similarity index 100% rename from test/integration/transactions/depositPreauth.ts rename to packages/xrpl/test/integration/transactions/depositPreauth.ts diff --git a/test/integration/transactions/escrowCancel.ts b/packages/xrpl/test/integration/transactions/escrowCancel.ts similarity index 100% rename from test/integration/transactions/escrowCancel.ts rename to packages/xrpl/test/integration/transactions/escrowCancel.ts diff --git a/test/integration/transactions/escrowCreate.ts b/packages/xrpl/test/integration/transactions/escrowCreate.ts similarity index 100% rename from test/integration/transactions/escrowCreate.ts rename to packages/xrpl/test/integration/transactions/escrowCreate.ts diff --git a/test/integration/transactions/escrowFinish.ts b/packages/xrpl/test/integration/transactions/escrowFinish.ts similarity index 100% rename from test/integration/transactions/escrowFinish.ts rename to packages/xrpl/test/integration/transactions/escrowFinish.ts diff --git a/test/integration/transactions/offerCancel.ts b/packages/xrpl/test/integration/transactions/offerCancel.ts similarity index 100% rename from test/integration/transactions/offerCancel.ts rename to packages/xrpl/test/integration/transactions/offerCancel.ts diff --git a/test/integration/transactions/offerCreate.ts b/packages/xrpl/test/integration/transactions/offerCreate.ts similarity index 100% rename from test/integration/transactions/offerCreate.ts rename to packages/xrpl/test/integration/transactions/offerCreate.ts diff --git a/test/integration/transactions/payment.ts b/packages/xrpl/test/integration/transactions/payment.ts similarity index 100% rename from test/integration/transactions/payment.ts rename to packages/xrpl/test/integration/transactions/payment.ts diff --git a/test/integration/transactions/paymentChannelClaim.ts b/packages/xrpl/test/integration/transactions/paymentChannelClaim.ts similarity index 100% rename from test/integration/transactions/paymentChannelClaim.ts rename to packages/xrpl/test/integration/transactions/paymentChannelClaim.ts diff --git a/test/integration/transactions/paymentChannelCreate.ts b/packages/xrpl/test/integration/transactions/paymentChannelCreate.ts similarity index 100% rename from test/integration/transactions/paymentChannelCreate.ts rename to packages/xrpl/test/integration/transactions/paymentChannelCreate.ts diff --git a/test/integration/transactions/paymentChannelFund.ts b/packages/xrpl/test/integration/transactions/paymentChannelFund.ts similarity index 100% rename from test/integration/transactions/paymentChannelFund.ts rename to packages/xrpl/test/integration/transactions/paymentChannelFund.ts diff --git a/test/integration/transactions/signerListSet.ts b/packages/xrpl/test/integration/transactions/signerListSet.ts similarity index 100% rename from test/integration/transactions/signerListSet.ts rename to packages/xrpl/test/integration/transactions/signerListSet.ts diff --git a/test/integration/transactions/trustSet.ts b/packages/xrpl/test/integration/transactions/trustSet.ts similarity index 100% rename from test/integration/transactions/trustSet.ts rename to packages/xrpl/test/integration/transactions/trustSet.ts diff --git a/test/integration/utils.ts b/packages/xrpl/test/integration/utils.ts similarity index 100% rename from test/integration/utils.ts rename to packages/xrpl/test/integration/utils.ts diff --git a/test/integration/wallet.ts b/packages/xrpl/test/integration/wallet.ts similarity index 100% rename from test/integration/wallet.ts rename to packages/xrpl/test/integration/wallet.ts diff --git a/test/localIntegrationRunner.html b/packages/xrpl/test/localIntegrationRunner.html similarity index 79% rename from test/localIntegrationRunner.html rename to packages/xrpl/test/localIntegrationRunner.html index 6469e743..8494d8d7 100644 --- a/test/localIntegrationRunner.html +++ b/packages/xrpl/test/localIntegrationRunner.html @@ -2,12 +2,12 @@ - +
- +